@yourtechtribe-labs/koncept-cli 0.2.0-alpha.0 → 0.2.0-alpha.2
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/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +65 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +29 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.d.ts","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIjD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAanE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { runChecks } from '@yourtechtribe-labs/koncept-core';
|
|
2
|
+
// ─── Entry point ──────────────────────────────────────────────────────────────
|
|
3
|
+
export async function runCheck(ctx) {
|
|
4
|
+
const filterId = typeof ctx.flags.id === 'string' ? ctx.flags.id : undefined;
|
|
5
|
+
const json = ctx.flags.json === true;
|
|
6
|
+
const result = await runChecks({ cwd: ctx.rootDir, filterId });
|
|
7
|
+
if (json) {
|
|
8
|
+
renderJson(result);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
renderTable(result);
|
|
12
|
+
}
|
|
13
|
+
return exitCode(result);
|
|
14
|
+
}
|
|
15
|
+
// ─── Renderers ────────────────────────────────────────────────────────────────
|
|
16
|
+
function renderTable(result) {
|
|
17
|
+
const total = result.results.length;
|
|
18
|
+
const concepts = new Set(result.results.map((r) => r.conceptId)).size;
|
|
19
|
+
process.stdout.write(`koncepto check — ${concepts} concept(s), ${total} invariant(s)\n\n`);
|
|
20
|
+
for (const r of result.results) {
|
|
21
|
+
const symbol = statusSymbol(r.status);
|
|
22
|
+
const line = [
|
|
23
|
+
' ',
|
|
24
|
+
r.conceptId.padEnd(24),
|
|
25
|
+
r.invariantId.padEnd(28),
|
|
26
|
+
r.kind.padEnd(9),
|
|
27
|
+
symbol,
|
|
28
|
+
r.status,
|
|
29
|
+
].join(' ');
|
|
30
|
+
process.stdout.write(line + '\n');
|
|
31
|
+
if (r.detail) {
|
|
32
|
+
process.stdout.write(` └─ ${r.detail}\n`);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
process.stdout.write(`\n Results: ${result.passed} passed · ${result.failed} failed · ${result.skipped} skipped · ${result.errors} errors\n`);
|
|
36
|
+
}
|
|
37
|
+
function renderJson(result) {
|
|
38
|
+
const output = {
|
|
39
|
+
results: result.results,
|
|
40
|
+
summary: {
|
|
41
|
+
passed: result.passed,
|
|
42
|
+
failed: result.failed,
|
|
43
|
+
skipped: result.skipped,
|
|
44
|
+
errors: result.errors,
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
process.stdout.write(JSON.stringify(output, null, 2) + '\n');
|
|
48
|
+
}
|
|
49
|
+
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
50
|
+
function statusSymbol(status) {
|
|
51
|
+
switch (status) {
|
|
52
|
+
case 'pass': return '✓';
|
|
53
|
+
case 'fail': return '✗';
|
|
54
|
+
case 'skip': return '–';
|
|
55
|
+
case 'error': return '!';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function exitCode(result) {
|
|
59
|
+
if (result.errors > 0)
|
|
60
|
+
return 2;
|
|
61
|
+
if (result.failed > 0)
|
|
62
|
+
return 1;
|
|
63
|
+
return 0;
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAiCA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,UAAU,EAAE,MAAM,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,CAAA;CACxC;AAaD,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBtF"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { realpathSync } from 'node:fs';
|
|
2
3
|
import { resolve } from 'node:path';
|
|
3
4
|
import { pathToFileURL } from 'node:url';
|
|
4
5
|
import { parseArgs } from './args.js';
|
|
@@ -7,6 +8,7 @@ import { runVerify } from './commands/verify.js';
|
|
|
7
8
|
import { runList } from './commands/list.js';
|
|
8
9
|
import { runLink } from './commands/link.js';
|
|
9
10
|
import { runAffected } from './commands/affected.js';
|
|
11
|
+
import { runCheck } from './commands/check.js';
|
|
10
12
|
import { VERSION } from './version.js';
|
|
11
13
|
const HELP = `koncepto ${VERSION}
|
|
12
14
|
|
|
@@ -20,6 +22,9 @@ Usage:
|
|
|
20
22
|
--role=<r> --purpose=<p>
|
|
21
23
|
koncepto affected [--from <ref>] Report concepts/invariants touched by a diff
|
|
22
24
|
[--files=a,b,c] [--json]
|
|
25
|
+
koncepto check Execute invariant.check payloads (grep + command)
|
|
26
|
+
[--id <concept-id>] (filter to one concept)
|
|
27
|
+
[--json] (machine-readable output)
|
|
23
28
|
|
|
24
29
|
Flags:
|
|
25
30
|
--help, --version
|
|
@@ -30,6 +35,7 @@ const COMMANDS = {
|
|
|
30
35
|
list: runList,
|
|
31
36
|
link: runLink,
|
|
32
37
|
affected: runAffected,
|
|
38
|
+
check: runCheck,
|
|
33
39
|
};
|
|
34
40
|
export async function run(argv, cwd = process.cwd()) {
|
|
35
41
|
const { command, positional, flags } = parseArgs(argv);
|
|
@@ -52,9 +58,29 @@ export async function run(argv, cwd = process.cwd()) {
|
|
|
52
58
|
}
|
|
53
59
|
return handler({ rootDir: resolve(cwd), positional, flags });
|
|
54
60
|
}
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
61
|
+
/**
|
|
62
|
+
* True when this module is the process entrypoint (i.e. run as a CLI).
|
|
63
|
+
*
|
|
64
|
+
* `import.meta.url` is realpath-resolved by Node's ESM loader, but
|
|
65
|
+
* `process.argv[1]` is NOT: package managers expose the bin as a symlink
|
|
66
|
+
* (npm `node_modules/.bin/koncepto`, pnpm's `.pnpm` store indirection).
|
|
67
|
+
* Comparing the two raw paths therefore never matches under `pnpm run` /
|
|
68
|
+
* `npx` / `node_modules/.bin`, so the CLI silently no-ops (exit 0, no
|
|
69
|
+
* output). Resolve argv[1] through realpath before comparing so symlinked
|
|
70
|
+
* bin invocations are detected correctly.
|
|
71
|
+
*/
|
|
72
|
+
function invokedAsScript() {
|
|
73
|
+
const argv1 = process.argv[1];
|
|
74
|
+
if (argv1 === undefined)
|
|
75
|
+
return false;
|
|
76
|
+
try {
|
|
77
|
+
return import.meta.url === pathToFileURL(realpathSync(argv1)).href;
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (invokedAsScript()) {
|
|
58
84
|
run(process.argv.slice(2))
|
|
59
85
|
.then((code) => process.exit(code))
|
|
60
86
|
.catch((err) => {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,MAAM,IAAI,GAAG,YAAY,OAAO
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|