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
package/dist/index.js ADDED
@@ -0,0 +1,226 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /**
4
+ * lwc-convert - CLI tool to convert Aura and Visualforce components to LWC
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ const commander_1 = require("commander");
41
+ const options_1 = require("./cli/options");
42
+ const aura_1 = require("./cli/commands/aura");
43
+ const vf_1 = require("./cli/commands/vf");
44
+ const logger_1 = require("./utils/logger");
45
+ const session_store_1 = require("./utils/session-store");
46
+ const program = new commander_1.Command();
47
+ program
48
+ .name(options_1.CLI_NAME)
49
+ .description(options_1.CLI_DESCRIPTION)
50
+ .version(options_1.CLI_VERSION);
51
+ // Aura conversion command
52
+ program
53
+ .command('aura <path>')
54
+ .description('Convert an Aura component bundle to LWC')
55
+ .option('--full', 'Run full automated conversion (default: scaffolding only)', false)
56
+ .option('-o, --output <dir>', 'Output directory', options_1.DEFAULT_OUTPUT_DIR)
57
+ .option('--open', 'Open output folder in file explorer after conversion', false)
58
+ .option('--dry-run', 'Preview conversion without writing files', false)
59
+ .option('--verbose', 'Show detailed conversion logs', false)
60
+ .action(async (bundlePath, options) => {
61
+ logger_1.logger.setVerbose(options.verbose);
62
+ await (0, aura_1.convertAura)(bundlePath, {
63
+ output: options.output,
64
+ full: options.full,
65
+ dryRun: options.dryRun,
66
+ verbose: options.verbose,
67
+ open: options.open,
68
+ });
69
+ });
70
+ // Visualforce conversion command
71
+ program
72
+ .command('vf <path>')
73
+ .description('Convert a Visualforce page to LWC')
74
+ .option('--full', 'Run full automated conversion (default: scaffolding only)', false)
75
+ .option('-o, --output <dir>', 'Output directory', options_1.DEFAULT_OUTPUT_DIR)
76
+ .option('--controller <path>', 'Include Apex controller file for analysis')
77
+ .option('--open', 'Open output folder in file explorer after conversion', false)
78
+ .option('--dry-run', 'Preview conversion without writing files', false)
79
+ .option('--verbose', 'Show detailed conversion logs', false)
80
+ .action(async (pagePath, options) => {
81
+ logger_1.logger.setVerbose(options.verbose);
82
+ await (0, vf_1.convertVf)(pagePath, {
83
+ output: options.output,
84
+ full: options.full,
85
+ dryRun: options.dryRun,
86
+ verbose: options.verbose,
87
+ controller: options.controller,
88
+ open: options.open,
89
+ });
90
+ });
91
+ // Session management command
92
+ program
93
+ .command('session')
94
+ .description('View session information and conversion history')
95
+ .option('--report', 'Generate full session report', false)
96
+ .option('--patterns', 'Show learned patterns from session', false)
97
+ .option('--cleanup', 'Clean up session data', false)
98
+ .action(async (options) => {
99
+ await session_store_1.sessionStore.init();
100
+ const summary = session_store_1.sessionStore.getSessionSummary();
101
+ if (options.cleanup) {
102
+ await session_store_1.sessionStore.cleanup();
103
+ logger_1.logger.success('Session data cleaned up');
104
+ return;
105
+ }
106
+ if (options.report) {
107
+ const report = session_store_1.sessionStore.generateSessionReport();
108
+ console.log(report);
109
+ return;
110
+ }
111
+ if (options.patterns) {
112
+ logger_1.logger.header('Session Pattern Library');
113
+ const patterns = summary.patternLibrary;
114
+ if (patterns.length === 0) {
115
+ logger_1.logger.info('No patterns learned yet. Run some conversions first!');
116
+ }
117
+ else {
118
+ logger_1.logger.info(`${patterns.length} patterns learned:`);
119
+ logger_1.logger.blank();
120
+ for (const pattern of patterns.slice(0, 20)) {
121
+ console.log(` [${pattern.type}] ${pattern.auraPattern} → ${pattern.lwcPattern}`);
122
+ console.log(` Used: ${pattern.frequency}x, Success: ${(pattern.successRate * 100).toFixed(0)}%`);
123
+ }
124
+ }
125
+ return;
126
+ }
127
+ // Default: show session summary
128
+ logger_1.logger.banner();
129
+ logger_1.logger.header('Current Session');
130
+ logger_1.logger.info(`Session ID: ${summary.sessionId}`);
131
+ logger_1.logger.info(`Started: ${summary.startedAt.toISOString()}`);
132
+ logger_1.logger.info(`Conversions: ${summary.conversions}`);
133
+ logger_1.logger.info(`Behaviors mapped: ${summary.totalBehaviors}`);
134
+ logger_1.logger.info(`Patterns learned: ${summary.patternLibrary.length}`);
135
+ logger_1.logger.info(`Session directory: ${session_store_1.sessionStore.getSessionDir()}`);
136
+ if (summary.conversions > 0) {
137
+ logger_1.logger.blank();
138
+ logger_1.logger.subheader('Recent Conversions:');
139
+ const conversions = session_store_1.sessionStore.getConversions().slice(-5);
140
+ for (const conv of conversions) {
141
+ console.log(` • ${conv.sourceName} → ${conv.targetName} (${conv.behaviorCount} behaviors)`);
142
+ }
143
+ }
144
+ if (summary.commonWarnings.length > 0) {
145
+ logger_1.logger.blank();
146
+ logger_1.logger.subheader('Common Warnings:');
147
+ for (const { warning, count } of summary.commonWarnings.slice(0, 5)) {
148
+ console.log(` [${count}x] ${warning.substring(0, 70)}...`);
149
+ }
150
+ }
151
+ });
152
+ // Examples in help
153
+ program.addHelpText('after', `
154
+ Examples:
155
+ # Convert Aura component (just use the name!)
156
+ $ ${options_1.CLI_NAME} aura AccountCard
157
+ $ ${options_1.CLI_NAME} aura AccountCard --full
158
+
159
+ # Convert Visualforce page (just use the name!)
160
+ $ ${options_1.CLI_NAME} vf ContactList
161
+ $ ${options_1.CLI_NAME} vf ContactList --controller ContactListController
162
+
163
+ # Full paths also work
164
+ $ ${options_1.CLI_NAME} aura ./force-app/main/default/aura/MyComponent
165
+ $ ${options_1.CLI_NAME} vf ./pages/MyPage.page --controller ./classes/MyController.cls
166
+
167
+ # Preview without writing files
168
+ $ ${options_1.CLI_NAME} aura MyComponent --dry-run --verbose
169
+
170
+ # Specify output directory
171
+ $ ${options_1.CLI_NAME} vf ContactList -o ./src/lwc
172
+
173
+ # View session data and learned patterns
174
+ $ ${options_1.CLI_NAME} session
175
+ $ ${options_1.CLI_NAME} session --report
176
+ $ ${options_1.CLI_NAME} session --patterns
177
+
178
+ Smart Path Resolution:
179
+ The CLI searches common Salesforce project locations automatically:
180
+ - Aura: force-app/main/default/aura/, src/aura/, aura/
181
+ - VF: force-app/main/default/pages/, src/pages/, pages/
182
+ - Apex: force-app/main/default/classes/, src/classes/, classes/
183
+
184
+ Session Management:
185
+ Conversion data is stored in a temp folder during your session.
186
+ This helps the tool learn from patterns and provide better suggestions.
187
+ Use 'session --report' to see full session statistics.
188
+ `);
189
+ // Parse and execute
190
+ // If no arguments provided, launch interactive TUI
191
+ if (process.argv.slice(2).length === 0) {
192
+ // Dynamic import to avoid loading TUI dependencies if not needed
193
+ Promise.resolve().then(() => __importStar(require('./cli/interactive'))).then(async ({ runInteractiveTui }) => {
194
+ const answers = await runInteractiveTui();
195
+ if (answers) {
196
+ // Execute the conversion based on user selections
197
+ logger_1.logger.setVerbose(false);
198
+ if (answers.conversionType === 'aura') {
199
+ await (0, aura_1.convertAura)(answers.componentPath, {
200
+ output: answers.outputDir,
201
+ full: answers.conversionMode === 'full',
202
+ dryRun: false,
203
+ verbose: false,
204
+ open: answers.openFolder,
205
+ });
206
+ }
207
+ else {
208
+ await (0, vf_1.convertVf)(answers.componentPath, {
209
+ output: answers.outputDir,
210
+ full: answers.conversionMode === 'full',
211
+ dryRun: false,
212
+ verbose: false,
213
+ controller: answers.controllerPath,
214
+ open: answers.openFolder,
215
+ });
216
+ }
217
+ }
218
+ }).catch((err) => {
219
+ console.error('Failed to start interactive mode:', err.message);
220
+ program.outputHelp();
221
+ });
222
+ }
223
+ else {
224
+ program.parse(process.argv);
225
+ }
226
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,321 @@
1
+ {
2
+ "components": {
3
+ "aura:component": {
4
+ "lwc": "template",
5
+ "notes": "Root element becomes <template>"
6
+ },
7
+ "aura:if": {
8
+ "lwc": "template",
9
+ "attributes": {
10
+ "isTrue": "if:true",
11
+ "isFalse": "if:false"
12
+ },
13
+ "notes": "Conditional rendering using template directives"
14
+ },
15
+ "aura:iteration": {
16
+ "lwc": "template",
17
+ "attributes": {
18
+ "items": "for:each",
19
+ "var": "for:item",
20
+ "indexVar": "for:index"
21
+ },
22
+ "requiresKey": true,
23
+ "notes": "Iteration requires key attribute on first child element"
24
+ },
25
+ "aura:set": {
26
+ "lwc": null,
27
+ "notes": "Attribute sets handled differently in LWC - set via JavaScript"
28
+ },
29
+ "aura:handler": {
30
+ "lwc": null,
31
+ "notes": "Event handlers defined as class methods and bound in template"
32
+ },
33
+ "aura:method": {
34
+ "lwc": "@api method",
35
+ "notes": "Public methods decorated with @api"
36
+ },
37
+ "aura:registerEvent": {
38
+ "lwc": "CustomEvent",
39
+ "notes": "Events dispatched using CustomEvent and dispatchEvent()"
40
+ },
41
+ "aura:attribute": {
42
+ "lwc": "property",
43
+ "notes": "Attributes become class properties, public ones use @api"
44
+ },
45
+ "lightning:button": {
46
+ "lwc": "lightning-button",
47
+ "attributes": {
48
+ "onclick": "onclick",
49
+ "label": "label",
50
+ "variant": "variant",
51
+ "disabled": "disabled",
52
+ "name": "name",
53
+ "title": "title",
54
+ "iconName": "icon-name",
55
+ "iconPosition": "icon-position"
56
+ }
57
+ },
58
+ "lightning:input": {
59
+ "lwc": "lightning-input",
60
+ "attributes": {
61
+ "type": "type",
62
+ "label": "label",
63
+ "value": "value",
64
+ "placeholder": "placeholder",
65
+ "required": "required",
66
+ "disabled": "disabled",
67
+ "name": "name",
68
+ "onchange": "onchange"
69
+ }
70
+ },
71
+ "lightning:card": {
72
+ "lwc": "lightning-card",
73
+ "attributes": {
74
+ "title": "title",
75
+ "iconName": "icon-name",
76
+ "variant": "variant"
77
+ }
78
+ },
79
+ "lightning:icon": {
80
+ "lwc": "lightning-icon",
81
+ "attributes": {
82
+ "iconName": "icon-name",
83
+ "size": "size",
84
+ "variant": "variant",
85
+ "alternativeText": "alternative-text"
86
+ }
87
+ },
88
+ "lightning:spinner": {
89
+ "lwc": "lightning-spinner",
90
+ "attributes": {
91
+ "alternativeText": "alternative-text",
92
+ "size": "size",
93
+ "variant": "variant"
94
+ }
95
+ },
96
+ "lightning:datatable": {
97
+ "lwc": "lightning-datatable",
98
+ "attributes": {
99
+ "data": "data",
100
+ "columns": "columns",
101
+ "keyField": "key-field",
102
+ "hideCheckboxColumn": "hide-checkbox-column",
103
+ "onrowselection": "onrowselection",
104
+ "onrowaction": "onrowaction"
105
+ }
106
+ },
107
+ "lightning:recordEditForm": {
108
+ "lwc": "lightning-record-edit-form",
109
+ "attributes": {
110
+ "recordId": "record-id",
111
+ "objectApiName": "object-api-name",
112
+ "onsubmit": "onsubmit",
113
+ "onsuccess": "onsuccess",
114
+ "onerror": "onerror"
115
+ }
116
+ },
117
+ "lightning:recordViewForm": {
118
+ "lwc": "lightning-record-view-form",
119
+ "attributes": {
120
+ "recordId": "record-id",
121
+ "objectApiName": "object-api-name"
122
+ }
123
+ },
124
+ "lightning:inputField": {
125
+ "lwc": "lightning-input-field",
126
+ "attributes": {
127
+ "fieldName": "field-name",
128
+ "value": "value",
129
+ "variant": "variant"
130
+ }
131
+ },
132
+ "lightning:outputField": {
133
+ "lwc": "lightning-output-field",
134
+ "attributes": {
135
+ "fieldName": "field-name",
136
+ "variant": "variant"
137
+ }
138
+ },
139
+ "lightning:combobox": {
140
+ "lwc": "lightning-combobox",
141
+ "attributes": {
142
+ "label": "label",
143
+ "value": "value",
144
+ "options": "options",
145
+ "placeholder": "placeholder",
146
+ "onchange": "onchange"
147
+ }
148
+ },
149
+ "lightning:select": {
150
+ "lwc": "lightning-combobox",
151
+ "notes": "lightning:select maps to lightning-combobox in LWC"
152
+ },
153
+ "lightning:textarea": {
154
+ "lwc": "lightning-textarea",
155
+ "attributes": {
156
+ "label": "label",
157
+ "value": "value",
158
+ "placeholder": "placeholder",
159
+ "maxlength": "max-length",
160
+ "onchange": "onchange"
161
+ }
162
+ },
163
+ "lightning:checkboxGroup": {
164
+ "lwc": "lightning-checkbox-group",
165
+ "attributes": {
166
+ "label": "label",
167
+ "options": "options",
168
+ "value": "value",
169
+ "onchange": "onchange"
170
+ }
171
+ },
172
+ "lightning:radioGroup": {
173
+ "lwc": "lightning-radio-group",
174
+ "attributes": {
175
+ "label": "label",
176
+ "options": "options",
177
+ "value": "value",
178
+ "onchange": "onchange",
179
+ "type": "type"
180
+ }
181
+ },
182
+ "lightning:modal": {
183
+ "lwc": "lightning-modal",
184
+ "notes": "Modals in LWC extend LightningModal base class"
185
+ },
186
+ "lightning:tabset": {
187
+ "lwc": "lightning-tabset",
188
+ "attributes": {
189
+ "variant": "variant",
190
+ "activeTabValue": "active-tab-value"
191
+ }
192
+ },
193
+ "lightning:tab": {
194
+ "lwc": "lightning-tab",
195
+ "attributes": {
196
+ "label": "label",
197
+ "value": "value",
198
+ "iconName": "icon-name"
199
+ }
200
+ },
201
+ "lightning:accordion": {
202
+ "lwc": "lightning-accordion",
203
+ "attributes": {
204
+ "allowMultipleSectionsOpen": "allow-multiple-sections-open",
205
+ "activeSectionName": "active-section-name"
206
+ }
207
+ },
208
+ "lightning:accordionSection": {
209
+ "lwc": "lightning-accordion-section",
210
+ "attributes": {
211
+ "name": "name",
212
+ "label": "label"
213
+ }
214
+ },
215
+ "lightning:tile": {
216
+ "lwc": "lightning-tile",
217
+ "attributes": {
218
+ "label": "label",
219
+ "href": "href"
220
+ }
221
+ },
222
+ "lightning:badge": {
223
+ "lwc": "lightning-badge",
224
+ "attributes": {
225
+ "label": "label"
226
+ }
227
+ },
228
+ "lightning:progressBar": {
229
+ "lwc": "lightning-progress-bar",
230
+ "attributes": {
231
+ "value": "value",
232
+ "size": "size",
233
+ "variant": "variant"
234
+ }
235
+ },
236
+ "lightning:helptext": {
237
+ "lwc": "lightning-helptext",
238
+ "attributes": {
239
+ "content": "content",
240
+ "iconName": "icon-name"
241
+ }
242
+ },
243
+ "lightning:formattedText": {
244
+ "lwc": "lightning-formatted-text",
245
+ "attributes": {
246
+ "value": "value",
247
+ "linkify": "linkify"
248
+ }
249
+ },
250
+ "lightning:formattedNumber": {
251
+ "lwc": "lightning-formatted-number",
252
+ "attributes": {
253
+ "value": "value",
254
+ "formatStyle": "format-style",
255
+ "currencyCode": "currency-code"
256
+ }
257
+ },
258
+ "lightning:formattedDateTime": {
259
+ "lwc": "lightning-formatted-date-time",
260
+ "attributes": {
261
+ "value": "value",
262
+ "year": "year",
263
+ "month": "month",
264
+ "day": "day"
265
+ }
266
+ },
267
+ "force:recordData": {
268
+ "lwc": "@wire(getRecord)",
269
+ "notes": "Use getRecord wire adapter from lightning/uiRecordApi"
270
+ },
271
+ "force:navigateToSObject": {
272
+ "lwc": "NavigationMixin",
273
+ "notes": "Use NavigationMixin from lightning/navigation"
274
+ },
275
+ "ui:inputText": {
276
+ "lwc": "lightning-input",
277
+ "notes": "Legacy ui: namespace components should use lightning-input"
278
+ },
279
+ "ui:outputText": {
280
+ "lwc": "lightning-formatted-text",
281
+ "notes": "Legacy ui: namespace components should use lightning-formatted-*"
282
+ },
283
+ "ui:button": {
284
+ "lwc": "lightning-button",
285
+ "notes": "Legacy ui:button maps to lightning-button"
286
+ }
287
+ },
288
+ "expressions": {
289
+ "v.": {
290
+ "pattern": "\\{!v\\.(\\w+)\\}",
291
+ "replacement": "{$1}",
292
+ "notes": "View attribute reference becomes simple property reference"
293
+ },
294
+ "c.": {
295
+ "pattern": "\\{!c\\.(\\w+)\\}",
296
+ "replacement": "{$1}",
297
+ "notes": "Controller function reference becomes method reference"
298
+ },
299
+ "globalId": {
300
+ "pattern": "\\{!globalId\\}",
301
+ "replacement": "data-id",
302
+ "notes": "globalId should use data attributes or this.template.querySelector"
303
+ }
304
+ },
305
+ "attributes": {
306
+ "aura:id": {
307
+ "lwc": "data-id",
308
+ "alternativeApproach": "class or unique data attribute",
309
+ "notes": "Use this.template.querySelector('[data-id=\"name\"]') or refs"
310
+ },
311
+ "class": {
312
+ "lwc": "class",
313
+ "notes": "Class attribute works the same, but use computed getters for dynamic classes"
314
+ }
315
+ },
316
+ "serverActions": {
317
+ "pattern": "$A.enqueueAction",
318
+ "lwc": "@wire or imperative Apex",
319
+ "notes": "Server actions become wire adapters or imperative Apex calls"
320
+ }
321
+ }