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,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Smart path resolver for Salesforce components
|
|
4
|
+
* Searches common project locations when only a component name is provided
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.resolveAuraPath = resolveAuraPath;
|
|
41
|
+
exports.resolveVfPath = resolveVfPath;
|
|
42
|
+
exports.resolveApexPath = resolveApexPath;
|
|
43
|
+
exports.formatSearchLocations = formatSearchLocations;
|
|
44
|
+
const path = __importStar(require("path"));
|
|
45
|
+
const fs = __importStar(require("fs-extra"));
|
|
46
|
+
// Common Aura component locations in Salesforce projects
|
|
47
|
+
const AURA_SEARCH_PATHS = [
|
|
48
|
+
'force-app/main/default/aura',
|
|
49
|
+
'src/aura',
|
|
50
|
+
'aura',
|
|
51
|
+
'force-app/main/aura',
|
|
52
|
+
];
|
|
53
|
+
// Common Visualforce page locations in Salesforce projects
|
|
54
|
+
const VF_SEARCH_PATHS = [
|
|
55
|
+
'force-app/main/default/pages',
|
|
56
|
+
'src/pages',
|
|
57
|
+
'pages',
|
|
58
|
+
'force-app/main/pages',
|
|
59
|
+
];
|
|
60
|
+
// Common Apex controller locations
|
|
61
|
+
const APEX_SEARCH_PATHS = [
|
|
62
|
+
'force-app/main/default/classes',
|
|
63
|
+
'src/classes',
|
|
64
|
+
'classes',
|
|
65
|
+
'force-app/main/classes',
|
|
66
|
+
];
|
|
67
|
+
/**
|
|
68
|
+
* Check if a path looks like a full path (has directory separators or starts with . or /)
|
|
69
|
+
*/
|
|
70
|
+
function isFullPath(inputPath) {
|
|
71
|
+
return (inputPath.includes('/') ||
|
|
72
|
+
inputPath.includes('\\') ||
|
|
73
|
+
inputPath.startsWith('.') ||
|
|
74
|
+
path.isAbsolute(inputPath));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Resolve an Aura component path
|
|
78
|
+
* If just a name is provided, searches common locations
|
|
79
|
+
*/
|
|
80
|
+
async function resolveAuraPath(input) {
|
|
81
|
+
// If it's already a full path, just return it
|
|
82
|
+
if (isFullPath(input)) {
|
|
83
|
+
const resolved = path.resolve(input);
|
|
84
|
+
return {
|
|
85
|
+
found: await fs.pathExists(resolved),
|
|
86
|
+
path: resolved,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
// It's just a component name - search for it
|
|
90
|
+
const componentName = input;
|
|
91
|
+
const cwd = process.cwd();
|
|
92
|
+
const searchedLocations = [];
|
|
93
|
+
for (const searchPath of AURA_SEARCH_PATHS) {
|
|
94
|
+
const fullPath = path.join(cwd, searchPath, componentName);
|
|
95
|
+
searchedLocations.push(fullPath);
|
|
96
|
+
if (await fs.pathExists(fullPath)) {
|
|
97
|
+
// Verify it has a .cmp file
|
|
98
|
+
const cmpFile = path.join(fullPath, `${componentName}.cmp`);
|
|
99
|
+
if (await fs.pathExists(cmpFile)) {
|
|
100
|
+
return {
|
|
101
|
+
found: true,
|
|
102
|
+
path: fullPath,
|
|
103
|
+
searchedLocations,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Also search recursively in case of nested structure
|
|
109
|
+
for (const searchPath of AURA_SEARCH_PATHS) {
|
|
110
|
+
const basePath = path.join(cwd, searchPath);
|
|
111
|
+
if (await fs.pathExists(basePath)) {
|
|
112
|
+
const found = await searchForComponent(basePath, componentName, '.cmp');
|
|
113
|
+
if (found) {
|
|
114
|
+
return {
|
|
115
|
+
found: true,
|
|
116
|
+
path: found,
|
|
117
|
+
searchedLocations,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
found: false,
|
|
124
|
+
path: input,
|
|
125
|
+
searchedLocations,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Resolve a Visualforce page path
|
|
130
|
+
* If just a name is provided, searches common locations
|
|
131
|
+
*/
|
|
132
|
+
async function resolveVfPath(input) {
|
|
133
|
+
// If it's already a full path, just return it
|
|
134
|
+
if (isFullPath(input)) {
|
|
135
|
+
const resolved = path.resolve(input);
|
|
136
|
+
return {
|
|
137
|
+
found: await fs.pathExists(resolved),
|
|
138
|
+
path: resolved,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
// It's just a page name - search for it
|
|
142
|
+
let pageName = input;
|
|
143
|
+
// Add .page extension if not present
|
|
144
|
+
if (!pageName.endsWith('.page')) {
|
|
145
|
+
pageName = `${pageName}.page`;
|
|
146
|
+
}
|
|
147
|
+
const cwd = process.cwd();
|
|
148
|
+
const searchedLocations = [];
|
|
149
|
+
for (const searchPath of VF_SEARCH_PATHS) {
|
|
150
|
+
const fullPath = path.join(cwd, searchPath, pageName);
|
|
151
|
+
searchedLocations.push(fullPath);
|
|
152
|
+
if (await fs.pathExists(fullPath)) {
|
|
153
|
+
return {
|
|
154
|
+
found: true,
|
|
155
|
+
path: fullPath,
|
|
156
|
+
searchedLocations,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return {
|
|
161
|
+
found: false,
|
|
162
|
+
path: input,
|
|
163
|
+
searchedLocations,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Resolve an Apex controller path
|
|
168
|
+
* If just a name is provided, searches common locations
|
|
169
|
+
*/
|
|
170
|
+
async function resolveApexPath(input) {
|
|
171
|
+
// If it's already a full path, just return it
|
|
172
|
+
if (isFullPath(input)) {
|
|
173
|
+
const resolved = path.resolve(input);
|
|
174
|
+
return {
|
|
175
|
+
found: await fs.pathExists(resolved),
|
|
176
|
+
path: resolved,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// It's just a class name - search for it
|
|
180
|
+
let className = input;
|
|
181
|
+
// Add .cls extension if not present
|
|
182
|
+
if (!className.endsWith('.cls')) {
|
|
183
|
+
className = `${className}.cls`;
|
|
184
|
+
}
|
|
185
|
+
const cwd = process.cwd();
|
|
186
|
+
const searchedLocations = [];
|
|
187
|
+
for (const searchPath of APEX_SEARCH_PATHS) {
|
|
188
|
+
const fullPath = path.join(cwd, searchPath, className);
|
|
189
|
+
searchedLocations.push(fullPath);
|
|
190
|
+
if (await fs.pathExists(fullPath)) {
|
|
191
|
+
return {
|
|
192
|
+
found: true,
|
|
193
|
+
path: fullPath,
|
|
194
|
+
searchedLocations,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
found: false,
|
|
200
|
+
path: input,
|
|
201
|
+
searchedLocations,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Recursively search for a component in a directory
|
|
206
|
+
*/
|
|
207
|
+
async function searchForComponent(baseDir, componentName, extension) {
|
|
208
|
+
try {
|
|
209
|
+
const entries = await fs.readdir(baseDir, { withFileTypes: true });
|
|
210
|
+
for (const entry of entries) {
|
|
211
|
+
if (entry.isDirectory()) {
|
|
212
|
+
if (entry.name === componentName) {
|
|
213
|
+
const componentPath = path.join(baseDir, entry.name);
|
|
214
|
+
const mainFile = path.join(componentPath, `${componentName}${extension}`);
|
|
215
|
+
if (await fs.pathExists(mainFile)) {
|
|
216
|
+
return componentPath;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
// Search subdirectories (but not too deep)
|
|
220
|
+
const subResult = await searchForComponent(path.join(baseDir, entry.name), componentName, extension);
|
|
221
|
+
if (subResult) {
|
|
222
|
+
return subResult;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Ignore errors (permission issues, etc.)
|
|
229
|
+
}
|
|
230
|
+
return null;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Format search locations for user-friendly error message
|
|
234
|
+
*/
|
|
235
|
+
function formatSearchLocations(locations, cwd) {
|
|
236
|
+
return locations
|
|
237
|
+
.map((loc) => ` - ${path.relative(cwd, loc) || loc}`)
|
|
238
|
+
.join('\n');
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=path-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-resolver.js","sourceRoot":"","sources":["../../src/utils/path-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session Store - Stores conversion data in a temp folder during user's session
|
|
3
|
+
*
|
|
4
|
+
* This allows the tool to:
|
|
5
|
+
* 1. Learn from past conversions in the session
|
|
6
|
+
* 2. Provide suggestions based on similar patterns
|
|
7
|
+
* 3. Track conversion success/failure rates
|
|
8
|
+
* 4. Reuse behavior mappings for similar components
|
|
9
|
+
*/
|
|
10
|
+
import { TestComparisonResult } from '../generators/test-comparison';
|
|
11
|
+
export interface ConversionRecord {
|
|
12
|
+
id: string;
|
|
13
|
+
timestamp: Date;
|
|
14
|
+
sourceType: 'aura' | 'vf';
|
|
15
|
+
sourceName: string;
|
|
16
|
+
targetName: string;
|
|
17
|
+
sourcePath: string;
|
|
18
|
+
outputPath: string;
|
|
19
|
+
behaviorCount: number;
|
|
20
|
+
behaviors: BehaviorSummary[];
|
|
21
|
+
patterns: PatternRecord[];
|
|
22
|
+
warnings: string[];
|
|
23
|
+
success: boolean;
|
|
24
|
+
testResults?: TestResultSummary;
|
|
25
|
+
}
|
|
26
|
+
export interface BehaviorSummary {
|
|
27
|
+
id: string;
|
|
28
|
+
category: string;
|
|
29
|
+
name: string;
|
|
30
|
+
auraPattern: string;
|
|
31
|
+
lwcPattern: string;
|
|
32
|
+
verified?: boolean;
|
|
33
|
+
}
|
|
34
|
+
export interface PatternRecord {
|
|
35
|
+
type: 'component' | 'expression' | 'event' | 'apex' | 'lms' | 'lifecycle';
|
|
36
|
+
auraPattern: string;
|
|
37
|
+
lwcPattern: string;
|
|
38
|
+
frequency: number;
|
|
39
|
+
successRate: number;
|
|
40
|
+
}
|
|
41
|
+
export interface TestResultSummary {
|
|
42
|
+
totalTests: number;
|
|
43
|
+
passed: number;
|
|
44
|
+
failed: number;
|
|
45
|
+
skipped: number;
|
|
46
|
+
runAt?: Date;
|
|
47
|
+
}
|
|
48
|
+
export interface SessionSummary {
|
|
49
|
+
sessionId: string;
|
|
50
|
+
startedAt: Date;
|
|
51
|
+
conversions: number;
|
|
52
|
+
totalBehaviors: number;
|
|
53
|
+
patternLibrary: PatternRecord[];
|
|
54
|
+
commonWarnings: Array<{
|
|
55
|
+
warning: string;
|
|
56
|
+
count: number;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
declare class SessionStore {
|
|
60
|
+
private sessionId;
|
|
61
|
+
private sessionDir;
|
|
62
|
+
private conversions;
|
|
63
|
+
private patternLibrary;
|
|
64
|
+
private initialized;
|
|
65
|
+
private startedAt;
|
|
66
|
+
constructor();
|
|
67
|
+
/**
|
|
68
|
+
* Try to load an existing active session
|
|
69
|
+
*/
|
|
70
|
+
private tryLoadExistingSession;
|
|
71
|
+
/**
|
|
72
|
+
* Load conversions from session directory
|
|
73
|
+
*/
|
|
74
|
+
private loadConversions;
|
|
75
|
+
/**
|
|
76
|
+
* Create a new session
|
|
77
|
+
*/
|
|
78
|
+
private createNewSession;
|
|
79
|
+
/**
|
|
80
|
+
* Update the active session file
|
|
81
|
+
*/
|
|
82
|
+
private updateActiveSessionFile;
|
|
83
|
+
/**
|
|
84
|
+
* Initialize the session store (creates temp directory or loads existing session)
|
|
85
|
+
*/
|
|
86
|
+
init(): Promise<void>;
|
|
87
|
+
/**
|
|
88
|
+
* Get the session directory path
|
|
89
|
+
*/
|
|
90
|
+
getSessionDir(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Get the session ID
|
|
93
|
+
*/
|
|
94
|
+
getSessionId(): string;
|
|
95
|
+
/**
|
|
96
|
+
* Store a conversion record
|
|
97
|
+
*/
|
|
98
|
+
storeConversion(sourceType: 'aura' | 'vf', sourceName: string, targetName: string, sourcePath: string, outputPath: string, testComparison: TestComparisonResult, warnings: string[]): Promise<ConversionRecord>;
|
|
99
|
+
/**
|
|
100
|
+
* Extract patterns from behavior tests
|
|
101
|
+
*/
|
|
102
|
+
private extractPatterns;
|
|
103
|
+
/**
|
|
104
|
+
* Categorize pattern type
|
|
105
|
+
*/
|
|
106
|
+
private categorizePattern;
|
|
107
|
+
/**
|
|
108
|
+
* Update pattern library with new patterns
|
|
109
|
+
*/
|
|
110
|
+
private updatePatternLibrary;
|
|
111
|
+
/**
|
|
112
|
+
* Get suggestions based on past conversions
|
|
113
|
+
*/
|
|
114
|
+
getSuggestions(auraPattern: string): PatternRecord[];
|
|
115
|
+
/**
|
|
116
|
+
* Get common patterns for a specific type
|
|
117
|
+
*/
|
|
118
|
+
getCommonPatterns(type: PatternRecord['type']): PatternRecord[];
|
|
119
|
+
/**
|
|
120
|
+
* Get all conversions in this session
|
|
121
|
+
*/
|
|
122
|
+
getConversions(): ConversionRecord[];
|
|
123
|
+
/**
|
|
124
|
+
* Get conversion by ID
|
|
125
|
+
*/
|
|
126
|
+
getConversion(id: string): ConversionRecord | undefined;
|
|
127
|
+
/**
|
|
128
|
+
* Update test results for a conversion
|
|
129
|
+
*/
|
|
130
|
+
updateTestResults(conversionId: string, results: TestResultSummary): Promise<void>;
|
|
131
|
+
/**
|
|
132
|
+
* Get session summary
|
|
133
|
+
*/
|
|
134
|
+
getSessionSummary(): SessionSummary;
|
|
135
|
+
/**
|
|
136
|
+
* Save session summary to file
|
|
137
|
+
*/
|
|
138
|
+
private saveSessionSummary;
|
|
139
|
+
/**
|
|
140
|
+
* Generate a report of all conversions in the session
|
|
141
|
+
*/
|
|
142
|
+
generateSessionReport(): string;
|
|
143
|
+
/**
|
|
144
|
+
* Clean up session data (call on exit if desired)
|
|
145
|
+
*/
|
|
146
|
+
cleanup(): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* Check if a similar component has been converted before
|
|
149
|
+
*/
|
|
150
|
+
findSimilarConversion(componentName: string): ConversionRecord | undefined;
|
|
151
|
+
/**
|
|
152
|
+
* Get behavior suggestions based on component type and past conversions
|
|
153
|
+
*/
|
|
154
|
+
getBehaviorSuggestions(componentType: 'aura' | 'vf', behaviors: string[]): string[];
|
|
155
|
+
}
|
|
156
|
+
export declare const sessionStore: SessionStore;
|
|
157
|
+
export {};
|
|
158
|
+
//# sourceMappingURL=session-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"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"}
|