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.
- package/LICENSE +21 -0
- package/README.md +719 -0
- package/dist/cli/commands/aura.d.ts +6 -0
- package/dist/cli/commands/aura.d.ts.map +1 -0
- package/dist/cli/commands/aura.js +225 -0
- package/dist/cli/commands/aura.js.map +1 -0
- package/dist/cli/commands/vf.d.ts +6 -0
- package/dist/cli/commands/vf.d.ts.map +1 -0
- package/dist/cli/commands/vf.js +218 -0
- package/dist/cli/commands/vf.js.map +1 -0
- package/dist/cli/interactive.d.ts +20 -0
- package/dist/cli/interactive.d.ts.map +1 -0
- package/dist/cli/interactive.js +577 -0
- package/dist/cli/interactive.js.map +1 -0
- package/dist/cli/options.d.ts +21 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +24 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/generators/full-conversion.d.ts +41 -0
- package/dist/generators/full-conversion.d.ts.map +1 -0
- package/dist/generators/full-conversion.js +538 -0
- package/dist/generators/full-conversion.js.map +1 -0
- package/dist/generators/scaffolding.d.ts +40 -0
- package/dist/generators/scaffolding.d.ts.map +1 -0
- package/dist/generators/scaffolding.js +716 -0
- package/dist/generators/scaffolding.js.map +1 -0
- package/dist/generators/test-comparison.d.ts +47 -0
- package/dist/generators/test-comparison.d.ts.map +1 -0
- package/dist/generators/test-comparison.js +855 -0
- package/dist/generators/test-comparison.js.map +1 -0
- package/dist/generators/test-generator.d.ts +27 -0
- package/dist/generators/test-generator.d.ts.map +1 -0
- package/dist/generators/test-generator.js +385 -0
- package/dist/generators/test-generator.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +226 -0
- package/dist/index.js.map +1 -0
- package/dist/mappings/aura-to-lwc.json +321 -0
- package/dist/mappings/vf-to-lwc.json +354 -0
- package/dist/parsers/aura/controller-parser.d.ts +36 -0
- package/dist/parsers/aura/controller-parser.d.ts.map +1 -0
- package/dist/parsers/aura/controller-parser.js +269 -0
- package/dist/parsers/aura/controller-parser.js.map +1 -0
- package/dist/parsers/aura/helper-parser.d.ts +21 -0
- package/dist/parsers/aura/helper-parser.d.ts.map +1 -0
- package/dist/parsers/aura/helper-parser.js +173 -0
- package/dist/parsers/aura/helper-parser.js.map +1 -0
- package/dist/parsers/aura/markup-parser.d.ts +59 -0
- package/dist/parsers/aura/markup-parser.d.ts.map +1 -0
- package/dist/parsers/aura/markup-parser.js +279 -0
- package/dist/parsers/aura/markup-parser.js.map +1 -0
- package/dist/parsers/aura/style-parser.d.ts +37 -0
- package/dist/parsers/aura/style-parser.d.ts.map +1 -0
- package/dist/parsers/aura/style-parser.js +151 -0
- package/dist/parsers/aura/style-parser.js.map +1 -0
- package/dist/parsers/vf/apex-parser.d.ts +51 -0
- package/dist/parsers/vf/apex-parser.d.ts.map +1 -0
- package/dist/parsers/vf/apex-parser.js +251 -0
- package/dist/parsers/vf/apex-parser.js.map +1 -0
- package/dist/parsers/vf/page-parser.d.ts +61 -0
- package/dist/parsers/vf/page-parser.d.ts.map +1 -0
- package/dist/parsers/vf/page-parser.js +403 -0
- package/dist/parsers/vf/page-parser.js.map +1 -0
- package/dist/transformers/aura-to-lwc/controller.d.ts +36 -0
- package/dist/transformers/aura-to-lwc/controller.d.ts.map +1 -0
- package/dist/transformers/aura-to-lwc/controller.js +372 -0
- package/dist/transformers/aura-to-lwc/controller.js.map +1 -0
- package/dist/transformers/aura-to-lwc/events.d.ts +47 -0
- package/dist/transformers/aura-to-lwc/events.d.ts.map +1 -0
- package/dist/transformers/aura-to-lwc/events.js +262 -0
- package/dist/transformers/aura-to-lwc/events.js.map +1 -0
- package/dist/transformers/aura-to-lwc/markup.d.ts +51 -0
- package/dist/transformers/aura-to-lwc/markup.d.ts.map +1 -0
- package/dist/transformers/aura-to-lwc/markup.js +465 -0
- package/dist/transformers/aura-to-lwc/markup.js.map +1 -0
- package/dist/transformers/vf-to-lwc/components.d.ts +40 -0
- package/dist/transformers/vf-to-lwc/components.d.ts.map +1 -0
- package/dist/transformers/vf-to-lwc/components.js +374 -0
- package/dist/transformers/vf-to-lwc/components.js.map +1 -0
- package/dist/transformers/vf-to-lwc/data-binding.d.ts +53 -0
- package/dist/transformers/vf-to-lwc/data-binding.d.ts.map +1 -0
- package/dist/transformers/vf-to-lwc/data-binding.js +660 -0
- package/dist/transformers/vf-to-lwc/data-binding.js.map +1 -0
- package/dist/transformers/vf-to-lwc/markup.d.ts +44 -0
- package/dist/transformers/vf-to-lwc/markup.d.ts.map +1 -0
- package/dist/transformers/vf-to-lwc/markup.js +816 -0
- package/dist/transformers/vf-to-lwc/markup.js.map +1 -0
- package/dist/utils/confidence-scorer.d.ts +100 -0
- package/dist/utils/confidence-scorer.d.ts.map +1 -0
- package/dist/utils/confidence-scorer.js +358 -0
- package/dist/utils/confidence-scorer.js.map +1 -0
- package/dist/utils/file-io.d.ts +62 -0
- package/dist/utils/file-io.d.ts.map +1 -0
- package/dist/utils/file-io.js +248 -0
- package/dist/utils/file-io.js.map +1 -0
- package/dist/utils/logger.d.ts +34 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +130 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/open-folder.d.ts +9 -0
- package/dist/utils/open-folder.d.ts.map +1 -0
- package/dist/utils/open-folder.js +76 -0
- package/dist/utils/open-folder.js.map +1 -0
- package/dist/utils/path-resolver.d.ts +29 -0
- package/dist/utils/path-resolver.d.ts.map +1 -0
- package/dist/utils/path-resolver.js +240 -0
- package/dist/utils/path-resolver.js.map +1 -0
- package/dist/utils/session-store.d.ts +158 -0
- package/dist/utils/session-store.d.ts.map +1 -0
- package/dist/utils/session-store.js +518 -0
- package/dist/utils/session-store.js.map +1 -0
- package/dist/utils/vf-controller-resolver.d.ts +36 -0
- package/dist/utils/vf-controller-resolver.d.ts.map +1 -0
- package/dist/utils/vf-controller-resolver.js +162 -0
- package/dist/utils/vf-controller-resolver.js.map +1 -0
- 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
|
+
}
|