logicstamp-context 0.1.1 → 0.2.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/LLM_CONTEXT.md +4 -3
- package/README.md +116 -19
- package/dist/cli/commands/compare.d.ts.map +1 -1
- package/dist/cli/commands/compare.js +17 -8
- package/dist/cli/commands/compare.js.map +1 -1
- package/dist/cli/commands/context/bundleFormatter.d.ts +20 -0
- package/dist/cli/commands/context/bundleFormatter.d.ts.map +1 -0
- package/dist/cli/commands/context/bundleFormatter.js +55 -0
- package/dist/cli/commands/context/bundleFormatter.js.map +1 -0
- package/dist/cli/commands/context/configManager.d.ts +23 -0
- package/dist/cli/commands/context/configManager.d.ts.map +1 -0
- package/dist/cli/commands/context/configManager.js +69 -0
- package/dist/cli/commands/context/configManager.js.map +1 -0
- package/dist/cli/commands/context/contractBuilder.d.ts +18 -0
- package/dist/cli/commands/context/contractBuilder.d.ts.map +1 -0
- package/dist/cli/commands/context/contractBuilder.js +72 -0
- package/dist/cli/commands/context/contractBuilder.js.map +1 -0
- package/dist/cli/commands/context/fileWriter.d.ts +38 -0
- package/dist/cli/commands/context/fileWriter.d.ts.map +1 -0
- package/dist/cli/commands/context/fileWriter.js +165 -0
- package/dist/cli/commands/context/fileWriter.js.map +1 -0
- package/dist/cli/commands/context/statsCalculator.d.ts +44 -0
- package/dist/cli/commands/context/statsCalculator.d.ts.map +1 -0
- package/dist/cli/commands/context/statsCalculator.js +150 -0
- package/dist/cli/commands/context/statsCalculator.js.map +1 -0
- package/dist/cli/commands/context/tokenEstimator.d.ts +76 -0
- package/dist/cli/commands/context/tokenEstimator.d.ts.map +1 -0
- package/dist/cli/commands/context/tokenEstimator.js +258 -0
- package/dist/cli/commands/context/tokenEstimator.js.map +1 -0
- package/dist/cli/commands/context.d.ts +1 -0
- package/dist/cli/commands/context.d.ts.map +1 -1
- package/dist/cli/commands/context.js +72 -399
- package/dist/cli/commands/context.js.map +1 -1
- package/dist/cli/commands/style.d.ts +11 -0
- package/dist/cli/commands/style.d.ts.map +1 -0
- package/dist/cli/commands/style.js +15 -0
- package/dist/cli/commands/style.js.map +1 -0
- package/dist/cli/handlers/cleanHandler.d.ts +5 -0
- package/dist/cli/handlers/cleanHandler.d.ts.map +1 -0
- package/dist/cli/handlers/cleanHandler.js +28 -0
- package/dist/cli/handlers/cleanHandler.js.map +1 -0
- package/dist/cli/handlers/compareHandler.d.ts +5 -0
- package/dist/cli/handlers/compareHandler.d.ts.map +1 -0
- package/dist/cli/handlers/compareHandler.js +332 -0
- package/dist/cli/handlers/compareHandler.js.map +1 -0
- package/dist/cli/handlers/contextHandler.d.ts +5 -0
- package/dist/cli/handlers/contextHandler.d.ts.map +1 -0
- package/dist/cli/handlers/contextHandler.js +24 -0
- package/dist/cli/handlers/contextHandler.js.map +1 -0
- package/dist/cli/handlers/initHandler.d.ts +6 -0
- package/dist/cli/handlers/initHandler.d.ts.map +1 -0
- package/dist/cli/handlers/initHandler.js +30 -0
- package/dist/cli/handlers/initHandler.js.map +1 -0
- package/dist/cli/handlers/styleHandler.d.ts +5 -0
- package/dist/cli/handlers/styleHandler.d.ts.map +1 -0
- package/dist/cli/handlers/styleHandler.js +30 -0
- package/dist/cli/handlers/styleHandler.js.map +1 -0
- package/dist/cli/handlers/validateHandler.d.ts +5 -0
- package/dist/cli/handlers/validateHandler.d.ts.map +1 -0
- package/dist/cli/handlers/validateHandler.js +23 -0
- package/dist/cli/handlers/validateHandler.js.map +1 -0
- package/dist/cli/parser/argumentParser.d.ts +44 -0
- package/dist/cli/parser/argumentParser.d.ts.map +1 -0
- package/dist/cli/parser/argumentParser.js +194 -0
- package/dist/cli/parser/argumentParser.js.map +1 -0
- package/dist/cli/parser/helpText.d.ts +11 -0
- package/dist/cli/parser/helpText.d.ts.map +1 -0
- package/dist/cli/parser/helpText.js +373 -0
- package/dist/cli/parser/helpText.js.map +1 -0
- package/dist/cli/stamp.js +14 -821
- package/dist/cli/stamp.js.map +1 -1
- package/dist/core/astParser/detectors.d.ts +24 -0
- package/dist/core/astParser/detectors.d.ts.map +1 -0
- package/dist/core/astParser/detectors.js +102 -0
- package/dist/core/astParser/detectors.js.map +1 -0
- package/dist/core/astParser/extractors/componentExtractor.d.ts +13 -0
- package/dist/core/astParser/extractors/componentExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/componentExtractor.js +41 -0
- package/dist/core/astParser/extractors/componentExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/eventExtractor.d.ts +14 -0
- package/dist/core/astParser/extractors/eventExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/eventExtractor.js +49 -0
- package/dist/core/astParser/extractors/eventExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/propExtractor.d.ts +14 -0
- package/dist/core/astParser/extractors/propExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/propExtractor.js +73 -0
- package/dist/core/astParser/extractors/propExtractor.js.map +1 -0
- package/dist/core/astParser/extractors/stateExtractor.d.ts +13 -0
- package/dist/core/astParser/extractors/stateExtractor.d.ts.map +1 -0
- package/dist/core/astParser/extractors/stateExtractor.js +66 -0
- package/dist/core/astParser/extractors/stateExtractor.js.map +1 -0
- package/dist/core/astParser.d.ts.map +1 -1
- package/dist/core/astParser.js +5 -307
- package/dist/core/astParser.js.map +1 -1
- package/dist/core/contractBuilder.d.ts +1 -0
- package/dist/core/contractBuilder.d.ts.map +1 -1
- package/dist/core/contractBuilder.js +1 -0
- package/dist/core/contractBuilder.js.map +1 -1
- package/dist/core/pack/builder.d.ts +35 -0
- package/dist/core/pack/builder.d.ts.map +1 -0
- package/dist/core/pack/builder.js +76 -0
- package/dist/core/pack/builder.js.map +1 -0
- package/dist/core/pack/collector.d.ts +20 -0
- package/dist/core/pack/collector.d.ts.map +1 -0
- package/dist/core/pack/collector.js +71 -0
- package/dist/core/pack/collector.js.map +1 -0
- package/dist/core/pack/loader.d.ts +23 -0
- package/dist/core/pack/loader.d.ts.map +1 -0
- package/dist/core/pack/loader.js +66 -0
- package/dist/core/pack/loader.js.map +1 -0
- package/dist/core/pack/resolver.d.ts +21 -0
- package/dist/core/pack/resolver.d.ts.map +1 -0
- package/dist/core/pack/resolver.js +79 -0
- package/dist/core/pack/resolver.js.map +1 -0
- package/dist/core/pack.d.ts +17 -27
- package/dist/core/pack.d.ts.map +1 -1
- package/dist/core/pack.js +18 -225
- package/dist/core/pack.js.map +1 -1
- package/dist/core/styleExtractor/index.d.ts +11 -0
- package/dist/core/styleExtractor/index.d.ts.map +1 -0
- package/dist/core/styleExtractor/index.js +11 -0
- package/dist/core/styleExtractor/index.js.map +1 -0
- package/dist/core/styleExtractor/layout.d.ts +14 -0
- package/dist/core/styleExtractor/layout.d.ts.map +1 -0
- package/dist/core/styleExtractor/layout.js +86 -0
- package/dist/core/styleExtractor/layout.js.map +1 -0
- package/dist/core/styleExtractor/motion.d.ts +20 -0
- package/dist/core/styleExtractor/motion.d.ts.map +1 -0
- package/dist/core/styleExtractor/motion.js +74 -0
- package/dist/core/styleExtractor/motion.js.map +1 -0
- package/dist/core/styleExtractor/scss.d.ts +30 -0
- package/dist/core/styleExtractor/scss.d.ts.map +1 -0
- package/dist/core/styleExtractor/scss.js +80 -0
- package/dist/core/styleExtractor/scss.js.map +1 -0
- package/dist/core/styleExtractor/styleExtractor.d.ts +11 -0
- package/dist/core/styleExtractor/styleExtractor.d.ts.map +1 -0
- package/dist/core/styleExtractor/styleExtractor.js +115 -0
- package/dist/core/styleExtractor/styleExtractor.js.map +1 -0
- package/dist/core/styleExtractor/styled.d.ts +13 -0
- package/dist/core/styleExtractor/styled.d.ts.map +1 -0
- package/dist/core/styleExtractor/styled.js +31 -0
- package/dist/core/styleExtractor/styled.js.map +1 -0
- package/dist/core/styleExtractor/tailwind.d.ts +16 -0
- package/dist/core/styleExtractor/tailwind.d.ts.map +1 -0
- package/dist/core/styleExtractor/tailwind.js +85 -0
- package/dist/core/styleExtractor/tailwind.js.map +1 -0
- package/dist/core/styleExtractor.d.ts +8 -0
- package/dist/core/styleExtractor.d.ts.map +1 -0
- package/dist/core/styleExtractor.js +8 -0
- package/dist/core/styleExtractor.js.map +1 -0
- package/dist/types/UIFContract.d.ts +71 -0
- package/dist/types/UIFContract.d.ts.map +1 -1
- package/dist/types/UIFContract.js.map +1 -1
- package/dist/utils/tokens.d.ts +18 -10
- package/dist/utils/tokens.d.ts.map +1 -1
- package/dist/utils/tokens.js +112 -10
- package/dist/utils/tokens.js.map +1 -1
- package/package.json +3 -1
- package/schema/logicstamp.context.schema.json +288 -0
package/dist/core/astParser.js
CHANGED
|
@@ -27,62 +27,11 @@
|
|
|
27
27
|
* Uses ts-morph for robust AST traversal
|
|
28
28
|
*/
|
|
29
29
|
import { Project, SyntaxKind, Node } from 'ts-morph';
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const fullText = source.getFullText();
|
|
36
|
-
// Get the first few lines (directives must be at the top)
|
|
37
|
-
const firstLines = fullText.split('\n').slice(0, 5);
|
|
38
|
-
// Check each line - directive must be at start of line (ignoring whitespace)
|
|
39
|
-
for (const line of firstLines) {
|
|
40
|
-
const trimmed = line.trim();
|
|
41
|
-
// Skip empty lines and comments
|
|
42
|
-
if (!trimmed || trimmed.startsWith('//') || trimmed.startsWith('/*')) {
|
|
43
|
-
continue;
|
|
44
|
-
}
|
|
45
|
-
// Check for 'use client' directive at start of statement
|
|
46
|
-
if (/^['"]use client['"];?$/.test(trimmed)) {
|
|
47
|
-
return 'client';
|
|
48
|
-
}
|
|
49
|
-
// Check for 'use server' directive at start of statement
|
|
50
|
-
if (/^['"]use server['"];?$/.test(trimmed)) {
|
|
51
|
-
return 'server';
|
|
52
|
-
}
|
|
53
|
-
// If we hit a non-comment, non-directive line, stop looking
|
|
54
|
-
if (trimmed) {
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
return undefined;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Detect if file is in Next.js App Router directory
|
|
62
|
-
* Checks if the file path contains /app/ or \app\ directory
|
|
63
|
-
*/
|
|
64
|
-
function isInNextAppDir(filePath) {
|
|
65
|
-
// Normalize path separators and check for /app/ directory
|
|
66
|
-
const normalizedPath = filePath.replace(/\\/g, '/');
|
|
67
|
-
// Match /app/ directory (not just any path containing 'app')
|
|
68
|
-
// Must be a directory boundary, not part of another word
|
|
69
|
-
return /\/app\//.test(normalizedPath) || /^app\//.test(normalizedPath);
|
|
70
|
-
}
|
|
71
|
-
/**
|
|
72
|
-
* Extract Next.js metadata from the file
|
|
73
|
-
*/
|
|
74
|
-
function extractNextJsMetadata(source, filePath) {
|
|
75
|
-
const directive = detectNextJsDirective(source);
|
|
76
|
-
const isInApp = isInNextAppDir(filePath);
|
|
77
|
-
// Only return metadata if we have something to report
|
|
78
|
-
if (directive || isInApp) {
|
|
79
|
-
return {
|
|
80
|
-
...(isInApp && { isInAppDir: true }),
|
|
81
|
-
...(directive && { directive })
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
return undefined;
|
|
85
|
-
}
|
|
30
|
+
import { extractComponents, extractHooks } from './astParser/extractors/componentExtractor.js';
|
|
31
|
+
import { extractProps } from './astParser/extractors/propExtractor.js';
|
|
32
|
+
import { extractState, extractVariables } from './astParser/extractors/stateExtractor.js';
|
|
33
|
+
import { extractEvents, extractJsxRoutes } from './astParser/extractors/eventExtractor.js';
|
|
34
|
+
import { detectKind, extractNextJsMetadata } from './astParser/detectors.js';
|
|
86
35
|
/**
|
|
87
36
|
* Extract all structural information from a TypeScript/React file
|
|
88
37
|
*/
|
|
@@ -114,56 +63,6 @@ export async function extractFromFile(filePath) {
|
|
|
114
63
|
...(nextjs && { nextjs }),
|
|
115
64
|
};
|
|
116
65
|
}
|
|
117
|
-
/**
|
|
118
|
-
* Extract all variable declarations (const, let, var)
|
|
119
|
-
*/
|
|
120
|
-
function extractVariables(source) {
|
|
121
|
-
const variables = new Set();
|
|
122
|
-
source.getVariableDeclarations().forEach((varDecl) => {
|
|
123
|
-
const name = varDecl.getName();
|
|
124
|
-
// Skip destructured state setters (e.g., setCount from [count, setCount])
|
|
125
|
-
if (!name.startsWith('set') || !varDecl.getParent()?.getText().includes('useState')) {
|
|
126
|
-
variables.add(name);
|
|
127
|
-
}
|
|
128
|
-
});
|
|
129
|
-
return Array.from(variables).sort();
|
|
130
|
-
}
|
|
131
|
-
/**
|
|
132
|
-
* Extract all React hooks (useState, useEffect, custom hooks)
|
|
133
|
-
*/
|
|
134
|
-
function extractHooks(source) {
|
|
135
|
-
const hooks = new Set();
|
|
136
|
-
source.getDescendantsOfKind(SyntaxKind.CallExpression).forEach((callExpr) => {
|
|
137
|
-
const expr = callExpr.getExpression();
|
|
138
|
-
const text = expr.getText();
|
|
139
|
-
// Match useXxx pattern
|
|
140
|
-
if (/^use[A-Z]/.test(text)) {
|
|
141
|
-
hooks.add(text);
|
|
142
|
-
}
|
|
143
|
-
});
|
|
144
|
-
return Array.from(hooks).sort();
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Extract all JSX components used in the file
|
|
148
|
-
*/
|
|
149
|
-
function extractComponents(source) {
|
|
150
|
-
const components = new Set();
|
|
151
|
-
// JSX opening elements
|
|
152
|
-
source.getDescendantsOfKind(SyntaxKind.JsxOpeningElement).forEach((openingEl) => {
|
|
153
|
-
const tagName = openingEl.getTagNameNode().getText();
|
|
154
|
-
if (/^[A-Z]/.test(tagName)) {
|
|
155
|
-
components.add(tagName);
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
// Self-closing JSX elements
|
|
159
|
-
source.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).forEach((selfClosing) => {
|
|
160
|
-
const tagName = selfClosing.getTagNameNode().getText();
|
|
161
|
-
if (/^[A-Z]/.test(tagName)) {
|
|
162
|
-
components.add(tagName);
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
return Array.from(components).sort();
|
|
166
|
-
}
|
|
167
66
|
/**
|
|
168
67
|
* Extract all function declarations and arrow functions
|
|
169
68
|
*/
|
|
@@ -192,151 +91,6 @@ function extractFunctions(source) {
|
|
|
192
91
|
});
|
|
193
92
|
return Array.from(functions).sort();
|
|
194
93
|
}
|
|
195
|
-
/**
|
|
196
|
-
* Extract component props from TypeScript interfaces/types
|
|
197
|
-
*/
|
|
198
|
-
function extractProps(source) {
|
|
199
|
-
const props = {};
|
|
200
|
-
// Look for interfaces ending with Props
|
|
201
|
-
source.getInterfaces().forEach((iface) => {
|
|
202
|
-
if (/Props$/i.test(iface.getName())) {
|
|
203
|
-
iface.getProperties().forEach((prop) => {
|
|
204
|
-
const name = prop.getName();
|
|
205
|
-
const isOptional = prop.hasQuestionToken();
|
|
206
|
-
const type = prop.getType().getText();
|
|
207
|
-
props[name] = normalizePropType(type, isOptional);
|
|
208
|
-
});
|
|
209
|
-
}
|
|
210
|
-
});
|
|
211
|
-
// Look for type aliases ending with Props
|
|
212
|
-
source.getTypeAliases().forEach((typeAlias) => {
|
|
213
|
-
if (/Props$/i.test(typeAlias.getName())) {
|
|
214
|
-
const type = typeAlias.getType();
|
|
215
|
-
const properties = type.getProperties();
|
|
216
|
-
properties.forEach((prop) => {
|
|
217
|
-
const name = prop.getName();
|
|
218
|
-
const propType = prop.getTypeAtLocation(typeAlias).getText();
|
|
219
|
-
// Check if optional from declaration
|
|
220
|
-
const declarations = prop.getDeclarations();
|
|
221
|
-
const isOptional = declarations.some((decl) => decl.getText().includes('?:'));
|
|
222
|
-
props[name] = normalizePropType(propType, isOptional);
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
});
|
|
226
|
-
return props;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Normalize a prop type into the rich PropType format
|
|
230
|
-
*/
|
|
231
|
-
function normalizePropType(typeText, isOptional) {
|
|
232
|
-
// Remove 'undefined' from unions if present
|
|
233
|
-
const cleanType = typeText.replace(/\s*\|\s*undefined/g, '').trim();
|
|
234
|
-
// Detect literal unions: "a" | "b" | "c"
|
|
235
|
-
const literalUnionMatch = cleanType.match(/^("[\w-]+"(\s*\|\s*"[\w-]+")+)$/);
|
|
236
|
-
if (literalUnionMatch) {
|
|
237
|
-
const literals = cleanType
|
|
238
|
-
.split('|')
|
|
239
|
-
.map(t => t.trim().replace(/^"|"$/g, ''));
|
|
240
|
-
return {
|
|
241
|
-
type: 'literal-union',
|
|
242
|
-
literals,
|
|
243
|
-
...(isOptional && { optional: true })
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
// Detect function types: () => void, (x: string) => void
|
|
247
|
-
if (cleanType.includes('=>') || cleanType.startsWith('(') && cleanType.includes(')')) {
|
|
248
|
-
return {
|
|
249
|
-
type: 'function',
|
|
250
|
-
signature: cleanType,
|
|
251
|
-
...(isOptional && { optional: true })
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
// Simple type with optionality
|
|
255
|
-
if (isOptional && !['string', 'number', 'boolean'].includes(cleanType)) {
|
|
256
|
-
return {
|
|
257
|
-
type: cleanType,
|
|
258
|
-
optional: true
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
// Return simple string for common types (backward compat)
|
|
262
|
-
return cleanType;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Extract component state from useState calls
|
|
266
|
-
*/
|
|
267
|
-
function extractState(source) {
|
|
268
|
-
const state = {};
|
|
269
|
-
source.getDescendantsOfKind(SyntaxKind.VariableDeclaration).forEach((varDecl) => {
|
|
270
|
-
const initializer = varDecl.getInitializer();
|
|
271
|
-
if (!initializer)
|
|
272
|
-
return;
|
|
273
|
-
const initText = initializer.getText();
|
|
274
|
-
if (initText.startsWith('useState(') || initText.startsWith('useState<')) {
|
|
275
|
-
const bindingName = varDecl.getName();
|
|
276
|
-
// Extract state variable name from array destructuring [value, setValue]
|
|
277
|
-
const match = bindingName.match(/\[([a-zA-Z0-9_]+)\s*,/);
|
|
278
|
-
if (match) {
|
|
279
|
-
const stateVar = match[1];
|
|
280
|
-
// Try to infer type from generic or initial value
|
|
281
|
-
let type = 'unknown';
|
|
282
|
-
const genericMatch = initText.match(/useState<([^>]+)>/);
|
|
283
|
-
if (genericMatch) {
|
|
284
|
-
type = genericMatch[1];
|
|
285
|
-
}
|
|
286
|
-
else {
|
|
287
|
-
// Infer from initial value
|
|
288
|
-
const valueMatch = initText.match(/useState\(([^)]+)\)/);
|
|
289
|
-
if (valueMatch) {
|
|
290
|
-
const value = valueMatch[1].trim();
|
|
291
|
-
if (value === 'true' || value === 'false')
|
|
292
|
-
type = 'boolean';
|
|
293
|
-
else if (/^\d+$/.test(value))
|
|
294
|
-
type = 'number';
|
|
295
|
-
else if (/^["']/.test(value))
|
|
296
|
-
type = 'string';
|
|
297
|
-
else if (value === 'null')
|
|
298
|
-
type = 'null';
|
|
299
|
-
else if (value === '[]')
|
|
300
|
-
type = 'array';
|
|
301
|
-
else if (value === '{}')
|
|
302
|
-
type = 'object';
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
state[stateVar] = type;
|
|
306
|
-
}
|
|
307
|
-
}
|
|
308
|
-
});
|
|
309
|
-
return state;
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* Extract event handlers from JSX attributes
|
|
313
|
-
*/
|
|
314
|
-
function extractEvents(source) {
|
|
315
|
-
const events = {};
|
|
316
|
-
source.getDescendantsOfKind(SyntaxKind.JsxAttribute).forEach((attr) => {
|
|
317
|
-
const name = attr.getNameNode().getText();
|
|
318
|
-
// Match onXxx pattern
|
|
319
|
-
if (/^on[A-Z]/.test(name)) {
|
|
320
|
-
const initializer = attr.getInitializer();
|
|
321
|
-
if (initializer) {
|
|
322
|
-
// Try to infer the event handler signature
|
|
323
|
-
const initText = initializer.getText();
|
|
324
|
-
// Extract function signature if possible
|
|
325
|
-
let signature = '() => void'; // default
|
|
326
|
-
// Try to parse arrow function signature: (arg) => { ... }
|
|
327
|
-
const arrowMatch = initText.match(/\(([^)]*)\)\s*=>/);
|
|
328
|
-
if (arrowMatch) {
|
|
329
|
-
signature = `(${arrowMatch[1]}) => void`;
|
|
330
|
-
}
|
|
331
|
-
events[name] = {
|
|
332
|
-
type: 'function',
|
|
333
|
-
signature
|
|
334
|
-
};
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
return events;
|
|
339
|
-
}
|
|
340
94
|
/**
|
|
341
95
|
* Extract import module specifiers
|
|
342
96
|
*/
|
|
@@ -348,62 +102,6 @@ function extractImports(source) {
|
|
|
348
102
|
});
|
|
349
103
|
return Array.from(imports).sort();
|
|
350
104
|
}
|
|
351
|
-
/**
|
|
352
|
-
* Detect component kind based on its characteristics
|
|
353
|
-
*/
|
|
354
|
-
function detectKind(hooks, components, imports, filePath, source) {
|
|
355
|
-
// React component: has hooks or JSX components
|
|
356
|
-
if (hooks.length > 0 || components.length > 0) {
|
|
357
|
-
return 'react:component';
|
|
358
|
-
}
|
|
359
|
-
// Check for React imports
|
|
360
|
-
const hasReactImport = imports.some(imp => imp === 'react' || imp.startsWith('react/'));
|
|
361
|
-
if (hasReactImport) {
|
|
362
|
-
const sourceText = source.getFullText();
|
|
363
|
-
// Check for any JSX usage (including lowercase HTML elements)
|
|
364
|
-
const hasJsxElements = source.getDescendantsOfKind(SyntaxKind.JsxElement).length > 0 ||
|
|
365
|
-
source.getDescendantsOfKind(SyntaxKind.JsxSelfClosingElement).length > 0 ||
|
|
366
|
-
source.getDescendantsOfKind(SyntaxKind.JsxFragment).length > 0;
|
|
367
|
-
if (hasJsxElements) {
|
|
368
|
-
return 'react:component';
|
|
369
|
-
}
|
|
370
|
-
// Check for React.createElement usage
|
|
371
|
-
if (/React\.createElement/.test(sourceText)) {
|
|
372
|
-
return 'react:component';
|
|
373
|
-
}
|
|
374
|
-
// Check for React component type annotations
|
|
375
|
-
// Look for React.FC, React.FunctionComponent, or return type JSX.Element
|
|
376
|
-
if (/React\.(FC|FunctionComponent|ReactElement)|:\s*JSX\.Element/.test(sourceText)) {
|
|
377
|
-
return 'react:component';
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
// Node CLI: check for CLI-specific patterns
|
|
381
|
-
// 1. File is in a /cli/ directory, OR
|
|
382
|
-
// 2. File uses process.argv (CLI argument parsing)
|
|
383
|
-
const isInCliDir = /[/\\]cli[/\\]/.test(filePath);
|
|
384
|
-
const sourceText = source.getFullText();
|
|
385
|
-
const usesProcessArgv = /process\.argv/.test(sourceText);
|
|
386
|
-
if (isInCliDir || usesProcessArgv) {
|
|
387
|
-
return 'node:cli';
|
|
388
|
-
}
|
|
389
|
-
// Default: TypeScript module (even if it imports from node:)
|
|
390
|
-
return 'ts:module';
|
|
391
|
-
}
|
|
392
|
-
/**
|
|
393
|
-
* Extract potential route usage (heuristic-based)
|
|
394
|
-
*/
|
|
395
|
-
function extractJsxRoutes(source) {
|
|
396
|
-
const routes = new Set();
|
|
397
|
-
// Look for route-like string literals in JSX
|
|
398
|
-
source.getDescendantsOfKind(SyntaxKind.StringLiteral).forEach((strLit) => {
|
|
399
|
-
const value = strLit.getLiteralValue();
|
|
400
|
-
// Match route patterns like /path, /path/:id, etc.
|
|
401
|
-
if (/^\/[a-z0-9\-_/:.]*$/i.test(value)) {
|
|
402
|
-
routes.add(value);
|
|
403
|
-
}
|
|
404
|
-
});
|
|
405
|
-
return Array.from(routes).sort();
|
|
406
|
-
}
|
|
407
105
|
/**
|
|
408
106
|
* Build the logic signature from extracted AST data
|
|
409
107
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"astParser.js","sourceRoot":"","sources":["../../src/core/astParser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"astParser.js","sourceRoot":"","sources":["../../src/core/astParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractBuilder.d.ts","sourceRoot":"","sources":["../../src/core/contractBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAWjD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"contractBuilder.d.ts","sourceRoot":"","sources":["../../src/core/contractBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAkB,MAAM,yBAAyB,CAAC;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAWjD,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,yBAAyB,EAAE,aAAa,CAAC;CACjE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA8BD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,UAAU,EACf,MAAM,EAAE,mBAAmB,GAC1B,mBAAmB,CAqDrB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE,WAAW,GACnB,WAAW,CAiBb"}
|
|
@@ -91,6 +91,7 @@ export function buildContract(entryId, ast, params) {
|
|
|
91
91
|
metrics: undefined,
|
|
92
92
|
links: undefined,
|
|
93
93
|
nextjs: ast.nextjs,
|
|
94
|
+
style: params.styleMetadata, // Attach pre-extracted style metadata
|
|
94
95
|
semanticHash: semanticHashFromAst(ast, signature),
|
|
95
96
|
fileHash: fileHash(params.sourceText),
|
|
96
97
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contractBuilder.js","sourceRoot":"","sources":["../../src/core/contractBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAQH,OAAO,EACL,mBAAmB,EACnB,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"contractBuilder.js","sourceRoot":"","sources":["../../src/core/contractBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builder module - Build bundle structures, edges, and hashes
|
|
3
|
+
*/
|
|
4
|
+
import type { UIFContract } from '../../types/UIFContract.js';
|
|
5
|
+
import type { ProjectManifest } from '../manifest.js';
|
|
6
|
+
/**
|
|
7
|
+
* A node in the bundle graph
|
|
8
|
+
*/
|
|
9
|
+
export interface BundleNode {
|
|
10
|
+
entryId: string;
|
|
11
|
+
contract: UIFContract;
|
|
12
|
+
codeHeader?: string | null;
|
|
13
|
+
code?: string | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Build edges from nodes based on dependencies
|
|
17
|
+
*/
|
|
18
|
+
export declare function buildEdges(nodes: BundleNode[], manifest: ProjectManifest): [string, string][];
|
|
19
|
+
/**
|
|
20
|
+
* Sort nodes deterministically for stable bundle hashes
|
|
21
|
+
*/
|
|
22
|
+
export declare function stableSort(nodes: BundleNode[]): BundleNode[];
|
|
23
|
+
/**
|
|
24
|
+
* Compute bundle hash from nodes using stable hashing
|
|
25
|
+
*/
|
|
26
|
+
export declare function computeBundleHash(nodes: BundleNode[], depth: number): string;
|
|
27
|
+
/**
|
|
28
|
+
* Validate hash-lock: ensure contract hashes match current state
|
|
29
|
+
*
|
|
30
|
+
* Recomputes file hash from source and compares to contract.fileHash from sidecar
|
|
31
|
+
* (authoritative, not from header). fileHash() automatically strips @uif header block
|
|
32
|
+
* before hashing, so header updates won't cause hash churn.
|
|
33
|
+
*/
|
|
34
|
+
export declare function validateHashLock(contract: UIFContract, entryId: string, projectRoot: string): Promise<boolean>;
|
|
35
|
+
//# sourceMappingURL=builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../../src/core/pack/builder.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAItD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,eAAe,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAmB7F;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,UAAU,EAAE,CAK5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ5E;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBpH"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Builder module - Build bundle structures, edges, and hashes
|
|
3
|
+
*/
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { resolve, isAbsolute } from 'node:path';
|
|
6
|
+
import { bundleHash as computeBundleHashStable } from '../../utils/hash.js';
|
|
7
|
+
import { resolveDependency } from './resolver.js';
|
|
8
|
+
/**
|
|
9
|
+
* Build edges from nodes based on dependencies
|
|
10
|
+
*/
|
|
11
|
+
export function buildEdges(nodes, manifest) {
|
|
12
|
+
const edges = [];
|
|
13
|
+
const nodeIds = new Set(nodes.map((n) => n.entryId));
|
|
14
|
+
for (const node of nodes) {
|
|
15
|
+
const componentNode = manifest.components[node.entryId];
|
|
16
|
+
if (!componentNode)
|
|
17
|
+
continue;
|
|
18
|
+
for (const dep of componentNode.dependencies) {
|
|
19
|
+
const resolvedId = resolveDependency(manifest, dep, node.entryId);
|
|
20
|
+
// Only add edge if both nodes are in the bundle
|
|
21
|
+
if (resolvedId && nodeIds.has(resolvedId)) {
|
|
22
|
+
edges.push([node.entryId, resolvedId]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return edges;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Sort nodes deterministically for stable bundle hashes
|
|
30
|
+
*/
|
|
31
|
+
export function stableSort(nodes) {
|
|
32
|
+
return [...nodes].sort((a, b) => {
|
|
33
|
+
// Sort by entryId for determinism
|
|
34
|
+
return a.entryId.localeCompare(b.entryId);
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Compute bundle hash from nodes using stable hashing
|
|
39
|
+
*/
|
|
40
|
+
export function computeBundleHash(nodes, depth) {
|
|
41
|
+
// Use the stable bundleHash function from utils/hash
|
|
42
|
+
const nodeData = nodes.map(n => ({
|
|
43
|
+
entryId: n.entryId,
|
|
44
|
+
semanticHash: n.contract.semanticHash,
|
|
45
|
+
}));
|
|
46
|
+
return computeBundleHashStable(nodeData, depth, '0.1');
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validate hash-lock: ensure contract hashes match current state
|
|
50
|
+
*
|
|
51
|
+
* Recomputes file hash from source and compares to contract.fileHash from sidecar
|
|
52
|
+
* (authoritative, not from header). fileHash() automatically strips @uif header block
|
|
53
|
+
* before hashing, so header updates won't cause hash churn.
|
|
54
|
+
*/
|
|
55
|
+
export async function validateHashLock(contract, entryId, projectRoot) {
|
|
56
|
+
try {
|
|
57
|
+
// Read the actual source file
|
|
58
|
+
const absolutePath = isAbsolute(entryId) ? entryId : resolve(projectRoot, entryId);
|
|
59
|
+
const sourceContent = await readFile(absolutePath, 'utf8');
|
|
60
|
+
// Recompute file hash (strips @uif header block automatically)
|
|
61
|
+
const { fileHash: computedFileHash } = await import('../../utils/hash.js');
|
|
62
|
+
const actualFileHash = computedFileHash(sourceContent);
|
|
63
|
+
// Compare to sidecar contract.fileHash (authoritative, not header)
|
|
64
|
+
if (actualFileHash !== contract.fileHash) {
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
// Semantic hash should match (derived from structure + signature)
|
|
68
|
+
// If fileHash matches, semantic hash should also match since it's derived from the AST
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
// If we can't read/parse the file, fail validation
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/core/pack/builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector module - BFS dependency collection
|
|
3
|
+
*/
|
|
4
|
+
import type { ProjectManifest } from '../manifest.js';
|
|
5
|
+
/**
|
|
6
|
+
* Missing dependency information
|
|
7
|
+
*/
|
|
8
|
+
export interface MissingDependency {
|
|
9
|
+
name: string;
|
|
10
|
+
reason: string;
|
|
11
|
+
referencedBy?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Perform BFS traversal to collect dependencies
|
|
15
|
+
*/
|
|
16
|
+
export declare function collectDependencies(entryId: string, manifest: ProjectManifest, depth: number, maxNodes: number): {
|
|
17
|
+
visited: Set<string>;
|
|
18
|
+
missing: MissingDependency[];
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=collector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.d.ts","sourceRoot":"","sources":["../../../src/core/pack/collector.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGtD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,eAAe,EACzB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf;IAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,OAAO,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAuExD"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collector module - BFS dependency collection
|
|
3
|
+
*/
|
|
4
|
+
import { normalizeEntryId } from '../../utils/fsx.js';
|
|
5
|
+
import { resolveDependency } from './resolver.js';
|
|
6
|
+
/**
|
|
7
|
+
* Perform BFS traversal to collect dependencies
|
|
8
|
+
*/
|
|
9
|
+
export function collectDependencies(entryId, manifest, depth, maxNodes) {
|
|
10
|
+
const visited = new Set();
|
|
11
|
+
const missing = [];
|
|
12
|
+
const queue = [{ id: entryId, level: 0 }];
|
|
13
|
+
while (queue.length > 0) {
|
|
14
|
+
const current = queue.shift();
|
|
15
|
+
// Normalize the ID for lookup
|
|
16
|
+
const normalizedId = normalizeEntryId(current.id);
|
|
17
|
+
// Try to find component by normalized ID
|
|
18
|
+
let node = manifest.components[normalizedId];
|
|
19
|
+
let componentKey = normalizedId;
|
|
20
|
+
// If not found, try to find by matching normalized entryIds
|
|
21
|
+
if (!node) {
|
|
22
|
+
for (const [key, comp] of Object.entries(manifest.components)) {
|
|
23
|
+
if (normalizeEntryId(key) === normalizedId || normalizeEntryId(comp.entryId) === normalizedId) {
|
|
24
|
+
node = comp;
|
|
25
|
+
componentKey = key;
|
|
26
|
+
break;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Skip if already visited or exceeded depth
|
|
31
|
+
if (visited.has(componentKey) || current.level > depth) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
// Check max nodes limit
|
|
35
|
+
if (visited.size >= maxNodes) {
|
|
36
|
+
break;
|
|
37
|
+
}
|
|
38
|
+
if (!node) {
|
|
39
|
+
missing.push({
|
|
40
|
+
name: current.id,
|
|
41
|
+
reason: 'Component not found in manifest',
|
|
42
|
+
});
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
visited.add(componentKey);
|
|
46
|
+
// Only traverse deeper if we haven't reached depth limit
|
|
47
|
+
if (current.level < depth) {
|
|
48
|
+
// Add dependencies to queue
|
|
49
|
+
for (const dep of node.dependencies) {
|
|
50
|
+
const resolvedId = resolveDependency(manifest, dep, componentKey);
|
|
51
|
+
if (resolvedId) {
|
|
52
|
+
if (!visited.has(resolvedId)) {
|
|
53
|
+
queue.push({ id: resolvedId, level: current.level + 1 });
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Track missing dependency
|
|
58
|
+
if (!missing.some((m) => m.name === dep)) {
|
|
59
|
+
missing.push({
|
|
60
|
+
name: dep,
|
|
61
|
+
reason: 'No contract found (third-party or not scanned)',
|
|
62
|
+
referencedBy: componentKey, // Use manifest key, not current.id
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return { visited, missing };
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=collector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../../src/core/pack/collector.ts"],"names":[],"mappings":"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"}
|