lwc-convert 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +719 -0
  3. package/dist/cli/commands/aura.d.ts +6 -0
  4. package/dist/cli/commands/aura.d.ts.map +1 -0
  5. package/dist/cli/commands/aura.js +225 -0
  6. package/dist/cli/commands/aura.js.map +1 -0
  7. package/dist/cli/commands/vf.d.ts +6 -0
  8. package/dist/cli/commands/vf.d.ts.map +1 -0
  9. package/dist/cli/commands/vf.js +218 -0
  10. package/dist/cli/commands/vf.js.map +1 -0
  11. package/dist/cli/interactive.d.ts +20 -0
  12. package/dist/cli/interactive.d.ts.map +1 -0
  13. package/dist/cli/interactive.js +577 -0
  14. package/dist/cli/interactive.js.map +1 -0
  15. package/dist/cli/options.d.ts +21 -0
  16. package/dist/cli/options.d.ts.map +1 -0
  17. package/dist/cli/options.js +24 -0
  18. package/dist/cli/options.js.map +1 -0
  19. package/dist/generators/full-conversion.d.ts +41 -0
  20. package/dist/generators/full-conversion.d.ts.map +1 -0
  21. package/dist/generators/full-conversion.js +538 -0
  22. package/dist/generators/full-conversion.js.map +1 -0
  23. package/dist/generators/scaffolding.d.ts +40 -0
  24. package/dist/generators/scaffolding.d.ts.map +1 -0
  25. package/dist/generators/scaffolding.js +716 -0
  26. package/dist/generators/scaffolding.js.map +1 -0
  27. package/dist/generators/test-comparison.d.ts +47 -0
  28. package/dist/generators/test-comparison.d.ts.map +1 -0
  29. package/dist/generators/test-comparison.js +855 -0
  30. package/dist/generators/test-comparison.js.map +1 -0
  31. package/dist/generators/test-generator.d.ts +27 -0
  32. package/dist/generators/test-generator.d.ts.map +1 -0
  33. package/dist/generators/test-generator.js +385 -0
  34. package/dist/generators/test-generator.js.map +1 -0
  35. package/dist/index.d.ts +6 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +226 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/mappings/aura-to-lwc.json +321 -0
  40. package/dist/mappings/vf-to-lwc.json +354 -0
  41. package/dist/parsers/aura/controller-parser.d.ts +36 -0
  42. package/dist/parsers/aura/controller-parser.d.ts.map +1 -0
  43. package/dist/parsers/aura/controller-parser.js +269 -0
  44. package/dist/parsers/aura/controller-parser.js.map +1 -0
  45. package/dist/parsers/aura/helper-parser.d.ts +21 -0
  46. package/dist/parsers/aura/helper-parser.d.ts.map +1 -0
  47. package/dist/parsers/aura/helper-parser.js +173 -0
  48. package/dist/parsers/aura/helper-parser.js.map +1 -0
  49. package/dist/parsers/aura/markup-parser.d.ts +59 -0
  50. package/dist/parsers/aura/markup-parser.d.ts.map +1 -0
  51. package/dist/parsers/aura/markup-parser.js +279 -0
  52. package/dist/parsers/aura/markup-parser.js.map +1 -0
  53. package/dist/parsers/aura/style-parser.d.ts +37 -0
  54. package/dist/parsers/aura/style-parser.d.ts.map +1 -0
  55. package/dist/parsers/aura/style-parser.js +151 -0
  56. package/dist/parsers/aura/style-parser.js.map +1 -0
  57. package/dist/parsers/vf/apex-parser.d.ts +51 -0
  58. package/dist/parsers/vf/apex-parser.d.ts.map +1 -0
  59. package/dist/parsers/vf/apex-parser.js +251 -0
  60. package/dist/parsers/vf/apex-parser.js.map +1 -0
  61. package/dist/parsers/vf/page-parser.d.ts +61 -0
  62. package/dist/parsers/vf/page-parser.d.ts.map +1 -0
  63. package/dist/parsers/vf/page-parser.js +403 -0
  64. package/dist/parsers/vf/page-parser.js.map +1 -0
  65. package/dist/transformers/aura-to-lwc/controller.d.ts +36 -0
  66. package/dist/transformers/aura-to-lwc/controller.d.ts.map +1 -0
  67. package/dist/transformers/aura-to-lwc/controller.js +372 -0
  68. package/dist/transformers/aura-to-lwc/controller.js.map +1 -0
  69. package/dist/transformers/aura-to-lwc/events.d.ts +47 -0
  70. package/dist/transformers/aura-to-lwc/events.d.ts.map +1 -0
  71. package/dist/transformers/aura-to-lwc/events.js +262 -0
  72. package/dist/transformers/aura-to-lwc/events.js.map +1 -0
  73. package/dist/transformers/aura-to-lwc/markup.d.ts +51 -0
  74. package/dist/transformers/aura-to-lwc/markup.d.ts.map +1 -0
  75. package/dist/transformers/aura-to-lwc/markup.js +465 -0
  76. package/dist/transformers/aura-to-lwc/markup.js.map +1 -0
  77. package/dist/transformers/vf-to-lwc/components.d.ts +40 -0
  78. package/dist/transformers/vf-to-lwc/components.d.ts.map +1 -0
  79. package/dist/transformers/vf-to-lwc/components.js +374 -0
  80. package/dist/transformers/vf-to-lwc/components.js.map +1 -0
  81. package/dist/transformers/vf-to-lwc/data-binding.d.ts +53 -0
  82. package/dist/transformers/vf-to-lwc/data-binding.d.ts.map +1 -0
  83. package/dist/transformers/vf-to-lwc/data-binding.js +660 -0
  84. package/dist/transformers/vf-to-lwc/data-binding.js.map +1 -0
  85. package/dist/transformers/vf-to-lwc/markup.d.ts +44 -0
  86. package/dist/transformers/vf-to-lwc/markup.d.ts.map +1 -0
  87. package/dist/transformers/vf-to-lwc/markup.js +816 -0
  88. package/dist/transformers/vf-to-lwc/markup.js.map +1 -0
  89. package/dist/utils/confidence-scorer.d.ts +100 -0
  90. package/dist/utils/confidence-scorer.d.ts.map +1 -0
  91. package/dist/utils/confidence-scorer.js +358 -0
  92. package/dist/utils/confidence-scorer.js.map +1 -0
  93. package/dist/utils/file-io.d.ts +62 -0
  94. package/dist/utils/file-io.d.ts.map +1 -0
  95. package/dist/utils/file-io.js +248 -0
  96. package/dist/utils/file-io.js.map +1 -0
  97. package/dist/utils/logger.d.ts +34 -0
  98. package/dist/utils/logger.d.ts.map +1 -0
  99. package/dist/utils/logger.js +130 -0
  100. package/dist/utils/logger.js.map +1 -0
  101. package/dist/utils/open-folder.d.ts +9 -0
  102. package/dist/utils/open-folder.d.ts.map +1 -0
  103. package/dist/utils/open-folder.js +76 -0
  104. package/dist/utils/open-folder.js.map +1 -0
  105. package/dist/utils/path-resolver.d.ts +29 -0
  106. package/dist/utils/path-resolver.d.ts.map +1 -0
  107. package/dist/utils/path-resolver.js +240 -0
  108. package/dist/utils/path-resolver.js.map +1 -0
  109. package/dist/utils/session-store.d.ts +158 -0
  110. package/dist/utils/session-store.d.ts.map +1 -0
  111. package/dist/utils/session-store.js +518 -0
  112. package/dist/utils/session-store.js.map +1 -0
  113. package/dist/utils/vf-controller-resolver.d.ts +36 -0
  114. package/dist/utils/vf-controller-resolver.d.ts.map +1 -0
  115. package/dist/utils/vf-controller-resolver.js +162 -0
  116. package/dist/utils/vf-controller-resolver.js.map +1 -0
  117. package/package.json +81 -0
@@ -0,0 +1,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"}