logicstamp-context 0.3.2 → 0.3.4
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/LLM_CONTEXT.md +3 -3
- package/README.md +60 -59
- package/dist/cli/commands/context/bundleFormatter.d.ts +2 -2
- package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -1
- package/dist/cli/commands/context/bundleFormatter.js +10 -1
- package/dist/cli/commands/context/bundleFormatter.js.map +1 -1
- package/dist/cli/commands/context/fileWriter.d.ts +1 -1
- package/dist/cli/commands/context/fileWriter.d.ts.map +1 -1
- package/dist/cli/commands/context/fileWriter.js +6 -3
- package/dist/cli/commands/context/fileWriter.js.map +1 -1
- package/dist/cli/commands/context/statsCalculator.d.ts +1 -1
- package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -1
- package/dist/cli/commands/context/tokenEstimator.d.ts +1 -1
- package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -1
- package/dist/cli/commands/context.d.ts +1 -1
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +2 -0
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parser/argumentParser.js.map +1 -1
- package/dist/cli/parser/helpText.d.ts.map +1 -1
- package/dist/cli/parser/helpText.js +4 -2
- package/dist/cli/parser/helpText.js.map +1 -1
- package/dist/core/astParser/detectors.d.ts.map +1 -1
- package/dist/core/astParser/detectors.js +141 -0
- package/dist/core/astParser/detectors.js.map +1 -1
- package/dist/core/astParser/extractors/vueComponentExtractor.d.ts +38 -0
- package/dist/core/astParser/extractors/vueComponentExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/vueComponentExtractor.js +630 -0
- package/dist/core/astParser/extractors/vueComponentExtractor.js.map +1 -0
- package/dist/core/astParser.d.ts.map +1 -1
- package/dist/core/astParser.js +23 -5
- package/dist/core/astParser.js.map +1 -1
- package/dist/core/pack.d.ts +1 -1
- package/dist/core/pack.d.ts.map +1 -1
- package/dist/types/UIFContract.d.ts +1 -1
- package/dist/types/UIFContract.d.ts.map +1 -1
- package/dist/utils/gitignore.d.ts.map +1 -1
- package/dist/utils/gitignore.js +2 -0
- package/dist/utils/gitignore.js.map +1 -1
- package/package.json +9 -8
- package/schema/logicstamp.context.schema.json +3 -3
|
@@ -0,0 +1,630 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vue Component Extractor - Extracts Vue composables, components, and reactive state from AST
|
|
3
|
+
*/
|
|
4
|
+
import { SyntaxKind, Node } from 'ts-morph';
|
|
5
|
+
import { debugError } from '../../../utils/debug.js';
|
|
6
|
+
import { normalizePropType } from './propExtractor.js';
|
|
7
|
+
/**
|
|
8
|
+
* Extract all Vue composables (ref, computed, custom composables)
|
|
9
|
+
* Matches the pattern: useXxx or Vue's built-in composables
|
|
10
|
+
*/
|
|
11
|
+
export function extractVueComposables(source) {
|
|
12
|
+
const composables = new Set();
|
|
13
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
14
|
+
try {
|
|
15
|
+
source.getDescendantsOfKind(SyntaxKind.CallExpression).forEach((callExpr) => {
|
|
16
|
+
try {
|
|
17
|
+
const expr = callExpr.getExpression();
|
|
18
|
+
// Only extract composables from direct identifier calls
|
|
19
|
+
if (expr.getKind() === SyntaxKind.Identifier) {
|
|
20
|
+
const text = expr.getText();
|
|
21
|
+
// Match useXxx pattern (custom composables) or Vue built-ins
|
|
22
|
+
const vueBuiltins = [
|
|
23
|
+
'ref', 'reactive', 'computed', 'watch', 'watchEffect',
|
|
24
|
+
'onMounted', 'onUnmounted', 'onBeforeMount', 'onBeforeUnmount',
|
|
25
|
+
'onUpdated', 'onBeforeUpdate', 'onActivated', 'onDeactivated',
|
|
26
|
+
'onErrorCaptured', 'onRenderTracked', 'onRenderTriggered',
|
|
27
|
+
'provide', 'inject', 'toRef', 'toRefs', 'isRef', 'unref',
|
|
28
|
+
'shallowRef', 'triggerRef', 'customRef', 'shallowReactive',
|
|
29
|
+
'readonly', 'isReactive', 'isReadonly', 'toRaw', 'markRaw',
|
|
30
|
+
'effectScope', 'getCurrentScope', 'onScopeDispose',
|
|
31
|
+
'useSlots', 'useAttrs', 'useCssModule', 'useCssVars',
|
|
32
|
+
'defineProps', 'defineEmits', 'defineExpose', 'withDefaults'
|
|
33
|
+
];
|
|
34
|
+
if (/^use[A-Z]/.test(text) || vueBuiltins.includes(text)) {
|
|
35
|
+
composables.add(text);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
debugError('vueComponentExtractor', 'extractVueComposables', {
|
|
41
|
+
filePath,
|
|
42
|
+
error: error instanceof Error ? error.message : String(error),
|
|
43
|
+
context: 'composables-iteration',
|
|
44
|
+
});
|
|
45
|
+
// Continue with next composable
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
debugError('vueComponentExtractor', 'extractVueComposables', {
|
|
51
|
+
filePath,
|
|
52
|
+
error: error instanceof Error ? error.message : String(error),
|
|
53
|
+
});
|
|
54
|
+
return [];
|
|
55
|
+
}
|
|
56
|
+
return Array.from(composables).sort();
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extract all components used in Vue templates or JSX
|
|
60
|
+
* Handles both PascalCase components and kebab-case components
|
|
61
|
+
*/
|
|
62
|
+
export function extractVueComponents(source) {
|
|
63
|
+
const components = new Set();
|
|
64
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
65
|
+
try {
|
|
66
|
+
// JSX opening elements (for Vue JSX/TSX)
|
|
67
|
+
try {
|
|
68
|
+
source.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).forEach((openingEl) => {
|
|
69
|
+
try {
|
|
70
|
+
const tagName = openingEl.getTagNameNode().getText();
|
|
71
|
+
if (/^[A-Z]/.test(tagName)) {
|
|
72
|
+
components.add(tagName);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
77
|
+
filePath,
|
|
78
|
+
error: error instanceof Error ? error.message : String(error),
|
|
79
|
+
context: 'components-opening',
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
86
|
+
filePath,
|
|
87
|
+
error: error instanceof Error ? error.message : String(error),
|
|
88
|
+
context: 'components-opening-batch',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Self-closing JSX elements (for Vue JSX/TSX)
|
|
92
|
+
try {
|
|
93
|
+
source.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).forEach((selfClosing) => {
|
|
94
|
+
try {
|
|
95
|
+
const tagName = selfClosing.getTagNameNode().getText();
|
|
96
|
+
if (/^[A-Z]/.test(tagName)) {
|
|
97
|
+
components.add(tagName);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
102
|
+
filePath,
|
|
103
|
+
error: error instanceof Error ? error.message : String(error),
|
|
104
|
+
context: 'components-selfclosing',
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
111
|
+
filePath,
|
|
112
|
+
error: error instanceof Error ? error.message : String(error),
|
|
113
|
+
context: 'components-selfclosing-batch',
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
// Extract from components registration (Vue 3 Composition API)
|
|
117
|
+
// Look for: components: { MyComponent, ... } or const components = { MyComponent, ... }
|
|
118
|
+
try {
|
|
119
|
+
// Find all property assignments named 'components'
|
|
120
|
+
source.getDescendantsOfKind(SyntaxKind.PropertyAssignment).forEach((prop) => {
|
|
121
|
+
try {
|
|
122
|
+
const propName = prop.getName();
|
|
123
|
+
if (propName === 'components') {
|
|
124
|
+
const initializer = prop.getInitializer();
|
|
125
|
+
if (initializer && Node.isObjectLiteralExpression(initializer)) {
|
|
126
|
+
// Extract component names from the object literal
|
|
127
|
+
initializer.getProperties().forEach((objProp) => {
|
|
128
|
+
try {
|
|
129
|
+
if (Node.isShorthandPropertyAssignment(objProp) || Node.isPropertyAssignment(objProp)) {
|
|
130
|
+
const componentName = objProp.getName();
|
|
131
|
+
if (componentName && /^[A-Z]/.test(componentName)) {
|
|
132
|
+
components.add(componentName);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
138
|
+
filePath,
|
|
139
|
+
error: error instanceof Error ? error.message : String(error),
|
|
140
|
+
context: 'components-object-properties',
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
149
|
+
filePath,
|
|
150
|
+
error: error instanceof Error ? error.message : String(error),
|
|
151
|
+
context: 'components-registration',
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
});
|
|
155
|
+
// Also check for const components = { ... }
|
|
156
|
+
source.getDescendantsOfKind(SyntaxKind.VariableDeclaration).forEach((varDecl) => {
|
|
157
|
+
try {
|
|
158
|
+
const varName = varDecl.getName();
|
|
159
|
+
if (varName === 'components') {
|
|
160
|
+
const initializer = varDecl.getInitializer();
|
|
161
|
+
if (initializer && Node.isObjectLiteralExpression(initializer)) {
|
|
162
|
+
// Extract component names from the object literal
|
|
163
|
+
initializer.getProperties().forEach((objProp) => {
|
|
164
|
+
try {
|
|
165
|
+
if (Node.isShorthandPropertyAssignment(objProp) || Node.isPropertyAssignment(objProp)) {
|
|
166
|
+
const componentName = objProp.getName();
|
|
167
|
+
if (componentName && /^[A-Z]/.test(componentName)) {
|
|
168
|
+
components.add(componentName);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
174
|
+
filePath,
|
|
175
|
+
error: error instanceof Error ? error.message : String(error),
|
|
176
|
+
context: 'components-var-object-properties',
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
185
|
+
filePath,
|
|
186
|
+
error: error instanceof Error ? error.message : String(error),
|
|
187
|
+
context: 'components-var-registration',
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
catch (error) {
|
|
193
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
194
|
+
filePath,
|
|
195
|
+
error: error instanceof Error ? error.message : String(error),
|
|
196
|
+
context: 'components-registration-batch',
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (error) {
|
|
201
|
+
debugError('vueComponentExtractor', 'extractVueComponents', {
|
|
202
|
+
filePath,
|
|
203
|
+
error: error instanceof Error ? error.message : String(error),
|
|
204
|
+
});
|
|
205
|
+
return [];
|
|
206
|
+
}
|
|
207
|
+
return Array.from(components).sort();
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Extract Vue reactive state (ref, reactive, computed)
|
|
211
|
+
*/
|
|
212
|
+
export function extractVueState(source) {
|
|
213
|
+
const state = {};
|
|
214
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
215
|
+
try {
|
|
216
|
+
source.getDescendantsOfKind(SyntaxKind.VariableDeclaration).forEach((varDecl) => {
|
|
217
|
+
try {
|
|
218
|
+
const varName = varDecl.getName();
|
|
219
|
+
if (!varName)
|
|
220
|
+
return;
|
|
221
|
+
const initializer = varDecl.getInitializer();
|
|
222
|
+
if (!initializer)
|
|
223
|
+
return;
|
|
224
|
+
// Check if it's a ref, reactive, or computed call
|
|
225
|
+
if (Node.isCallExpression(initializer)) {
|
|
226
|
+
const callExpr = initializer;
|
|
227
|
+
const expr = callExpr.getExpression();
|
|
228
|
+
if (Node.isIdentifier(expr)) {
|
|
229
|
+
const funcName = expr.getText();
|
|
230
|
+
if (['ref', 'reactive', 'computed', 'shallowRef', 'shallowReactive'].includes(funcName)) {
|
|
231
|
+
// Try to get type from generic or infer from initializer
|
|
232
|
+
let varType = 'unknown';
|
|
233
|
+
// Check for generic type argument
|
|
234
|
+
const typeArgs = callExpr.getTypeArguments();
|
|
235
|
+
if (typeArgs.length > 0) {
|
|
236
|
+
varType = typeArgs[0].getText();
|
|
237
|
+
}
|
|
238
|
+
else {
|
|
239
|
+
// Try to infer from initializer argument
|
|
240
|
+
const args = callExpr.getArguments();
|
|
241
|
+
if (args.length > 0) {
|
|
242
|
+
const argType = args[0].getType();
|
|
243
|
+
varType = argType.getText();
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
state[varName] = `${funcName}<${varType}>`;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
debugError('vueComponentExtractor', 'extractVueState', {
|
|
253
|
+
filePath,
|
|
254
|
+
error: error instanceof Error ? error.message : String(error),
|
|
255
|
+
context: 'state-iteration',
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
}
|
|
260
|
+
catch (error) {
|
|
261
|
+
debugError('vueComponentExtractor', 'extractVueState', {
|
|
262
|
+
filePath,
|
|
263
|
+
error: error instanceof Error ? error.message : String(error),
|
|
264
|
+
});
|
|
265
|
+
return {};
|
|
266
|
+
}
|
|
267
|
+
return state;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Extract Vue props (from defineProps)
|
|
271
|
+
*/
|
|
272
|
+
export function extractVuePropsCall(source) {
|
|
273
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
274
|
+
try {
|
|
275
|
+
const callExpressions = source.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
276
|
+
for (const callExpr of callExpressions) {
|
|
277
|
+
try {
|
|
278
|
+
const expr = callExpr.getExpression();
|
|
279
|
+
if (expr.getKind() === SyntaxKind.Identifier) {
|
|
280
|
+
const funcName = expr.getText();
|
|
281
|
+
if (funcName === 'defineProps' || funcName === 'withDefaults') {
|
|
282
|
+
// Return the type argument or runtime props
|
|
283
|
+
const typeArgs = callExpr.getTypeArguments();
|
|
284
|
+
if (typeArgs.length > 0) {
|
|
285
|
+
return typeArgs[0].getText();
|
|
286
|
+
}
|
|
287
|
+
// Check for runtime props object
|
|
288
|
+
const args = callExpr.getArguments();
|
|
289
|
+
if (args.length > 0) {
|
|
290
|
+
return args[0].getText();
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
debugError('vueComponentExtractor', 'extractVuePropsCall', {
|
|
297
|
+
filePath,
|
|
298
|
+
error: error instanceof Error ? error.message : String(error),
|
|
299
|
+
context: 'props-iteration',
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
catch (error) {
|
|
305
|
+
debugError('vueComponentExtractor', 'extractVuePropsCall', {
|
|
306
|
+
filePath,
|
|
307
|
+
error: error instanceof Error ? error.message : String(error),
|
|
308
|
+
});
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Extract Vue emits (from defineEmits)
|
|
315
|
+
*/
|
|
316
|
+
export function extractVueEmitsCall(source) {
|
|
317
|
+
const emits = [];
|
|
318
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
319
|
+
try {
|
|
320
|
+
const callExpressions = source.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
321
|
+
for (const callExpr of callExpressions) {
|
|
322
|
+
try {
|
|
323
|
+
const expr = callExpr.getExpression();
|
|
324
|
+
if (expr.getKind() === SyntaxKind.Identifier) {
|
|
325
|
+
const funcName = expr.getText();
|
|
326
|
+
if (funcName === 'defineEmits') {
|
|
327
|
+
// Get type argument (e.g., defineEmits<{ (e: 'update', value: string): void }>())
|
|
328
|
+
const typeArgs = callExpr.getTypeArguments();
|
|
329
|
+
if (typeArgs.length > 0) {
|
|
330
|
+
const typeText = typeArgs[0].getText();
|
|
331
|
+
emits.push(typeText);
|
|
332
|
+
}
|
|
333
|
+
// Get runtime array (e.g., defineEmits(['update', 'close']))
|
|
334
|
+
const args = callExpr.getArguments();
|
|
335
|
+
if (args.length > 0) {
|
|
336
|
+
const arg = args[0];
|
|
337
|
+
if (Node.isArrayLiteralExpression(arg)) {
|
|
338
|
+
arg.getElements().forEach((el) => {
|
|
339
|
+
if (Node.isStringLiteral(el)) {
|
|
340
|
+
emits.push(el.getText().replace(/['"]/g, ''));
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch (error) {
|
|
349
|
+
debugError('vueComponentExtractor', 'extractVueEmitsCall', {
|
|
350
|
+
filePath,
|
|
351
|
+
error: error instanceof Error ? error.message : String(error),
|
|
352
|
+
context: 'emits-iteration',
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
debugError('vueComponentExtractor', 'extractVueEmitsCall', {
|
|
359
|
+
filePath,
|
|
360
|
+
error: error instanceof Error ? error.message : String(error),
|
|
361
|
+
});
|
|
362
|
+
return [];
|
|
363
|
+
}
|
|
364
|
+
return emits;
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Extract Vue props from defineProps into structured Record<string, PropType>
|
|
368
|
+
* Handles both type-based and runtime props definitions
|
|
369
|
+
*/
|
|
370
|
+
export function extractVueProps(source) {
|
|
371
|
+
const props = {};
|
|
372
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
373
|
+
try {
|
|
374
|
+
const callExpressions = source.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
375
|
+
for (const callExpr of callExpressions) {
|
|
376
|
+
try {
|
|
377
|
+
const expr = callExpr.getExpression();
|
|
378
|
+
if (expr.getKind() === SyntaxKind.Identifier) {
|
|
379
|
+
const funcName = expr.getText();
|
|
380
|
+
if (funcName === 'defineProps' || funcName === 'withDefaults') {
|
|
381
|
+
// Handle type-based props: defineProps<{ name: string, count?: number }>()
|
|
382
|
+
const typeArgs = callExpr.getTypeArguments();
|
|
383
|
+
if (typeArgs.length > 0) {
|
|
384
|
+
const typeNode = typeArgs[0];
|
|
385
|
+
const type = typeNode.getType();
|
|
386
|
+
// Get properties from the type
|
|
387
|
+
try {
|
|
388
|
+
const properties = type.getProperties();
|
|
389
|
+
properties.forEach((prop) => {
|
|
390
|
+
try {
|
|
391
|
+
const name = prop.getName();
|
|
392
|
+
const propType = prop.getTypeAtLocation(typeNode).getText();
|
|
393
|
+
// Check if optional
|
|
394
|
+
let isOptional = false;
|
|
395
|
+
if (propType.includes('undefined')) {
|
|
396
|
+
isOptional = true;
|
|
397
|
+
}
|
|
398
|
+
else {
|
|
399
|
+
const declarations = prop.getDeclarations();
|
|
400
|
+
isOptional = declarations.some((decl) => {
|
|
401
|
+
return decl.hasQuestionToken?.() === true;
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
props[name] = normalizePropType(propType, isOptional);
|
|
405
|
+
}
|
|
406
|
+
catch (error) {
|
|
407
|
+
debugError('vueComponentExtractor', 'extractVueProps', {
|
|
408
|
+
filePath,
|
|
409
|
+
error: error instanceof Error ? error.message : String(error),
|
|
410
|
+
context: 'props-type-property',
|
|
411
|
+
});
|
|
412
|
+
}
|
|
413
|
+
});
|
|
414
|
+
}
|
|
415
|
+
catch (error) {
|
|
416
|
+
debugError('vueComponentExtractor', 'extractVueProps', {
|
|
417
|
+
filePath,
|
|
418
|
+
error: error instanceof Error ? error.message : String(error),
|
|
419
|
+
context: 'props-type-parsing',
|
|
420
|
+
});
|
|
421
|
+
}
|
|
422
|
+
// Found props, return early
|
|
423
|
+
return props;
|
|
424
|
+
}
|
|
425
|
+
// Handle runtime props: defineProps({ name: String, count: Number })
|
|
426
|
+
const args = callExpr.getArguments();
|
|
427
|
+
if (args.length > 0) {
|
|
428
|
+
const arg = args[0];
|
|
429
|
+
if (Node.isObjectLiteralExpression(arg)) {
|
|
430
|
+
arg.getProperties().forEach((objProp) => {
|
|
431
|
+
try {
|
|
432
|
+
if (Node.isPropertyAssignment(objProp)) {
|
|
433
|
+
const name = objProp.getName();
|
|
434
|
+
const initializer = objProp.getInitializer();
|
|
435
|
+
if (initializer) {
|
|
436
|
+
// For runtime props, infer type from Vue prop types (String, Number, Boolean, Array, Object)
|
|
437
|
+
let typeText = initializer.getText();
|
|
438
|
+
let isOptional = false;
|
|
439
|
+
// Check if it's an object with type/required/default
|
|
440
|
+
if (Node.isObjectLiteralExpression(initializer)) {
|
|
441
|
+
const propObj = initializer;
|
|
442
|
+
let typeNode = propObj.getProperty('type');
|
|
443
|
+
let requiredNode = propObj.getProperty('required');
|
|
444
|
+
let defaultNode = propObj.getProperty('default');
|
|
445
|
+
if (typeNode && Node.isPropertyAssignment(typeNode)) {
|
|
446
|
+
typeText = typeNode.getInitializer()?.getText() || 'any';
|
|
447
|
+
}
|
|
448
|
+
// If required is false or default exists, it's optional
|
|
449
|
+
if (requiredNode && Node.isPropertyAssignment(requiredNode)) {
|
|
450
|
+
const requiredValue = requiredNode.getInitializer()?.getText();
|
|
451
|
+
if (requiredValue === 'false') {
|
|
452
|
+
isOptional = true;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
else if (defaultNode) {
|
|
456
|
+
// Has default value, so optional
|
|
457
|
+
isOptional = true;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
else {
|
|
461
|
+
// Direct type constructor (String, Number, etc.)
|
|
462
|
+
// If it's a direct type, check if there's a default or if it's optional
|
|
463
|
+
// For Vue runtime props, we can't determine optionality from type alone
|
|
464
|
+
// We'll mark as required by default unless we detect default
|
|
465
|
+
}
|
|
466
|
+
// Map Vue runtime types to TypeScript types
|
|
467
|
+
const normalizedType = normalizeVueRuntimeType(typeText);
|
|
468
|
+
props[name] = normalizePropType(normalizedType, isOptional);
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
else if (Node.isShorthandPropertyAssignment(objProp)) {
|
|
472
|
+
// Shorthand property - would need to infer from context
|
|
473
|
+
const name = objProp.getName();
|
|
474
|
+
props[name] = 'any';
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
catch (error) {
|
|
478
|
+
debugError('vueComponentExtractor', 'extractVueProps', {
|
|
479
|
+
filePath,
|
|
480
|
+
error: error instanceof Error ? error.message : String(error),
|
|
481
|
+
context: 'props-runtime-property',
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
});
|
|
485
|
+
// Found runtime props, return
|
|
486
|
+
return props;
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
catch (error) {
|
|
493
|
+
debugError('vueComponentExtractor', 'extractVueProps', {
|
|
494
|
+
filePath,
|
|
495
|
+
error: error instanceof Error ? error.message : String(error),
|
|
496
|
+
context: 'props-iteration',
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
catch (error) {
|
|
502
|
+
debugError('vueComponentExtractor', 'extractVueProps', {
|
|
503
|
+
filePath,
|
|
504
|
+
error: error instanceof Error ? error.message : String(error),
|
|
505
|
+
});
|
|
506
|
+
return {};
|
|
507
|
+
}
|
|
508
|
+
return props;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* Extract Vue emits from defineEmits into structured Record<string, EventType>
|
|
512
|
+
* Handles both type-based and runtime emits definitions
|
|
513
|
+
*/
|
|
514
|
+
export function extractVueEmits(source) {
|
|
515
|
+
const emits = {};
|
|
516
|
+
const filePath = source.getFilePath?.() ?? 'unknown';
|
|
517
|
+
try {
|
|
518
|
+
const callExpressions = source.getDescendantsOfKind(SyntaxKind.CallExpression);
|
|
519
|
+
for (const callExpr of callExpressions) {
|
|
520
|
+
try {
|
|
521
|
+
const expr = callExpr.getExpression();
|
|
522
|
+
if (expr.getKind() === SyntaxKind.Identifier) {
|
|
523
|
+
const funcName = expr.getText();
|
|
524
|
+
if (funcName === 'defineEmits') {
|
|
525
|
+
// Handle type-based emits: defineEmits<{ (e: 'update', value: string): void }>()
|
|
526
|
+
const typeArgs = callExpr.getTypeArguments();
|
|
527
|
+
if (typeArgs.length > 0) {
|
|
528
|
+
const typeNode = typeArgs[0];
|
|
529
|
+
const typeText = typeNode.getText();
|
|
530
|
+
// Parse the type to extract event names and signatures
|
|
531
|
+
// Type format: { (e: 'eventName', ...args): void, (e: 'anotherEvent'): void }
|
|
532
|
+
try {
|
|
533
|
+
// Use regex to extract event signatures from the type
|
|
534
|
+
const eventMatches = typeText.matchAll(/\(e:\s*['"]([^'"]+)['"]([^)]*)\)\s*:\s*void/g);
|
|
535
|
+
for (const match of eventMatches) {
|
|
536
|
+
const eventName = match[1];
|
|
537
|
+
const args = match[2].trim();
|
|
538
|
+
const signature = args ? `(e: '${eventName}', ${args}) => void` : `(e: '${eventName}') => void`;
|
|
539
|
+
emits[eventName] = {
|
|
540
|
+
type: 'function',
|
|
541
|
+
signature,
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
catch (error) {
|
|
546
|
+
debugError('vueComponentExtractor', 'extractVueEmits', {
|
|
547
|
+
filePath,
|
|
548
|
+
error: error instanceof Error ? error.message : String(error),
|
|
549
|
+
context: 'emits-type-parsing',
|
|
550
|
+
});
|
|
551
|
+
}
|
|
552
|
+
// Found type-based emits, return
|
|
553
|
+
return emits;
|
|
554
|
+
}
|
|
555
|
+
// Handle runtime emits: defineEmits(['update', 'close'])
|
|
556
|
+
const args = callExpr.getArguments();
|
|
557
|
+
if (args.length > 0) {
|
|
558
|
+
const arg = args[0];
|
|
559
|
+
if (Node.isArrayLiteralExpression(arg)) {
|
|
560
|
+
arg.getElements().forEach((el) => {
|
|
561
|
+
try {
|
|
562
|
+
if (Node.isStringLiteral(el)) {
|
|
563
|
+
const eventName = el.getText().replace(/['"]/g, '');
|
|
564
|
+
emits[eventName] = {
|
|
565
|
+
type: 'function',
|
|
566
|
+
signature: `(e: '${eventName}') => void`,
|
|
567
|
+
};
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
catch (error) {
|
|
571
|
+
debugError('vueComponentExtractor', 'extractVueEmits', {
|
|
572
|
+
filePath,
|
|
573
|
+
error: error instanceof Error ? error.message : String(error),
|
|
574
|
+
context: 'emits-runtime-element',
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
});
|
|
578
|
+
// Found runtime emits, return
|
|
579
|
+
return emits;
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
}
|
|
585
|
+
catch (error) {
|
|
586
|
+
debugError('vueComponentExtractor', 'extractVueEmits', {
|
|
587
|
+
filePath,
|
|
588
|
+
error: error instanceof Error ? error.message : String(error),
|
|
589
|
+
context: 'emits-iteration',
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
catch (error) {
|
|
595
|
+
debugError('vueComponentExtractor', 'extractVueEmits', {
|
|
596
|
+
filePath,
|
|
597
|
+
error: error instanceof Error ? error.message : String(error),
|
|
598
|
+
});
|
|
599
|
+
return {};
|
|
600
|
+
}
|
|
601
|
+
return emits;
|
|
602
|
+
}
|
|
603
|
+
/**
|
|
604
|
+
* Normalize Vue runtime prop types to TypeScript types
|
|
605
|
+
*/
|
|
606
|
+
function normalizeVueRuntimeType(vueType) {
|
|
607
|
+
// Map Vue runtime prop types to TypeScript types
|
|
608
|
+
const typeMap = {
|
|
609
|
+
'String': 'string',
|
|
610
|
+
'Number': 'number',
|
|
611
|
+
'Boolean': 'boolean',
|
|
612
|
+
'Array': 'any[]',
|
|
613
|
+
'Object': 'object',
|
|
614
|
+
'Function': 'function',
|
|
615
|
+
'Date': 'Date',
|
|
616
|
+
};
|
|
617
|
+
// Check if it's a direct match
|
|
618
|
+
if (typeMap[vueType]) {
|
|
619
|
+
return typeMap[vueType];
|
|
620
|
+
}
|
|
621
|
+
// Check if it's an array type: Array as () => String[]
|
|
622
|
+
const arrayMatch = vueType.match(/Array\s*as\s*\(\)\s*=>\s*(\w+)\[\]/);
|
|
623
|
+
if (arrayMatch) {
|
|
624
|
+
const elementType = typeMap[arrayMatch[1]] || 'any';
|
|
625
|
+
return `${elementType}[]`;
|
|
626
|
+
}
|
|
627
|
+
// Return as-is if we can't normalize
|
|
628
|
+
return vueType;
|
|
629
|
+
}
|
|
630
|
+
//# sourceMappingURL=vueComponentExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vueComponentExtractor.js","sourceRoot":"","sources":["../../../../src/core/astParser/extractors/vueComponentExtractor.ts"],"names":[],"mappings":"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"}
|