lwc-convert 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +719 -0
  3. package/dist/cli/commands/aura.d.ts +6 -0
  4. package/dist/cli/commands/aura.d.ts.map +1 -0
  5. package/dist/cli/commands/aura.js +225 -0
  6. package/dist/cli/commands/aura.js.map +1 -0
  7. package/dist/cli/commands/vf.d.ts +6 -0
  8. package/dist/cli/commands/vf.d.ts.map +1 -0
  9. package/dist/cli/commands/vf.js +218 -0
  10. package/dist/cli/commands/vf.js.map +1 -0
  11. package/dist/cli/interactive.d.ts +20 -0
  12. package/dist/cli/interactive.d.ts.map +1 -0
  13. package/dist/cli/interactive.js +577 -0
  14. package/dist/cli/interactive.js.map +1 -0
  15. package/dist/cli/options.d.ts +21 -0
  16. package/dist/cli/options.d.ts.map +1 -0
  17. package/dist/cli/options.js +24 -0
  18. package/dist/cli/options.js.map +1 -0
  19. package/dist/generators/full-conversion.d.ts +41 -0
  20. package/dist/generators/full-conversion.d.ts.map +1 -0
  21. package/dist/generators/full-conversion.js +538 -0
  22. package/dist/generators/full-conversion.js.map +1 -0
  23. package/dist/generators/scaffolding.d.ts +40 -0
  24. package/dist/generators/scaffolding.d.ts.map +1 -0
  25. package/dist/generators/scaffolding.js +716 -0
  26. package/dist/generators/scaffolding.js.map +1 -0
  27. package/dist/generators/test-comparison.d.ts +47 -0
  28. package/dist/generators/test-comparison.d.ts.map +1 -0
  29. package/dist/generators/test-comparison.js +855 -0
  30. package/dist/generators/test-comparison.js.map +1 -0
  31. package/dist/generators/test-generator.d.ts +27 -0
  32. package/dist/generators/test-generator.d.ts.map +1 -0
  33. package/dist/generators/test-generator.js +385 -0
  34. package/dist/generators/test-generator.js.map +1 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +226 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mappings/aura-to-lwc.json +321 -0
  40. package/dist/mappings/vf-to-lwc.json +354 -0
  41. package/dist/parsers/aura/controller-parser.d.ts +36 -0
  42. package/dist/parsers/aura/controller-parser.d.ts.map +1 -0
  43. package/dist/parsers/aura/controller-parser.js +269 -0
  44. package/dist/parsers/aura/controller-parser.js.map +1 -0
  45. package/dist/parsers/aura/helper-parser.d.ts +21 -0
  46. package/dist/parsers/aura/helper-parser.d.ts.map +1 -0
  47. package/dist/parsers/aura/helper-parser.js +173 -0
  48. package/dist/parsers/aura/helper-parser.js.map +1 -0
  49. package/dist/parsers/aura/markup-parser.d.ts +59 -0
  50. package/dist/parsers/aura/markup-parser.d.ts.map +1 -0
  51. package/dist/parsers/aura/markup-parser.js +279 -0
  52. package/dist/parsers/aura/markup-parser.js.map +1 -0
  53. package/dist/parsers/aura/style-parser.d.ts +37 -0
  54. package/dist/parsers/aura/style-parser.d.ts.map +1 -0
  55. package/dist/parsers/aura/style-parser.js +151 -0
  56. package/dist/parsers/aura/style-parser.js.map +1 -0
  57. package/dist/parsers/vf/apex-parser.d.ts +51 -0
  58. package/dist/parsers/vf/apex-parser.d.ts.map +1 -0
  59. package/dist/parsers/vf/apex-parser.js +251 -0
  60. package/dist/parsers/vf/apex-parser.js.map +1 -0
  61. package/dist/parsers/vf/page-parser.d.ts +61 -0
  62. package/dist/parsers/vf/page-parser.d.ts.map +1 -0
  63. package/dist/parsers/vf/page-parser.js +403 -0
  64. package/dist/parsers/vf/page-parser.js.map +1 -0
  65. package/dist/transformers/aura-to-lwc/controller.d.ts +36 -0
  66. package/dist/transformers/aura-to-lwc/controller.d.ts.map +1 -0
  67. package/dist/transformers/aura-to-lwc/controller.js +372 -0
  68. package/dist/transformers/aura-to-lwc/controller.js.map +1 -0
  69. package/dist/transformers/aura-to-lwc/events.d.ts +47 -0
  70. package/dist/transformers/aura-to-lwc/events.d.ts.map +1 -0
  71. package/dist/transformers/aura-to-lwc/events.js +262 -0
  72. package/dist/transformers/aura-to-lwc/events.js.map +1 -0
  73. package/dist/transformers/aura-to-lwc/markup.d.ts +51 -0
  74. package/dist/transformers/aura-to-lwc/markup.d.ts.map +1 -0
  75. package/dist/transformers/aura-to-lwc/markup.js +465 -0
  76. package/dist/transformers/aura-to-lwc/markup.js.map +1 -0
  77. package/dist/transformers/vf-to-lwc/components.d.ts +40 -0
  78. package/dist/transformers/vf-to-lwc/components.d.ts.map +1 -0
  79. package/dist/transformers/vf-to-lwc/components.js +374 -0
  80. package/dist/transformers/vf-to-lwc/components.js.map +1 -0
  81. package/dist/transformers/vf-to-lwc/data-binding.d.ts +53 -0
  82. package/dist/transformers/vf-to-lwc/data-binding.d.ts.map +1 -0
  83. package/dist/transformers/vf-to-lwc/data-binding.js +660 -0
  84. package/dist/transformers/vf-to-lwc/data-binding.js.map +1 -0
  85. package/dist/transformers/vf-to-lwc/markup.d.ts +44 -0
  86. package/dist/transformers/vf-to-lwc/markup.d.ts.map +1 -0
  87. package/dist/transformers/vf-to-lwc/markup.js +816 -0
  88. package/dist/transformers/vf-to-lwc/markup.js.map +1 -0
  89. package/dist/utils/confidence-scorer.d.ts +100 -0
  90. package/dist/utils/confidence-scorer.d.ts.map +1 -0
  91. package/dist/utils/confidence-scorer.js +358 -0
  92. package/dist/utils/confidence-scorer.js.map +1 -0
  93. package/dist/utils/file-io.d.ts +62 -0
  94. package/dist/utils/file-io.d.ts.map +1 -0
  95. package/dist/utils/file-io.js +248 -0
  96. package/dist/utils/file-io.js.map +1 -0
  97. package/dist/utils/logger.d.ts +34 -0
  98. package/dist/utils/logger.d.ts.map +1 -0
  99. package/dist/utils/logger.js +130 -0
  100. package/dist/utils/logger.js.map +1 -0
  101. package/dist/utils/open-folder.d.ts +9 -0
  102. package/dist/utils/open-folder.d.ts.map +1 -0
  103. package/dist/utils/open-folder.js +76 -0
  104. package/dist/utils/open-folder.js.map +1 -0
  105. package/dist/utils/path-resolver.d.ts +29 -0
  106. package/dist/utils/path-resolver.d.ts.map +1 -0
  107. package/dist/utils/path-resolver.js +240 -0
  108. package/dist/utils/path-resolver.js.map +1 -0
  109. package/dist/utils/session-store.d.ts +158 -0
  110. package/dist/utils/session-store.d.ts.map +1 -0
  111. package/dist/utils/session-store.js +518 -0
  112. package/dist/utils/session-store.js.map +1 -0
  113. package/dist/utils/vf-controller-resolver.d.ts +36 -0
  114. package/dist/utils/vf-controller-resolver.d.ts.map +1 -0
  115. package/dist/utils/vf-controller-resolver.js +162 -0
  116. package/dist/utils/vf-controller-resolver.js.map +1 -0
  117. package/package.json +81 -0
@@ -0,0 +1,518 @@
1
+ "use strict";
2
+ /**
3
+ * Session Store - Stores conversion data in a temp folder during user's session
4
+ *
5
+ * This allows the tool to:
6
+ * 1. Learn from past conversions in the session
7
+ * 2. Provide suggestions based on similar patterns
8
+ * 3. Track conversion success/failure rates
9
+ * 4. Reuse behavior mappings for similar components
10
+ */
11
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ var desc = Object.getOwnPropertyDescriptor(m, k);
14
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
15
+ desc = { enumerable: true, get: function() { return m[k]; } };
16
+ }
17
+ Object.defineProperty(o, k2, desc);
18
+ }) : (function(o, m, k, k2) {
19
+ if (k2 === undefined) k2 = k;
20
+ o[k2] = m[k];
21
+ }));
22
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
23
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
24
+ }) : function(o, v) {
25
+ o["default"] = v;
26
+ });
27
+ var __importStar = (this && this.__importStar) || (function () {
28
+ var ownKeys = function(o) {
29
+ ownKeys = Object.getOwnPropertyNames || function (o) {
30
+ var ar = [];
31
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
32
+ return ar;
33
+ };
34
+ return ownKeys(o);
35
+ };
36
+ return function (mod) {
37
+ if (mod && mod.__esModule) return mod;
38
+ var result = {};
39
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
40
+ __setModuleDefault(result, mod);
41
+ return result;
42
+ };
43
+ })();
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.sessionStore = void 0;
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const os = __importStar(require("os"));
49
+ const logger_1 = require("./logger");
50
+ // Session file location - persistent across invocations
51
+ const SESSIONS_BASE_DIR = path.join(os.tmpdir(), 'lwc-convert-sessions');
52
+ const ACTIVE_SESSION_FILE = path.join(SESSIONS_BASE_DIR, 'active-session.json');
53
+ // Sessions expire after 4 hours of inactivity
54
+ const SESSION_EXPIRY_MS = 4 * 60 * 60 * 1000;
55
+ class SessionStore {
56
+ sessionId = '';
57
+ sessionDir = '';
58
+ conversions = [];
59
+ patternLibrary = new Map();
60
+ initialized = false;
61
+ startedAt = new Date();
62
+ constructor() {
63
+ // Will be initialized lazily
64
+ }
65
+ /**
66
+ * Try to load an existing active session
67
+ */
68
+ async tryLoadExistingSession() {
69
+ try {
70
+ if (!fs.existsSync(ACTIVE_SESSION_FILE)) {
71
+ return false;
72
+ }
73
+ const activeInfo = JSON.parse(await fs.promises.readFile(ACTIVE_SESSION_FILE, 'utf-8'));
74
+ // Check if session has expired
75
+ const lastActivity = new Date(activeInfo.lastActivityAt).getTime();
76
+ if (Date.now() - lastActivity > SESSION_EXPIRY_MS) {
77
+ logger_1.logger.debug('Previous session expired, starting new session');
78
+ // Clean up expired session
79
+ try {
80
+ await fs.promises.rm(activeInfo.sessionDir, { recursive: true, force: true });
81
+ }
82
+ catch { /* ignore */ }
83
+ return false;
84
+ }
85
+ // Check if session directory still exists
86
+ if (!fs.existsSync(activeInfo.sessionDir)) {
87
+ return false;
88
+ }
89
+ // Load the session
90
+ this.sessionId = activeInfo.sessionId;
91
+ this.sessionDir = activeInfo.sessionDir;
92
+ this.startedAt = new Date(activeInfo.startedAt);
93
+ // Load existing conversions
94
+ await this.loadConversions();
95
+ logger_1.logger.debug(`Resumed session: ${this.sessionId}`);
96
+ return true;
97
+ }
98
+ catch (error) {
99
+ logger_1.logger.debug(`Failed to load existing session: ${error.message}`);
100
+ return false;
101
+ }
102
+ }
103
+ /**
104
+ * Load conversions from session directory
105
+ */
106
+ async loadConversions() {
107
+ try {
108
+ const conversionsDir = path.join(this.sessionDir, 'conversions');
109
+ if (!fs.existsSync(conversionsDir))
110
+ return;
111
+ const files = await fs.promises.readdir(conversionsDir);
112
+ for (const file of files) {
113
+ if (file.endsWith('.json')) {
114
+ const content = await fs.promises.readFile(path.join(conversionsDir, file), 'utf-8');
115
+ const record = JSON.parse(content);
116
+ record.timestamp = new Date(record.timestamp);
117
+ this.conversions.push(record);
118
+ // Rebuild pattern library
119
+ for (const pattern of record.patterns) {
120
+ this.updatePatternLibrary([pattern]);
121
+ }
122
+ }
123
+ }
124
+ }
125
+ catch (error) {
126
+ logger_1.logger.debug(`Failed to load conversions: ${error.message}`);
127
+ }
128
+ }
129
+ /**
130
+ * Create a new session
131
+ */
132
+ async createNewSession() {
133
+ this.sessionId = `lwc-convert-${Date.now()}-${Math.random().toString(36).substring(7)}`;
134
+ this.sessionDir = path.join(SESSIONS_BASE_DIR, this.sessionId);
135
+ this.startedAt = new Date();
136
+ // Create session directory
137
+ await fs.promises.mkdir(this.sessionDir, { recursive: true });
138
+ await fs.promises.mkdir(path.join(this.sessionDir, 'conversions'), { recursive: true });
139
+ await fs.promises.mkdir(path.join(this.sessionDir, 'patterns'), { recursive: true });
140
+ await fs.promises.mkdir(path.join(this.sessionDir, 'tests'), { recursive: true });
141
+ // Write session info
142
+ const sessionInfo = {
143
+ sessionId: this.sessionId,
144
+ startedAt: this.startedAt.toISOString(),
145
+ platform: os.platform(),
146
+ nodeVersion: process.version,
147
+ };
148
+ await fs.promises.writeFile(path.join(this.sessionDir, 'session.json'), JSON.stringify(sessionInfo, null, 2));
149
+ logger_1.logger.debug(`Created new session: ${this.sessionId}`);
150
+ }
151
+ /**
152
+ * Update the active session file
153
+ */
154
+ async updateActiveSessionFile() {
155
+ const activeInfo = {
156
+ sessionId: this.sessionId,
157
+ sessionDir: this.sessionDir,
158
+ startedAt: this.startedAt.toISOString(),
159
+ lastActivityAt: new Date().toISOString(),
160
+ };
161
+ await fs.promises.mkdir(SESSIONS_BASE_DIR, { recursive: true });
162
+ await fs.promises.writeFile(ACTIVE_SESSION_FILE, JSON.stringify(activeInfo, null, 2));
163
+ }
164
+ /**
165
+ * Initialize the session store (creates temp directory or loads existing session)
166
+ */
167
+ async init() {
168
+ if (this.initialized)
169
+ return;
170
+ try {
171
+ // Try to load an existing session first
172
+ const loaded = await this.tryLoadExistingSession();
173
+ if (!loaded) {
174
+ // Create a new session
175
+ await this.createNewSession();
176
+ }
177
+ // Update activity timestamp
178
+ await this.updateActiveSessionFile();
179
+ this.initialized = true;
180
+ logger_1.logger.debug(`Session store initialized: ${this.sessionDir}`);
181
+ }
182
+ catch (error) {
183
+ logger_1.logger.debug(`Failed to initialize session store: ${error.message}`);
184
+ // Continue without session store - it's not critical
185
+ }
186
+ }
187
+ /**
188
+ * Get the session directory path
189
+ */
190
+ getSessionDir() {
191
+ return this.sessionDir;
192
+ }
193
+ /**
194
+ * Get the session ID
195
+ */
196
+ getSessionId() {
197
+ return this.sessionId;
198
+ }
199
+ /**
200
+ * Store a conversion record
201
+ */
202
+ async storeConversion(sourceType, sourceName, targetName, sourcePath, outputPath, testComparison, warnings) {
203
+ await this.init();
204
+ const record = {
205
+ id: `conv-${Date.now()}-${Math.random().toString(36).substring(7)}`,
206
+ timestamp: new Date(),
207
+ sourceType,
208
+ sourceName,
209
+ targetName,
210
+ sourcePath,
211
+ outputPath,
212
+ behaviorCount: testComparison.behaviorTests.length,
213
+ behaviors: testComparison.behaviorTests.map(b => ({
214
+ id: b.id,
215
+ category: b.category,
216
+ name: b.name,
217
+ auraPattern: b.auraBehavior.pattern,
218
+ lwcPattern: b.lwcBehavior.pattern,
219
+ })),
220
+ patterns: this.extractPatterns(testComparison.behaviorTests),
221
+ warnings,
222
+ success: true,
223
+ };
224
+ this.conversions.push(record);
225
+ // Update pattern library
226
+ this.updatePatternLibrary(record.patterns);
227
+ // Save to file
228
+ try {
229
+ const conversionFile = path.join(this.sessionDir, 'conversions', `${record.id}.json`);
230
+ await fs.promises.writeFile(conversionFile, JSON.stringify(record, null, 2));
231
+ // Also save the full test comparison data
232
+ const testFile = path.join(this.sessionDir, 'tests', `${targetName}-comparison.json`);
233
+ await fs.promises.writeFile(testFile, JSON.stringify({
234
+ ...testComparison,
235
+ conversionId: record.id,
236
+ timestamp: record.timestamp,
237
+ }, null, 2));
238
+ // Update session summary
239
+ await this.saveSessionSummary();
240
+ logger_1.logger.debug(`Stored conversion record: ${record.id}`);
241
+ }
242
+ catch (error) {
243
+ logger_1.logger.debug(`Failed to store conversion: ${error.message}`);
244
+ }
245
+ return record;
246
+ }
247
+ /**
248
+ * Extract patterns from behavior tests
249
+ */
250
+ extractPatterns(behaviors) {
251
+ const patterns = [];
252
+ for (const behavior of behaviors) {
253
+ const pattern = {
254
+ type: this.categorizePattern(behavior.category),
255
+ auraPattern: behavior.auraBehavior.pattern,
256
+ lwcPattern: behavior.lwcBehavior.pattern,
257
+ frequency: 1,
258
+ successRate: 1.0,
259
+ };
260
+ patterns.push(pattern);
261
+ }
262
+ return patterns;
263
+ }
264
+ /**
265
+ * Categorize pattern type
266
+ */
267
+ categorizePattern(category) {
268
+ switch (category) {
269
+ case 'lifecycle': return 'lifecycle';
270
+ case 'event': return 'event';
271
+ case 'apex': return 'apex';
272
+ case 'lms': return 'lms';
273
+ case 'data':
274
+ case 'ui':
275
+ default:
276
+ return 'component';
277
+ }
278
+ }
279
+ /**
280
+ * Update pattern library with new patterns
281
+ */
282
+ updatePatternLibrary(patterns) {
283
+ for (const pattern of patterns) {
284
+ const key = `${pattern.type}:${pattern.auraPattern}`;
285
+ const existing = this.patternLibrary.get(key);
286
+ if (existing) {
287
+ existing.frequency++;
288
+ // Keep running average of success rate
289
+ existing.successRate = (existing.successRate * (existing.frequency - 1) + pattern.successRate) / existing.frequency;
290
+ }
291
+ else {
292
+ this.patternLibrary.set(key, { ...pattern });
293
+ }
294
+ }
295
+ }
296
+ /**
297
+ * Get suggestions based on past conversions
298
+ */
299
+ getSuggestions(auraPattern) {
300
+ const suggestions = [];
301
+ for (const [key, pattern] of this.patternLibrary) {
302
+ // Simple similarity check - could be enhanced with fuzzy matching
303
+ if (key.includes(auraPattern) || pattern.auraPattern.includes(auraPattern)) {
304
+ suggestions.push(pattern);
305
+ }
306
+ }
307
+ // Sort by frequency and success rate
308
+ return suggestions.sort((a, b) => {
309
+ const scoreA = a.frequency * a.successRate;
310
+ const scoreB = b.frequency * b.successRate;
311
+ return scoreB - scoreA;
312
+ });
313
+ }
314
+ /**
315
+ * Get common patterns for a specific type
316
+ */
317
+ getCommonPatterns(type) {
318
+ return Array.from(this.patternLibrary.values())
319
+ .filter(p => p.type === type)
320
+ .sort((a, b) => b.frequency - a.frequency)
321
+ .slice(0, 10);
322
+ }
323
+ /**
324
+ * Get all conversions in this session
325
+ */
326
+ getConversions() {
327
+ return [...this.conversions];
328
+ }
329
+ /**
330
+ * Get conversion by ID
331
+ */
332
+ getConversion(id) {
333
+ return this.conversions.find(c => c.id === id);
334
+ }
335
+ /**
336
+ * Update test results for a conversion
337
+ */
338
+ async updateTestResults(conversionId, results) {
339
+ const conversion = this.conversions.find(c => c.id === conversionId);
340
+ if (!conversion)
341
+ return;
342
+ conversion.testResults = results;
343
+ conversion.success = results.failed === 0;
344
+ // Update pattern success rates based on test results
345
+ const successRate = results.totalTests > 0 ? results.passed / results.totalTests : 0;
346
+ for (const pattern of conversion.patterns) {
347
+ const key = `${pattern.type}:${pattern.auraPattern}`;
348
+ const existing = this.patternLibrary.get(key);
349
+ if (existing) {
350
+ existing.successRate = (existing.successRate + successRate) / 2;
351
+ }
352
+ }
353
+ // Save updated record
354
+ try {
355
+ const conversionFile = path.join(this.sessionDir, 'conversions', `${conversionId}.json`);
356
+ await fs.promises.writeFile(conversionFile, JSON.stringify(conversion, null, 2));
357
+ await this.saveSessionSummary();
358
+ }
359
+ catch (error) {
360
+ logger_1.logger.debug(`Failed to update conversion: ${error.message}`);
361
+ }
362
+ }
363
+ /**
364
+ * Get session summary
365
+ */
366
+ getSessionSummary() {
367
+ const warningCounts = new Map();
368
+ for (const conv of this.conversions) {
369
+ for (const warning of conv.warnings) {
370
+ warningCounts.set(warning, (warningCounts.get(warning) || 0) + 1);
371
+ }
372
+ }
373
+ return {
374
+ sessionId: this.sessionId,
375
+ startedAt: this.startedAt,
376
+ conversions: this.conversions.length,
377
+ totalBehaviors: this.conversions.reduce((sum, c) => sum + c.behaviorCount, 0),
378
+ patternLibrary: Array.from(this.patternLibrary.values()),
379
+ commonWarnings: Array.from(warningCounts.entries())
380
+ .map(([warning, count]) => ({ warning, count }))
381
+ .sort((a, b) => b.count - a.count)
382
+ .slice(0, 10),
383
+ };
384
+ }
385
+ /**
386
+ * Save session summary to file
387
+ */
388
+ async saveSessionSummary() {
389
+ const summary = this.getSessionSummary();
390
+ try {
391
+ await fs.promises.writeFile(path.join(this.sessionDir, 'summary.json'), JSON.stringify(summary, null, 2));
392
+ // Also save pattern library separately
393
+ await fs.promises.writeFile(path.join(this.sessionDir, 'patterns', 'library.json'), JSON.stringify(Array.from(this.patternLibrary.values()), null, 2));
394
+ }
395
+ catch (error) {
396
+ logger_1.logger.debug(`Failed to save session summary: ${error.message}`);
397
+ }
398
+ }
399
+ /**
400
+ * Generate a report of all conversions in the session
401
+ */
402
+ generateSessionReport() {
403
+ const summary = this.getSessionSummary();
404
+ let report = `# LWC Convert Session Report
405
+
406
+ ## Session Info
407
+ - **Session ID**: ${summary.sessionId}
408
+ - **Started**: ${summary.startedAt.toISOString()}
409
+ - **Total Conversions**: ${summary.conversions}
410
+ - **Total Behaviors Mapped**: ${summary.totalBehaviors}
411
+
412
+ ## Conversion Summary
413
+
414
+ | # | Component | Type | Behaviors | Warnings | Tests |
415
+ |---|-----------|------|-----------|----------|-------|
416
+ `;
417
+ this.conversions.forEach((conv, index) => {
418
+ const testStatus = conv.testResults
419
+ ? `${conv.testResults.passed}/${conv.testResults.totalTests} passed`
420
+ : 'Not run';
421
+ report += `| ${index + 1} | ${conv.sourceName} → ${conv.targetName} | ${conv.sourceType} | ${conv.behaviorCount} | ${conv.warnings.length} | ${testStatus} |\n`;
422
+ });
423
+ if (summary.commonWarnings.length > 0) {
424
+ report += `
425
+ ## Common Warnings
426
+
427
+ | Warning | Occurrences |
428
+ |---------|-------------|
429
+ `;
430
+ for (const { warning, count } of summary.commonWarnings) {
431
+ report += `| ${warning.substring(0, 60)}... | ${count} |\n`;
432
+ }
433
+ }
434
+ if (summary.patternLibrary.length > 0) {
435
+ report += `
436
+ ## Pattern Library (Top 10 Most Used)
437
+
438
+ | Type | Aura Pattern | LWC Pattern | Uses | Success |
439
+ |------|--------------|-------------|------|---------|
440
+ `;
441
+ const topPatterns = summary.patternLibrary
442
+ .sort((a, b) => b.frequency - a.frequency)
443
+ .slice(0, 10);
444
+ for (const pattern of topPatterns) {
445
+ const auraShort = pattern.auraPattern.substring(0, 30) + (pattern.auraPattern.length > 30 ? '...' : '');
446
+ const lwcShort = pattern.lwcPattern.substring(0, 30) + (pattern.lwcPattern.length > 30 ? '...' : '');
447
+ report += `| ${pattern.type} | \`${auraShort}\` | \`${lwcShort}\` | ${pattern.frequency} | ${(pattern.successRate * 100).toFixed(0)}% |\n`;
448
+ }
449
+ }
450
+ report += `
451
+ ## Session Files
452
+
453
+ All session data is stored in:
454
+ \`${this.sessionDir}\`
455
+
456
+ - \`conversions/\` - Individual conversion records
457
+ - \`tests/\` - Test comparison data
458
+ - \`patterns/library.json\` - Learned patterns
459
+ - \`summary.json\` - Session summary
460
+ `;
461
+ return report;
462
+ }
463
+ /**
464
+ * Clean up session data (call on exit if desired)
465
+ */
466
+ async cleanup() {
467
+ try {
468
+ // Remove session directory
469
+ if (this.sessionDir) {
470
+ await fs.promises.rm(this.sessionDir, { recursive: true, force: true });
471
+ }
472
+ // Remove active session file
473
+ if (fs.existsSync(ACTIVE_SESSION_FILE)) {
474
+ await fs.promises.unlink(ACTIVE_SESSION_FILE);
475
+ }
476
+ // Reset state
477
+ this.conversions = [];
478
+ this.patternLibrary.clear();
479
+ this.initialized = false;
480
+ logger_1.logger.debug(`Cleaned up session: ${this.sessionId}`);
481
+ }
482
+ catch (error) {
483
+ logger_1.logger.debug(`Failed to cleanup session: ${error.message}`);
484
+ }
485
+ }
486
+ /**
487
+ * Check if a similar component has been converted before
488
+ */
489
+ findSimilarConversion(componentName) {
490
+ // Simple name similarity - could be enhanced
491
+ return this.conversions.find(c => c.sourceName.toLowerCase().includes(componentName.toLowerCase()) ||
492
+ componentName.toLowerCase().includes(c.sourceName.toLowerCase()));
493
+ }
494
+ /**
495
+ * Get behavior suggestions based on component type and past conversions
496
+ */
497
+ getBehaviorSuggestions(componentType, behaviors) {
498
+ const suggestions = [];
499
+ const pastConversions = this.conversions.filter(c => c.sourceType === componentType);
500
+ // Look for behaviors that commonly appear together
501
+ for (const conv of pastConversions) {
502
+ const convBehaviors = conv.behaviors.map(b => b.name);
503
+ const matchCount = behaviors.filter(b => convBehaviors.includes(b)).length;
504
+ if (matchCount > 0) {
505
+ // Suggest behaviors from this conversion that aren't in current
506
+ for (const behavior of conv.behaviors) {
507
+ if (!behaviors.includes(behavior.name) && !suggestions.includes(behavior.name)) {
508
+ suggestions.push(behavior.name);
509
+ }
510
+ }
511
+ }
512
+ }
513
+ return suggestions.slice(0, 5);
514
+ }
515
+ }
516
+ // Singleton instance
517
+ exports.sessionStore = new SessionStore();
518
+ //# sourceMappingURL=session-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Utility for detecting and resolving Apex controllers referenced in Visualforce pages
3
+ * Parses VF markup to extract controller names and searches the project for matching files
4
+ */
5
+ export interface VfControllerReference {
6
+ name: string;
7
+ type: 'controller' | 'extension' | 'remoteAction';
8
+ path?: string;
9
+ found: boolean;
10
+ }
11
+ export interface VfControllersResult {
12
+ controllers: VfControllerReference[];
13
+ hasControllers: boolean;
14
+ allFound: boolean;
15
+ }
16
+ /**
17
+ * Extract controller class names from VF page markup
18
+ * Looks for: controller attribute, extensions attribute, and $RemoteAction references
19
+ */
20
+ export declare function extractControllerNames(markup: string): {
21
+ name: string;
22
+ type: VfControllerReference['type'];
23
+ }[];
24
+ /**
25
+ * Find VF controllers referenced in markup and resolve their file paths
26
+ */
27
+ export declare function findVfControllers(markup: string): Promise<VfControllersResult>;
28
+ /**
29
+ * Read content for all found controllers
30
+ */
31
+ export declare function readControllerContents(controllers: VfControllerReference[]): Promise<Map<string, string>>;
32
+ /**
33
+ * Get a display-friendly type label
34
+ */
35
+ export declare function getControllerTypeLabel(type: VfControllerReference['type']): string;
36
+ //# sourceMappingURL=vf-controller-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vf-controller-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/vf-controller-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,cAAc,CAAC;IAClD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,qBAAqB,EAAE,CAAC;IACrC,cAAc,EAAE,OAAO,CAAC;IACxB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,CAAA;CAAE,EAAE,CAwD9G;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0BpF;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,qBAAqB,EAAE,GACnC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAgB9B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,qBAAqB,CAAC,MAAM,CAAC,GAAG,MAAM,CAWlF"}