@devarings/fabric-cli 0.2.1
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/dist/bin/fabric.d.ts +3 -0
- package/dist/bin/fabric.d.ts.map +1 -0
- package/dist/bin/fabric.js +118 -0
- package/dist/bin/fabric.js.map +1 -0
- package/dist/src/commands/check.d.ts +6 -0
- package/dist/src/commands/check.d.ts.map +1 -0
- package/dist/src/commands/check.js +26 -0
- package/dist/src/commands/check.js.map +1 -0
- package/dist/src/commands/compile.d.ts +2 -0
- package/dist/src/commands/compile.d.ts.map +1 -0
- package/dist/src/commands/compile.js +36 -0
- package/dist/src/commands/compile.js.map +1 -0
- package/dist/src/commands/create.d.ts +19 -0
- package/dist/src/commands/create.d.ts.map +1 -0
- package/dist/src/commands/create.js +114 -0
- package/dist/src/commands/create.js.map +1 -0
- package/dist/src/commands/diff.d.ts +6 -0
- package/dist/src/commands/diff.d.ts.map +1 -0
- package/dist/src/commands/diff.js +73 -0
- package/dist/src/commands/diff.js.map +1 -0
- package/dist/src/commands/health.d.ts +6 -0
- package/dist/src/commands/health.d.ts.map +1 -0
- package/dist/src/commands/health.js +27 -0
- package/dist/src/commands/health.js.map +1 -0
- package/dist/src/commands/init.d.ts +4 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +29 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/install.d.ts +2 -0
- package/dist/src/commands/install.d.ts.map +1 -0
- package/dist/src/commands/install.js +48 -0
- package/dist/src/commands/install.js.map +1 -0
- package/dist/src/commands/lint.d.ts +2 -0
- package/dist/src/commands/lint.d.ts.map +1 -0
- package/dist/src/commands/lint.js +29 -0
- package/dist/src/commands/lint.js.map +1 -0
- package/dist/src/commands/publish.d.ts +2 -0
- package/dist/src/commands/publish.d.ts.map +1 -0
- package/dist/src/commands/publish.js +66 -0
- package/dist/src/commands/publish.js.map +1 -0
- package/dist/src/commands/replay.d.ts +7 -0
- package/dist/src/commands/replay.d.ts.map +1 -0
- package/dist/src/commands/replay.js +57 -0
- package/dist/src/commands/replay.js.map +1 -0
- package/dist/src/commands/watch.d.ts +2 -0
- package/dist/src/commands/watch.d.ts.map +1 -0
- package/dist/src/commands/watch.js +61 -0
- package/dist/src/commands/watch.js.map +1 -0
- package/dist/src/discover.d.ts +3 -0
- package/dist/src/discover.d.ts.map +1 -0
- package/dist/src/discover.js +3 -0
- package/dist/src/discover.js.map +1 -0
- package/dist/src/formatter.d.ts +5 -0
- package/dist/src/formatter.d.ts.map +1 -0
- package/dist/src/formatter.js +106 -0
- package/dist/src/formatter.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +3 -0
- package/dist/src/index.js.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fabric.d.ts","sourceRoot":"","sources":["../../bin/fabric.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { Command } from 'commander';
|
|
4
|
+
import { check } from '../src/commands/check.js';
|
|
5
|
+
import { compile } from '../src/commands/compile.js';
|
|
6
|
+
import { create } from '../src/commands/create.js';
|
|
7
|
+
import { diff } from '../src/commands/diff.js';
|
|
8
|
+
import { health } from '../src/commands/health.js';
|
|
9
|
+
import { init } from '../src/commands/init.js';
|
|
10
|
+
import { install } from '../src/commands/install.js';
|
|
11
|
+
import { lint } from '../src/commands/lint.js';
|
|
12
|
+
import { publish } from '../src/commands/publish.js';
|
|
13
|
+
import { replay } from '../src/commands/replay.js';
|
|
14
|
+
import { watchFabric } from '../src/commands/watch.js';
|
|
15
|
+
const program = new Command();
|
|
16
|
+
program
|
|
17
|
+
.name('dvs-fabric')
|
|
18
|
+
.description('Fabric CLI — validate, create, compile, and inspect knowledge fabrics')
|
|
19
|
+
.version('0.1.0');
|
|
20
|
+
program
|
|
21
|
+
.command('check')
|
|
22
|
+
.description('Validate all atoms in the fabric (L1 + L2 + L3 + compile)')
|
|
23
|
+
.argument('[path]', 'path to the fabric root', '.')
|
|
24
|
+
.option('--json', 'output as JSON')
|
|
25
|
+
.action((path, options) => {
|
|
26
|
+
check(resolve(path), options).catch(fatal);
|
|
27
|
+
});
|
|
28
|
+
program
|
|
29
|
+
.command('create')
|
|
30
|
+
.description('Create a new atom or topic from a type template')
|
|
31
|
+
.argument('<type>', 'atom type or "topic" for full topic scaffolding')
|
|
32
|
+
.requiredOption('-d, --domain <domain>', 'domain name')
|
|
33
|
+
.requiredOption('-t, --topic <topic>', 'topic name')
|
|
34
|
+
.option('-i, --id <id>', 'atom id (required for single atoms, auto-generated for topics)')
|
|
35
|
+
.action((typeName, options) => {
|
|
36
|
+
create(typeName, options);
|
|
37
|
+
});
|
|
38
|
+
program
|
|
39
|
+
.command('compile')
|
|
40
|
+
.description('Compile all contract atoms (TypeScript, SQL)')
|
|
41
|
+
.argument('[path]', 'path to the fabric root', '.')
|
|
42
|
+
.action((path) => {
|
|
43
|
+
compile(resolve(path)).catch(fatal);
|
|
44
|
+
});
|
|
45
|
+
program
|
|
46
|
+
.command('health')
|
|
47
|
+
.description('Show detailed health report (inventory, diagnostics, coverage)')
|
|
48
|
+
.argument('[path]', 'path to the fabric root', '.')
|
|
49
|
+
.option('--json', 'output as JSON')
|
|
50
|
+
.action((path, options) => {
|
|
51
|
+
health(resolve(path), options).catch(fatal);
|
|
52
|
+
});
|
|
53
|
+
program
|
|
54
|
+
.command('replay')
|
|
55
|
+
.description('Replay scenarios against state machines and check transition coverage')
|
|
56
|
+
.argument('[path]', 'path to the fabric root', '.')
|
|
57
|
+
.option('--topic <topic>', 'filter by topic name')
|
|
58
|
+
.option('--verbose', 'show each transition step')
|
|
59
|
+
.action((path, options) => {
|
|
60
|
+
replay(resolve(path), options).catch(fatal);
|
|
61
|
+
});
|
|
62
|
+
program
|
|
63
|
+
.command('init')
|
|
64
|
+
.description('Initialize a fabric in the current directory')
|
|
65
|
+
.argument('[path]', 'directory to initialize', '.')
|
|
66
|
+
.option('--template <template>', 'template to use (blank or starter)', 'blank')
|
|
67
|
+
.action((path, options) => {
|
|
68
|
+
init(resolve(path), options);
|
|
69
|
+
});
|
|
70
|
+
program
|
|
71
|
+
.command('lint')
|
|
72
|
+
.description('Lint source code for convention violations (magic strings, etc.)')
|
|
73
|
+
.argument('[path]', 'path to the repo root', '.')
|
|
74
|
+
.action((path) => {
|
|
75
|
+
lint(resolve(path));
|
|
76
|
+
});
|
|
77
|
+
program
|
|
78
|
+
.command('watch')
|
|
79
|
+
.description('Watch fabric for changes and validate in real-time')
|
|
80
|
+
.argument('[path]', 'path to the fabric root', '.')
|
|
81
|
+
.action((path) => {
|
|
82
|
+
watchFabric(resolve(path)).catch(fatal);
|
|
83
|
+
});
|
|
84
|
+
program
|
|
85
|
+
.command('diff')
|
|
86
|
+
.description('Show fabric-aware diff between git refs')
|
|
87
|
+
.argument('[path]', 'path to the fabric root', '.')
|
|
88
|
+
.option('--ref <ref>', 'git ref to compare against', 'HEAD')
|
|
89
|
+
.action((path, options) => {
|
|
90
|
+
diff(resolve(path), options);
|
|
91
|
+
});
|
|
92
|
+
program
|
|
93
|
+
.command('install')
|
|
94
|
+
.description('Install a fabric package from a local path')
|
|
95
|
+
.argument('<source>', 'path to the package directory')
|
|
96
|
+
.action((source) => {
|
|
97
|
+
install(source);
|
|
98
|
+
});
|
|
99
|
+
program
|
|
100
|
+
.command('publish')
|
|
101
|
+
.description('Validate package for publishing (dry-run only)')
|
|
102
|
+
.argument('[path]', 'path to the package root', '.')
|
|
103
|
+
.action((path) => {
|
|
104
|
+
publish(resolve(path)).catch(fatal);
|
|
105
|
+
});
|
|
106
|
+
// Default to check if no command given
|
|
107
|
+
program
|
|
108
|
+
.argument('[path]', 'path to the fabric root (shorthand for "check")')
|
|
109
|
+
.option('--json', 'output as JSON')
|
|
110
|
+
.action((path, options) => {
|
|
111
|
+
check(resolve(path ?? '.'), options).catch(fatal);
|
|
112
|
+
});
|
|
113
|
+
program.parse();
|
|
114
|
+
function fatal(err) {
|
|
115
|
+
console.error('Fatal error:', err);
|
|
116
|
+
process.exit(2);
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=fabric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fabric.js","sourceRoot":"","sources":["../../bin/fabric.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../../src/commands/check.ts"],"names":[],"mappings":"AAIA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACxB;AAED,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB9E"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { findConfigFile, loadConfig, parse, resolveTypes, validate } from '@devarings/fabric-core';
|
|
2
|
+
import { discoverAtoms } from '../discover.js';
|
|
3
|
+
import { formatJson, formatText } from '../formatter.js';
|
|
4
|
+
export async function check(path, options) {
|
|
5
|
+
const start = performance.now();
|
|
6
|
+
const configInfo = findConfigFile(path);
|
|
7
|
+
if (!configInfo) {
|
|
8
|
+
console.error('Error: No devarings.yml found. Run from a fabric root or pass a path.');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const config = loadConfig(configInfo);
|
|
12
|
+
const catalogue = resolveTypes();
|
|
13
|
+
const files = await discoverAtoms(config.root);
|
|
14
|
+
const atoms = files.map((f) => parse(f.relativePath, f.content));
|
|
15
|
+
const result = await validate(atoms, catalogue, config);
|
|
16
|
+
const elapsed = (performance.now() - start).toFixed(0);
|
|
17
|
+
if (options.json) {
|
|
18
|
+
console.log(formatJson(result));
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
console.log(formatText(result));
|
|
22
|
+
console.log(`\n Done in ${elapsed}ms`);
|
|
23
|
+
}
|
|
24
|
+
process.exit(result.summary.errors > 0 ? 1 : 0);
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../src/commands/check.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAMxD,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,IAAY,EAAE,OAAqB;IAC7D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAE/B,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,uEAAuE,CAAC,CAAA;QACtF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACrC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAEvD,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEtD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;QAC/B,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../../src/commands/compile.ts"],"names":[],"mappings":"AAWA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoCzD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { COMPILE_RULE_PREFIX, findConfigFile, loadConfig, parse, resolveTypes, TYPES, validate, } from '@devarings/fabric-core';
|
|
2
|
+
import { discoverAtoms } from '../discover.js';
|
|
3
|
+
export async function compile(path) {
|
|
4
|
+
const start = performance.now();
|
|
5
|
+
const configInfo = findConfigFile(path);
|
|
6
|
+
if (!configInfo) {
|
|
7
|
+
console.error('Error: No devarings.yml found. Run from a fabric root or pass a path.');
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const config = loadConfig(configInfo);
|
|
11
|
+
const catalogue = resolveTypes();
|
|
12
|
+
const files = await discoverAtoms(config.root);
|
|
13
|
+
const atoms = files.map((f) => parse(f.relativePath, f.content));
|
|
14
|
+
const result = await validate(atoms, catalogue, config);
|
|
15
|
+
const compileDiags = result.diagnostics.filter((d) => d.rule.startsWith(COMPILE_RULE_PREFIX));
|
|
16
|
+
const contractCount = atoms.filter((a) => a.frontmatter.type === TYPES.CONTRACT).length;
|
|
17
|
+
const errors = compileDiags.filter((d) => d.severity === 'error').length;
|
|
18
|
+
const elapsed = (performance.now() - start).toFixed(0);
|
|
19
|
+
if (compileDiags.length === 0 && contractCount === 0) {
|
|
20
|
+
console.log('No contracts found in the fabric.');
|
|
21
|
+
}
|
|
22
|
+
else if (compileDiags.length === 0) {
|
|
23
|
+
console.log(`\x1b[32m\u2713\x1b[0m ${contractCount} contracts compiled successfully`);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
for (const d of compileDiags) {
|
|
27
|
+
const icon = d.severity === 'error' ? '\x1b[31m\u2717\x1b[0m' : '\x1b[33m\u26A0\x1b[0m';
|
|
28
|
+
const line = d.line ? `:${d.line}` : '';
|
|
29
|
+
console.log(`${icon} ${d.file}${line} ${d.message}`);
|
|
30
|
+
}
|
|
31
|
+
console.log(`\n${contractCount} contracts, ${errors} errors`);
|
|
32
|
+
}
|
|
33
|
+
console.log(`\n Done in ${elapsed}ms`);
|
|
34
|
+
process.exit(errors > 0 ? 1 : 0);
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compile.js","sourceRoot":"","sources":["../../../src/commands/compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { TypeCatalogue } from '@devarings/fabric-core';
|
|
2
|
+
export interface CreateOptions {
|
|
3
|
+
id: string;
|
|
4
|
+
domain: string;
|
|
5
|
+
topic: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function createAtom(typeName: string, fabricRoot: string, catalogue: TypeCatalogue, options: CreateOptions): string;
|
|
8
|
+
export declare function createTopic(fabricRoot: string, catalogue: TypeCatalogue, options: {
|
|
9
|
+
domain: string;
|
|
10
|
+
topic: string;
|
|
11
|
+
}): string[];
|
|
12
|
+
interface CreateActionOptions {
|
|
13
|
+
id?: string | undefined;
|
|
14
|
+
domain: string;
|
|
15
|
+
topic: string;
|
|
16
|
+
}
|
|
17
|
+
export declare function create(typeName: string, options: CreateActionOptions): void;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../src/commands/create.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAG3D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,aAAa,GACrB,MAAM,CAYR;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC,MAAM,EAAE,CA6BV;AA6CD,UAAU,mBAAmB;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAoC3E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { dirname, join } from 'node:path';
|
|
3
|
+
import { findConfigFile, loadConfig, resolveTypes } from '@devarings/fabric-core';
|
|
4
|
+
export function createAtom(typeName, fabricRoot, catalogue, options) {
|
|
5
|
+
const typeDecl = catalogue.types.get(typeName);
|
|
6
|
+
if (!typeDecl) {
|
|
7
|
+
throw new Error(`Unknown type "${typeName}". Available types: ${[...catalogue.types.keys()].join(', ')}`);
|
|
8
|
+
}
|
|
9
|
+
const content = renderTemplate(typeDecl.template, options);
|
|
10
|
+
const filePath = resolveAtomPath(typeName, fabricRoot, options);
|
|
11
|
+
writeFileSafe(filePath, content);
|
|
12
|
+
return filePath;
|
|
13
|
+
}
|
|
14
|
+
export function createTopic(fabricRoot, catalogue, options) {
|
|
15
|
+
const created = [];
|
|
16
|
+
const prefix = options.topic;
|
|
17
|
+
// Overview
|
|
18
|
+
const ovwPath = createAtom('overview', fabricRoot, catalogue, {
|
|
19
|
+
id: `OVW-${prefix}`,
|
|
20
|
+
domain: options.domain,
|
|
21
|
+
topic: options.topic,
|
|
22
|
+
});
|
|
23
|
+
created.push(ovwPath);
|
|
24
|
+
// Spec
|
|
25
|
+
const specPath = createAtom('spec', fabricRoot, catalogue, {
|
|
26
|
+
id: `SPEC-${prefix}`,
|
|
27
|
+
domain: options.domain,
|
|
28
|
+
topic: options.topic,
|
|
29
|
+
});
|
|
30
|
+
created.push(specPath);
|
|
31
|
+
// Decisions directory placeholder
|
|
32
|
+
const decisionsDir = join(fabricRoot, options.domain, options.topic, 'design', 'decisions');
|
|
33
|
+
if (!existsSync(decisionsDir)) {
|
|
34
|
+
mkdirSync(decisionsDir, { recursive: true });
|
|
35
|
+
writeFileSync(join(decisionsDir, '.gitkeep'), '', 'utf-8');
|
|
36
|
+
created.push(join(decisionsDir, '.gitkeep'));
|
|
37
|
+
}
|
|
38
|
+
return created;
|
|
39
|
+
}
|
|
40
|
+
function renderTemplate(template, options) {
|
|
41
|
+
const today = new Date().toISOString().slice(0, 10);
|
|
42
|
+
return template
|
|
43
|
+
.replace(/\{id\}/g, options.id)
|
|
44
|
+
.replace(/\{domain\}/g, options.domain)
|
|
45
|
+
.replace(/\{topic\}/g, options.topic)
|
|
46
|
+
.replace(/\{date\}/g, today)
|
|
47
|
+
.replace(/\{title\}/g, options.topic);
|
|
48
|
+
}
|
|
49
|
+
function writeFileSafe(filePath, content) {
|
|
50
|
+
const dir = dirname(filePath);
|
|
51
|
+
if (!existsSync(dir)) {
|
|
52
|
+
mkdirSync(dir, { recursive: true });
|
|
53
|
+
}
|
|
54
|
+
writeFileSync(filePath, content, 'utf-8');
|
|
55
|
+
}
|
|
56
|
+
function resolveAtomPath(typeName, fabricRoot, options) {
|
|
57
|
+
const base = join(fabricRoot, options.domain, options.topic);
|
|
58
|
+
switch (typeName) {
|
|
59
|
+
case 'overview':
|
|
60
|
+
return join(base, 'overview.md');
|
|
61
|
+
case 'spec':
|
|
62
|
+
return join(base, 'design', 'spec.md');
|
|
63
|
+
case 'tech-decision':
|
|
64
|
+
return join(base, 'design', 'decisions', `${options.id}.md`);
|
|
65
|
+
case 'prd':
|
|
66
|
+
return join(base, 'discover', 'prd.md');
|
|
67
|
+
case 'feature':
|
|
68
|
+
return join(base, 'discover', 'features', `${options.id}.yaml`);
|
|
69
|
+
case 'roadmap':
|
|
70
|
+
return join(base, 'plan', 'roadmap.md');
|
|
71
|
+
case 'convention':
|
|
72
|
+
return join(fabricRoot, 'conventions', `${options.topic}.md`);
|
|
73
|
+
default:
|
|
74
|
+
return join(base, `${options.id}.md`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
export function create(typeName, options) {
|
|
78
|
+
const configInfo = findConfigFile(process.cwd());
|
|
79
|
+
if (!configInfo) {
|
|
80
|
+
console.error('Error: No devarings.yml found.');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
const config = loadConfig(configInfo);
|
|
84
|
+
const catalogue = resolveTypes();
|
|
85
|
+
try {
|
|
86
|
+
if (typeName === 'topic') {
|
|
87
|
+
const files = createTopic(config.root, catalogue, {
|
|
88
|
+
domain: options.domain,
|
|
89
|
+
topic: options.topic,
|
|
90
|
+
});
|
|
91
|
+
console.log(`Created topic "${options.domain}/${options.topic}" with ${files.length} files:`);
|
|
92
|
+
for (const f of files) {
|
|
93
|
+
console.log(` ${f}`);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
if (!options.id) {
|
|
98
|
+
console.error('Missing required option: --id');
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
const filePath = createAtom(typeName, config.root, catalogue, {
|
|
102
|
+
id: options.id,
|
|
103
|
+
domain: options.domain,
|
|
104
|
+
topic: options.topic,
|
|
105
|
+
});
|
|
106
|
+
console.log(`Created ${typeName} atom: ${filePath}`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/commands/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACzB;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA6E7D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { execSync } from 'node:child_process';
|
|
2
|
+
import { readFileSync } from 'node:fs';
|
|
3
|
+
import { relative, resolve } from 'node:path';
|
|
4
|
+
import { findConfigFile, loadConfig, parse } from '@devarings/fabric-core';
|
|
5
|
+
export function diff(path, options) {
|
|
6
|
+
const configInfo = findConfigFile(path);
|
|
7
|
+
if (!configInfo) {
|
|
8
|
+
console.error('Error: No devarings.yml found.');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const config = loadConfig(configInfo);
|
|
12
|
+
const ref = options.ref ?? 'HEAD';
|
|
13
|
+
let gitOutput;
|
|
14
|
+
try {
|
|
15
|
+
gitOutput = execSync(`git diff --name-status ${ref}`, {
|
|
16
|
+
cwd: config.configDir,
|
|
17
|
+
encoding: 'utf-8',
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
console.error('Error: Could not run git diff. Is this a git repository?');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
if (!gitOutput.trim()) {
|
|
25
|
+
console.log('No changes since', ref);
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const lines = gitOutput.trim().split('\n');
|
|
29
|
+
const fabricRoot = config.root;
|
|
30
|
+
const fabricRelative = relative(config.configDir, fabricRoot);
|
|
31
|
+
let fabricChanges = 0;
|
|
32
|
+
let codeChanges = 0;
|
|
33
|
+
console.log(`\x1b[1mFabric Diff\x1b[0m — ${ref} → working tree\n`);
|
|
34
|
+
for (const line of lines) {
|
|
35
|
+
const [status, filePath] = line.split('\t');
|
|
36
|
+
if (!status || !filePath) {
|
|
37
|
+
continue;
|
|
38
|
+
}
|
|
39
|
+
const isFabric = filePath.startsWith(fabricRelative) || filePath.startsWith('.devarings/');
|
|
40
|
+
const isPackage = filePath.startsWith('packages/');
|
|
41
|
+
if (isFabric) {
|
|
42
|
+
fabricChanges++;
|
|
43
|
+
const icon = status === 'A'
|
|
44
|
+
? '\x1b[32m+\x1b[0m'
|
|
45
|
+
: status === 'D'
|
|
46
|
+
? '\x1b[31m-\x1b[0m'
|
|
47
|
+
: '\x1b[33m~\x1b[0m';
|
|
48
|
+
const label = status === 'A' ? 'added' : status === 'D' ? 'deleted' : 'modified';
|
|
49
|
+
// Try to read atom metadata for added/modified files
|
|
50
|
+
let meta = '';
|
|
51
|
+
if (status !== 'D') {
|
|
52
|
+
try {
|
|
53
|
+
const absolutePath = resolve(config.configDir, filePath);
|
|
54
|
+
const content = readFileSync(absolutePath, 'utf-8');
|
|
55
|
+
const atom = parse(filePath, content);
|
|
56
|
+
const type = atom.frontmatter.type ?? '?';
|
|
57
|
+
const atomStatus = atom.frontmatter.status ?? '?';
|
|
58
|
+
meta = `\x1b[2m(${String(type)}, ${String(atomStatus)})\x1b[0m`;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
// Can't parse — skip metadata
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
console.log(` ${icon} ${filePath} ${label} ${meta}`);
|
|
65
|
+
}
|
|
66
|
+
else if (isPackage) {
|
|
67
|
+
codeChanges++;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
console.log('');
|
|
71
|
+
console.log(`${fabricChanges} fabric changes, ${codeChanges} code changes`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../../src/commands/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../../src/commands/health.ts"],"names":[],"mappings":"AAWA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACxB;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgChF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { computeDetailedHealth, findConfigFile, loadConfig, parse, resolveTypes, validate, } from '@devarings/fabric-core';
|
|
2
|
+
import { discoverAtoms } from '../discover.js';
|
|
3
|
+
import { formatHealth } from '../formatter.js';
|
|
4
|
+
export async function health(path, options) {
|
|
5
|
+
const start = performance.now();
|
|
6
|
+
const configInfo = findConfigFile(path);
|
|
7
|
+
if (!configInfo) {
|
|
8
|
+
console.error('Error: No devarings.yml found.');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
const config = loadConfig(configInfo);
|
|
12
|
+
const catalogue = resolveTypes();
|
|
13
|
+
const files = await discoverAtoms(config.root);
|
|
14
|
+
const atoms = files.map((f) => parse(f.relativePath, f.content));
|
|
15
|
+
const result = await validate(atoms, catalogue, config);
|
|
16
|
+
const detailed = computeDetailedHealth(atoms, result.diagnostics, result.summary.edgeCoverage, result.summary.gapCount);
|
|
17
|
+
const elapsed = (performance.now() - start).toFixed(0);
|
|
18
|
+
if (options.json) {
|
|
19
|
+
console.log(JSON.stringify(detailed, null, 2));
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
console.log(formatHealth(detailed, config.workspace));
|
|
23
|
+
console.log(`\n Done in ${elapsed}ms`);
|
|
24
|
+
}
|
|
25
|
+
process.exit(detailed.score >= 80 ? 0 : 1);
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../../src/commands/health.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,UAAU,EACV,KAAK,EACL,YAAY,EACZ,QAAQ,GACT,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAM9C,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,OAAsB;IAC/D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAE/B,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;QAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,MAAM,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACrC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;IAChE,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IAEvD,MAAM,QAAQ,GAAG,qBAAqB,CACpC,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,OAAO,CAAC,YAAY,EAC3B,MAAM,CAAC,OAAO,CAAC,QAAQ,CACxB,CAAA;IAED,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEtD,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IAChD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAA;QACrD,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,IAAI,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC5C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAGA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CA8BvE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
export function init(path, options) {
|
|
4
|
+
const configPath = join(path, 'devarings.yml');
|
|
5
|
+
if (existsSync(configPath)) {
|
|
6
|
+
console.error('Error: devarings.yml already exists in this directory.');
|
|
7
|
+
process.exit(1);
|
|
8
|
+
}
|
|
9
|
+
// Dynamic import to avoid hard dependency on create-fabric
|
|
10
|
+
import('create-fabric')
|
|
11
|
+
.then(({ scaffold }) => {
|
|
12
|
+
const template = options.template === 'starter' ? 'starter' : 'blank';
|
|
13
|
+
const name = path.split('/').pop() ?? 'my-fabric';
|
|
14
|
+
console.log(`\nInitializing fabric in current directory with ${template} template...\n`);
|
|
15
|
+
const created = scaffold(path, { name, template });
|
|
16
|
+
for (const file of created) {
|
|
17
|
+
console.log(` ${file}`);
|
|
18
|
+
}
|
|
19
|
+
console.log(`\n\u2713 Initialized ${created.length} files`);
|
|
20
|
+
console.log('\nNext steps:');
|
|
21
|
+
console.log(' dvs fabric check .');
|
|
22
|
+
console.log('');
|
|
23
|
+
})
|
|
24
|
+
.catch(() => {
|
|
25
|
+
console.error('Error: create-fabric package not found. Install it first.');
|
|
26
|
+
process.exit(1);
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,MAAM,UAAU,IAAI,CAAC,IAAY,EAAE,OAA8B;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;IAC9C,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC,CAAA;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,2DAA2D;IAC3D,MAAM,CAAC,eAAe,CAAC;SACpB,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAA;QACrE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAA;QAEjD,OAAO,CAAC,GAAG,CAAC,mDAAmD,QAAQ,gBAAgB,CAAC,CAAA;QAExF,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QAC1B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,OAAO,CAAC,MAAM,QAAQ,CAAC,CAAA;QAC3D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAA;QAC5B,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACnC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAA;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC,CAAC,CAAA;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"AAKA,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAmDhD"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { cpSync, existsSync, mkdirSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { basename, join, resolve } from 'node:path';
|
|
3
|
+
import { findConfigFile, loadConfig } from '@devarings/fabric-core';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
export function install(sourcePath) {
|
|
6
|
+
const absoluteSource = resolve(sourcePath);
|
|
7
|
+
if (!existsSync(absoluteSource)) {
|
|
8
|
+
console.error(`Error: Path "${sourcePath}" does not exist.`);
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
// Read manifest from devarings.yml (package: section) or legacy fabric-package.yaml
|
|
12
|
+
const devaringsPath = join(absoluteSource, 'devarings.yml');
|
|
13
|
+
const legacyPath = join(absoluteSource, 'fabric-package.yaml');
|
|
14
|
+
let packageName;
|
|
15
|
+
let version;
|
|
16
|
+
if (existsSync(devaringsPath)) {
|
|
17
|
+
const content = readFileSync(devaringsPath, 'utf-8');
|
|
18
|
+
const config = yaml.load(content);
|
|
19
|
+
const pkg = (config.package ?? {});
|
|
20
|
+
packageName = String(pkg.name ?? basename(absoluteSource));
|
|
21
|
+
version = String(pkg.version ?? '0.0.0');
|
|
22
|
+
}
|
|
23
|
+
else if (existsSync(legacyPath)) {
|
|
24
|
+
const content = readFileSync(legacyPath, 'utf-8');
|
|
25
|
+
const manifest = yaml.load(content);
|
|
26
|
+
packageName = String(manifest.name ?? basename(absoluteSource));
|
|
27
|
+
version = String(manifest.version ?? '0.0.0');
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
console.error(`Error: No devarings.yml found in "${sourcePath}".`);
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
// Find fabric root
|
|
34
|
+
const configInfo = findConfigFile(process.cwd());
|
|
35
|
+
if (!configInfo) {
|
|
36
|
+
console.error('Error: No devarings.yml found.');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const config = loadConfig(configInfo);
|
|
40
|
+
const depsDir = join(config.configDir, '.fabric', 'deps', packageName);
|
|
41
|
+
if (existsSync(depsDir)) {
|
|
42
|
+
console.log(`Package "${packageName}" already installed. Replacing...`);
|
|
43
|
+
}
|
|
44
|
+
mkdirSync(depsDir, { recursive: true });
|
|
45
|
+
cpSync(absoluteSource, depsDir, { recursive: true });
|
|
46
|
+
console.log(`\x1b[32m\u2713\x1b[0m Installed ${packageName}@${version} → .fabric/deps/${packageName}/`);
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../src/commands/lint.ts"],"names":[],"mappings":"AAGA,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CA4BvC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { join, resolve } from 'node:path';
|
|
2
|
+
import { lintCode } from '@devarings/fabric-core';
|
|
3
|
+
export function lint(path) {
|
|
4
|
+
const targetDir = resolve(path);
|
|
5
|
+
const packagesDir = join(targetDir, 'packages');
|
|
6
|
+
const start = performance.now();
|
|
7
|
+
const result = lintCode(packagesDir);
|
|
8
|
+
const elapsed = (performance.now() - start).toFixed(0);
|
|
9
|
+
for (const d of result.diagnostics) {
|
|
10
|
+
const icon = d.severity === 'error' ? '\x1b[31m\u2717\x1b[0m' : '\x1b[33m\u26A0\x1b[0m';
|
|
11
|
+
const line = d.line ? `:${d.line}` : '';
|
|
12
|
+
console.log(`${icon} ${d.file}${line}`);
|
|
13
|
+
console.log(` ${d.message}`);
|
|
14
|
+
if (d.suggestion) {
|
|
15
|
+
console.log(` \x1b[2m\u2192 ${d.suggestion}\x1b[0m`);
|
|
16
|
+
}
|
|
17
|
+
console.log('');
|
|
18
|
+
}
|
|
19
|
+
const { errors, warnings } = result.summary;
|
|
20
|
+
if (errors === 0 && warnings === 0) {
|
|
21
|
+
console.log('\x1b[32mPASS\x1b[0m No code lint violations found.');
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
console.log(`\x1b[31mFAIL\x1b[0m ${errors} errors, ${warnings} warnings`);
|
|
25
|
+
}
|
|
26
|
+
console.log(`\n Done in ${elapsed}ms`);
|
|
27
|
+
process.exit(errors > 0 ? 1 : 0);
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=lint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../src/commands/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAEjD,MAAM,UAAU,IAAI,CAAC,IAAY;IAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAE/C,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAA;IACpC,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;IAEtD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,uBAAuB,CAAA;QACvF,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACvC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC,CAAA;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QAC7B,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,UAAU,SAAS,CAAC,CAAA;QACvD,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,OAAO,CAAA;IAC3C,IAAI,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAA;IACnE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,uBAAuB,MAAM,YAAY,QAAQ,WAAW,CAAC,CAAA;IAC3E,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAe,OAAO,IAAI,CAAC,CAAA;IACvC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAClC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"AAMA,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgEzD"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
import { findConfigFile, loadConfig, parse, resolveTypes, validate } from '@devarings/fabric-core';
|
|
4
|
+
import yaml from 'js-yaml';
|
|
5
|
+
import { discoverAtoms } from '../discover.js';
|
|
6
|
+
export async function publish(path) {
|
|
7
|
+
const targetDir = resolve(path);
|
|
8
|
+
console.log('\x1b[1mPre-publish validation\x1b[0m\n');
|
|
9
|
+
// 1. Check devarings.yml with package: section (or legacy fabric-package.yaml)
|
|
10
|
+
const devaringsPath = join(targetDir, 'devarings.yml');
|
|
11
|
+
const legacyPath = join(targetDir, 'fabric-package.yaml');
|
|
12
|
+
let pkgName;
|
|
13
|
+
let pkgVersion;
|
|
14
|
+
if (existsSync(devaringsPath)) {
|
|
15
|
+
const config = yaml.load(readFileSync(devaringsPath, 'utf-8'));
|
|
16
|
+
const pkg = (config.package ?? {});
|
|
17
|
+
pkgName = String(pkg.name ?? '');
|
|
18
|
+
pkgVersion = String(pkg.version ?? '');
|
|
19
|
+
if (!pkgName || !pkgVersion) {
|
|
20
|
+
console.error('\x1b[31m\u2717\x1b[0m devarings.yml package section missing name or version');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
console.log('\x1b[32m\u2713\x1b[0m devarings.yml with package config found');
|
|
24
|
+
}
|
|
25
|
+
else if (existsSync(legacyPath)) {
|
|
26
|
+
const manifest = yaml.load(readFileSync(legacyPath, 'utf-8'));
|
|
27
|
+
pkgName = String(manifest.name ?? '');
|
|
28
|
+
pkgVersion = String(manifest.version ?? '');
|
|
29
|
+
if (!pkgName || !pkgVersion) {
|
|
30
|
+
console.error('\x1b[31m\u2717\x1b[0m fabric-package.yaml missing name or version');
|
|
31
|
+
process.exit(1);
|
|
32
|
+
}
|
|
33
|
+
console.log('\x1b[32m\u2713\x1b[0m fabric-package.yaml found (legacy format)');
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
console.error('\x1b[31m\u2717\x1b[0m No devarings.yml or fabric-package.yaml found');
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
console.log(`\x1b[32m\u2713\x1b[0m Package: ${pkgName}@${pkgVersion}`);
|
|
40
|
+
// 2. Check README.md exists
|
|
41
|
+
if (!existsSync(join(targetDir, 'README.md'))) {
|
|
42
|
+
console.error('\x1b[31m\u2717\x1b[0m README.md not found');
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
console.log('\x1b[32m\u2713\x1b[0m README.md found');
|
|
46
|
+
// 3. Run full validation — score must be 100
|
|
47
|
+
const configInfo = findConfigFile(targetDir);
|
|
48
|
+
if (configInfo) {
|
|
49
|
+
const config = loadConfig(configInfo);
|
|
50
|
+
const catalogue = resolveTypes();
|
|
51
|
+
const files = await discoverAtoms(config.root);
|
|
52
|
+
const atoms = files.map((f) => parse(f.relativePath, f.content));
|
|
53
|
+
const result = await validate(atoms, catalogue, config);
|
|
54
|
+
if (result.summary.errors > 0) {
|
|
55
|
+
console.error(`\x1b[31m\u2717\x1b[0m Validation failed: ${result.summary.errors} errors`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
console.log(`\x1b[32m\u2713\x1b[0m Validation: Score ${result.summary.score}/100`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.log('\x1b[33m\u26A0\x1b[0m No fabric config found — skipping validation');
|
|
62
|
+
}
|
|
63
|
+
console.log('\n\x1b[32mPASS\x1b[0m Package ready to publish (--dry-run)');
|
|
64
|
+
console.log('\x1b[2mActual publishing requires a registry backend (Hive-side).\x1b[0m');
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/commands/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../../src/commands/replay.ts"],"names":[],"mappings":"AAGA,UAAU,aAAa;IACrB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC1B,OAAO,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CAC3B;AAED,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAkEhF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { findConfigFile, loadConfig, parse, runReplay } from '@devarings/fabric-core';
|
|
2
|
+
import { discoverAtoms } from '../discover.js';
|
|
3
|
+
export async function replay(path, options) {
|
|
4
|
+
const start = performance.now();
|
|
5
|
+
const configInfo = findConfigFile(path);
|
|
6
|
+
if (!configInfo) {
|
|
7
|
+
console.error('Error: No devarings.yml found.');
|
|
8
|
+
process.exit(1);
|
|
9
|
+
}
|
|
10
|
+
const config = loadConfig(configInfo);
|
|
11
|
+
const files = await discoverAtoms(config.root);
|
|
12
|
+
let atoms = files.map((f) => parse(f.relativePath, f.content));
|
|
13
|
+
if (options.topic) {
|
|
14
|
+
atoms = atoms.filter((a) => a.frontmatter.topic === options.topic);
|
|
15
|
+
}
|
|
16
|
+
const { diagnostics, results } = runReplay(atoms);
|
|
17
|
+
const elapsed = (performance.now() - start).toFixed(0);
|
|
18
|
+
if (results.length === 0) {
|
|
19
|
+
console.log('No state machines with matching scenarios found.');
|
|
20
|
+
console.log(`\n Done in ${elapsed}ms`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const result of results) {
|
|
24
|
+
const icon = result.passed ? '\x1b[32m\u2713\x1b[0m' : '\x1b[31m\u2717\x1b[0m';
|
|
25
|
+
console.log(`${icon} ${result.scenarioId} against ${result.stateMachineId}`);
|
|
26
|
+
if (options.verbose || !result.passed) {
|
|
27
|
+
for (const step of result.steps) {
|
|
28
|
+
const stepIcon = step.valid ? '\x1b[32m\u2713\x1b[0m' : '\x1b[31m\u2717\x1b[0m';
|
|
29
|
+
console.log(` ${stepIcon} ${step.event}: ${step.fromState} \u2192 ${step.toState}`);
|
|
30
|
+
if (step.error) {
|
|
31
|
+
console.log(` \x1b[31m${step.error}\x1b[0m`);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
console.log(` Coverage: ${result.coverage.covered}/${result.coverage.total} transitions (${result.coverage.percent}%)`);
|
|
36
|
+
if (result.coverage.uncovered.length > 0 && options.verbose) {
|
|
37
|
+
for (const t of result.coverage.uncovered) {
|
|
38
|
+
console.log(` \x1b[2m\u2717 ${t.from} \u2192 ${t.to} (${t.event})\x1b[0m`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
console.log('');
|
|
42
|
+
}
|
|
43
|
+
const passed = results.filter((r) => r.passed).length;
|
|
44
|
+
const failed = results.filter((r) => !r.passed).length;
|
|
45
|
+
if (diagnostics.length > 0) {
|
|
46
|
+
console.log('\x1b[1mDiagnostics:\x1b[0m');
|
|
47
|
+
for (const d of diagnostics) {
|
|
48
|
+
const icon = d.severity === 'error' ? '\x1b[31m\u2717\x1b[0m' : '\x1b[33m\u26A0\x1b[0m';
|
|
49
|
+
console.log(` ${icon} ${d.file}: ${d.message}`);
|
|
50
|
+
}
|
|
51
|
+
console.log('');
|
|
52
|
+
}
|
|
53
|
+
console.log(`${passed} passed, ${failed} failed`);
|
|
54
|
+
console.log(`\n Done in ${elapsed}ms`);
|
|
55
|
+
process.exit(failed > 0 ? 1 : 0);
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../../src/commands/replay.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../../src/commands/watch.ts"],"names":[],"mappings":"AAcA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkE7D"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { createValidationCache, findConfigFile, incrementalValidate, loadConfig, parse, resolveTypes, validate, } from '@devarings/fabric-core';
|
|
3
|
+
import { watch } from 'chokidar';
|
|
4
|
+
import { discoverAtoms } from '../discover.js';
|
|
5
|
+
import { formatText } from '../formatter.js';
|
|
6
|
+
export async function watchFabric(path) {
|
|
7
|
+
const configInfo = findConfigFile(path);
|
|
8
|
+
if (!configInfo) {
|
|
9
|
+
console.error('Error: No devarings.yml found.');
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const config = loadConfig(configInfo);
|
|
13
|
+
const catalogue = resolveTypes();
|
|
14
|
+
const cache = createValidationCache();
|
|
15
|
+
console.log(`\x1b[1mFabric Watch\x1b[0m — ${config.workspace}`);
|
|
16
|
+
console.log(`Watching: ${config.root}`);
|
|
17
|
+
console.log('Press Ctrl+C to stop.\n');
|
|
18
|
+
// Initial full validation
|
|
19
|
+
await runFullValidation(config.root, catalogue, config);
|
|
20
|
+
// Watch for changes
|
|
21
|
+
const watcher = watch(['**/*.md', '**/*.yaml', '**/*.yml', '**/*.ts', '**/*.sql'], {
|
|
22
|
+
cwd: config.root,
|
|
23
|
+
ignored: ['**/node_modules/**', '**/dist/**', '**/.git/**', '**/.turbo/**'],
|
|
24
|
+
persistent: true,
|
|
25
|
+
ignoreInitial: true,
|
|
26
|
+
});
|
|
27
|
+
watcher.on('change', async (filePath) => {
|
|
28
|
+
const absolutePath = `${config.root}/${filePath}`;
|
|
29
|
+
const content = readFileSync(absolutePath, 'utf-8');
|
|
30
|
+
// Quick check: is the file already cached with same content?
|
|
31
|
+
if (cache.has(filePath, content)) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
console.clear();
|
|
35
|
+
console.log(`\x1b[2m[${new Date().toLocaleTimeString()}]\x1b[0m Changed: ${filePath}\n`);
|
|
36
|
+
// Incremental: re-parse changed file + full validation
|
|
37
|
+
const files = await discoverAtoms(config.root);
|
|
38
|
+
const fileData = files.map((f) => ({ path: f.relativePath, content: f.content }));
|
|
39
|
+
const { atoms, changed, cached } = incrementalValidate(fileData, parse, catalogue, config, cache);
|
|
40
|
+
console.log(`\x1b[2mParsed: ${changed} changed, ${cached} cached\x1b[0m\n`);
|
|
41
|
+
// Full validation (L3 + compile + replay need all atoms)
|
|
42
|
+
const result = await validate(atoms, catalogue, config);
|
|
43
|
+
console.log(formatText(result));
|
|
44
|
+
console.log(`\n\x1b[2mWaiting for changes...\x1b[0m`);
|
|
45
|
+
});
|
|
46
|
+
watcher.on('add', async () => {
|
|
47
|
+
await runFullValidation(config.root, catalogue, config);
|
|
48
|
+
});
|
|
49
|
+
watcher.on('unlink', async () => {
|
|
50
|
+
cache.clear();
|
|
51
|
+
await runFullValidation(config.root, catalogue, config);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function runFullValidation(root, catalogue, config) {
|
|
55
|
+
const files = await discoverAtoms(root);
|
|
56
|
+
const atoms = files.map((f) => parse(f.relativePath, f.content));
|
|
57
|
+
const result = await validate(atoms, catalogue, config);
|
|
58
|
+
console.log(formatText(result));
|
|
59
|
+
console.log(`\n\x1b[2mWaiting for changes...\x1b[0m`);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=watch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../../src/commands/watch.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.d.ts","sourceRoot":"","sources":["../../src/discover.ts"],"names":[],"mappings":"AAEA,YAAY,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover.js","sourceRoot":"","sources":["../../src/discover.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAG7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { DetailedHealthMetrics, ValidationResult } from '@devarings/fabric-core';
|
|
2
|
+
export declare function formatText(result: ValidationResult, useColor?: boolean): string;
|
|
3
|
+
export declare function formatJson(result: ValidationResult): string;
|
|
4
|
+
export declare function formatHealth(health: DetailedHealthMetrics, workspace: string, useColor?: boolean): string;
|
|
5
|
+
//# sourceMappingURL=formatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.d.ts","sourceRoot":"","sources":["../../src/formatter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AASrF,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,UAAO,GAAG,MAAM,CA2C5E;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE3D;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,qBAAqB,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,UAAO,GACd,MAAM,CA8ER"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const RED = '\x1b[31m';
|
|
2
|
+
const YELLOW = '\x1b[33m';
|
|
3
|
+
const GREEN = '\x1b[32m';
|
|
4
|
+
const DIM = '\x1b[2m';
|
|
5
|
+
const BOLD = '\x1b[1m';
|
|
6
|
+
const RESET = '\x1b[0m';
|
|
7
|
+
export function formatText(result, useColor = true) {
|
|
8
|
+
const c = useColor
|
|
9
|
+
? { red: RED, yellow: YELLOW, green: GREEN, dim: DIM, bold: BOLD, reset: RESET }
|
|
10
|
+
: { red: '', yellow: '', green: '', dim: '', bold: '', reset: '' };
|
|
11
|
+
const lines = [];
|
|
12
|
+
// Group diagnostics by file
|
|
13
|
+
const byFile = new Map();
|
|
14
|
+
for (const d of result.diagnostics) {
|
|
15
|
+
const existing = byFile.get(d.file);
|
|
16
|
+
if (existing) {
|
|
17
|
+
existing.push(d);
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
byFile.set(d.file, [d]);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
for (const [file, diagnostics] of byFile) {
|
|
24
|
+
lines.push(`${c.bold}${file}${c.reset}`);
|
|
25
|
+
for (const d of diagnostics) {
|
|
26
|
+
const icon = d.severity === 'error' ? `${c.red}\u2717${c.reset}` : `${c.yellow}\u26A0${c.reset}`;
|
|
27
|
+
const line = d.line ? `:${d.line}` : '';
|
|
28
|
+
lines.push(` ${icon} ${c.dim}${d.rule}${c.reset}${line} ${d.message}`);
|
|
29
|
+
if (d.suggestion) {
|
|
30
|
+
lines.push(` ${c.dim}\u2192 ${d.suggestion}${c.reset}`);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
lines.push('');
|
|
34
|
+
}
|
|
35
|
+
// Summary
|
|
36
|
+
const { atomsChecked, errors, warnings, score, edgeCoverage, gapCount } = result.summary;
|
|
37
|
+
const status = errors > 0 ? `${c.red}FAIL${c.reset}` : `${c.green}PASS${c.reset}`;
|
|
38
|
+
const scoreColor = score >= 80 ? c.green : score >= 50 ? c.yellow : c.red;
|
|
39
|
+
const covColor = edgeCoverage >= 80 ? c.green : edgeCoverage >= 50 ? c.yellow : c.red;
|
|
40
|
+
lines.push(`${status} ${atomsChecked} atoms checked, ${c.red}${errors} errors${c.reset}, ${c.yellow}${warnings} warnings${c.reset} — Score: ${scoreColor}${score}/100${c.reset}`);
|
|
41
|
+
lines.push(` Edge coverage: ${covColor}${edgeCoverage}%${c.reset} | ${gapCount} gaps detected`);
|
|
42
|
+
return lines.join('\n');
|
|
43
|
+
}
|
|
44
|
+
export function formatJson(result) {
|
|
45
|
+
return JSON.stringify(result, null, 2);
|
|
46
|
+
}
|
|
47
|
+
export function formatHealth(health, workspace, useColor = true) {
|
|
48
|
+
const c = useColor
|
|
49
|
+
? { red: RED, yellow: YELLOW, green: GREEN, dim: DIM, bold: BOLD, reset: RESET }
|
|
50
|
+
: { red: '', yellow: '', green: '', dim: '', bold: '', reset: '' };
|
|
51
|
+
const lines = [];
|
|
52
|
+
// Header
|
|
53
|
+
const scoreColor = health.score >= 80 ? c.green : health.score >= 50 ? c.yellow : c.red;
|
|
54
|
+
const icon = health.score >= 80 ? '\u2713' : health.score >= 50 ? '\u26A0' : '\u2717';
|
|
55
|
+
lines.push(`${c.bold}Fabric Health \u2014 ${workspace}${c.reset}`);
|
|
56
|
+
lines.push(`${c.dim}\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500${c.reset}`);
|
|
57
|
+
lines.push('');
|
|
58
|
+
lines.push(`Score: ${scoreColor}${health.score}/100${c.reset} ${icon}`);
|
|
59
|
+
lines.push('');
|
|
60
|
+
// Inventory
|
|
61
|
+
lines.push(`${c.bold}Inventory:${c.reset}`);
|
|
62
|
+
const typeSummary = Object.entries(health.inventory.byType)
|
|
63
|
+
.sort(([, a], [, b]) => b - a)
|
|
64
|
+
.map(([type, count]) => `${count} ${type}`)
|
|
65
|
+
.join(', ');
|
|
66
|
+
lines.push(` ${health.inventory.totalAtoms} atoms (${typeSummary})`);
|
|
67
|
+
const domainSummary = Object.entries(health.inventory.byDomain)
|
|
68
|
+
.sort(([, a], [, b]) => b - a)
|
|
69
|
+
.map(([domain, count]) => `${domain}: ${count}`)
|
|
70
|
+
.join(', ');
|
|
71
|
+
lines.push(` ${Object.keys(health.inventory.byDomain).length} domains (${domainSummary})`);
|
|
72
|
+
if (health.inventory.contractsCompiled > 0) {
|
|
73
|
+
lines.push(` ${c.green}${health.inventory.contractsCompiled} contracts compiled \u2713${c.reset}`);
|
|
74
|
+
}
|
|
75
|
+
lines.push('');
|
|
76
|
+
// Diagnostics breakdown
|
|
77
|
+
lines.push(`${c.bold}Diagnostics:${c.reset}`);
|
|
78
|
+
const errCount = health.errorPenalty / 10;
|
|
79
|
+
const warnCount = health.warnPenalty / 2;
|
|
80
|
+
if (errCount === 0 && warnCount === 0) {
|
|
81
|
+
lines.push(` ${c.green}0 errors, 0 warnings${c.reset}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
lines.push(` ${c.red}${errCount} errors${c.reset}, ${c.yellow}${warnCount} warnings${c.reset}`);
|
|
85
|
+
}
|
|
86
|
+
if (health.informational.glossaryViolations > 0) {
|
|
87
|
+
lines.push(` ${c.dim}${health.informational.glossaryViolations} glossary violations (informational)${c.reset}`);
|
|
88
|
+
}
|
|
89
|
+
if (health.informational.orphanAtoms > 0) {
|
|
90
|
+
lines.push(` ${c.dim}${health.informational.orphanAtoms} orphan atoms (informational)${c.reset}`);
|
|
91
|
+
}
|
|
92
|
+
if (health.informational.optionalEdgeGaps > 0) {
|
|
93
|
+
lines.push(` ${c.dim}${health.informational.optionalEdgeGaps} optional edge gaps (informational)${c.reset}`);
|
|
94
|
+
}
|
|
95
|
+
lines.push('');
|
|
96
|
+
// Coverage
|
|
97
|
+
lines.push(`${c.bold}Coverage:${c.reset}`);
|
|
98
|
+
const covColor = health.coverage.edgePercent >= 80
|
|
99
|
+
? c.green
|
|
100
|
+
: health.coverage.edgePercent >= 50
|
|
101
|
+
? c.yellow
|
|
102
|
+
: c.red;
|
|
103
|
+
lines.push(` Edge coverage: ${covColor}${health.coverage.edgePercent}%${c.reset} (${health.coverage.gapCount} gaps)`);
|
|
104
|
+
return lines.join('\n');
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=formatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/formatter.ts"],"names":[],"mappings":"AAEA,MAAM,GAAG,GAAG,UAAU,CAAA;AACtB,MAAM,MAAM,GAAG,UAAU,CAAA;AACzB,MAAM,KAAK,GAAG,UAAU,CAAA;AACxB,MAAM,GAAG,GAAG,SAAS,CAAA;AACrB,MAAM,IAAI,GAAG,SAAS,CAAA;AACtB,MAAM,KAAK,GAAG,SAAS,CAAA;AAEvB,MAAM,UAAU,UAAU,CAAC,MAAwB,EAAE,QAAQ,GAAG,IAAI;IAClE,MAAM,CAAC,GAAG,QAAQ;QAChB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;QAChF,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAEpE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,4BAA4B;IAC5B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAqC,CAAA;IAC3D,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QACnC,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,MAAM,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;QACxC,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,IAAI,GACR,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,SAAS,CAAC,CAAC,KAAK,EAAE,CAAA;YACrF,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;YACvC,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;YACvE,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;gBACjB,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;YAC5D,CAAC;QACH,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,CAAC;IAED,UAAU;IACV,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,OAAO,CAAA;IACxF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,KAAK,EAAE,CAAA;IACjF,MAAM,UAAU,GAAG,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACzE,MAAM,QAAQ,GAAG,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACrF,KAAK,CAAC,IAAI,CACR,GAAG,MAAM,IAAI,YAAY,mBAAmB,CAAC,CAAC,GAAG,GAAG,MAAM,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,QAAQ,YAAY,CAAC,CAAC,KAAK,aAAa,UAAU,GAAG,KAAK,OAAO,CAAC,CAAC,KAAK,EAAE,CACtK,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,oBAAoB,QAAQ,GAAG,YAAY,IAAI,CAAC,CAAC,KAAK,MAAM,QAAQ,gBAAgB,CAAC,CAAA;IAEhG,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAwB;IACjD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACxC,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAA6B,EAC7B,SAAiB,EACjB,QAAQ,GAAG,IAAI;IAEf,MAAM,CAAC,GAAG,QAAQ;QAChB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE;QAChF,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAA;IAEpE,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,SAAS;IACT,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACvF,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAA;IACrF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,wBAAwB,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAClE,KAAK,CAAC,IAAI,CACR,GAAG,CAAC,CAAC,GAAG,uLAAuL,CAAC,CAAC,KAAK,EAAE,CACzM,CAAA;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,UAAU,UAAU,GAAG,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAA;IACxE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,YAAY;IACZ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;SACxD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC;SAC1C,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,SAAS,CAAC,UAAU,WAAW,WAAW,GAAG,CAAC,CAAA;IAErE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;SAC5D,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SAC7B,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,MAAM,KAAK,KAAK,EAAE,CAAC;SAC/C,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,aAAa,aAAa,GAAG,CAAC,CAAA;IAE3F,IAAI,MAAM,CAAC,SAAS,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,iBAAiB,6BAA6B,CAAC,CAAC,KAAK,EAAE,CACxF,CAAA;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,wBAAwB;IACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,GAAG,EAAE,CAAA;IACzC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAA;IACxC,IAAI,QAAQ,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC1D,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,QAAQ,UAAU,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,MAAM,GAAG,SAAS,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAClG,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,CAAC,kBAAkB,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,kBAAkB,uCAAuC,CAAC,CAAC,KAAK,EAAE,CACrG,CAAA;IACH,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,WAAW,gCAAgC,CAAC,CAAC,KAAK,EAAE,CACvF,CAAA;IACH,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;QAC9C,KAAK,CAAC,IAAI,CACR,KAAK,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,gBAAgB,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAClG,CAAA;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEd,WAAW;IACX,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,YAAY,CAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IAC1C,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;QAC/B,CAAC,CAAC,CAAC,CAAC,KAAK;QACT,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,EAAE;YACjC,CAAC,CAAC,CAAC,CAAC,MAAM;YACV,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;IACb,KAAK,CAAC,IAAI,CACR,oBAAoB,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,QAAQ,CAAC,QAAQ,QAAQ,CAC3G,CAAA;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devarings/fabric-cli",
|
|
3
|
+
"version": "0.2.1",
|
|
4
|
+
"description": "Fabric CLI — dvs fabric check/create/compile",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/devarings/fabric"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [
|
|
11
|
+
"fabric",
|
|
12
|
+
"cli",
|
|
13
|
+
"validator"
|
|
14
|
+
],
|
|
15
|
+
"type": "module",
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"!dist/tsconfig.tsbuildinfo"
|
|
19
|
+
],
|
|
20
|
+
"bin": {
|
|
21
|
+
"dvs-fabric": "./dist/bin/fabric.js"
|
|
22
|
+
},
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"import": "./dist/src/index.js",
|
|
26
|
+
"types": "./dist/src/index.d.ts"
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"scripts": {
|
|
30
|
+
"build": "tsc --build",
|
|
31
|
+
"typecheck": "tsc --noEmit",
|
|
32
|
+
"lint": "biome check .",
|
|
33
|
+
"format": "biome check --write .",
|
|
34
|
+
"test": "vitest run"
|
|
35
|
+
},
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@devarings/fabric-core": "workspace:*",
|
|
38
|
+
"chokidar": "^5.0.0",
|
|
39
|
+
"commander": "^14.0.3",
|
|
40
|
+
"create-fabric": "workspace:*",
|
|
41
|
+
"glob": "^13.0.6",
|
|
42
|
+
"js-yaml": "^4.1.1"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"@types/js-yaml": "^4.0.9",
|
|
46
|
+
"@types/node": "^25.5.2"
|
|
47
|
+
}
|
|
48
|
+
}
|