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
|
@@ -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, '&')
|
|
49
|
+
.replace(/</g, '<')
|
|
50
|
+
.replace(/>/g, '>')
|
|
51
|
+
.replace(/"/g, '"')
|
|
52
|
+
.replace(/'/g, ''');
|
|
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":";AAAA;;GAEG;;AAqJH,gEA8JC;AAKD,4DA8WC;AAjqBD,+DAAsF;AAGtF,+DAAyE;AACzE,uEAAiF;AACjF,+DAA+F;AAC/F,6DAAqE;AACrE,yEAAiF;AACjF,qDAAuG;AACvG,8CAAsE;AACtE,4CAAyC;AACzC,kEASoC;AAwBpC;;GAEG;AACH,SAAS,eAAe,CACtB,cAAsB,EACtB,OAMC;IAED,MAAM,EACJ,UAAU,GAAG,MAAM,EACnB,SAAS,GAAG,IAAI,EAChB,OAAO,GAAG,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,EAChF,WAAW,EACX,WAAW,GACZ,GAAG,OAAO,IAAI,EAAE,CAAC;IAElB,IAAI,GAAG,GAAG;;kBAEM,UAAU;iBACX,SAAS,cAAc,CAAC;IAEvC,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,IAAI,sBAAsB,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC;IACtE,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,GAAG,IAAI,sBAAsB,SAAS,CAAC,WAAW,CAAC,gBAAgB,CAAC;IACtE,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,GAAG,IAAI,iBAAiB,CAAC;QACzB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,GAAG,IAAI,qBAAqB,MAAM,WAAW,CAAC;QAChD,CAAC;QACD,GAAG,IAAI,kBAAkB,CAAC;IAC5B,CAAC;IAED,GAAG,IAAI,iCAAiC,CAAC;IAEzC,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,GAAW;IAC5B,OAAO,GAAG;SACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,6BAA6B,CAAC,IAAY;IACjD,uCAAuC;IACvC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,8DAA8D,CAAC,CAAC;IAC/F,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,CAAC;IAED,8BAA8B;IAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACpD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,EAAU,EAAE,WAAyB;IAC9D,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,+CAA+C;IAC/C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,aAAa,GAAG;;EAExB,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC9F,CAAC;QACL,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;IAClC,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAgB,0BAA0B,CACxC,MAAwB,EACxB,UAAiC,EACjC,MAAyB,EACzB,KAAuB;IAEvB,MAAM,OAAO,GAAG,IAAA,mBAAS,EAAC,MAAM,CAAC,aAAa,CAAC,CAAC;IAChD,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,IAAA,4BAAmB,EAAC,MAAM,CAAC,CAAC;IACtD,KAAK,MAAM,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,kCAAkC;IAClC,MAAM,qBAAqB,GAAG,IAAA,oCAAuB,EACnD,MAAM,EACN,UAAU,EACV,MAAM,EACN,iBAAiB,CAAC,eAAe,CAClC,CAAC;IACF,KAAK,MAAM,OAAO,IAAI,qBAAqB,CAAC,QAAQ,EAAE,CAAC;QACrD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;QAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CACpE,CAAC;QACF,MAAM,cAAc,GAAG,IAAA,2BAAkB,EAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QAEjE,KAAK,MAAM,OAAO,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC9C,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,cAAc,CAAC,IAAI,CAAC,QAAQ;aACzC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IACE,OAAO,CAAC,IAAI,KAAK,MAAM;YACvB,OAAO,CAAC,IAAI,KAAK,QAAQ;YACzB,OAAO,CAAC,IAAI,KAAK,aAAa;YAC9B,OAAO,CAAC,IAAI,KAAK,SAAS,EAC1B,CAAC;YACD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,8BAAqB,EAAC,OAAO,CAAC,CAAC;YACpD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,WAAW,CAAC,IAAI,CAAC;oBACf,IAAI,EAAE,QAAQ;oBACd,QAAQ,EAAE,eAAe;oBACzB,OAAO,EAAE,OAAO;iBACjB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,IAAI,EAAE,GAAG,qBAAqB,CAAC,EAAE,CAAC;IAClC,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,CAAC;IAEnF,gBAAgB;IAChB,IAAI,GAAuB,CAAC;IAC5B,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,GAAG,IAAA,oCAAqB,EAAC,KAAK,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,gBAAgB,EAAE,CAAC;YAC3B,KAAK,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACrB,WAAW,CAAC,IAAI,CAAC;gBACf,IAAI,EAAE,MAAM;gBACZ,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,uBAAuB,KAAK,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAClE,UAAU,EAAE,wDAAwD;aACrE,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,6CAA6C;IAC7C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAC3D,OAAO,CAAC,IAAI,CAAC,uBAAuB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC;YAC5E,KAAK,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;QACtG,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,EAAE,CAAC;YACnE,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;QACjF,CAAC;QACD,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC,EAAE,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE;QACpC,WAAW,EAAE,8BAA8B,MAAM,CAAC,aAAa,EAAE;QACjE,OAAO;QACP,WAAW,EAAE,MAAM,CAAC,aAAa;KAClC,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,aAAa,OAAO,OAAO,EAAE,CAAC,CAAC;IAC/D,IAAI,qBAAqB,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,2BAA2B,qBAAqB,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,iBAAiB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,8BAA8B,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,iCAAiC,OAAO,EAAE,CAAC,CAAC;IACzD,eAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,oBAAoB,CAAC,CAAC;IAExD,kEAAkE;IAClE,MAAM,UAAU,GAAyB;QACvC,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,EAAE;QACX,OAAO,EAAE,gEAAgE;QACzE,SAAS,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;KAC1E,CAAC;IAEF,mCAAmC;IACnC,MAAM,KAAK,GAAG,IAAA,uCAAsB,EAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,CAAC,CAAC;IAC5E,MAAM,YAAY,GAAG,IAAA,6CAA4B,EAAC,MAAM,CAAC,aAAa,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAE7F,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,iBAAiB,CAAC,IAAI;YAC5B,EAAE;YACF,GAAG;YACH,IAAI;SACL;QACD,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/E,WAAW;QACX,UAAU;QACV,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CACtC,MAAoB,EACpB,cAAqC;IAErC,MAAM,OAAO,GAAG,IAAA,mBAAS,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,mBAAmB;IACnB,MAAM,iBAAiB,GAAG,IAAA,0BAAiB,EAAC,MAAM,CAAC,CAAC;IACpD,KAAK,MAAM,OAAO,IAAI,iBAAiB,CAAC,QAAQ,EAAE,CAAC;QACjD,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,eAAe;YACzB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,6BAA6B;IAC7B,MAAM,UAAU,GAAG,IAAA,sCAAuB,EAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACnE,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QAC1C,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,aAAa;YACvB,OAAO,EAAE,OAAO;SACjB,CAAC,CAAC;IACL,CAAC;IAED,+BAA+B;IAC/B,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IAEjD,uBAAuB;IACvB,MAAM,cAAc,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5D,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAA,iDAA6B,EAAC,cAAc,CAAC,CAAC,CAAC;IAEzE,wBAAwB;IACxB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC9D,iBAAiB,CAAC,IAAI,CAAC,GAAG,IAAA,kDAA8B,EAAC,WAAW,CAAC,CAAC,CAAC;IAEvE,0BAA0B;IAC1B,iBAAiB,CAAC,IAAI,CACpB,GAAG,IAAA,kDAA8B,EAAC;QAChC,eAAe,EAAE,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;QACvD,iBAAiB,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAChD,gBAAgB,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;QACjD,kBAAkB,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QACrD,yBAAyB,EAAE,MAAM,CAAC,eAAe,CAAC,MAAM,CACtD,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,IAAI,EAAE,CAAC,UAAU,CACrC,CAAC,MAAM;QACR,gBAAgB,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CACtC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,oBAAoB,CACrD;KACF,CAAC,CACH,CAAC;IAEF,6BAA6B;IAC7B,IAAI,cAAc,EAAE,CAAC;QACnB,iBAAiB,CAAC,IAAI,CACpB,GAAG,IAAA,2CAAuB,EAAC;YACzB,YAAY,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM;YAC3C,kBAAkB,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,MAAM;YAChF,mBAAmB,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM;YAClF,cAAc,EAAE,cAAc,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;YACrD,gBAAgB,EAAE,cAAc,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;YACzD,mBAAmB,EAAE,IAAI;SAC1B,CAAC,CACH,CAAC;IACJ,CAAC;SAAM,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QAC5C,yCAAyC;QACzC,iBAAiB,CAAC,IAAI,CACpB,GAAG,IAAA,2CAAuB,EAAC;YACzB,YAAY,EAAE,CAAC;YACf,kBAAkB,EAAE,CAAC;YACrB,mBAAmB,EAAE,CAAC;YACtB,cAAc,EAAE,KAAK;YACrB,gBAAgB,EAAE,KAAK;YACvB,mBAAmB,EAAE,KAAK;SAC3B,CAAC,CACH,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAA,uCAAmB,EAAC,iBAAiB,CAAC,CAAC;IAE1D,oBAAoB;IACpB,MAAM,SAAS,GAAG,IAAA,sBAAY,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,WAAW,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACzC,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC3B,CAAC;IACD,mCAAmC;IACnC,MAAM,WAAW,GAAG,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC;IAC7D,IAAI,WAAW,EAAE,CAAC;QAChB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;IAED,6DAA6D;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;IACnD,MAAM,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACrD,MAAM,mBAAmB,GAAG,SAAS,IAAI,UAAU,CAAC;IAEpD,mCAAmC;IACnC,MAAM,cAAc,GAA8C,EAAE,CAAC;IACrE,MAAM,eAAe,GAA8C,EAAE,CAAC;IAEtE,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,6BAA6B,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI,MAAM,EAAE,CAAC;YACX,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QAC5C,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,MAAM,EAAE,CAAC;YACX,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,IAAI,EAAE,GAAG,YAAY,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC;IAE9D,8CAA8C;IAC9C,IAAI,mBAAmB,EAAE,CAAC;QACxB,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,SAAS;YAAE,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,IAAI,UAAU;YAAE,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACjD,EAAE,IAAI,YAAY,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,+CAA+C,CAAC;IAC5F,CAAC;IAED,8BAA8B;IAC9B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAC;IAC1C,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,cAAc,EAAE,GAAG,eAAe,CAAC,EAAE,CAAC;QAC1D,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACxC,CAAC;IACD,KAAK,MAAM,YAAY,IAAI,eAAe,EAAE,CAAC;QAC3C,EAAE,IAAI,UAAU,YAAY,0CAA0C,YAAY,MAAM,CAAC;IAC3F,CAAC;IAED,cAAc;IACd,KAAK,MAAM,GAAG,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;QACrC,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,GAAG,GAAG,IAAI,CAAC;QACnB,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,IACE,iBAAiB,CAAC,cAAc,CAAC,QAAQ,CAAC,4BAA4B,CAAC;QACvE,iBAAiB,CAAC,cAAc,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAClE,CAAC;QACD,EAAE,IAAI,iDAAiD,CAAC;QACxD,EAAE,IAAI,wEAAwE,CAAC;IACjF,CAAC;IAED,+DAA+D;IAC/D,EAAE,IAAI,sEAAsE,CAAC;IAE7E,EAAE,IAAI,0BAA0B,SAAS,+BAA+B,CAAC;IAEzE,6CAA6C;IAC7C,IAAI,mBAAmB,EAAE,CAAC;QACxB,EAAE,IAAI,qDAAqD,CAAC;QAC5D,EAAE,IAAI,mCAAmC,CAAC;IAC5C,CAAC;IAED,sCAAsC;IACtC,IAAI,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAC7C,EAAE,IAAI,sBAAsB,CAAC;QAC7B,EAAE,IAAI,6BAA6B,MAAM,CAAC,cAAc,CAAC,kBAAkB,QAAQ,CAAC;QACpF,KAAK,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,iBAAiB;IACjB,IAAI,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,EAAE,IAAI,OAAO,IAAI,IAAI,CAAC;YACxB,CAAC;YACD,EAAE,IAAI,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,IAAI,iBAAiB,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,EAAE,IAAI,0DAA0D,CAAC;QACjE,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,oBAAoB,EAAE,CAAC;YAC1D,EAAE,IAAI,OAAO,IAAI,CAAC,IAAI,4BAA4B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAC/E,CAAC;QACD,EAAE,IAAI,IAAI,CAAC;IACb,CAAC;IAED,oBAAoB;IACpB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzE,EAAE,IAAI,4BAA4B,CAAC;IACrC,CAAC;IAED,wBAAwB;IACxB,IAAI,UAAU,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,gBAAgB,EAAE,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,EAAE,IAAI,OAAO,IAAI,IAAI,CAAC;YACxB,CAAC;YACD,EAAE,IAAI,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED,uEAAuE;IACvE,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,EAAE,IAAI,wDAAwD,CAAC;QAC/D,KAAK,MAAM,OAAO,IAAI,iBAAiB,CAAC,gBAAgB,EAAE,CAAC;YACzD,EAAE,IAAI,WAAW,CAAC;YAClB,EAAE,IAAI,+BAA+B,OAAO,CAAC,QAAQ,KAAK,CAAC;YAC3D,EAAE,IAAI,WAAW,CAAC;YAClB,EAAE,IAAI,WAAW,OAAO,CAAC,UAAU,QAAQ,CAAC;YAC5C,EAAE,IAAI,WAAW,OAAO,CAAC,cAAc,IAAI,CAAC;YAC5C,EAAE,IAAI,WAAW,CAAC;QACpB,CAAC;IACH,CAAC;IAED,2CAA2C;IAC3C,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QACjC,EAAE,IAAI,8DAA8D,CAAC;QACrE,EAAE,IAAI,6BAA6B,CAAC;QACpC,EAAE,IAAI,kCAAkC,CAAC;QACzC,EAAE,IAAI,WAAW,CAAC;QAClB,EAAE,IAAI,gCAAgC,CAAC;QACvC,EAAE,IAAI,kCAAkC,CAAC;QACzC,EAAE,IAAI,iBAAiB,CAAC;QACxB,EAAE,IAAI,gDAAgD,MAAM,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC;QACvF,EAAE,IAAI,uDAAuD,CAAC;QAC9D,EAAE,IAAI,6BAA6B,CAAC;QACpC,EAAE,IAAI,wCAAwC,CAAC;QAC/C,EAAE,IAAI,uBAAuB,CAAC;QAC9B,EAAE,IAAI,uCAAuC,CAAC;QAC9C,EAAE,IAAI,aAAa,CAAC;QACpB,EAAE,IAAI,WAAW,CAAC;IACpB,CAAC;IAED,oDAAoD;IACpD,IAAI,mBAAmB,EAAE,CAAC;QACxB,EAAE,IAAI,iDAAiD,CAAC;QACxD,EAAE,IAAI,4BAA4B,CAAC;QACnC,EAAE,IAAI,8CAA8C,CAAC;QACrD,EAAE,IAAI,2CAA2C,CAAC;QAElD,2BAA2B;QAC3B,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,EAAE,IAAI,+BAA+B,CAAC;YACtC,EAAE,IAAI,yBAAyB,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,cAAc,EAAE,CAAC;gBACjC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI;oBAC3B,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,gBAAgB,GAAG,CAAC,IAAI,GAAG;oBAChD,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,UAAU,CAAC;gBAClC,EAAE,IAAI,+BAA+B,YAAY,MAAM,CAAC;YAC1D,CAAC;YACD,EAAE,IAAI,cAAc,CAAC;YACrB,EAAE,IAAI,6BAA6B,CAAC;YACpC,EAAE,IAAI,iDAAiD,CAAC;YACxD,EAAE,IAAI,kBAAkB,CAAC;YACzB,EAAE,IAAI,iCAAiC,CAAC;YACxC,EAAE,IAAI,kEAAkE,CAAC;YACzE,EAAE,IAAI,mBAAmB,CAAC;QAC5B,CAAC;QAED,4BAA4B;QAC5B,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,EAAE,IAAI,6BAA6B,CAAC;YACpC,EAAE,IAAI,yBAAyB,CAAC;YAChC,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;gBAClC,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI;oBAC3B,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,gBAAgB,GAAG,CAAC,IAAI,GAAG;oBAChD,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,UAAU,CAAC;gBAClC,EAAE,IAAI,gCAAgC,YAAY,MAAM,CAAC;YAC3D,CAAC;YACD,EAAE,IAAI,cAAc,CAAC;YACrB,EAAE,IAAI,6BAA6B,CAAC;YACpC,EAAE,IAAI,8EAA8E,CAAC;YACrF,EAAE,IAAI,kBAAkB,CAAC;YACzB,EAAE,IAAI,iCAAiC,CAAC;YACxC,EAAE,IAAI,mEAAmE,CAAC;YAC1E,EAAE,IAAI,mBAAmB,CAAC;QAC5B,CAAC;QAED,EAAE,IAAI,WAAW,CAAC;IACpB,CAAC;IAED,cAAc;IACd,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,KAAK,MAAM,MAAM,IAAI,UAAU,CAAC,OAAO,EAAE,CAAC;YACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,EAAE,IAAI,OAAO,IAAI,IAAI,CAAC;YACxB,CAAC;YACD,EAAE,IAAI,IAAI,CAAC;QACb,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,EAAE,IAAI,4BAA4B,CAAC;IACnC,EAAE,IAAI,2CAA2C,CAAC;IAClD,EAAE,IAAI,+BAA+B,CAAC;IACtC,EAAE,IAAI,oCAAoC,CAAC;IAC3C,EAAE,IAAI,mCAAmC,CAAC;IAC1C,EAAE,IAAI,2FAA2F,CAAC;IAClG,EAAE,IAAI,oCAAoC,CAAC;IAC3C,EAAE,IAAI,kBAAkB,CAAC;IACzB,EAAE,IAAI,cAAc,CAAC;IACrB,EAAE,IAAI,SAAS,CAAC;IAEhB,EAAE,IAAI,KAAK,CAAC;IAEZ,sBAAsB;IACtB,EAAE,GAAG,iBAAiB,CAAC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,eAAe,CAAC,CAAC,CAAC;IAEtF,oBAAoB;IACpB,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,MAAM,CAAC,cAAc,CAAC,kBAAkB,EAAE,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,oBAAoB,EAAE,qBAAqB,CAAC,CAAC;IAE1D,oBAAoB;IACpB,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,EAAE;QACpC,WAAW,EAAE,iCAAiC,MAAM,CAAC,QAAQ,EAAE;QAC/D,OAAO;QACP,WAAW,EAAE,MAAM,CAAC,QAAQ;KAC7B,CAAC,CAAC;IAEH,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,QAAQ,OAAO,OAAO,EAAE,CAAC,CAAC;IACrD,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,sBAAsB,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,IAAI,iBAAiB,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,8BAA8B,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,iCAAiC,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,2BAA2B,cAAc,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1H,CAAC;IAED,eAAM,CAAC,KAAK,CAAC,oCAAoC,OAAO,EAAE,CAAC,CAAC;IAC5D,eAAM,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,MAAM,oBAAoB,CAAC,CAAC;IACxD,eAAM,CAAC,KAAK,CAAC,eAAe,IAAA,yCAAqB,EAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IAEjE,OAAO;QACL,MAAM,EAAE;YACN,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,iBAAiB,CAAC,IAAI;YAC5B,EAAE;YACF,IAAI;SACL;QACD,KAAK;QACL,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/E,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|