logicstamp-context 0.1.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/LLM_CONTEXT.md +260 -0
- package/README.md +949 -0
- package/dist/cli/commands/clean.d.ts +15 -0
- package/dist/cli/commands/clean.d.ts.map +1 -0
- package/dist/cli/commands/clean.js +142 -0
- package/dist/cli/commands/clean.js.map +1 -0
- package/dist/cli/commands/compare.d.ts +88 -0
- package/dist/cli/commands/compare.d.ts.map +1 -0
- package/dist/cli/commands/compare.js +519 -0
- package/dist/cli/commands/compare.js.map +1 -0
- package/dist/cli/commands/context.d.ts +24 -0
- package/dist/cli/commands/context.d.ts.map +1 -0
- package/dist/cli/commands/context.js +576 -0
- package/dist/cli/commands/context.js.map +1 -0
- package/dist/cli/commands/init.d.ts +14 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +71 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +52 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +368 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +223 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/stamp.d.ts +7 -0
- package/dist/cli/stamp.d.ts.map +1 -0
- package/dist/cli/stamp.js +961 -0
- package/dist/cli/stamp.js.map +1 -0
- package/dist/cli/validate-index.d.ts +7 -0
- package/dist/cli/validate-index.d.ts.map +1 -0
- package/dist/cli/validate-index.js +55 -0
- package/dist/cli/validate-index.js.map +1 -0
- package/dist/core/astParser.d.ts +47 -0
- package/dist/core/astParser.d.ts.map +1 -0
- package/dist/core/astParser.js +417 -0
- package/dist/core/astParser.js.map +1 -0
- package/dist/core/contractBuilder.d.ts +48 -0
- package/dist/core/contractBuilder.d.ts.map +1 -0
- package/dist/core/contractBuilder.js +120 -0
- package/dist/core/contractBuilder.js.map +1 -0
- package/dist/core/manifest.d.ts +75 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +173 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/pack.d.ts +190 -0
- package/dist/core/pack.d.ts.map +1 -0
- package/dist/core/pack.js +438 -0
- package/dist/core/pack.js.map +1 -0
- package/dist/core/signature.d.ts +47 -0
- package/dist/core/signature.d.ts.map +1 -0
- package/dist/core/signature.js +208 -0
- package/dist/core/signature.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/types/UIFContract.d.ts +112 -0
- package/dist/types/UIFContract.d.ts.map +1 -0
- package/dist/types/UIFContract.js +36 -0
- package/dist/types/UIFContract.js.map +1 -0
- package/dist/utils/config.d.ts +34 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +62 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/fsx.d.ts +85 -0
- package/dist/utils/fsx.d.ts.map +1 -0
- package/dist/utils/fsx.js +181 -0
- package/dist/utils/fsx.js.map +1 -0
- package/dist/utils/gitignore.d.ts +62 -0
- package/dist/utils/gitignore.d.ts.map +1 -0
- package/dist/utils/gitignore.js +183 -0
- package/dist/utils/gitignore.js.map +1 -0
- package/dist/utils/hash.d.ts +73 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +159 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/llmContext.d.ts +34 -0
- package/dist/utils/llmContext.d.ts.map +1 -0
- package/dist/utils/llmContext.js +136 -0
- package/dist/utils/llmContext.js.map +1 -0
- package/dist/utils/tokens.d.ts +23 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +29 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +69 -0
- package/schema/logicstamp.context.schema.json +430 -0
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Init command - Sets up LogicStamp in a project
|
|
3
|
+
*/
|
|
4
|
+
import { resolve } from 'node:path';
|
|
5
|
+
import { ensureGitignorePatterns } from '../../utils/gitignore.js';
|
|
6
|
+
import { updateConfig } from '../../utils/config.js';
|
|
7
|
+
import { readPackageLLMContext, writeLLMContext, llmContextExists } from '../../utils/llmContext.js';
|
|
8
|
+
/**
|
|
9
|
+
* Initialize LogicStamp in a project directory
|
|
10
|
+
*/
|
|
11
|
+
export async function init(options = {}) {
|
|
12
|
+
const targetDir = resolve(options.targetDir || process.cwd());
|
|
13
|
+
console.log('š Initializing LogicStamp...\n');
|
|
14
|
+
// Setup .gitignore
|
|
15
|
+
if (!options.skipGitignore) {
|
|
16
|
+
try {
|
|
17
|
+
const { added, created } = await ensureGitignorePatterns(targetDir);
|
|
18
|
+
if (created) {
|
|
19
|
+
console.log('ā
Created .gitignore with LogicStamp patterns');
|
|
20
|
+
// Save preference so stamp context won't prompt
|
|
21
|
+
await updateConfig(targetDir, { gitignorePreference: 'added' });
|
|
22
|
+
}
|
|
23
|
+
else if (added) {
|
|
24
|
+
console.log('ā
Added LogicStamp patterns to existing .gitignore');
|
|
25
|
+
// Save preference so stamp context won't prompt
|
|
26
|
+
await updateConfig(targetDir, { gitignorePreference: 'added' });
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
console.log('ā¹ļø .gitignore already contains LogicStamp patterns');
|
|
30
|
+
// Still save preference in case config doesn't exist
|
|
31
|
+
await updateConfig(targetDir, { gitignorePreference: 'added' });
|
|
32
|
+
}
|
|
33
|
+
console.log('\n The following patterns were added/verified:');
|
|
34
|
+
console.log(' - context.json');
|
|
35
|
+
console.log(' - context_*.json');
|
|
36
|
+
console.log(' - *.uif.json');
|
|
37
|
+
console.log(' - logicstamp.manifest.json');
|
|
38
|
+
console.log(' - .logicstamp/');
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('ā ļø Failed to update .gitignore:', error instanceof Error ? error.message : String(error));
|
|
42
|
+
console.log(' You can manually add the patterns to your .gitignore');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Setup LLM_CONTEXT.md
|
|
46
|
+
try {
|
|
47
|
+
if (await llmContextExists(targetDir)) {
|
|
48
|
+
console.log('\nā¹ļø LLM_CONTEXT.md already exists');
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const content = await readPackageLLMContext();
|
|
52
|
+
if (content) {
|
|
53
|
+
await writeLLMContext(targetDir, content);
|
|
54
|
+
console.log('\nā
Created LLM_CONTEXT.md');
|
|
55
|
+
// Save preference so stamp context won't prompt
|
|
56
|
+
await updateConfig(targetDir, { llmContextPreference: 'added' });
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
console.log('\nā ļø Could not find LLM_CONTEXT.md template in package');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.error('\nā ļø Failed to create LLM_CONTEXT.md:', error instanceof Error ? error.message : String(error));
|
|
65
|
+
}
|
|
66
|
+
console.log('\n⨠LogicStamp initialization complete!');
|
|
67
|
+
console.log('\nNext steps:');
|
|
68
|
+
console.log(' ⢠Run `stamp context` to generate context files');
|
|
69
|
+
console.log(' ⢠Run `stamp context --help` for more options');
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command - Validates context.json files (single or multi-file mode)
|
|
3
|
+
*/
|
|
4
|
+
import type { LogicStampBundle } from '../../core/pack.js';
|
|
5
|
+
export interface ValidationResult {
|
|
6
|
+
valid: boolean;
|
|
7
|
+
errors: number;
|
|
8
|
+
warnings: number;
|
|
9
|
+
bundles: number;
|
|
10
|
+
nodes: number;
|
|
11
|
+
edges: number;
|
|
12
|
+
messages: string[];
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Validate bundles in memory (for auto-validation during generation)
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateBundles(bundles: LogicStampBundle[]): ValidationResult;
|
|
18
|
+
/**
|
|
19
|
+
* Multi-file validation result for a single folder's context file
|
|
20
|
+
*/
|
|
21
|
+
export interface FolderValidationResult {
|
|
22
|
+
folderPath: string;
|
|
23
|
+
contextFile: string;
|
|
24
|
+
valid: boolean;
|
|
25
|
+
result: ValidationResult;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Multi-file validation result (validates all context files)
|
|
29
|
+
*/
|
|
30
|
+
export interface MultiFileValidationResult {
|
|
31
|
+
valid: boolean;
|
|
32
|
+
totalFolders: number;
|
|
33
|
+
validFolders: number;
|
|
34
|
+
invalidFolders: number;
|
|
35
|
+
folders: FolderValidationResult[];
|
|
36
|
+
totalErrors: number;
|
|
37
|
+
totalWarnings: number;
|
|
38
|
+
totalNodes: number;
|
|
39
|
+
totalEdges: number;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Multi-file validation - validates all context files using context_main.json index
|
|
43
|
+
*/
|
|
44
|
+
export declare function multiFileValidate(indexPath: string): Promise<MultiFileValidationResult>;
|
|
45
|
+
/**
|
|
46
|
+
* Validate a context.json file for basic structural validity
|
|
47
|
+
*
|
|
48
|
+
* With no arguments: Validates all context files using context_main.json (multi-file mode)
|
|
49
|
+
* With a file argument: Validates that specific file (single-file mode)
|
|
50
|
+
*/
|
|
51
|
+
export declare function validateCommand(filePath?: string, quiet?: boolean): Promise<void>;
|
|
52
|
+
//# sourceMappingURL=validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAmB,MAAM,oBAAoB,CAAC;AAS5E,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,gBAAgB,CAiF7E;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,sBAAsB,EAAE,CAAC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AA6BD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAiE7F;AAuDD;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAoJvF"}
|
|
@@ -0,0 +1,368 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validate command - Validates context.json files (single or multi-file mode)
|
|
3
|
+
*/
|
|
4
|
+
import { readFile } from 'node:fs/promises';
|
|
5
|
+
import { resolve, join, dirname } from 'node:path';
|
|
6
|
+
/**
|
|
7
|
+
* Normalize path for display (convert backslashes to forward slashes)
|
|
8
|
+
*/
|
|
9
|
+
function displayPath(path) {
|
|
10
|
+
return path.replace(/\\/g, '/');
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Validate bundles in memory (for auto-validation during generation)
|
|
14
|
+
*/
|
|
15
|
+
export function validateBundles(bundles) {
|
|
16
|
+
const result = {
|
|
17
|
+
valid: true,
|
|
18
|
+
errors: 0,
|
|
19
|
+
warnings: 0,
|
|
20
|
+
bundles: bundles.length,
|
|
21
|
+
nodes: 0,
|
|
22
|
+
edges: 0,
|
|
23
|
+
messages: [],
|
|
24
|
+
};
|
|
25
|
+
if (!Array.isArray(bundles)) {
|
|
26
|
+
result.valid = false;
|
|
27
|
+
result.errors++;
|
|
28
|
+
result.messages.push('Invalid format: expected array of bundles');
|
|
29
|
+
return result;
|
|
30
|
+
}
|
|
31
|
+
for (let i = 0; i < bundles.length; i++) {
|
|
32
|
+
const bundle = bundles[i];
|
|
33
|
+
const bundleLabel = `Bundle ${i + 1}`;
|
|
34
|
+
// Count nodes and edges
|
|
35
|
+
result.nodes += bundle.graph?.nodes?.length || 0;
|
|
36
|
+
result.edges += bundle.graph?.edges?.length || 0;
|
|
37
|
+
// Check required fields
|
|
38
|
+
if (bundle.type !== 'LogicStampBundle') {
|
|
39
|
+
result.valid = false;
|
|
40
|
+
result.errors++;
|
|
41
|
+
result.messages.push(`${bundleLabel}: Invalid type (expected 'LogicStampBundle', got '${bundle.type}')`);
|
|
42
|
+
}
|
|
43
|
+
if (bundle.schemaVersion !== '0.1') {
|
|
44
|
+
result.valid = false;
|
|
45
|
+
result.errors++;
|
|
46
|
+
result.messages.push(`${bundleLabel}: Invalid schemaVersion (expected '0.1', got '${bundle.schemaVersion}')`);
|
|
47
|
+
}
|
|
48
|
+
if (!bundle.entryId) {
|
|
49
|
+
result.valid = false;
|
|
50
|
+
result.errors++;
|
|
51
|
+
result.messages.push(`${bundleLabel}: Missing entryId`);
|
|
52
|
+
}
|
|
53
|
+
if (!bundle.graph || !Array.isArray(bundle.graph.nodes) || !Array.isArray(bundle.graph.edges)) {
|
|
54
|
+
result.valid = false;
|
|
55
|
+
result.errors++;
|
|
56
|
+
result.messages.push(`${bundleLabel}: Invalid graph structure`);
|
|
57
|
+
}
|
|
58
|
+
if (!bundle.meta || !Array.isArray(bundle.meta.missing)) {
|
|
59
|
+
result.valid = false;
|
|
60
|
+
result.errors++;
|
|
61
|
+
result.messages.push(`${bundleLabel}: Invalid meta structure`);
|
|
62
|
+
}
|
|
63
|
+
// Validate contracts
|
|
64
|
+
if (bundle.graph && bundle.graph.nodes) {
|
|
65
|
+
for (const node of bundle.graph.nodes) {
|
|
66
|
+
const contract = node.contract;
|
|
67
|
+
if (contract?.type !== 'UIFContract') {
|
|
68
|
+
result.valid = false;
|
|
69
|
+
result.errors++;
|
|
70
|
+
result.messages.push(`${bundleLabel}: Node ${node.entryId} has invalid contract type`);
|
|
71
|
+
}
|
|
72
|
+
if (contract?.schemaVersion !== '0.3') {
|
|
73
|
+
result.warnings++;
|
|
74
|
+
result.messages.push(`${bundleLabel}: Node ${node.entryId} has unexpected contract version ${contract?.schemaVersion}`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Check hash format (bundle hashes use uifb: prefix)
|
|
79
|
+
if (bundle.bundleHash && !bundle.bundleHash.match(/^uifb:[a-f0-9]{24}$/)) {
|
|
80
|
+
result.warnings++;
|
|
81
|
+
result.messages.push(`${bundleLabel}: bundleHash has unexpected format`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return result;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Load LogicStampIndex from file
|
|
88
|
+
*/
|
|
89
|
+
async function loadIndex(indexPath) {
|
|
90
|
+
try {
|
|
91
|
+
const content = await readFile(indexPath, 'utf8');
|
|
92
|
+
const index = JSON.parse(content);
|
|
93
|
+
if (index.type !== 'LogicStampIndex') {
|
|
94
|
+
throw new Error(`Invalid index file: expected type 'LogicStampIndex', got '${index.type}'`);
|
|
95
|
+
}
|
|
96
|
+
return index;
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
throw new Error(`Failed to load index from ${indexPath}: ${error.message}`);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Validate a single context file and return results
|
|
104
|
+
*/
|
|
105
|
+
async function validateContextFile(contextPath) {
|
|
106
|
+
const content = await readFile(contextPath, 'utf8');
|
|
107
|
+
const bundles = JSON.parse(content);
|
|
108
|
+
return validateBundles(bundles);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Multi-file validation - validates all context files using context_main.json index
|
|
112
|
+
*/
|
|
113
|
+
export async function multiFileValidate(indexPath) {
|
|
114
|
+
const baseDir = dirname(indexPath);
|
|
115
|
+
// Load index file
|
|
116
|
+
const index = await loadIndex(indexPath);
|
|
117
|
+
const folderResults = [];
|
|
118
|
+
let totalErrors = 0;
|
|
119
|
+
let totalWarnings = 0;
|
|
120
|
+
let totalNodes = 0;
|
|
121
|
+
let totalEdges = 0;
|
|
122
|
+
// Validate each folder's context file
|
|
123
|
+
for (const folder of index.folders) {
|
|
124
|
+
const contextPath = join(baseDir, folder.contextFile);
|
|
125
|
+
try {
|
|
126
|
+
const result = await validateContextFile(contextPath);
|
|
127
|
+
folderResults.push({
|
|
128
|
+
folderPath: folder.path,
|
|
129
|
+
contextFile: folder.contextFile,
|
|
130
|
+
valid: result.valid,
|
|
131
|
+
result,
|
|
132
|
+
});
|
|
133
|
+
totalErrors += result.errors;
|
|
134
|
+
totalWarnings += result.warnings;
|
|
135
|
+
totalNodes += result.nodes;
|
|
136
|
+
totalEdges += result.edges;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
// If validation fails, mark as invalid
|
|
140
|
+
folderResults.push({
|
|
141
|
+
folderPath: folder.path,
|
|
142
|
+
contextFile: folder.contextFile,
|
|
143
|
+
valid: false,
|
|
144
|
+
result: {
|
|
145
|
+
valid: false,
|
|
146
|
+
errors: 1,
|
|
147
|
+
warnings: 0,
|
|
148
|
+
bundles: 0,
|
|
149
|
+
nodes: 0,
|
|
150
|
+
edges: 0,
|
|
151
|
+
messages: [`Failed to validate: ${error.message}`],
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
totalErrors++;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const validFolders = folderResults.filter(f => f.valid).length;
|
|
158
|
+
const invalidFolders = folderResults.filter(f => !f.valid).length;
|
|
159
|
+
const valid = invalidFolders === 0 && totalErrors === 0;
|
|
160
|
+
return {
|
|
161
|
+
valid,
|
|
162
|
+
totalFolders: folderResults.length,
|
|
163
|
+
validFolders,
|
|
164
|
+
invalidFolders,
|
|
165
|
+
folders: folderResults,
|
|
166
|
+
totalErrors,
|
|
167
|
+
totalWarnings,
|
|
168
|
+
totalNodes,
|
|
169
|
+
totalEdges,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Display multi-file validation results
|
|
174
|
+
*/
|
|
175
|
+
function displayMultiFileValidationResult(result, quiet) {
|
|
176
|
+
// In quiet mode, only show status if invalid
|
|
177
|
+
if (quiet && result.valid) {
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (!quiet) {
|
|
181
|
+
console.log(`\n${result.valid ? 'ā
' : 'ā'} ${result.valid ? 'All context files are valid' : 'Validation failed'}\n`);
|
|
182
|
+
// Display summary
|
|
183
|
+
console.log('š Validation Summary:');
|
|
184
|
+
console.log(` Total folders: ${result.totalFolders}`);
|
|
185
|
+
console.log(` ā
Valid: ${result.validFolders}`);
|
|
186
|
+
if (result.invalidFolders > 0) {
|
|
187
|
+
console.log(` ā Invalid: ${result.invalidFolders}`);
|
|
188
|
+
}
|
|
189
|
+
console.log(` Total errors: ${result.totalErrors}`);
|
|
190
|
+
console.log(` Total warnings: ${result.totalWarnings}`);
|
|
191
|
+
console.log(` Total nodes: ${result.totalNodes}`);
|
|
192
|
+
console.log(` Total edges: ${result.totalEdges}`);
|
|
193
|
+
console.log();
|
|
194
|
+
// Display detailed results for each folder
|
|
195
|
+
console.log('š Folder Details:\n');
|
|
196
|
+
}
|
|
197
|
+
for (const folder of result.folders) {
|
|
198
|
+
if (folder.valid) {
|
|
199
|
+
// In quiet mode, skip valid folders
|
|
200
|
+
if (!quiet) {
|
|
201
|
+
console.log(` ā
VALID: ${folder.contextFile}`);
|
|
202
|
+
console.log(` Path: ${folder.folderPath}`);
|
|
203
|
+
console.log(` Bundles: ${folder.result.bundles}, Nodes: ${folder.result.nodes}, Edges: ${folder.result.edges}`);
|
|
204
|
+
if (folder.result.warnings > 0) {
|
|
205
|
+
console.log(` Warnings: ${folder.result.warnings}`);
|
|
206
|
+
folder.result.messages.forEach(msg => console.log(` ā ļø ${msg}`));
|
|
207
|
+
}
|
|
208
|
+
console.log();
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
// Always show invalid folders (errors)
|
|
213
|
+
console.log(` ā INVALID: ${folder.contextFile}`);
|
|
214
|
+
console.log(` Path: ${folder.folderPath}`);
|
|
215
|
+
console.log(` Errors: ${folder.result.errors}`);
|
|
216
|
+
folder.result.messages.forEach(msg => console.log(` ā ${msg}`));
|
|
217
|
+
console.log();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Validate a context.json file for basic structural validity
|
|
223
|
+
*
|
|
224
|
+
* With no arguments: Validates all context files using context_main.json (multi-file mode)
|
|
225
|
+
* With a file argument: Validates that specific file (single-file mode)
|
|
226
|
+
*/
|
|
227
|
+
export async function validateCommand(filePath, quiet) {
|
|
228
|
+
// If no file specified, check for multi-file mode (context_main.json)
|
|
229
|
+
if (!filePath) {
|
|
230
|
+
const mainIndexPath = resolve('context_main.json');
|
|
231
|
+
try {
|
|
232
|
+
// Try to read context_main.json
|
|
233
|
+
await readFile(mainIndexPath, 'utf8');
|
|
234
|
+
// Multi-file mode - validate all context files
|
|
235
|
+
if (!quiet) {
|
|
236
|
+
console.log(`š Validating all context files using "${displayPath(mainIndexPath)}"...\n`);
|
|
237
|
+
}
|
|
238
|
+
try {
|
|
239
|
+
const result = await multiFileValidate(mainIndexPath);
|
|
240
|
+
displayMultiFileValidationResult(result, quiet);
|
|
241
|
+
if (result.valid) {
|
|
242
|
+
if (quiet) {
|
|
243
|
+
// Minimal output in quiet mode
|
|
244
|
+
process.stdout.write('ā\n');
|
|
245
|
+
}
|
|
246
|
+
process.exit(0);
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
process.exit(1);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
catch (error) {
|
|
253
|
+
console.error(`ā Multi-file validation failed: ${error.message}`);
|
|
254
|
+
process.exit(1);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
catch {
|
|
258
|
+
// context_main.json doesn't exist, fall back to single-file mode with context.json
|
|
259
|
+
if (!quiet) {
|
|
260
|
+
console.log('ā¹ļø context_main.json not found, falling back to single-file mode\n');
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
// Single-file mode
|
|
265
|
+
const targetFile = filePath || 'context.json';
|
|
266
|
+
try {
|
|
267
|
+
const path = resolve(targetFile);
|
|
268
|
+
if (!quiet) {
|
|
269
|
+
console.log(`š Validating "${displayPath(path)}"...`);
|
|
270
|
+
}
|
|
271
|
+
const content = await readFile(path, 'utf8');
|
|
272
|
+
const bundles = JSON.parse(content);
|
|
273
|
+
// Basic validation
|
|
274
|
+
if (!Array.isArray(bundles)) {
|
|
275
|
+
console.error('ā Invalid format: expected array of bundles');
|
|
276
|
+
process.exit(1);
|
|
277
|
+
}
|
|
278
|
+
let errors = 0;
|
|
279
|
+
let warnings = 0;
|
|
280
|
+
for (let i = 0; i < bundles.length; i++) {
|
|
281
|
+
const bundle = bundles[i];
|
|
282
|
+
const bundleLabel = `Bundle ${i + 1}`;
|
|
283
|
+
// Check required fields
|
|
284
|
+
if (bundle.type !== 'LogicStampBundle') {
|
|
285
|
+
console.error(`ā ${bundleLabel}: Invalid type (expected 'LogicStampBundle', got '${bundle.type}')`);
|
|
286
|
+
errors++;
|
|
287
|
+
}
|
|
288
|
+
if (bundle.schemaVersion !== '0.1') {
|
|
289
|
+
console.error(`ā ${bundleLabel}: Invalid schemaVersion (expected '0.1', got '${bundle.schemaVersion}')`);
|
|
290
|
+
errors++;
|
|
291
|
+
}
|
|
292
|
+
if (!bundle.entryId) {
|
|
293
|
+
console.error(`ā ${bundleLabel}: Missing entryId`);
|
|
294
|
+
errors++;
|
|
295
|
+
}
|
|
296
|
+
if (!bundle.graph || !Array.isArray(bundle.graph.nodes) || !Array.isArray(bundle.graph.edges)) {
|
|
297
|
+
console.error(`ā ${bundleLabel}: Invalid graph structure`);
|
|
298
|
+
errors++;
|
|
299
|
+
}
|
|
300
|
+
if (!bundle.meta || !Array.isArray(bundle.meta.missing)) {
|
|
301
|
+
console.error(`ā ${bundleLabel}: Invalid meta structure`);
|
|
302
|
+
errors++;
|
|
303
|
+
}
|
|
304
|
+
// Validate contracts
|
|
305
|
+
if (bundle.graph && bundle.graph.nodes) {
|
|
306
|
+
for (const node of bundle.graph.nodes) {
|
|
307
|
+
const contract = node.contract;
|
|
308
|
+
if (contract?.type !== 'UIFContract') {
|
|
309
|
+
console.error(`ā ${bundleLabel}: Node ${node.entryId} has invalid contract type`);
|
|
310
|
+
errors++;
|
|
311
|
+
}
|
|
312
|
+
if (contract?.schemaVersion !== '0.3') {
|
|
313
|
+
console.warn(`ā ļø ${bundleLabel}: Node ${node.entryId} has unexpected contract version ${contract?.schemaVersion}`);
|
|
314
|
+
warnings++;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Check hash format (bundle hashes use uifb: prefix)
|
|
319
|
+
if (bundle.bundleHash && !bundle.bundleHash.match(/^uifb:[a-f0-9]{24}$/)) {
|
|
320
|
+
console.warn(`ā ļø ${bundleLabel}: bundleHash has unexpected format`);
|
|
321
|
+
warnings++;
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
if (errors === 0 && warnings === 0) {
|
|
325
|
+
if (quiet) {
|
|
326
|
+
// Minimal output in quiet mode
|
|
327
|
+
process.stdout.write('ā\n');
|
|
328
|
+
}
|
|
329
|
+
else {
|
|
330
|
+
console.log(`ā
Valid context file with ${bundles.length} bundle(s)`);
|
|
331
|
+
console.log(` Total nodes: ${bundles.reduce((sum, b) => sum + (b.graph?.nodes?.length || 0), 0)}`);
|
|
332
|
+
console.log(` Total edges: ${bundles.reduce((sum, b) => sum + (b.graph?.edges?.length || 0), 0)}`);
|
|
333
|
+
}
|
|
334
|
+
process.exit(0);
|
|
335
|
+
}
|
|
336
|
+
else if (errors === 0) {
|
|
337
|
+
if (quiet) {
|
|
338
|
+
// Minimal output in quiet mode
|
|
339
|
+
process.stdout.write('ā\n');
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
console.log(`ā
Valid with ${warnings} warning(s)`);
|
|
343
|
+
}
|
|
344
|
+
process.exit(0);
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
// Always show errors, even in quiet mode
|
|
348
|
+
console.error(`\nā Validation failed: ${errors} error(s), ${warnings} warning(s)`);
|
|
349
|
+
process.exit(1);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
catch (error) {
|
|
353
|
+
if (error.code === 'ENOENT') {
|
|
354
|
+
console.error(`ā File not found: ${targetFile}`);
|
|
355
|
+
if (!filePath) {
|
|
356
|
+
console.error(' Tip: Specify a file path or ensure context.json exists in the current directory');
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
else if (error instanceof SyntaxError) {
|
|
360
|
+
console.error(`ā Invalid JSON: ${error.message}`);
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
console.error(`ā Validation failed: ${error.message}`);
|
|
364
|
+
}
|
|
365
|
+
process.exit(1);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../../src/cli/commands/validate.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGnD;;GAEG;AACH,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAClC,CAAC;AAYD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA2B;IACzD,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,CAAC,MAAM;QACvB,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;QACrB,MAAM,CAAC,MAAM,EAAE,CAAC;QAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QAClE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAEtC,wBAAwB;QACxB,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC;QAEjD,wBAAwB;QACxB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,qDAAqD,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;YACnC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,iDAAiD,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;QAChH,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,mBAAmB,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9F,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,2BAA2B,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxD,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;YACrB,MAAM,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,0BAA0B,CAAC,CAAC;QACjE,CAAC;QAED,qBAAqB;QACrB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;oBACrC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;oBACrB,MAAM,CAAC,MAAM,EAAE,CAAC;oBAChB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,UAAU,IAAI,CAAC,OAAO,4BAA4B,CAAC,CAAC;gBACzF,CAAC;gBACD,IAAI,QAAQ,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;oBACtC,MAAM,CAAC,QAAQ,EAAE,CAAC;oBAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,UAAU,IAAI,CAAC,OAAO,oCAAoC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;gBAC1H,CAAC;YACH,CAAC;QACH,CAAC;QAED,qDAAqD;QACrD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACzE,MAAM,CAAC,QAAQ,EAAE,CAAC;YAClB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,oCAAoC,CAAC,CAAC;QAC3E,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA2BD;;GAEG;AACH,KAAK,UAAU,SAAS,CAAC,SAAiB;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;QAErD,IAAI,KAAK,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,6DAA6D,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;QAC9F,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,6BAA6B,SAAS,KAAM,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,WAAmB;IACpD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;IAC1D,OAAO,eAAe,CAAC,OAAO,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,SAAiB;IACvD,MAAM,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAEnC,kBAAkB;IAClB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;IAEzC,MAAM,aAAa,GAA6B,EAAE,CAAC;IACnD,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,aAAa,GAAG,CAAC,CAAC;IACtB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,UAAU,GAAG,CAAC,CAAC;IAEnB,sCAAsC;IACtC,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,WAAW,CAAC,CAAC;YAEtD,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM;aACP,CAAC,CAAC;YAEH,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;YAC7B,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC;YACjC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;YAC3B,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,uCAAuC;YACvC,aAAa,CAAC,IAAI,CAAC;gBACjB,UAAU,EAAE,MAAM,CAAC,IAAI;gBACvB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE;oBACN,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,CAAC;oBACT,QAAQ,EAAE,CAAC;oBACX,OAAO,EAAE,CAAC;oBACV,KAAK,EAAE,CAAC;oBACR,KAAK,EAAE,CAAC;oBACR,QAAQ,EAAE,CAAC,uBAAwB,KAAe,CAAC,OAAO,EAAE,CAAC;iBAC9D;aACF,CAAC,CAAC;YACH,WAAW,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAC/D,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,KAAK,GAAG,cAAc,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC,CAAC;IAExD,OAAO;QACL,KAAK;QACL,YAAY,EAAE,aAAa,CAAC,MAAM;QAClC,YAAY;QACZ,cAAc;QACd,OAAO,EAAE,aAAa;QACtB,WAAW;QACX,aAAa;QACb,UAAU;QACV,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gCAAgC,CAAC,MAAiC,EAAE,KAAe;IAC1F,6CAA6C;IAC7C,IAAI,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC;QAErH,kBAAkB;QAClB,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QAClD,IAAI,MAAM,CAAC,cAAc,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,2CAA2C;QAC3C,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,oCAAoC;YACpC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,MAAM,CAAC,OAAO,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,YAAY,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;gBACrH,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;oBACzD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,CAAC,CAAC;gBAC3E,CAAC;gBACD,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,uCAAuC;YACvC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,EAAE,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,QAAiB,EAAE,KAAe;IACtE,sEAAsE;IACtE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAEnD,IAAI,CAAC;YACH,gCAAgC;YAChC,MAAM,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAEtC,+CAA+C;YAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,0CAA0C,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5F,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,aAAa,CAAC,CAAC;gBACtD,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;gBAEhD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjB,IAAI,KAAK,EAAE,CAAC;wBACV,+BAA+B;wBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;oBAC9B,CAAC;oBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,mCAAoC,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,mFAAmF;YACnF,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,qEAAqE,CAAC,CAAC;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAED,mBAAmB;IACnB,MAAM,UAAU,GAAG,QAAQ,IAAI,cAAc,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzD,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;QAE1D,mBAAmB;QACnB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAEtC,wBAAwB;YACxB,IAAI,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,qDAAqD,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;gBACpG,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,MAAM,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;gBACnC,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,iDAAiD,MAAM,CAAC,aAAa,IAAI,CAAC,CAAC;gBACzG,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,mBAAmB,CAAC,CAAC;gBACnD,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9F,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,2BAA2B,CAAC,CAAC;gBAC3D,MAAM,EAAE,CAAC;YACX,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBACxD,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,0BAA0B,CAAC,CAAC;gBAC1D,MAAM,EAAE,CAAC;YACX,CAAC;YAED,qBAAqB;YACrB,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACvC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;oBACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;oBAC/B,IAAI,QAAQ,EAAE,IAAI,KAAK,aAAa,EAAE,CAAC;wBACrC,OAAO,CAAC,KAAK,CAAC,KAAK,WAAW,UAAU,IAAI,CAAC,OAAO,4BAA4B,CAAC,CAAC;wBAClF,MAAM,EAAE,CAAC;oBACX,CAAC;oBACD,IAAI,QAAQ,EAAE,aAAa,KAAK,KAAK,EAAE,CAAC;wBACtC,OAAO,CAAC,IAAI,CAAC,OAAO,WAAW,UAAU,IAAI,CAAC,OAAO,oCAAoC,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;wBACpH,QAAQ,EAAE,CAAC;oBACb,CAAC;gBACH,CAAC;YACH,CAAC;YAED,qDAAqD;YACrD,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC;gBACzE,OAAO,CAAC,IAAI,CAAC,OAAO,WAAW,oCAAoC,CAAC,CAAC;gBACrE,QAAQ,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QAED,IAAI,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnC,IAAI,KAAK,EAAE,CAAC;gBACV,+BAA+B;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;gBACrE,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrG,OAAO,CAAC,GAAG,CAAC,mBAAmB,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;YACvG,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,+BAA+B;gBAC/B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,gBAAgB,QAAQ,aAAa,CAAC,CAAC;YACrD,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,yCAAyC;YACzC,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,cAAc,QAAQ,aAAa,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;YACjD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,CAAC,oFAAoF,CAAC,CAAC;YACtG,CAAC;QACH,CAAC;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;YACxC,OAAO,CAAC,KAAK,CAAC,mBAAmB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,wBAAyB,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA;;;GAGG"}
|