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,41 @@
1
+ /**
2
+ * Generate full LWC conversion with complete code transformation
3
+ */
4
+ import { ParsedAuraMarkup } from '../parsers/aura/markup-parser';
5
+ import { ParsedAuraController } from '../parsers/aura/controller-parser';
6
+ import { ParsedAuraHelper } from '../parsers/aura/helper-parser';
7
+ import { ParsedAuraStyle } from '../parsers/aura/style-parser';
8
+ import { ParsedVfPage } from '../parsers/vf/page-parser';
9
+ import { ParsedApexController } from '../parsers/vf/apex-parser';
10
+ import { GeneratedTest } from './test-generator';
11
+ import { LwcBundle } from '../utils/file-io';
12
+ import { ConversionConfidence } from '../utils/confidence-scorer';
13
+ export interface FullConversionResult {
14
+ bundle: LwcBundle;
15
+ notes: string[];
16
+ warnings: string[];
17
+ reviewItems: ReviewItem[];
18
+ /** Conversion confidence metrics */
19
+ confidence: ConversionConfidence;
20
+ /** Generated Jest tests for the converted component */
21
+ tests?: GeneratedTest;
22
+ /** Behavior spec document mapping Aura patterns to LWC equivalents */
23
+ behaviorSpec?: string;
24
+ /** Test comparison data for before/after verification */
25
+ testComparison?: import('./test-comparison').TestComparisonResult;
26
+ }
27
+ export interface ReviewItem {
28
+ type: 'warning' | 'review' | 'todo';
29
+ location: string;
30
+ message: string;
31
+ suggestion?: string;
32
+ }
33
+ /**
34
+ * Full conversion for Aura component
35
+ */
36
+ export declare function generateAuraFullConversion(markup: ParsedAuraMarkup, controller?: ParsedAuraController, helper?: ParsedAuraHelper, style?: ParsedAuraStyle): FullConversionResult;
37
+ /**
38
+ * Full conversion for VF page
39
+ */
40
+ export declare function generateVfFullConversion(vfPage: ParsedVfPage, apexController?: ParsedApexController): FullConversionResult;
41
+ //# sourceMappingURL=full-conversion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-conversion.d.ts","sourceRoot":"","sources":["../../src/generators/full-conversion.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAyB,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAMjE,OAAO,EAAwD,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAAE,SAAS,EAA2B,MAAM,kBAAkB,CAAC;AAEtE,OAAO,EACL,oBAAoB,EAQrB,MAAM,4BAA4B,CAAC;AAEpC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,oCAAoC;IACpC,UAAU,EAAE,oBAAoB,CAAC;IACjC,uDAAuD;IACvD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,cAAc,CAAC,EAAE,OAAO,mBAAmB,EAAE,oBAAoB,CAAC;CACnE;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAmGD;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,gBAAgB,EACxB,UAAU,CAAC,EAAE,oBAAoB,EACjC,MAAM,CAAC,EAAE,gBAAgB,EACzB,KAAK,CAAC,EAAE,eAAe,GACtB,oBAAoB,CAyJtB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,cAAc,CAAC,EAAE,oBAAoB,GACpC,oBAAoB,CA2WtB"}
@@ -0,0 +1,538 @@
1
+ "use strict";
2
+ /**
3
+ * Generate full LWC conversion with complete code transformation
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.generateAuraFullConversion = generateAuraFullConversion;
7
+ exports.generateVfFullConversion = generateVfFullConversion;
8
+ const style_parser_1 = require("../parsers/aura/style-parser");
9
+ const markup_1 = require("../transformers/aura-to-lwc/markup");
10
+ const controller_1 = require("../transformers/aura-to-lwc/controller");
11
+ const events_1 = require("../transformers/aura-to-lwc/events");
12
+ const markup_2 = require("../transformers/vf-to-lwc/markup");
13
+ const data_binding_1 = require("../transformers/vf-to-lwc/data-binding");
14
+ const test_generator_1 = require("./test-generator");
15
+ const file_io_1 = require("../utils/file-io");
16
+ const logger_1 = require("../utils/logger");
17
+ const confidence_scorer_1 = require("../utils/confidence-scorer");
18
+ /**
19
+ * Generate LWC meta XML file content
20
+ */
21
+ function generateMetaXml(_componentName, options) {
22
+ const { apiVersion = '59.0', isExposed = true, targets = ['lightning__RecordPage', 'lightning__AppPage', 'lightning__HomePage'], description, masterLabel, } = options || {};
23
+ let xml = `<?xml version="1.0" encoding="UTF-8"?>
24
+ <LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
25
+ <apiVersion>${apiVersion}</apiVersion>
26
+ <isExposed>${isExposed}</isExposed>`;
27
+ if (description) {
28
+ xml += `\n <description>${escapeXml(description)}</description>`;
29
+ }
30
+ if (masterLabel) {
31
+ xml += `\n <masterLabel>${escapeXml(masterLabel)}</masterLabel>`;
32
+ }
33
+ if (targets.length > 0) {
34
+ xml += `\n <targets>`;
35
+ for (const target of targets) {
36
+ xml += `\n <target>${target}</target>`;
37
+ }
38
+ xml += `\n </targets>`;
39
+ }
40
+ xml += `\n</LightningComponentBundle>\n`;
41
+ return xml;
42
+ }
43
+ /**
44
+ * Escape XML special characters
45
+ */
46
+ function escapeXml(str) {
47
+ return str
48
+ .replace(/&/g, '&amp;')
49
+ .replace(/</g, '&lt;')
50
+ .replace(/>/g, '&gt;')
51
+ .replace(/"/g, '&quot;')
52
+ .replace(/'/g, '&apos;');
53
+ }
54
+ /**
55
+ * Extract static resource name from VF expression
56
+ * e.g., "{!URLFOR($Resource.lmsvf, 'lmsvf.css')}" -> { resourceName: 'lmsvf', path: 'lmsvf.css' }
57
+ */
58
+ function parseStaticResourceExpression(expr) {
59
+ // Match URLFOR($Resource.name, 'path')
60
+ const urlforMatch = expr.match(/URLFOR\s*\(\s*\$Resource\.(\w+)\s*,\s*['"]([^'"]+)['"]\s*\)/i);
61
+ if (urlforMatch) {
62
+ return { resourceName: urlforMatch[1], path: urlforMatch[2] };
63
+ }
64
+ // Match simple $Resource.name
65
+ const simpleMatch = expr.match(/\$Resource\.(\w+)/);
66
+ if (simpleMatch) {
67
+ return { resourceName: simpleMatch[1] };
68
+ }
69
+ return null;
70
+ }
71
+ /**
72
+ * Post-process JS to add REVIEW comments for edge cases
73
+ */
74
+ function addReviewComments(js, reviewItems) {
75
+ let result = js;
76
+ // Add header comment if there are review items
77
+ if (reviewItems.length > 0) {
78
+ const headerComment = `/**
79
+ * CONVERSION REVIEW ITEMS:
80
+ ${reviewItems.map((item, i) => ` * ${i + 1}. [${item.type.toUpperCase()}] ${item.message}`).join('\n')}
81
+ */\n\n`;
82
+ result = headerComment + result;
83
+ }
84
+ return result;
85
+ }
86
+ /**
87
+ * Full conversion for Aura component
88
+ */
89
+ function generateAuraFullConversion(markup, controller, helper, style) {
90
+ const lwcName = (0, file_io_1.toLwcName)(markup.componentName);
91
+ const reviewItems = [];
92
+ const notes = [];
93
+ // Transform markup
94
+ const transformedMarkup = (0, markup_1.transformAuraMarkup)(markup);
95
+ for (const warning of transformedMarkup.warnings) {
96
+ reviewItems.push({
97
+ type: 'review',
98
+ location: 'HTML Template',
99
+ message: warning,
100
+ });
101
+ }
102
+ // Transform controller and helper
103
+ const transformedController = (0, controller_1.transformAuraController)(markup, controller, helper, transformedMarkup.detectedGetters);
104
+ for (const warning of transformedController.warnings) {
105
+ reviewItems.push({
106
+ type: 'review',
107
+ location: 'JavaScript',
108
+ message: warning,
109
+ });
110
+ }
111
+ // Handle event transformations
112
+ for (const event of markup.registeredEvents) {
113
+ const relatedHandler = markup.handlers.find((h) => h.event === event.type || h.event.endsWith(`:${event.name}`));
114
+ const eventTransform = (0, events_1.transformAuraEvent)(event, relatedHandler);
115
+ for (const warning of eventTransform.warnings) {
116
+ reviewItems.push({
117
+ type: 'warning',
118
+ location: 'Events',
119
+ message: warning,
120
+ suggestion: eventTransform.code.dispatch,
121
+ });
122
+ }
123
+ }
124
+ // Transform event handlers in markup
125
+ for (const handler of markup.handlers) {
126
+ if (handler.name !== 'init' &&
127
+ handler.name !== 'render' &&
128
+ handler.name !== 'afterRender' &&
129
+ handler.name !== 'destroy') {
130
+ const { warnings } = (0, events_1.transformEventHandler)(handler);
131
+ for (const warning of warnings) {
132
+ reviewItems.push({
133
+ type: 'review',
134
+ location: 'Event Handler',
135
+ message: warning,
136
+ });
137
+ }
138
+ }
139
+ }
140
+ // Add REVIEW comments to JS
141
+ let js = transformedController.js;
142
+ js = addReviewComments(js, reviewItems.filter((r) => r.location === 'JavaScript'));
143
+ // Transform CSS
144
+ let css;
145
+ if (style) {
146
+ css = (0, style_parser_1.convertAuraStyleToLwc)(style);
147
+ if (style.usesThisSelector) {
148
+ notes.push('CSS .THIS selectors converted to :host and removed where appropriate');
149
+ }
150
+ if (style.usesTokens) {
151
+ reviewItems.push({
152
+ type: 'todo',
153
+ location: 'CSS',
154
+ message: `Design tokens used: ${style.tokenReferences.join(', ')}`,
155
+ suggestion: 'Convert to SLDS design tokens or CSS custom properties',
156
+ });
157
+ }
158
+ }
159
+ // Generate meta XML with appropriate targets
160
+ const targets = [];
161
+ if (markup.implements) {
162
+ if (markup.implements.some((i) => i.includes('flexipage'))) {
163
+ targets.push('lightning__RecordPage', 'lightning__AppPage', 'lightning__HomePage');
164
+ }
165
+ if (markup.implements.some((i) => i.includes('lightning:isUrlAddressable'))) {
166
+ notes.push('Component is URL addressable - configure in Experience Builder or via NavigationMixin');
167
+ }
168
+ if (markup.implements.some((i) => i.includes('force:hasRecordId'))) {
169
+ notes.push('Component uses recordId - ensure @api recordId is properly wired');
170
+ }
171
+ if (markup.implements.some((i) => i.includes('force:hasSObjectName'))) {
172
+ notes.push('Component uses sObjectName - add @api objectApiName if needed');
173
+ }
174
+ }
175
+ if (targets.length === 0) {
176
+ targets.push('lightning__AppPage');
177
+ }
178
+ const meta = generateMetaXml(lwcName, {
179
+ description: `Full conversion from Aura: ${markup.componentName}`,
180
+ targets,
181
+ masterLabel: markup.componentName,
182
+ });
183
+ // Compile notes
184
+ notes.push(`Component: ${markup.componentName} -> ${lwcName}`);
185
+ if (transformedController.apexMethods.length > 0) {
186
+ notes.push(`Apex methods to import: ${transformedController.apexMethods.join(', ')}`);
187
+ }
188
+ if (transformedMarkup.usedComponents.length > 0) {
189
+ notes.push(`Lightning components used: ${transformedMarkup.usedComponents.join(', ')}`);
190
+ }
191
+ logger_1.logger.debug(`Full conversion completed for ${lwcName}`);
192
+ logger_1.logger.debug(`${reviewItems.length} items need review`);
193
+ // Aura conversions are generally high confidence - create default
194
+ const confidence = {
195
+ overall: 85,
196
+ level: 'high',
197
+ factors: [],
198
+ summary: 'Aura to LWC conversion is well-supported with direct mappings.',
199
+ breakdown: { components: 85, dataBinding: 85, expressions: 85, apex: 85 },
200
+ };
201
+ // Generate tests and behavior spec
202
+ const tests = (0, test_generator_1.generateAuraToLwcTests)(markup, transformedMarkup, controller);
203
+ const behaviorSpec = (0, test_generator_1.generateBehaviorSpecDocument)(markup.componentName, tests.behaviorSpecs);
204
+ return {
205
+ bundle: {
206
+ name: lwcName,
207
+ html: transformedMarkup.html,
208
+ js,
209
+ css,
210
+ meta,
211
+ },
212
+ notes,
213
+ warnings: reviewItems.filter((r) => r.type === 'warning').map((r) => r.message),
214
+ reviewItems,
215
+ confidence,
216
+ tests,
217
+ behaviorSpec,
218
+ };
219
+ }
220
+ /**
221
+ * Full conversion for VF page
222
+ */
223
+ function generateVfFullConversion(vfPage, apexController) {
224
+ const lwcName = (0, file_io_1.toLwcName)(vfPage.pageName);
225
+ const reviewItems = [];
226
+ const notes = [];
227
+ // Transform markup
228
+ const transformedMarkup = (0, markup_2.transformVfMarkup)(vfPage);
229
+ for (const warning of transformedMarkup.warnings) {
230
+ reviewItems.push({
231
+ type: 'review',
232
+ location: 'HTML Template',
233
+ message: warning,
234
+ });
235
+ }
236
+ // Generate data access layer
237
+ const dataAccess = (0, data_binding_1.generateDataAccessLayer)(vfPage, apexController);
238
+ for (const warning of dataAccess.warnings) {
239
+ reviewItems.push({
240
+ type: 'review',
241
+ location: 'Data Access',
242
+ message: warning,
243
+ });
244
+ }
245
+ // Calculate confidence factors
246
+ const confidenceFactors = [];
247
+ // Component confidence
248
+ const componentNames = vfPage.components.map((c) => c.name);
249
+ confidenceFactors.push(...(0, confidence_scorer_1.calculateComponentsConfidence)(componentNames));
250
+ // Expression confidence
251
+ const expressions = vfPage.expressions.map((e) => e.original);
252
+ confidenceFactors.push(...(0, confidence_scorer_1.calculateExpressionsConfidence)(expressions));
253
+ // Data binding confidence
254
+ confidenceFactors.push(...(0, confidence_scorer_1.calculateDataBindingConfidence)({
255
+ hasWireAdapters: dataAccess.wireDeclarations.length > 0,
256
+ hasImperativeApex: dataAccess.methods.length > 0,
257
+ hasRemoteActions: vfPage.remoteActions.length > 0,
258
+ hasActionFunctions: vfPage.actionFunctions.length > 0,
259
+ actionFunctionsWithParams: vfPage.actionFunctions.filter((af) => af.rerender || af.oncomplete).length,
260
+ hasRemoteObjects: vfPage.components.some((c) => c.name.toLowerCase() === 'apex:remoteobjects'),
261
+ }));
262
+ // Apex controller confidence
263
+ if (apexController) {
264
+ confidenceFactors.push(...(0, confidence_scorer_1.calculateApexConfidence)({
265
+ totalMethods: apexController.methods.length,
266
+ auraEnabledMethods: apexController.methods.filter((m) => m.isAuraEnabled).length,
267
+ remoteActionMethods: apexController.methods.filter((m) => m.isRemoteAction).length,
268
+ hasSoqlQueries: apexController.soqlQueries.length > 0,
269
+ hasDmlOperations: apexController.dmlOperations.length > 0,
270
+ controllerAvailable: true,
271
+ }));
272
+ }
273
+ else if (vfPage.pageAttributes.controller) {
274
+ // Controller referenced but not provided
275
+ confidenceFactors.push(...(0, confidence_scorer_1.calculateApexConfidence)({
276
+ totalMethods: 0,
277
+ auraEnabledMethods: 0,
278
+ remoteActionMethods: 0,
279
+ hasSoqlQueries: false,
280
+ hasDmlOperations: false,
281
+ controllerAvailable: false,
282
+ }));
283
+ }
284
+ // Aggregate confidence
285
+ const confidence = (0, confidence_scorer_1.aggregateConfidence)(confidenceFactors);
286
+ // Build complete JS
287
+ const className = (0, file_io_1.toPascalCase)(vfPage.pageName);
288
+ const baseImports = ['LightningElement'];
289
+ if (dataAccess.wireDeclarations.length > 0) {
290
+ baseImports.push('wire');
291
+ }
292
+ // Check if any properties use @api
293
+ const hasApiProps = vfPage.pageAttributes.standardController;
294
+ if (hasApiProps) {
295
+ baseImports.push('api');
296
+ }
297
+ // Check if we need platformResourceLoader for styles/scripts
298
+ const hasStyles = vfPage.includedStyles.length > 0;
299
+ const hasScripts = vfPage.includedScripts.length > 0;
300
+ const needsResourceLoader = hasStyles || hasScripts;
301
+ // Parse static resource references
302
+ const styleResources = [];
303
+ const scriptResources = [];
304
+ for (const style of vfPage.includedStyles) {
305
+ const parsed = parseStaticResourceExpression(style);
306
+ if (parsed) {
307
+ styleResources.push(parsed);
308
+ }
309
+ }
310
+ for (const script of vfPage.includedScripts) {
311
+ const parsed = parseStaticResourceExpression(script);
312
+ if (parsed) {
313
+ scriptResources.push(parsed);
314
+ }
315
+ }
316
+ let js = `import { ${baseImports.join(', ')} } from 'lwc';\n`;
317
+ // Add platformResourceLoader import if needed
318
+ if (needsResourceLoader) {
319
+ const loaderImports = [];
320
+ if (hasStyles)
321
+ loaderImports.push('loadStyle');
322
+ if (hasScripts)
323
+ loaderImports.push('loadScript');
324
+ js += `import { ${loaderImports.join(', ')} } from 'lightning/platformResourceLoader';\n`;
325
+ }
326
+ // Add static resource imports
327
+ const uniqueResources = new Set();
328
+ for (const res of [...styleResources, ...scriptResources]) {
329
+ uniqueResources.add(res.resourceName);
330
+ }
331
+ for (const resourceName of uniqueResources) {
332
+ js += `import ${resourceName}Resource from '@salesforce/resourceUrl/${resourceName}';\n`;
333
+ }
334
+ // Add imports
335
+ for (const imp of dataAccess.imports) {
336
+ if (imp.startsWith('//')) {
337
+ js += `${imp}\n`;
338
+ }
339
+ else {
340
+ js += `${imp}\n`;
341
+ }
342
+ }
343
+ // Add platform imports
344
+ if (transformedMarkup.usedComponents.includes('lightning-record-edit-form') ||
345
+ transformedMarkup.usedComponents.includes('lightning-record-form')) {
346
+ js += `// For record forms - verify these are needed\n`;
347
+ js += `// import { getRecord, getFieldValue } from 'lightning/uiRecordApi';\n`;
348
+ }
349
+ // Always import ShowToastEvent - needed for handleError method
350
+ js += `import { ShowToastEvent } from 'lightning/platformShowToastEvent';\n`;
351
+ js += `\nexport default class ${className} extends LightningElement {\n`;
352
+ // Add flag for one-time style/script loading
353
+ if (needsResourceLoader) {
354
+ js += ` // Flag to prevent duplicate resource loading\n`;
355
+ js += ` _resourcesLoaded = false;\n\n`;
356
+ }
357
+ // Add recordId if standard controller
358
+ if (vfPage.pageAttributes.standardController) {
359
+ js += ` @api recordId;\n`;
360
+ js += ` @api objectApiName = '${vfPage.pageAttributes.standardController}';\n\n`;
361
+ notes.push(`Standard controller object: ${vfPage.pageAttributes.standardController}`);
362
+ }
363
+ // Add properties
364
+ if (dataAccess.properties.length > 0) {
365
+ for (const prop of dataAccess.properties) {
366
+ const lines = prop.split('\n');
367
+ for (const line of lines) {
368
+ js += ` ${line}\n`;
369
+ }
370
+ js += '\n';
371
+ }
372
+ }
373
+ // Add controller property bindings detected from VF expressions
374
+ if (transformedMarkup.controllerProperties.length > 0) {
375
+ js += ` // Controller properties detected from VF bindings\n`;
376
+ for (const prop of transformedMarkup.controllerProperties) {
377
+ js += ` ${prop.name} = null; // Fields used: ${prop.fields.join(', ')}\n`;
378
+ }
379
+ js += '\n';
380
+ }
381
+ // Add loading state
382
+ if (vfPage.actionFunctions.length > 0 || vfPage.remoteActions.length > 0) {
383
+ js += ` isLoading = false;\n\n`;
384
+ }
385
+ // Add wire declarations
386
+ if (dataAccess.wireDeclarations.length > 0) {
387
+ for (const wire of dataAccess.wireDeclarations) {
388
+ const lines = wire.split('\n');
389
+ for (const line of lines) {
390
+ js += ` ${line}\n`;
391
+ }
392
+ js += '\n';
393
+ }
394
+ }
395
+ // Add getters for VF formula expressions (NOT, ISBLANK, AND, OR, etc.)
396
+ if (transformedMarkup.detectedFormulas.length > 0) {
397
+ js += ` // Getters converted from VF formula expressions\n`;
398
+ for (const formula of transformedMarkup.detectedFormulas) {
399
+ js += ` /**\n`;
400
+ js += ` * Converted from VF: {!${formula.original}}\n`;
401
+ js += ` */\n`;
402
+ js += ` get ${formula.getterName}() {\n`;
403
+ js += ` ${formula.suggestedLogic}\n`;
404
+ js += ` }\n\n`;
405
+ }
406
+ }
407
+ // Add connectedCallback if page had action
408
+ if (vfPage.pageAttributes.action) {
409
+ js += ` // Runs on component load (from page action attribute)\n`;
410
+ js += ` connectedCallback() {\n`;
411
+ js += ` this.initializeData();\n`;
412
+ js += ` }\n\n`;
413
+ js += ` async initializeData() {\n`;
414
+ js += ` this.isLoading = true;\n`;
415
+ js += ` try {\n`;
416
+ js += ` // REVIEW: Original page action: ${vfPage.pageAttributes.action}\n`;
417
+ js += ` // TODO: Implement initialization logic\n`;
418
+ js += ` } catch (error) {\n`;
419
+ js += ` this.handleError(error);\n`;
420
+ js += ` } finally {\n`;
421
+ js += ` this.isLoading = false;\n`;
422
+ js += ` }\n`;
423
+ js += ` }\n\n`;
424
+ }
425
+ // Add renderedCallback for loading static resources
426
+ if (needsResourceLoader) {
427
+ js += ` // Load static resources (styles/scripts)\n`;
428
+ js += ` renderedCallback() {\n`;
429
+ js += ` if (this._resourcesLoaded) return;\n`;
430
+ js += ` this._resourcesLoaded = true;\n\n`;
431
+ // Generate loadStyle calls
432
+ if (styleResources.length > 0) {
433
+ js += ` // Load stylesheets\n`;
434
+ js += ` Promise.all([\n`;
435
+ for (const res of styleResources) {
436
+ const resourcePath = res.path
437
+ ? `${res.resourceName}Resource + '/${res.path}'`
438
+ : `${res.resourceName}Resource`;
439
+ js += ` loadStyle(this, ${resourcePath}),\n`;
440
+ }
441
+ js += ` ])\n`;
442
+ js += ` .then(() => {\n`;
443
+ js += ` // Styles loaded successfully\n`;
444
+ js += ` })\n`;
445
+ js += ` .catch(error => {\n`;
446
+ js += ` console.error('Error loading styles:', error);\n`;
447
+ js += ` });\n`;
448
+ }
449
+ // Generate loadScript calls
450
+ if (scriptResources.length > 0) {
451
+ js += `\n // Load scripts\n`;
452
+ js += ` Promise.all([\n`;
453
+ for (const res of scriptResources) {
454
+ const resourcePath = res.path
455
+ ? `${res.resourceName}Resource + '/${res.path}'`
456
+ : `${res.resourceName}Resource`;
457
+ js += ` loadScript(this, ${resourcePath}),\n`;
458
+ }
459
+ js += ` ])\n`;
460
+ js += ` .then(() => {\n`;
461
+ js += ` // Scripts loaded - initialize any external libraries here\n`;
462
+ js += ` })\n`;
463
+ js += ` .catch(error => {\n`;
464
+ js += ` console.error('Error loading scripts:', error);\n`;
465
+ js += ` });\n`;
466
+ }
467
+ js += ` }\n\n`;
468
+ }
469
+ // Add methods
470
+ if (dataAccess.methods.length > 0) {
471
+ for (const method of dataAccess.methods) {
472
+ const lines = method.split('\n');
473
+ for (const line of lines) {
474
+ js += ` ${line}\n`;
475
+ }
476
+ js += '\n';
477
+ }
478
+ }
479
+ // Add error handler
480
+ js += ` handleError(error) {\n`;
481
+ js += ` console.error('Error:', error);\n`;
482
+ js += ` this.dispatchEvent(\n`;
483
+ js += ` new ShowToastEvent({\n`;
484
+ js += ` title: 'Error',\n`;
485
+ js += ` message: error?.body?.message || error?.message || 'An error occurred',\n`;
486
+ js += ` variant: 'error'\n`;
487
+ js += ` })\n`;
488
+ js += ` );\n`;
489
+ js += ` }\n`;
490
+ js += `}\n`;
491
+ // Add review comments
492
+ js = addReviewComments(js, reviewItems.filter((r) => r.location !== 'HTML Template'));
493
+ // Determine targets
494
+ const targets = [];
495
+ if (vfPage.pageAttributes.standardController) {
496
+ targets.push('lightning__RecordPage');
497
+ }
498
+ targets.push('lightning__AppPage', 'lightning__HomePage');
499
+ // Generate meta XML
500
+ const meta = generateMetaXml(lwcName, {
501
+ description: `Full conversion from VF page: ${vfPage.pageName}`,
502
+ targets,
503
+ masterLabel: vfPage.pageName,
504
+ });
505
+ // Compile notes
506
+ notes.push(`Page: ${vfPage.pageName} -> ${lwcName}`);
507
+ if (vfPage.pageAttributes.controller) {
508
+ notes.push(`Custom controller: ${vfPage.pageAttributes.controller}`);
509
+ }
510
+ if (vfPage.pageAttributes.extensions) {
511
+ notes.push(`Extensions: ${vfPage.pageAttributes.extensions.join(', ')}`);
512
+ }
513
+ if (transformedMarkup.usedComponents.length > 0) {
514
+ notes.push(`Lightning components used: ${transformedMarkup.usedComponents.join(', ')}`);
515
+ }
516
+ if (transformedMarkup.dataTableColumns.length > 0) {
517
+ notes.push(`Data table columns generated: ${transformedMarkup.dataTableColumns.length}`);
518
+ }
519
+ if (apexController) {
520
+ notes.push(`Apex methods available: ${apexController.methods.filter((m) => m.isPublic).map((m) => m.name).join(', ')}`);
521
+ }
522
+ logger_1.logger.debug(`Full VF conversion completed for ${lwcName}`);
523
+ logger_1.logger.debug(`${reviewItems.length} items need review`);
524
+ logger_1.logger.debug(`Confidence: ${(0, confidence_scorer_1.formatConfidenceScore)(confidence)}`);
525
+ return {
526
+ bundle: {
527
+ name: lwcName,
528
+ html: transformedMarkup.html,
529
+ js,
530
+ meta,
531
+ },
532
+ notes,
533
+ warnings: reviewItems.filter((r) => r.type === 'warning').map((r) => r.message),
534
+ reviewItems,
535
+ confidence,
536
+ };
537
+ }
538
+ //# sourceMappingURL=full-conversion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"full-conversion.js","sourceRoot":"","sources":["../../src/generators/full-conversion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Generate LWC scaffolding with TODO comments from Aura or VF components
3
+ */
4
+ import { ParsedAuraMarkup } from '../parsers/aura/markup-parser';
5
+ import { ParsedAuraController } from '../parsers/aura/controller-parser';
6
+ import { ParsedAuraHelper } from '../parsers/aura/helper-parser';
7
+ import { ParsedAuraStyle } from '../parsers/aura/style-parser';
8
+ import { ParsedVfPage } from '../parsers/vf/page-parser';
9
+ import { ParsedApexController } from '../parsers/vf/apex-parser';
10
+ import { TransformedMarkup } from '../transformers/aura-to-lwc/markup';
11
+ import { TransformedVfMarkup } from '../transformers/vf-to-lwc/markup';
12
+ import { GeneratedTest } from './test-generator';
13
+ import { TestComparisonResult } from './test-comparison';
14
+ import { LwcBundle } from '../utils/file-io';
15
+ export interface ScaffoldingOptions {
16
+ componentName: string;
17
+ sourceType: 'aura' | 'vf';
18
+ includeComments: boolean;
19
+ generateTests?: boolean;
20
+ }
21
+ export interface ScaffoldingResult {
22
+ bundle: LwcBundle;
23
+ notes: string[];
24
+ warnings: string[];
25
+ /** Generated Jest tests for the converted component */
26
+ tests?: GeneratedTest;
27
+ /** Behavior spec document */
28
+ behaviorSpec?: string;
29
+ /** Test comparison data for before/after verification */
30
+ testComparison?: TestComparisonResult;
31
+ }
32
+ /**
33
+ * Generate LWC scaffolding from Aura component
34
+ */
35
+ export declare function generateAuraScaffolding(markup: ParsedAuraMarkup, transformedMarkup: TransformedMarkup, controller?: ParsedAuraController, helper?: ParsedAuraHelper, style?: ParsedAuraStyle): ScaffoldingResult;
36
+ /**
37
+ * Generate LWC scaffolding from VF page
38
+ */
39
+ export declare function generateVfScaffolding(vfPage: ParsedVfPage, transformedMarkup: TransformedVfMarkup, apexController?: ParsedApexController): ScaffoldingResult;
40
+ //# sourceMappingURL=scaffolding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.d.ts","sourceRoot":"","sources":["../../src/generators/scaffolding.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,eAAe,EAAyB,MAAM,8BAA8B,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAGvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,OAAO,EAAwD,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EAA0B,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,SAAS,EAA2B,MAAM,kBAAkB,CAAC;AAGtE,MAAM,WAAW,kBAAkB;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,uDAAuD;IACvD,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,6BAA6B;IAC7B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAqrBD;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,gBAAgB,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,CAAC,EAAE,oBAAoB,EACjC,MAAM,CAAC,EAAE,gBAAgB,EACzB,KAAK,CAAC,EAAE,eAAe,GACtB,iBAAiB,CA2EnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,YAAY,EACpB,iBAAiB,EAAE,mBAAmB,EACtC,cAAc,CAAC,EAAE,oBAAoB,GACpC,iBAAiB,CA2DnB"}