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,465 @@
1
+ "use strict";
2
+ /**
3
+ * Transform Aura markup to LWC HTML template
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.transformAuraMarkup = transformAuraMarkup;
40
+ const logger_1 = require("../../utils/logger");
41
+ const auraMapping = __importStar(require("../../mappings/aura-to-lwc.json"));
42
+ const componentMappings = auraMapping.components;
43
+ /**
44
+ * Convert Aura expression to LWC expression
45
+ * {!v.name} -> {name}
46
+ * {!c.handleClick} -> {handleClick}
47
+ * {!v.contact.Picture__c} -> {picture} (converted to use getter)
48
+ * {!v.isActive ? 'Active' : 'Inactive'} -> {displayStatus} (converted to getter)
49
+ */
50
+ function convertExpression(expr, context) {
51
+ // Remove {! and }
52
+ let result = expr;
53
+ // Extract inner expression for complexity check (remove {! and })
54
+ const innerExpr = expr.startsWith('{!') && expr.endsWith('}')
55
+ ? expr.substring(2, expr.length - 1).trim()
56
+ : expr;
57
+ // Check for complex expressions (ternary, logical operators, math)
58
+ // Simple expressions like v.prop, c.method, v.obj.prop should NOT be treated as complex
59
+ // Check for operators that indicate complex logic (but not the leading ! in {!...})
60
+ const isSimplePropertyAccess = /^[vc]\.\w+(\.\w+)*$/.test(innerExpr) ||
61
+ /^\$Label\.\w+\.\w+$/.test(innerExpr) ||
62
+ innerExpr === 'globalId';
63
+ const hasComplexOperators = innerExpr.includes('?') ||
64
+ innerExpr.includes('&&') ||
65
+ innerExpr.includes('||') ||
66
+ // Check for negation operator (!) but not at start of simple property (e.g., !v.isTrue)
67
+ /[^{]!/.test(innerExpr) ||
68
+ // Check for math but exclude property paths like v.obj-name
69
+ /\s[\+\-\*\/]\s/.test(innerExpr) ||
70
+ innerExpr.includes('==') ||
71
+ innerExpr.includes('!=') ||
72
+ innerExpr.includes('>=') ||
73
+ innerExpr.includes('<=') ||
74
+ /[^=!<>]>[^=]/.test(innerExpr) ||
75
+ /[^=]<[^=]/.test(innerExpr);
76
+ const isComplex = !isSimplePropertyAccess && hasComplexOperators;
77
+ // If complex and we have context to store it, convert to getter
78
+ if (isComplex && context && expr.startsWith('{!') && expr.endsWith('}')) {
79
+ // Generate a getter name based on the expression content
80
+ // e.g. v.isActive ? 'Active' : 'Inactive' -> getComputedValue1
81
+ const getterName = `computedValue${context.detectedGetters.length + 1}`;
82
+ context.detectedGetters.push({
83
+ name: getterName,
84
+ expression: innerExpr
85
+ });
86
+ return `{${getterName}}`;
87
+ }
88
+ // {!v.propertyName} -> {propertyName}
89
+ result = result.replace(/\{!v\.(\w+)\}/g, '{$1}');
90
+ // {!v.contact.FieldName} -> {fieldName} getter (for wire data from force:recordData)
91
+ // This handles patterns like {!v.contact.Picture__c}
92
+ result = result.replace(/\{!v\.(\w+)\.(\w+)__c\}/g, (_match, _targetObj, fieldName) => {
93
+ // Convert Picture__c to picture (getter name)
94
+ const getterName = fieldName.charAt(0).toLowerCase() + fieldName.slice(1);
95
+ return `{${getterName}}`;
96
+ });
97
+ // Also handle standard fields like {!v.contact.Name}
98
+ result = result.replace(/\{!v\.(\w+)\.(\w+)\}/g, (_match, _targetObj, fieldName) => {
99
+ // Convert Name to name (getter name) - standard fields
100
+ const getterName = fieldName.charAt(0).toLowerCase() + fieldName.slice(1);
101
+ return `{${getterName}}`;
102
+ });
103
+ // {!c.methodName} -> {methodName}
104
+ result = result.replace(/\{!c\.(\w+)\}/g, '{$1}');
105
+ // {!globalId} -> special handling needed
106
+ result = result.replace(/\{!globalId\}/g, '{/* TODO: Replace globalId with data-id or ref */}');
107
+ // {!$Label.namespace.labelName} -> {label.labelName}
108
+ result = result.replace(/\{!\$Label\.(\w+)\.(\w+)\}/g, '{label$1$2}');
109
+ // Other expressions - try to preserve
110
+ result = result.replace(/\{!([^}]+)\}/g, '{$1}');
111
+ return result;
112
+ }
113
+ /**
114
+ * Convert Aura attribute name to LWC attribute name
115
+ * e.g., iconName -> icon-name
116
+ */
117
+ function convertAttributeName(auraAttr, componentMapping) {
118
+ // Check if there's a specific mapping for this component's attribute
119
+ if (componentMapping?.attributes && componentMapping.attributes[auraAttr]) {
120
+ return componentMapping.attributes[auraAttr];
121
+ }
122
+ // Convert camelCase to kebab-case for standard attributes
123
+ return auraAttr.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
124
+ }
125
+ /**
126
+ * Convert Aura component tag to LWC tag
127
+ */
128
+ function convertTagName(auraTag) {
129
+ const mapping = componentMappings[auraTag];
130
+ if (mapping && mapping.lwc) {
131
+ return { lwcTag: mapping.lwc, mapping };
132
+ }
133
+ // Handle lightning: namespace - direct conversion
134
+ if (auraTag.startsWith('lightning:')) {
135
+ const baseName = auraTag.substring(10);
136
+ const kebabName = baseName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
137
+ return { lwcTag: `lightning-${kebabName}` };
138
+ }
139
+ // Handle ui: namespace - most map to lightning-input or similar
140
+ if (auraTag.startsWith('ui:')) {
141
+ const baseName = auraTag.substring(3);
142
+ if (baseName.startsWith('input')) {
143
+ return { lwcTag: 'lightning-input' };
144
+ }
145
+ if (baseName.startsWith('output')) {
146
+ return { lwcTag: 'lightning-formatted-text' };
147
+ }
148
+ if (baseName === 'button') {
149
+ return { lwcTag: 'lightning-button' };
150
+ }
151
+ }
152
+ // Handle c: namespace - custom components
153
+ if (auraTag.startsWith('c:')) {
154
+ const baseName = auraTag.substring(2);
155
+ const kebabName = baseName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
156
+ return { lwcTag: `c-${kebabName}` };
157
+ }
158
+ // Default: return as-is with a comment
159
+ return { lwcTag: auraTag };
160
+ }
161
+ /**
162
+ * Transform a single DOM node to LWC HTML
163
+ */
164
+ function transformNode(node, indent, context) {
165
+ if (node.type === 'text') {
166
+ const text = node.data;
167
+ const converted = convertExpression(text, context);
168
+ if (converted.trim()) {
169
+ return converted;
170
+ }
171
+ return '';
172
+ }
173
+ if (node.type !== 'tag') {
174
+ return '';
175
+ }
176
+ const element = node;
177
+ const tagName = element.name;
178
+ // Handle lightning:messageChannel - extract config, don't output markup
179
+ if (tagName === 'lightning:messagechannel' || tagName === 'lightning:messageChannel') {
180
+ const channelType = element.attribs.type || '';
181
+ const auraId = element.attribs['aura:id'] || '';
182
+ const onMessage = element.attribs.onmessage || element.attribs.onMessage || '';
183
+ const scope = element.attribs.scope || '';
184
+ // Extract handler name from {!c.handleMessage}
185
+ let handlerName = '';
186
+ const handlerMatch = onMessage.match(/\{!c\.(\w+)\}/);
187
+ if (handlerMatch) {
188
+ handlerName = handlerMatch[1];
189
+ }
190
+ context.lmsChannels.push({
191
+ channelName: channelType,
192
+ auraId: auraId,
193
+ onMessageHandler: handlerName,
194
+ scope: scope,
195
+ isPublisherOnly: !handlerName, // No onMessage handler means publisher-only
196
+ });
197
+ const lmsPattern = handlerName ? 'subscriber' : 'publisher-only';
198
+ context.warnings.push(`lightning:messageChannel detected (${lmsPattern}) - LMS code will be generated in JavaScript`);
199
+ // Don't output any markup - LMS is handled in JS
200
+ return '';
201
+ }
202
+ // Handle force:recordData - extract config, don't output markup
203
+ if (tagName === 'force:recorddata' || tagName === 'force:recordData') {
204
+ const auraId = element.attribs['aura:id'] || '';
205
+ const recordId = element.attribs.recordid || element.attribs.recordId || '';
206
+ const fieldsAttr = element.attribs.fields || '';
207
+ const targetFields = element.attribs.targetfields || element.attribs.targetFields || '';
208
+ const targetRecord = element.attribs.targetrecord || element.attribs.targetRecord || '';
209
+ const targetError = element.attribs.targeterror || element.attribs.targetError || '';
210
+ const mode = element.attribs.mode || 'VIEW';
211
+ // Parse fields from string like "['Name', 'Title', 'Phone']"
212
+ let fields = [];
213
+ const fieldsMatch = fieldsAttr.match(/\[([^\]]+)\]/);
214
+ if (fieldsMatch) {
215
+ fields = fieldsMatch[1]
216
+ .split(',')
217
+ .map(f => f.trim().replace(/['"]/g, ''))
218
+ .filter(f => f);
219
+ }
220
+ // Convert recordId binding from {!v.contactId} to contactId
221
+ let recordIdBinding = recordId;
222
+ const bindingMatch = recordId.match(/\{!v\.(\w+)\}/);
223
+ if (bindingMatch) {
224
+ recordIdBinding = bindingMatch[1];
225
+ }
226
+ // Convert targetFields from {!v.contact} to contact
227
+ let targetFieldsBinding = targetFields;
228
+ const targetMatch = targetFields.match(/\{!v\.(\w+)\}/);
229
+ if (targetMatch) {
230
+ targetFieldsBinding = targetMatch[1];
231
+ }
232
+ context.recordDataServices.push({
233
+ auraId: auraId,
234
+ recordIdBinding: recordIdBinding,
235
+ fields: fields,
236
+ targetFields: targetFieldsBinding,
237
+ targetRecord: targetRecord ? convertExpression(targetRecord, context).replace(/[{}]/g, '') : undefined,
238
+ targetError: targetError ? convertExpression(targetError, context).replace(/[{}]/g, '') : undefined,
239
+ mode: mode,
240
+ });
241
+ context.warnings.push(`force:recordData detected - @wire(getRecord) will be generated in JavaScript`);
242
+ // Don't output any markup - wire adapter is in JS
243
+ return '';
244
+ }
245
+ // Handle special Aura tags
246
+ if (tagName === 'aura:if') {
247
+ const isTrue = element.attribs.istrue || element.attribs.isTrue;
248
+ const isFalse = element.attribs.isfalse || element.attribs.isFalse;
249
+ let directive = '';
250
+ if (isTrue) {
251
+ directive = `lwc:if={${convertExpression(isTrue, context).replace(/^{|}$/g, '')}}`;
252
+ context.usedDirectives.push('lwc:if');
253
+ }
254
+ else if (isFalse) {
255
+ // isFalse is tricky because lwc:else doesn't take an expression
256
+ // We'll treat it as lwc:if with negated expression
257
+ const expr = convertExpression(isFalse, context).replace(/^{|}$/g, '');
258
+ directive = `lwc:if={!${expr}}`;
259
+ context.usedDirectives.push('lwc:if');
260
+ }
261
+ // Separate children into main if-block content and else block content
262
+ const children = element.children || [];
263
+ const mainBlockChildren = [];
264
+ let elseBlockContent = '';
265
+ for (const child of children) {
266
+ if (child.type === 'tag') {
267
+ const childElement = child;
268
+ if (childElement.name === 'aura:set') {
269
+ const attrName = childElement.attribs.attribute || '';
270
+ if (attrName === 'else') {
271
+ // This is the else block content - transform it separately
272
+ const elseChildren = childElement.children || [];
273
+ elseBlockContent = transformChildren(elseChildren, indent + ' ', context);
274
+ context.usedDirectives.push('lwc:else');
275
+ continue;
276
+ }
277
+ }
278
+ }
279
+ mainBlockChildren.push(child);
280
+ }
281
+ const mainContent = transformChildren(mainBlockChildren, indent + ' ', context);
282
+ let result = `${indent}<template ${directive}>\n${mainContent}${indent}</template>`;
283
+ // Add else block if present
284
+ if (elseBlockContent) {
285
+ result += `\n${indent}<template lwc:else>\n${elseBlockContent}${indent}</template>`;
286
+ }
287
+ return result;
288
+ }
289
+ if (tagName === 'aura:iteration') {
290
+ const items = element.attribs.items;
291
+ const varName = element.attribs.var;
292
+ const indexVar = element.attribs.indexvar || element.attribs.indexVar;
293
+ context.usedDirectives.push('for:each');
294
+ let directives = `for:each=${convertExpression(items, context)} for:item="${varName}"`;
295
+ if (indexVar) {
296
+ directives += ` for:index="${indexVar}"`;
297
+ }
298
+ // Transform children with iteration context to inject key on first element
299
+ const iterContext = { ...context, iterationVar: varName, needsKey: true };
300
+ const childContent = transformChildrenWithIteration(element.children || [], indent + ' ', iterContext);
301
+ return `${indent}<template ${directives}>\n${childContent}${indent}</template>`;
302
+ }
303
+ // Handle aura:set - convert to slot content
304
+ if (tagName === 'aura:set') {
305
+ const attrName = element.attribs.attribute || '';
306
+ const childContent = transformChildren(element.children || [], indent + ' ', context);
307
+ // Store facet content for later use
308
+ context.facetContent.push({
309
+ attributeName: attrName,
310
+ content: childContent.trim(),
311
+ });
312
+ // lightning-card has named slots for 'actions' and 'footer'
313
+ if (attrName === 'actions' && context.parentTag?.includes('card')) {
314
+ return `${indent}<div slot="actions">\n${childContent}${indent}</div>`;
315
+ }
316
+ if (attrName === 'footer' && context.parentTag?.includes('card')) {
317
+ return `${indent}<div slot="footer">\n${childContent}${indent}</div>`;
318
+ }
319
+ // For other facets, wrap in a named slot
320
+ if (attrName) {
321
+ context.warnings.push(`aura:set attribute="${attrName}" - verify slot name exists on parent component`);
322
+ return `${indent}<div slot="${attrName}">\n${childContent}${indent}</div>`;
323
+ }
324
+ context.warnings.push('aura:set found without attribute name - needs manual migration');
325
+ return `${indent}<!-- TODO: Convert aura:set to slot content -->\n${childContent}`;
326
+ }
327
+ if (tagName === 'aura:html') {
328
+ const tag = element.attribs.tag || 'div';
329
+ const body = element.attribs.body || '';
330
+ context.warnings.push('aura:html found - verify dynamic HTML handling');
331
+ return `${indent}<${tag}>${convertExpression(body, context)}</${tag}>`;
332
+ }
333
+ // Skip aura meta tags that don't produce output
334
+ if (tagName === 'aura:attribute' ||
335
+ tagName === 'aura:handler' ||
336
+ tagName === 'aura:registerEvent' ||
337
+ tagName === 'aura:method') {
338
+ return '';
339
+ }
340
+ // Convert regular components
341
+ const { lwcTag, mapping } = convertTagName(tagName);
342
+ if (lwcTag !== tagName) {
343
+ context.usedComponents.push(lwcTag);
344
+ }
345
+ // Build attributes
346
+ const attrs = [];
347
+ for (const [key, value] of Object.entries(element.attribs)) {
348
+ // Skip aura:id - convert to data-id
349
+ if (key === 'aura:id') {
350
+ attrs.push(`data-id="${value}"`);
351
+ continue;
352
+ }
353
+ const lwcAttrName = convertAttributeName(key, mapping);
354
+ const lwcValue = convertExpression(value, context);
355
+ // Handle event handlers
356
+ if (key.startsWith('on') || lwcAttrName.startsWith('on')) {
357
+ attrs.push(`${lwcAttrName}=${lwcValue}`);
358
+ }
359
+ else if (lwcValue.startsWith('{') && lwcValue.endsWith('}')) {
360
+ // Dynamic value
361
+ attrs.push(`${lwcAttrName}=${lwcValue}`);
362
+ }
363
+ else {
364
+ // Static value
365
+ attrs.push(`${lwcAttrName}="${lwcValue}"`);
366
+ }
367
+ }
368
+ const attrString = attrs.length > 0 ? ' ' + attrs.join(' ') : '';
369
+ // Check if self-closing
370
+ const children = element.children || [];
371
+ const hasChildren = children.some((child) => {
372
+ if (child.type === 'text') {
373
+ return child.data.trim().length > 0;
374
+ }
375
+ return child.type === 'tag';
376
+ });
377
+ if (!hasChildren) {
378
+ return `${indent}<${lwcTag}${attrString}></${lwcTag}>`;
379
+ }
380
+ // Pass parent tag to context for slot handling
381
+ const childContext = { ...context, parentTag: lwcTag };
382
+ const childContent = transformChildren(children, indent + ' ', childContext);
383
+ return `${indent}<${lwcTag}${attrString}>\n${childContent}${indent}</${lwcTag}>`;
384
+ }
385
+ /**
386
+ * Transform array of child nodes
387
+ */
388
+ /**
389
+ * Transform children within an iteration context to inject key attribute on first element
390
+ */
391
+ function transformChildrenWithIteration(children, indent, context) {
392
+ const parts = [];
393
+ let keyInjected = false;
394
+ for (const child of children) {
395
+ if (!keyInjected && context.needsKey && child.type === 'tag') {
396
+ const element = child;
397
+ // Skip text and non-element nodes, find first actual element to inject key
398
+ // Inject key attribute on first element child
399
+ const varName = context.iterationVar || 'item';
400
+ // Check if element already has a key attribute
401
+ const hasKey = element.attribs && ('key' in element.attribs);
402
+ if (!hasKey) {
403
+ // Add key to the element's attributes
404
+ if (!element.attribs) {
405
+ element.attribs = {};
406
+ }
407
+ element.attribs['key'] = `{${varName}.Id}`;
408
+ context.warnings.push(`Added key={${varName}.Id} to iteration - verify .Id is the correct unique identifier`);
409
+ }
410
+ keyInjected = true;
411
+ }
412
+ const result = transformNode(child, indent, context);
413
+ if (result) {
414
+ parts.push(result);
415
+ }
416
+ }
417
+ return parts.join('\n') + (parts.length > 0 ? '\n' : '');
418
+ }
419
+ /**
420
+ * Transform array of child nodes
421
+ */
422
+ function transformChildren(children, indent, context) {
423
+ const parts = [];
424
+ for (const child of children) {
425
+ const result = transformNode(child, indent, context);
426
+ if (result) {
427
+ parts.push(result);
428
+ }
429
+ }
430
+ return parts.join('\n') + (parts.length > 0 ? '\n' : '');
431
+ }
432
+ /**
433
+ * Transform parsed Aura markup to LWC HTML
434
+ */
435
+ function transformAuraMarkup(parsed) {
436
+ const context = {
437
+ warnings: [],
438
+ usedDirectives: [],
439
+ usedComponents: [],
440
+ lmsChannels: [],
441
+ recordDataServices: [],
442
+ facetContent: [],
443
+ detectedGetters: [],
444
+ };
445
+ const bodyContent = transformChildren(parsed.body, ' ', context);
446
+ const html = `<template>\n${bodyContent}</template>`;
447
+ // Deduplicate
448
+ context.usedDirectives = [...new Set(context.usedDirectives)];
449
+ context.usedComponents = [...new Set(context.usedComponents)];
450
+ logger_1.logger.debug(`Transformed markup with ${context.warnings.length} warnings`);
451
+ logger_1.logger.debug(`Used directives: ${context.usedDirectives.join(', ')}`);
452
+ logger_1.logger.debug(`Used components: ${context.usedComponents.join(', ')}`);
453
+ logger_1.logger.debug(`Detected ${context.detectedGetters.length} complex expressions for getters`);
454
+ return {
455
+ html,
456
+ warnings: context.warnings,
457
+ usedDirectives: context.usedDirectives,
458
+ usedComponents: context.usedComponents,
459
+ lmsChannels: context.lmsChannels,
460
+ recordDataServices: context.recordDataServices,
461
+ facetContent: context.facetContent,
462
+ detectedGetters: context.detectedGetters,
463
+ };
464
+ }
465
+ //# sourceMappingURL=markup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markup.js","sourceRoot":"","sources":["../../../src/transformers/aura-to-lwc/markup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * VF Component to LWC Component transformation utilities
3
+ */
4
+ import { VfComponent } from '../../parsers/vf/page-parser';
5
+ export interface LwcComponentSuggestion {
6
+ vfComponent: string;
7
+ lwcComponent: string;
8
+ confidence: 'high' | 'medium' | 'low';
9
+ confidenceScore: number;
10
+ confidenceFactors: string[];
11
+ notes: string;
12
+ codeExample?: string;
13
+ }
14
+ export interface FormFieldConversion {
15
+ vfField: VfComponent;
16
+ lwcCode: string;
17
+ jsProperty: string;
18
+ handlerCode?: string;
19
+ warnings: string[];
20
+ }
21
+ /**
22
+ * Convert a VF form field component to LWC
23
+ */
24
+ export declare function convertFormField(component: VfComponent): FormFieldConversion;
25
+ /**
26
+ * Suggest LWC components for VF components
27
+ */
28
+ export declare function suggestLwcComponents(vfComponents: VfComponent[]): LwcComponentSuggestion[];
29
+ /**
30
+ * Generate lightning-datatable column definitions from VF pageBlockTable
31
+ */
32
+ export declare function generateDataTableColumns(tableComponent: VfComponent): {
33
+ columns: string;
34
+ warnings: string[];
35
+ };
36
+ /**
37
+ * Generate form submit handler for VF form conversion
38
+ */
39
+ export declare function generateFormHandler(formComponent: VfComponent, _apexAction?: string): string;
40
+ //# sourceMappingURL=components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../../src/transformers/vf-to-lwc/components.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAO3D,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACtC,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AA+LD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,WAAW,GAAG,mBAAmB,CAc5E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,WAAW,EAAE,GAAG,sBAAsB,EAAE,CAkF1F;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,cAAc,EAAE,WAAW,GAC1B;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CA+CzC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,WAAW,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CA0CR"}