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,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parser for Aura CSS style files
|
|
4
|
+
*/
|
|
5
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
6
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.parseAuraStyle = parseAuraStyle;
|
|
10
|
+
exports.convertAuraStyleToLwc = convertAuraStyleToLwc;
|
|
11
|
+
const postcss_1 = __importDefault(require("postcss"));
|
|
12
|
+
const logger_1 = require("../../utils/logger");
|
|
13
|
+
/**
|
|
14
|
+
* Check if a selector uses THIS (Aura's scoping mechanism)
|
|
15
|
+
*/
|
|
16
|
+
function usesThisSelector(selector) {
|
|
17
|
+
return selector.includes('.THIS') || selector.startsWith('.THIS');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Extract token references from CSS values
|
|
21
|
+
* Aura tokens look like: token(namespace.tokenName) or t(tokenName)
|
|
22
|
+
*/
|
|
23
|
+
function extractTokenReferences(value) {
|
|
24
|
+
const tokens = [];
|
|
25
|
+
const tokenRegex = /(?:token|t)\(([^)]+)\)/g;
|
|
26
|
+
let match;
|
|
27
|
+
while ((match = tokenRegex.exec(value)) !== null) {
|
|
28
|
+
tokens.push(match[1].trim());
|
|
29
|
+
}
|
|
30
|
+
return tokens;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Parse a CSS rule node
|
|
34
|
+
*/
|
|
35
|
+
function parseRule(rule) {
|
|
36
|
+
const declarations = [];
|
|
37
|
+
rule.walkDecls((decl) => {
|
|
38
|
+
declarations.push({
|
|
39
|
+
property: decl.prop,
|
|
40
|
+
value: decl.value,
|
|
41
|
+
important: decl.important,
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
selector: rule.selector,
|
|
46
|
+
declarations,
|
|
47
|
+
isThisScoped: usesThisSelector(rule.selector),
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Parse Aura CSS styles
|
|
52
|
+
*/
|
|
53
|
+
function parseAuraStyle(source) {
|
|
54
|
+
const result = {
|
|
55
|
+
rules: [],
|
|
56
|
+
atRules: [],
|
|
57
|
+
usesThisSelector: false,
|
|
58
|
+
usesTokens: false,
|
|
59
|
+
tokenReferences: [],
|
|
60
|
+
rawSource: source,
|
|
61
|
+
};
|
|
62
|
+
let root;
|
|
63
|
+
try {
|
|
64
|
+
root = postcss_1.default.parse(source);
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
logger_1.logger.warn(`Failed to parse CSS: ${error.message}`);
|
|
68
|
+
return result;
|
|
69
|
+
}
|
|
70
|
+
// Process all nodes
|
|
71
|
+
root.nodes?.forEach((node) => {
|
|
72
|
+
if (node.type === 'rule') {
|
|
73
|
+
const rule = parseRule(node);
|
|
74
|
+
result.rules.push(rule);
|
|
75
|
+
if (rule.isThisScoped) {
|
|
76
|
+
result.usesThisSelector = true;
|
|
77
|
+
}
|
|
78
|
+
// Check for token usage in declarations
|
|
79
|
+
for (const decl of rule.declarations) {
|
|
80
|
+
const tokens = extractTokenReferences(decl.value);
|
|
81
|
+
if (tokens.length > 0) {
|
|
82
|
+
result.usesTokens = true;
|
|
83
|
+
result.tokenReferences.push(...tokens);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
else if (node.type === 'atrule') {
|
|
88
|
+
const atRule = node;
|
|
89
|
+
const atRuleDef = {
|
|
90
|
+
name: atRule.name,
|
|
91
|
+
params: atRule.params,
|
|
92
|
+
rules: [],
|
|
93
|
+
};
|
|
94
|
+
// Process rules inside at-rules (like @media)
|
|
95
|
+
atRule.walkRules((rule) => {
|
|
96
|
+
const parsedRule = parseRule(rule);
|
|
97
|
+
atRuleDef.rules.push(parsedRule);
|
|
98
|
+
if (parsedRule.isThisScoped) {
|
|
99
|
+
result.usesThisSelector = true;
|
|
100
|
+
}
|
|
101
|
+
for (const decl of parsedRule.declarations) {
|
|
102
|
+
const tokens = extractTokenReferences(decl.value);
|
|
103
|
+
if (tokens.length > 0) {
|
|
104
|
+
result.usesTokens = true;
|
|
105
|
+
result.tokenReferences.push(...tokens);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
result.atRules.push(atRuleDef);
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
// Deduplicate token references
|
|
113
|
+
result.tokenReferences = [...new Set(result.tokenReferences)];
|
|
114
|
+
logger_1.logger.debug(`Parsed ${result.rules.length} CSS rules`);
|
|
115
|
+
logger_1.logger.debug(`Parsed ${result.atRules.length} at-rules`);
|
|
116
|
+
if (result.usesThisSelector) {
|
|
117
|
+
logger_1.logger.debug('CSS uses .THIS selector (Aura scoping)');
|
|
118
|
+
}
|
|
119
|
+
if (result.usesTokens) {
|
|
120
|
+
logger_1.logger.debug(`CSS uses ${result.tokenReferences.length} design tokens`);
|
|
121
|
+
}
|
|
122
|
+
return result;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Convert Aura CSS to LWC CSS
|
|
126
|
+
* - Removes .THIS prefix (LWC auto-scopes)
|
|
127
|
+
* - Converts token() to CSS custom properties where possible
|
|
128
|
+
*/
|
|
129
|
+
function convertAuraStyleToLwc(parsed) {
|
|
130
|
+
let css = parsed.rawSource;
|
|
131
|
+
// Remove .THIS prefix from selectors
|
|
132
|
+
// .THIS becomes :host
|
|
133
|
+
// .THIS .child becomes .child (LWC styles are scoped by default)
|
|
134
|
+
// .THIS.modifier becomes :host(.modifier)
|
|
135
|
+
// 1. Handle .THIS.modifier -> :host(.modifier)
|
|
136
|
+
css = css.replace(/\.THIS(\.[a-zA-Z0-9_-]+)/g, ':host($1)');
|
|
137
|
+
// 2. Handle .THIS .child -> .child (remove .THIS space)
|
|
138
|
+
css = css.replace(/\.THIS\s+/g, '');
|
|
139
|
+
// 3. Handle standalone .THIS -> :host
|
|
140
|
+
css = css.replace(/\.THIS(?=[^a-zA-Z0-9_-]|$)/g, ':host');
|
|
141
|
+
// Note: Token conversion is complex and may need manual attention
|
|
142
|
+
// LWC uses CSS custom properties or SLDS design tokens
|
|
143
|
+
if (parsed.usesTokens) {
|
|
144
|
+
// Add a comment about tokens
|
|
145
|
+
css =
|
|
146
|
+
`/* TODO: Convert Aura tokens to CSS custom properties or SLDS tokens */\n/* Tokens found: ${parsed.tokenReferences.join(', ')} */\n\n` +
|
|
147
|
+
css;
|
|
148
|
+
}
|
|
149
|
+
return css;
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=style-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"style-parser.js","sourceRoot":"","sources":["../../../src/parsers/aura/style-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Apex controller files (.cls)
|
|
3
|
+
* Note: This is a simplified parser that extracts key information
|
|
4
|
+
* without full Apex language parsing.
|
|
5
|
+
*/
|
|
6
|
+
export interface ApexProperty {
|
|
7
|
+
name: string;
|
|
8
|
+
type: string;
|
|
9
|
+
hasGetter: boolean;
|
|
10
|
+
hasSetter: boolean;
|
|
11
|
+
isPublic: boolean;
|
|
12
|
+
initialValue?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ApexMethod {
|
|
15
|
+
name: string;
|
|
16
|
+
returnType: string;
|
|
17
|
+
parameters: ApexParameter[];
|
|
18
|
+
isPublic: boolean;
|
|
19
|
+
isRemoteAction: boolean;
|
|
20
|
+
isAuraEnabled: boolean;
|
|
21
|
+
isCacheable: boolean;
|
|
22
|
+
body?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ApexParameter {
|
|
25
|
+
name: string;
|
|
26
|
+
type: string;
|
|
27
|
+
}
|
|
28
|
+
export interface ApexInnerClass {
|
|
29
|
+
name: string;
|
|
30
|
+
properties: ApexProperty[];
|
|
31
|
+
isWrapper: boolean;
|
|
32
|
+
}
|
|
33
|
+
export interface ParsedApexController {
|
|
34
|
+
className: string;
|
|
35
|
+
extendsClass?: string;
|
|
36
|
+
implementsInterfaces: string[];
|
|
37
|
+
properties: ApexProperty[];
|
|
38
|
+
methods: ApexMethod[];
|
|
39
|
+
innerClasses: ApexInnerClass[];
|
|
40
|
+
constructorParams: ApexParameter[];
|
|
41
|
+
hasStandardController: boolean;
|
|
42
|
+
hasStandardSetController: boolean;
|
|
43
|
+
soqlQueries: string[];
|
|
44
|
+
dmlOperations: string[];
|
|
45
|
+
rawSource: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse Apex controller file
|
|
49
|
+
*/
|
|
50
|
+
export declare function parseApexController(source: string): ParsedApexController;
|
|
51
|
+
//# sourceMappingURL=apex-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apex-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/vf/apex-parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,UAAU,EAAE,YAAY,EAAE,CAAC;IAC3B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,iBAAiB,EAAE,aAAa,EAAE,CAAC;IACnC,qBAAqB,EAAE,OAAO,CAAC;IAC/B,wBAAwB,EAAE,OAAO,CAAC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AA6PD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,oBAAoB,CA4CxE"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Parser for Apex controller files (.cls)
|
|
4
|
+
* Note: This is a simplified parser that extracts key information
|
|
5
|
+
* without full Apex language parsing.
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.parseApexController = parseApexController;
|
|
9
|
+
const logger_1 = require("../../utils/logger");
|
|
10
|
+
/**
|
|
11
|
+
* Extract class name from Apex code
|
|
12
|
+
*/
|
|
13
|
+
function extractClassName(source) {
|
|
14
|
+
const classRegex = /(?:public|private|global)\s+(?:with\s+sharing|without\s+sharing|inherited\s+sharing)?\s*(?:virtual|abstract)?\s*class\s+(\w+)/i;
|
|
15
|
+
const match = source.match(classRegex);
|
|
16
|
+
return match ? match[1] : null;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Extract extends clause
|
|
20
|
+
*/
|
|
21
|
+
function extractExtends(source) {
|
|
22
|
+
const extendsRegex = /class\s+\w+\s+extends\s+(\w+)/i;
|
|
23
|
+
const match = source.match(extendsRegex);
|
|
24
|
+
return match ? match[1] : null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract implements clause
|
|
28
|
+
*/
|
|
29
|
+
function extractImplements(source) {
|
|
30
|
+
const implementsRegex = /class\s+\w+(?:\s+extends\s+\w+)?\s+implements\s+([^{]+)/i;
|
|
31
|
+
const match = source.match(implementsRegex);
|
|
32
|
+
if (match) {
|
|
33
|
+
return match[1].split(',').map((s) => s.trim());
|
|
34
|
+
}
|
|
35
|
+
return [];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Extract properties from Apex code
|
|
39
|
+
*/
|
|
40
|
+
function extractProperties(source) {
|
|
41
|
+
const properties = [];
|
|
42
|
+
// Match property declarations
|
|
43
|
+
// Pattern: (public|private) Type propertyName { get; set; }
|
|
44
|
+
// Or: (public|private) Type propertyName;
|
|
45
|
+
const propertyRegex = /(?:public|private|protected)\s+([\w<>,\s]+?)\s+(\w+)\s*(?:\{([^}]*)\}|;)/g;
|
|
46
|
+
let match;
|
|
47
|
+
while ((match = propertyRegex.exec(source)) !== null) {
|
|
48
|
+
const fullMatch = match[0];
|
|
49
|
+
const type = match[1].trim();
|
|
50
|
+
const name = match[2];
|
|
51
|
+
const accessors = match[3] || '';
|
|
52
|
+
// Skip if this looks like a method (has parentheses after name in the original line)
|
|
53
|
+
if (fullMatch.includes('('))
|
|
54
|
+
continue;
|
|
55
|
+
// Skip common non-property keywords
|
|
56
|
+
if (['class', 'void', 'return', 'new', 'if', 'for', 'while'].includes(name))
|
|
57
|
+
continue;
|
|
58
|
+
const prop = {
|
|
59
|
+
name,
|
|
60
|
+
type,
|
|
61
|
+
hasGetter: accessors.toLowerCase().includes('get'),
|
|
62
|
+
hasSetter: accessors.toLowerCase().includes('set'),
|
|
63
|
+
isPublic: fullMatch.startsWith('public'),
|
|
64
|
+
};
|
|
65
|
+
// Check for initialization
|
|
66
|
+
const initRegex = new RegExp(`${name}\\s*=\\s*([^;{]+)`);
|
|
67
|
+
const initMatch = fullMatch.match(initRegex);
|
|
68
|
+
if (initMatch) {
|
|
69
|
+
prop.initialValue = initMatch[1].trim();
|
|
70
|
+
}
|
|
71
|
+
properties.push(prop);
|
|
72
|
+
}
|
|
73
|
+
return properties;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Extract methods from Apex code
|
|
77
|
+
*/
|
|
78
|
+
function extractMethods(source) {
|
|
79
|
+
const methods = [];
|
|
80
|
+
// Pattern for methods with annotations and modifiers
|
|
81
|
+
const methodRegex = /(@\w+(?:\([^)]*\))?[\s\n]*)*(?:public|private|protected|global)\s+(?:static\s+)?(?:(?:override|virtual|abstract)\s+)?([\w<>,\s]+?)\s+(\w+)\s*\(([^)]*)\)/g;
|
|
82
|
+
let match;
|
|
83
|
+
while ((match = methodRegex.exec(source)) !== null) {
|
|
84
|
+
const annotations = match[1] || '';
|
|
85
|
+
const returnType = match[2].trim();
|
|
86
|
+
const name = match[3];
|
|
87
|
+
const paramString = match[4];
|
|
88
|
+
// Skip constructor (when name matches class name, but we don't have class name here)
|
|
89
|
+
// We'll filter constructors separately
|
|
90
|
+
if (returnType === name)
|
|
91
|
+
continue;
|
|
92
|
+
// Parse parameters
|
|
93
|
+
const parameters = [];
|
|
94
|
+
if (paramString.trim()) {
|
|
95
|
+
const paramParts = paramString.split(',');
|
|
96
|
+
for (const part of paramParts) {
|
|
97
|
+
const trimmed = part.trim();
|
|
98
|
+
const paramMatch = trimmed.match(/([\w<>,\s]+?)\s+(\w+)$/);
|
|
99
|
+
if (paramMatch) {
|
|
100
|
+
parameters.push({
|
|
101
|
+
type: paramMatch[1].trim(),
|
|
102
|
+
name: paramMatch[2],
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const method = {
|
|
108
|
+
name,
|
|
109
|
+
returnType,
|
|
110
|
+
parameters,
|
|
111
|
+
isPublic: match[0].includes('public') || match[0].includes('global'),
|
|
112
|
+
isRemoteAction: annotations.includes('@RemoteAction'),
|
|
113
|
+
isAuraEnabled: annotations.includes('@AuraEnabled'),
|
|
114
|
+
isCacheable: annotations.includes('cacheable=true') || annotations.includes('cacheable = true'),
|
|
115
|
+
};
|
|
116
|
+
methods.push(method);
|
|
117
|
+
}
|
|
118
|
+
return methods;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Extract inner classes (often used as wrapper classes)
|
|
122
|
+
*/
|
|
123
|
+
function extractInnerClasses(source) {
|
|
124
|
+
const innerClasses = [];
|
|
125
|
+
// Simple pattern for inner class detection
|
|
126
|
+
const innerClassRegex = /(?:public|private)\s+(?:class|virtual\s+class)\s+(\w+)\s*\{([^}]+(?:\{[^}]*\}[^}]*)*)\}/g;
|
|
127
|
+
let match;
|
|
128
|
+
while ((match = innerClassRegex.exec(source)) !== null) {
|
|
129
|
+
const className = match[1];
|
|
130
|
+
const classBody = match[2];
|
|
131
|
+
// Extract properties from inner class
|
|
132
|
+
const properties = extractProperties(classBody);
|
|
133
|
+
innerClasses.push({
|
|
134
|
+
name: className,
|
|
135
|
+
properties,
|
|
136
|
+
isWrapper: properties.length > 0 && properties.every((p) => p.isPublic),
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
return innerClasses;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Extract SOQL queries
|
|
143
|
+
*/
|
|
144
|
+
function extractSoqlQueries(source) {
|
|
145
|
+
const queries = [];
|
|
146
|
+
const soqlRegex = /\[\s*(SELECT\s+[^\]]+)\]/gi;
|
|
147
|
+
let match;
|
|
148
|
+
while ((match = soqlRegex.exec(source)) !== null) {
|
|
149
|
+
queries.push(match[1].trim());
|
|
150
|
+
}
|
|
151
|
+
return queries;
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Detect DML operations
|
|
155
|
+
*/
|
|
156
|
+
function extractDmlOperations(source) {
|
|
157
|
+
const operations = [];
|
|
158
|
+
const dmlKeywords = ['insert', 'update', 'upsert', 'delete', 'undelete', 'merge'];
|
|
159
|
+
for (const keyword of dmlKeywords) {
|
|
160
|
+
const regex = new RegExp(`\\b${keyword}\\s+\\w+`, 'gi');
|
|
161
|
+
if (regex.test(source)) {
|
|
162
|
+
operations.push(keyword);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Also check for Database methods
|
|
166
|
+
const dbMethodRegex = /Database\.(insert|update|upsert|delete|undelete)/gi;
|
|
167
|
+
let match;
|
|
168
|
+
while ((match = dbMethodRegex.exec(source)) !== null) {
|
|
169
|
+
const op = match[1].toLowerCase();
|
|
170
|
+
if (!operations.includes(op)) {
|
|
171
|
+
operations.push(op);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return operations;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check for standard controller patterns
|
|
178
|
+
*/
|
|
179
|
+
function hasStandardController(source) {
|
|
180
|
+
return (source.includes('ApexPages.StandardController') ||
|
|
181
|
+
source.includes('StandardController controller'));
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Check for standard set controller patterns
|
|
185
|
+
*/
|
|
186
|
+
function hasStandardSetController(source) {
|
|
187
|
+
return (source.includes('ApexPages.StandardSetController') ||
|
|
188
|
+
source.includes('StandardSetController controller'));
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* Extract constructor parameters
|
|
192
|
+
*/
|
|
193
|
+
function extractConstructorParams(source, className) {
|
|
194
|
+
const constructorRegex = new RegExp(`(?:public|private)\\s+${className}\\s*\\(([^)]*)\\)`, 'i');
|
|
195
|
+
const match = source.match(constructorRegex);
|
|
196
|
+
if (!match || !match[1].trim())
|
|
197
|
+
return [];
|
|
198
|
+
const paramString = match[1];
|
|
199
|
+
const params = [];
|
|
200
|
+
const paramParts = paramString.split(',');
|
|
201
|
+
for (const part of paramParts) {
|
|
202
|
+
const trimmed = part.trim();
|
|
203
|
+
const paramMatch = trimmed.match(/([\w<>,.\s]+?)\s+(\w+)$/);
|
|
204
|
+
if (paramMatch) {
|
|
205
|
+
params.push({
|
|
206
|
+
type: paramMatch[1].trim(),
|
|
207
|
+
name: paramMatch[2],
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return params;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Parse Apex controller file
|
|
215
|
+
*/
|
|
216
|
+
function parseApexController(source) {
|
|
217
|
+
const className = extractClassName(source);
|
|
218
|
+
if (!className) {
|
|
219
|
+
logger_1.logger.warn('Could not extract class name from Apex source');
|
|
220
|
+
}
|
|
221
|
+
const result = {
|
|
222
|
+
className: className || 'UnknownController',
|
|
223
|
+
extendsClass: extractExtends(source) || undefined,
|
|
224
|
+
implementsInterfaces: extractImplements(source),
|
|
225
|
+
properties: extractProperties(source),
|
|
226
|
+
methods: extractMethods(source),
|
|
227
|
+
innerClasses: extractInnerClasses(source),
|
|
228
|
+
constructorParams: className ? extractConstructorParams(source, className) : [],
|
|
229
|
+
hasStandardController: hasStandardController(source),
|
|
230
|
+
hasStandardSetController: hasStandardSetController(source),
|
|
231
|
+
soqlQueries: extractSoqlQueries(source),
|
|
232
|
+
dmlOperations: extractDmlOperations(source),
|
|
233
|
+
rawSource: source,
|
|
234
|
+
};
|
|
235
|
+
logger_1.logger.debug(`Parsed Apex class: ${result.className}`);
|
|
236
|
+
logger_1.logger.debug(`Found ${result.properties.length} properties`);
|
|
237
|
+
logger_1.logger.debug(`Found ${result.methods.length} methods`);
|
|
238
|
+
logger_1.logger.debug(`Found ${result.innerClasses.length} inner classes`);
|
|
239
|
+
logger_1.logger.debug(`Found ${result.soqlQueries.length} SOQL queries`);
|
|
240
|
+
// Log methods that are AuraEnabled or RemoteAction
|
|
241
|
+
const remoteActions = result.methods.filter((m) => m.isRemoteAction);
|
|
242
|
+
const auraEnabled = result.methods.filter((m) => m.isAuraEnabled);
|
|
243
|
+
if (remoteActions.length > 0) {
|
|
244
|
+
logger_1.logger.debug(`RemoteAction methods: ${remoteActions.map((m) => m.name).join(', ')}`);
|
|
245
|
+
}
|
|
246
|
+
if (auraEnabled.length > 0) {
|
|
247
|
+
logger_1.logger.debug(`AuraEnabled methods: ${auraEnabled.map((m) => m.name).join(', ')}`);
|
|
248
|
+
}
|
|
249
|
+
return result;
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=apex-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apex-parser.js","sourceRoot":"","sources":["../../../src/parsers/vf/apex-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parser for Visualforce page markup (.page files)
|
|
3
|
+
*/
|
|
4
|
+
import { Node } from 'domhandler';
|
|
5
|
+
export interface VfPageAttributes {
|
|
6
|
+
controller?: string;
|
|
7
|
+
extensions?: string[];
|
|
8
|
+
standardController?: string;
|
|
9
|
+
recordSetVar?: string;
|
|
10
|
+
action?: string;
|
|
11
|
+
tabStyle?: string;
|
|
12
|
+
sidebar?: boolean;
|
|
13
|
+
showHeader?: boolean;
|
|
14
|
+
lightningStylesheets?: boolean;
|
|
15
|
+
docType?: string;
|
|
16
|
+
renderAs?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface VfComponent {
|
|
19
|
+
name: string;
|
|
20
|
+
attributes: Record<string, string>;
|
|
21
|
+
children: VfComponent[];
|
|
22
|
+
textContent?: string;
|
|
23
|
+
location: {
|
|
24
|
+
line?: number;
|
|
25
|
+
column?: number;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export interface VfExpression {
|
|
29
|
+
original: string;
|
|
30
|
+
type: 'controller' | 'field' | 'global' | 'label' | 'resource' | 'action' | 'other';
|
|
31
|
+
reference: string;
|
|
32
|
+
objectPath?: string[];
|
|
33
|
+
}
|
|
34
|
+
export interface VfActionFunction {
|
|
35
|
+
name: string;
|
|
36
|
+
action: string;
|
|
37
|
+
rerender?: string;
|
|
38
|
+
oncomplete?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface VfRemoteAction {
|
|
41
|
+
controller: string;
|
|
42
|
+
method: string;
|
|
43
|
+
}
|
|
44
|
+
export interface ParsedVfPage {
|
|
45
|
+
pageName: string;
|
|
46
|
+
pageAttributes: VfPageAttributes;
|
|
47
|
+
components: VfComponent[];
|
|
48
|
+
expressions: VfExpression[];
|
|
49
|
+
actionFunctions: VfActionFunction[];
|
|
50
|
+
remoteActions: VfRemoteAction[];
|
|
51
|
+
rerenderedSections: string[];
|
|
52
|
+
includedScripts: string[];
|
|
53
|
+
includedStyles: string[];
|
|
54
|
+
customJavaScript: string[];
|
|
55
|
+
body: Node[];
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Parse Visualforce page markup
|
|
59
|
+
*/
|
|
60
|
+
export declare function parseVfPage(markup: string, pageName: string): ParsedVfPage;
|
|
61
|
+
//# sourceMappingURL=page-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"page-parser.d.ts","sourceRoot":"","sources":["../../../src/parsers/vf/page-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAuB,IAAI,EAAQ,MAAM,YAAY,CAAC;AAG7D,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpF,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,gBAAgB,CAAC;IACjC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,WAAW,EAAE,YAAY,EAAE,CAAC;IAC5B,eAAe,EAAE,gBAAgB,EAAE,CAAC;IACpC,aAAa,EAAE,cAAc,EAAE,CAAC;IAChC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,IAAI,EAAE,IAAI,EAAE,CAAC;CACd;AAmQD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,YAAY,CA2I1E"}
|