behavior-contracts 0.8.7 → 0.8.8
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/cli-contract.yaml +189 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +76 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/codegen.d.ts +6 -0
- package/dist/commands/codegen.d.ts.map +1 -0
- package/dist/commands/codegen.js +39 -0
- package/dist/commands/codegen.js.map +1 -0
- package/dist/generated/commands.d.ts +8 -0
- package/dist/generated/commands.d.ts.map +1 -0
- package/dist/generated/commands.js +55 -0
- package/dist/generated/commands.js.map +1 -0
- package/dist/generated/contract.d.ts +3 -0
- package/dist/generated/contract.d.ts.map +1 -0
- package/dist/generated/contract.js +5 -0
- package/dist/generated/contract.js.map +1 -0
- package/dist/generated/index.d.ts +7 -0
- package/dist/generated/index.d.ts.map +1 -0
- package/dist/generated/index.js +7 -0
- package/dist/generated/index.js.map +1 -0
- package/dist/generated/program.d.ts +17 -0
- package/dist/generated/program.d.ts.map +1 -0
- package/dist/generated/program.js +117 -0
- package/dist/generated/program.js.map +1 -0
- package/dist/generated/schemas.d.ts +2 -0
- package/dist/generated/schemas.d.ts.map +1 -0
- package/dist/generated/schemas.js +3 -0
- package/dist/generated/schemas.js.map +1 -0
- package/dist/generated/types.d.ts +35 -0
- package/dist/generated/types.d.ts.map +1 -0
- package/dist/generated/types.js +3 -0
- package/dist/generated/types.js.map +1 -0
- package/dist/generator/core.d.ts.map +1 -1
- package/dist/generator/core.js +6 -0
- package/dist/generator/core.js.map +1 -1
- package/dist/generator/typed.d.ts +4 -2
- package/dist/generator/typed.d.ts.map +1 -1
- package/dist/generator/typed.js +4 -2
- package/dist/generator/typed.js.map +1 -1
- package/package.json +12 -2
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
# yaml-language-server: $schema=./node_modules/cli-contracts/schemas/cli-contract.schema.json
|
|
2
|
+
cli_contracts: 0.1.0
|
|
3
|
+
|
|
4
|
+
info:
|
|
5
|
+
title: behavior-contracts CLI
|
|
6
|
+
version: 0.1.0
|
|
7
|
+
description: >-
|
|
8
|
+
bc — the build-time codegen CLI over behavior-contracts' public API.
|
|
9
|
+
Reads a serialized ComponentGraphIRDoc (the unbranded JSON IR), adopts it
|
|
10
|
+
via loadCompiledIR, and runs the same generateModule the in-process API runs
|
|
11
|
+
to emit a runtime-free native module (data baked as literals). The IR doc is
|
|
12
|
+
a build-time input only; nothing reads it at runtime.
|
|
13
|
+
license:
|
|
14
|
+
name: MIT
|
|
15
|
+
contact:
|
|
16
|
+
name: foo-ogawa
|
|
17
|
+
url: https://github.com/foo-ogawa/behavior-contracts
|
|
18
|
+
|
|
19
|
+
artifact_slots:
|
|
20
|
+
ir-doc:
|
|
21
|
+
direction: read
|
|
22
|
+
description: Serialized ComponentGraphIRDoc (unbranded JSON IR) — the codegen input.
|
|
23
|
+
generated-module:
|
|
24
|
+
direction: write
|
|
25
|
+
description: Generated native module source (baked-literal, runtime-free).
|
|
26
|
+
|
|
27
|
+
command_sets:
|
|
28
|
+
bc:
|
|
29
|
+
summary: build-time codegen CLI over behavior-contracts' public API.
|
|
30
|
+
executable: bc
|
|
31
|
+
|
|
32
|
+
global_options:
|
|
33
|
+
- name: version
|
|
34
|
+
aliases: [V]
|
|
35
|
+
description: Print version and exit.
|
|
36
|
+
schema:
|
|
37
|
+
type: boolean
|
|
38
|
+
|
|
39
|
+
- name: help
|
|
40
|
+
aliases: [h]
|
|
41
|
+
description: Show help and exit.
|
|
42
|
+
schema:
|
|
43
|
+
type: boolean
|
|
44
|
+
|
|
45
|
+
commands:
|
|
46
|
+
# ── generate ─────────────────────────────────────────
|
|
47
|
+
generate:
|
|
48
|
+
summary: Emit a native module from a serialized IR doc.
|
|
49
|
+
description: >-
|
|
50
|
+
Reads the --in ComponentGraphIRDoc, adopts it via loadCompiledIR, and
|
|
51
|
+
runs generateModule for the --lang emitter. Writes the module source
|
|
52
|
+
to --out if given, else to stdout. Rejects an unregistered --lang.
|
|
53
|
+
usage:
|
|
54
|
+
- bc generate --lang rust-typed-native --in ir-doc.json
|
|
55
|
+
- bc generate --lang go-typed-native --in ir-doc.json --out gen.go
|
|
56
|
+
- bc generate --lang typescript-typed --in ir-doc.json --runtime-import ./runtime.js
|
|
57
|
+
|
|
58
|
+
options:
|
|
59
|
+
- name: lang
|
|
60
|
+
required: true
|
|
61
|
+
description: >-
|
|
62
|
+
Target emitter (must be a registered language, e.g.
|
|
63
|
+
rust-typed-native, go-typed-native, typescript-typed).
|
|
64
|
+
value_name: emitter
|
|
65
|
+
schema:
|
|
66
|
+
type: string
|
|
67
|
+
|
|
68
|
+
- name: in
|
|
69
|
+
required: true
|
|
70
|
+
description: Path to the serialized ComponentGraphIRDoc JSON file.
|
|
71
|
+
value_name: ir-doc.json
|
|
72
|
+
schema:
|
|
73
|
+
type: string
|
|
74
|
+
file:
|
|
75
|
+
mode: read
|
|
76
|
+
exists: true
|
|
77
|
+
media_type: application/json
|
|
78
|
+
encoding: utf-8
|
|
79
|
+
|
|
80
|
+
- name: out
|
|
81
|
+
required: false
|
|
82
|
+
description: Write the generated module here instead of stdout.
|
|
83
|
+
value_name: file
|
|
84
|
+
schema:
|
|
85
|
+
type: string
|
|
86
|
+
file:
|
|
87
|
+
mode: write
|
|
88
|
+
|
|
89
|
+
- name: runtime-import
|
|
90
|
+
required: false
|
|
91
|
+
description: Override the runtime import specifier baked into the module.
|
|
92
|
+
value_name: spec
|
|
93
|
+
schema:
|
|
94
|
+
type: string
|
|
95
|
+
|
|
96
|
+
exits:
|
|
97
|
+
'0':
|
|
98
|
+
description: Module generated (written to --out, or printed to stdout).
|
|
99
|
+
stdout:
|
|
100
|
+
format: text
|
|
101
|
+
'1':
|
|
102
|
+
description: >-
|
|
103
|
+
Generation failed (unreadable/invalid --in, or --lang is not a
|
|
104
|
+
registered emitter).
|
|
105
|
+
stderr:
|
|
106
|
+
format: text
|
|
107
|
+
'2':
|
|
108
|
+
description: Usage error — a required option (--lang or --in) was omitted.
|
|
109
|
+
stderr:
|
|
110
|
+
format: text
|
|
111
|
+
|
|
112
|
+
x-agent:
|
|
113
|
+
riskLevel: low
|
|
114
|
+
requiresConfirmation: false
|
|
115
|
+
idempotent: true
|
|
116
|
+
sideEffects:
|
|
117
|
+
- file_write
|
|
118
|
+
sideEffectNote: >-
|
|
119
|
+
Writes to the filesystem only when --out is specified; otherwise
|
|
120
|
+
output goes to stdout.
|
|
121
|
+
|
|
122
|
+
# ── check ────────────────────────────────────────────
|
|
123
|
+
check:
|
|
124
|
+
summary: Verify a committed module matches a fresh generation (drift gate).
|
|
125
|
+
description: >-
|
|
126
|
+
Regenerates the module from --in for --lang and byte-compares it
|
|
127
|
+
against the committed --out file. Exits non-zero on drift. This is the
|
|
128
|
+
build's codegen drift gate.
|
|
129
|
+
usage:
|
|
130
|
+
- bc check --lang rust-typed-native --in ir-doc.json --out gen.rs
|
|
131
|
+
|
|
132
|
+
options:
|
|
133
|
+
- name: lang
|
|
134
|
+
required: true
|
|
135
|
+
description: Target emitter (must be a registered language).
|
|
136
|
+
value_name: emitter
|
|
137
|
+
schema:
|
|
138
|
+
type: string
|
|
139
|
+
|
|
140
|
+
- name: in
|
|
141
|
+
required: true
|
|
142
|
+
description: Path to the serialized ComponentGraphIRDoc JSON file.
|
|
143
|
+
value_name: ir-doc.json
|
|
144
|
+
schema:
|
|
145
|
+
type: string
|
|
146
|
+
file:
|
|
147
|
+
mode: read
|
|
148
|
+
exists: true
|
|
149
|
+
media_type: application/json
|
|
150
|
+
encoding: utf-8
|
|
151
|
+
|
|
152
|
+
- name: out
|
|
153
|
+
required: true
|
|
154
|
+
description: The committed module file to diff a fresh generation against.
|
|
155
|
+
value_name: file
|
|
156
|
+
schema:
|
|
157
|
+
type: string
|
|
158
|
+
file:
|
|
159
|
+
mode: read
|
|
160
|
+
exists: true
|
|
161
|
+
|
|
162
|
+
- name: runtime-import
|
|
163
|
+
required: false
|
|
164
|
+
description: Override the runtime import specifier baked into the module.
|
|
165
|
+
value_name: spec
|
|
166
|
+
schema:
|
|
167
|
+
type: string
|
|
168
|
+
|
|
169
|
+
exits:
|
|
170
|
+
'0':
|
|
171
|
+
description: Up to date — the committed --out matches a fresh generation.
|
|
172
|
+
stdout:
|
|
173
|
+
format: text
|
|
174
|
+
'1':
|
|
175
|
+
description: >-
|
|
176
|
+
Drift detected (--out differs or does not exist), or generation
|
|
177
|
+
failed (unreadable/invalid --in, or unregistered --lang).
|
|
178
|
+
stderr:
|
|
179
|
+
format: text
|
|
180
|
+
'2':
|
|
181
|
+
description: Usage error — a required option (--lang or --in) was omitted.
|
|
182
|
+
stderr:
|
|
183
|
+
format: text
|
|
184
|
+
|
|
185
|
+
x-agent:
|
|
186
|
+
riskLevel: low
|
|
187
|
+
requiresConfirmation: false
|
|
188
|
+
idempotent: true
|
|
189
|
+
sideEffects: []
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
3
|
+
// bc — the build-time codegen CLI over behavior-contracts' public API.
|
|
4
|
+
//
|
|
5
|
+
// The arg parsing / dispatch / validation is GENERATED from cli-contract.yaml
|
|
6
|
+
// (./generated/program.ts, via cli-contracts). This entry only implements the
|
|
7
|
+
// per-command handlers (I/O + exit semantics) and runs the program; the actual
|
|
8
|
+
// codegen core lives in ./commands/codegen.ts (a thin wrapper over the public
|
|
9
|
+
// API — no emit logic reimplemented).
|
|
10
|
+
//
|
|
11
|
+
// bc generate --lang <emitter> --in <ir-doc.json> [--out <file>] [--runtime-import <spec>]
|
|
12
|
+
// bc check --lang <emitter> --in <ir-doc.json> --out <file> [--runtime-import <spec>]
|
|
13
|
+
//
|
|
14
|
+
// generate → emit the native module (to --out, or stdout if omitted).
|
|
15
|
+
// check → regenerate + byte-diff against --out; exit 1 on drift (the build's drift gate).
|
|
16
|
+
//
|
|
17
|
+
// The IR doc is a BUILD-TIME input only; nothing reads it at runtime. The generated module is a
|
|
18
|
+
// runtime-free native module with its data baked as literals.
|
|
19
|
+
import { readFileSync, writeFileSync } from "node:fs";
|
|
20
|
+
import { createRequire } from "node:module";
|
|
21
|
+
import { createProgram } from "./generated/program.js";
|
|
22
|
+
import { generateFromDoc, readDoc } from "./commands/codegen.js";
|
|
23
|
+
const require = createRequire(import.meta.url);
|
|
24
|
+
const pkg = require("../package.json");
|
|
25
|
+
/** Validate required options + generate. Exits the process on any failure (2=usage, 1=generation). */
|
|
26
|
+
function generateOrExit(opts) {
|
|
27
|
+
if (!opts.lang) {
|
|
28
|
+
process.stderr.write("bc: --lang <emitter> is required\n");
|
|
29
|
+
process.exit(2);
|
|
30
|
+
}
|
|
31
|
+
if (!opts.in) {
|
|
32
|
+
process.stderr.write("bc: --in <ir-doc.json> is required\n");
|
|
33
|
+
process.exit(2);
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
return generateFromDoc(readDoc(opts.in), opts.lang, opts.runtimeImport);
|
|
37
|
+
}
|
|
38
|
+
catch (e) {
|
|
39
|
+
process.stderr.write(`bc: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const handlers = {
|
|
44
|
+
// ── generate ─────────────────────────────────────────────────────────────
|
|
45
|
+
generate: async (opts) => {
|
|
46
|
+
const code = generateOrExit(opts);
|
|
47
|
+
if (opts.out)
|
|
48
|
+
writeFileSync(opts.out, code);
|
|
49
|
+
else
|
|
50
|
+
process.stdout.write(code);
|
|
51
|
+
},
|
|
52
|
+
// ── check ────────────────────────────────────────────────────────────────
|
|
53
|
+
check: async (opts) => {
|
|
54
|
+
if (!opts.out) {
|
|
55
|
+
process.stderr.write("bc: check requires --out <file> to diff against\n");
|
|
56
|
+
process.exit(2);
|
|
57
|
+
}
|
|
58
|
+
const code = generateOrExit(opts);
|
|
59
|
+
let committed;
|
|
60
|
+
try {
|
|
61
|
+
committed = readFileSync(opts.out, "utf8");
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
process.stderr.write(`bc: DRIFT — --out '${opts.out}' does not exist (nothing to check against)\n`);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
if (committed !== code) {
|
|
68
|
+
process.stderr.write(`bc: DRIFT — ${opts.out} differs from a fresh generation. Re-bake with: ` +
|
|
69
|
+
`bc generate --lang ${opts.lang} --in ${opts.in} --out ${opts.out}\n`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
process.stdout.write(`bc: up to date — ${opts.out}\n`);
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
createProgram(handlers, pkg.version).parse();
|
|
76
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type ComponentGraphIRDoc } from "../index.js";
|
|
2
|
+
/** A serialized IR doc → the native module source (same path as the in-process API). */
|
|
3
|
+
export declare function generateFromDoc(doc: ComponentGraphIRDoc, language: string, runtimeImport?: string): string;
|
|
4
|
+
/** Read + parse a serialized ComponentGraphIRDoc from disk. */
|
|
5
|
+
export declare function readDoc(inPath: string): ComponentGraphIRDoc;
|
|
6
|
+
//# sourceMappingURL=codegen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/commands/codegen.ts"],"names":[],"mappings":"AAYA,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,aAAa,CAAC;AAErB,wFAAwF;AACxF,wBAAgB,eAAe,CAC7B,GAAG,EAAE,mBAAmB,EACxB,QAAQ,EAAE,MAAM,EAChB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAYR;AAED,+DAA+D;AAC/D,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAY3D"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
2
|
+
// codegen — the pure core behind `bc generate` / `bc check`.
|
|
3
|
+
//
|
|
4
|
+
// A thin wrapper over the EXISTING public API (../index.ts): NO emit logic is
|
|
5
|
+
// reimplemented here. `generateFromDoc` runs the SAME `loadCompiledIR` →
|
|
6
|
+
// `generateModule` path the in-process API runs, so the CLI emits the exact
|
|
7
|
+
// module the in-process API does from the same doc.
|
|
8
|
+
//
|
|
9
|
+
// Pure (throws on error, no process/stream side effects) so it is unit-testable
|
|
10
|
+
// in-process; the cli.ts handlers add I/O + exit semantics around it.
|
|
11
|
+
// ════════════════════════════════════════════════════════════════════════════
|
|
12
|
+
import { readFileSync } from "node:fs";
|
|
13
|
+
import { loadCompiledIR, generateModule, registeredLanguages, } from "../index.js";
|
|
14
|
+
/** A serialized IR doc → the native module source (same path as the in-process API). */
|
|
15
|
+
export function generateFromDoc(doc, language, runtimeImport) {
|
|
16
|
+
if (!registeredLanguages().includes(language)) {
|
|
17
|
+
throw new Error(`--lang '${language}' is not a registered emitter (registered: ${registeredLanguages().join(", ")})`);
|
|
18
|
+
}
|
|
19
|
+
const compiled = loadCompiledIR(doc); // adopt the unbranded doc (recomputes + mints the provenance token)
|
|
20
|
+
const module = generateModule(compiled, runtimeImport === undefined ? { language } : { language, runtimeImport });
|
|
21
|
+
return module.code;
|
|
22
|
+
}
|
|
23
|
+
/** Read + parse a serialized ComponentGraphIRDoc from disk. */
|
|
24
|
+
export function readDoc(inPath) {
|
|
25
|
+
let raw;
|
|
26
|
+
try {
|
|
27
|
+
raw = readFileSync(inPath, "utf8");
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new Error(`cannot read --in '${inPath}'`);
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
return JSON.parse(raw);
|
|
34
|
+
}
|
|
35
|
+
catch (e) {
|
|
36
|
+
throw new Error(`--in '${inPath}' is not valid JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=codegen.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codegen.js","sourceRoot":"","sources":["../../src/commands/codegen.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6DAA6D;AAC7D,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,4EAA4E;AAC5E,oDAAoD;AACpD,EAAE;AACF,gFAAgF;AAChF,sEAAsE;AACtE,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EACL,cAAc,EACd,cAAc,EACd,mBAAmB,GAEpB,MAAM,aAAa,CAAC;AAErB,wFAAwF;AACxF,MAAM,UAAU,eAAe,CAC7B,GAAwB,EACxB,QAAgB,EAChB,aAAsB;IAEtB,IAAI,CAAC,mBAAmB,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CACb,WAAW,QAAQ,8CAA8C,mBAAmB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrG,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,oEAAoE;IAC1G,MAAM,MAAM,GAAG,cAAc,CAC3B,QAAQ,EACR,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CACzE,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,IAAI,GAAW,CAAC;IAChB,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,GAAG,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAwB,CAAC;IAChD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,SAAS,MAAM,wBAAwB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export interface ExecResult {
|
|
2
|
+
exitCode: number;
|
|
3
|
+
stdout: string;
|
|
4
|
+
stderr: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function bcGenerate(executable: string, options?: Partial<import("./types.js").GenerateOptions>): Promise<ExecResult>;
|
|
7
|
+
export declare function bcCheck(executable: string, options?: Partial<import("./types.js").CheckOptions>): Promise<ExecResult>;
|
|
8
|
+
//# sourceMappingURL=commands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../../src/generated/commands.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,YAAY,EAAE,eAAe,CAAC,GACtD,OAAO,CAAC,UAAU,CAAC,CAoBrB;AAED,wBAAsB,OAAO,CAC3B,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,OAAO,CAAC,OAAO,YAAY,EAAE,YAAY,CAAC,GACnD,OAAO,CAAC,UAAU,CAAC,CAoBrB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
// Auto-generated by cli-contracts. Do not edit.
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import { promisify } from "node:util";
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
export async function bcGenerate(executable, options) {
|
|
6
|
+
const cmdArgs = ["generate"];
|
|
7
|
+
if (options) {
|
|
8
|
+
if (options.lang !== undefined)
|
|
9
|
+
cmdArgs.push("--lang", String(options.lang));
|
|
10
|
+
if (options.in !== undefined)
|
|
11
|
+
cmdArgs.push("--in", String(options.in));
|
|
12
|
+
if (options.out !== undefined)
|
|
13
|
+
cmdArgs.push("--out", String(options.out));
|
|
14
|
+
if (options.runtimeImport !== undefined)
|
|
15
|
+
cmdArgs.push("--runtime-import", String(options.runtimeImport));
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
const result = await execFileAsync(executable, cmdArgs);
|
|
19
|
+
return { exitCode: 0, stdout: result.stdout, stderr: result.stderr };
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const e = err;
|
|
23
|
+
return {
|
|
24
|
+
exitCode: typeof e.code === 'number' ? e.code : 1,
|
|
25
|
+
stdout: e.stdout ?? '',
|
|
26
|
+
stderr: e.stderr ?? '',
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export async function bcCheck(executable, options) {
|
|
31
|
+
const cmdArgs = ["check"];
|
|
32
|
+
if (options) {
|
|
33
|
+
if (options.lang !== undefined)
|
|
34
|
+
cmdArgs.push("--lang", String(options.lang));
|
|
35
|
+
if (options.in !== undefined)
|
|
36
|
+
cmdArgs.push("--in", String(options.in));
|
|
37
|
+
if (options.out !== undefined)
|
|
38
|
+
cmdArgs.push("--out", String(options.out));
|
|
39
|
+
if (options.runtimeImport !== undefined)
|
|
40
|
+
cmdArgs.push("--runtime-import", String(options.runtimeImport));
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const result = await execFileAsync(executable, cmdArgs);
|
|
44
|
+
return { exitCode: 0, stdout: result.stdout, stderr: result.stderr };
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const e = err;
|
|
48
|
+
return {
|
|
49
|
+
exitCode: typeof e.code === 'number' ? e.code : 1,
|
|
50
|
+
stdout: e.stdout ?? '',
|
|
51
|
+
stderr: e.stderr ?? '',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=commands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commands.js","sourceRoot":"","sources":["../../src/generated/commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/generated/contract.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAE,MAA6tM,CAAC;AAE1vM,eAAO,MAAM,iBAAiB,EAAE,MAAqiQ,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Auto-generated by cli-contracts. Do not edit.
|
|
2
|
+
// Embedded contract for the extract subcommand.
|
|
3
|
+
export const CONTRACT_YAML = "# yaml-language-server: $schema=./node_modules/cli-contracts/schemas/cli-contract.schema.json\ncli_contracts: 0.1.0\n\ninfo:\n title: behavior-contracts CLI\n version: 0.1.0\n description: >-\n bc — the build-time codegen CLI over behavior-contracts' public API.\n Reads a serialized ComponentGraphIRDoc (the unbranded JSON IR), adopts it\n via loadCompiledIR, and runs the same generateModule the in-process API runs\n to emit a runtime-free native module (data baked as literals). The IR doc is\n a build-time input only; nothing reads it at runtime.\n license:\n name: MIT\n contact:\n name: foo-ogawa\n url: https://github.com/foo-ogawa/behavior-contracts\n\nartifact_slots:\n ir-doc:\n direction: read\n description: Serialized ComponentGraphIRDoc (unbranded JSON IR) — the codegen input.\n generated-module:\n direction: write\n description: Generated native module source (baked-literal, runtime-free).\n\ncommand_sets:\n bc:\n summary: build-time codegen CLI over behavior-contracts' public API.\n executable: bc\n\n global_options:\n - name: version\n aliases: [V]\n description: Print version and exit.\n schema:\n type: boolean\n\n - name: help\n aliases: [h]\n description: Show help and exit.\n schema:\n type: boolean\n\n commands:\n # ── generate ─────────────────────────────────────────\n generate:\n summary: Emit a native module from a serialized IR doc.\n description: >-\n Reads the --in ComponentGraphIRDoc, adopts it via loadCompiledIR, and\n runs generateModule for the --lang emitter. Writes the module source\n to --out if given, else to stdout. Rejects an unregistered --lang.\n usage:\n - bc generate --lang rust-typed-native --in ir-doc.json\n - bc generate --lang go-typed-native --in ir-doc.json --out gen.go\n - bc generate --lang typescript-typed --in ir-doc.json --runtime-import ./runtime.js\n\n options:\n - name: lang\n required: true\n description: >-\n Target emitter (must be a registered language, e.g.\n rust-typed-native, go-typed-native, typescript-typed).\n value_name: emitter\n schema:\n type: string\n\n - name: in\n required: true\n description: Path to the serialized ComponentGraphIRDoc JSON file.\n value_name: ir-doc.json\n schema:\n type: string\n file:\n mode: read\n exists: true\n media_type: application/json\n encoding: utf-8\n\n - name: out\n required: false\n description: Write the generated module here instead of stdout.\n value_name: file\n schema:\n type: string\n file:\n mode: write\n\n - name: runtime-import\n required: false\n description: Override the runtime import specifier baked into the module.\n value_name: spec\n schema:\n type: string\n\n exits:\n '0':\n description: Module generated (written to --out, or printed to stdout).\n stdout:\n format: text\n '1':\n description: >-\n Generation failed (unreadable/invalid --in, or --lang is not a\n registered emitter).\n stderr:\n format: text\n '2':\n description: Usage error — a required option (--lang or --in) was omitted.\n stderr:\n format: text\n\n x-agent:\n riskLevel: low\n requiresConfirmation: false\n idempotent: true\n sideEffects:\n - file_write\n sideEffectNote: >-\n Writes to the filesystem only when --out is specified; otherwise\n output goes to stdout.\n\n # ── check ────────────────────────────────────────────\n check:\n summary: Verify a committed module matches a fresh generation (drift gate).\n description: >-\n Regenerates the module from --in for --lang and byte-compares it\n against the committed --out file. Exits non-zero on drift. This is the\n build's codegen drift gate.\n usage:\n - bc check --lang rust-typed-native --in ir-doc.json --out gen.rs\n\n options:\n - name: lang\n required: true\n description: Target emitter (must be a registered language).\n value_name: emitter\n schema:\n type: string\n\n - name: in\n required: true\n description: Path to the serialized ComponentGraphIRDoc JSON file.\n value_name: ir-doc.json\n schema:\n type: string\n file:\n mode: read\n exists: true\n media_type: application/json\n encoding: utf-8\n\n - name: out\n required: true\n description: The committed module file to diff a fresh generation against.\n value_name: file\n schema:\n type: string\n file:\n mode: read\n exists: true\n\n - name: runtime-import\n required: false\n description: Override the runtime import specifier baked into the module.\n value_name: spec\n schema:\n type: string\n\n exits:\n '0':\n description: Up to date — the committed --out matches a fresh generation.\n stdout:\n format: text\n '1':\n description: >-\n Drift detected (--out differs or does not exist), or generation\n failed (unreadable/invalid --in, or unregistered --lang).\n stderr:\n format: text\n '2':\n description: Usage error — a required option (--lang or --in) was omitted.\n stderr:\n format: text\n\n x-agent:\n riskLevel: low\n requiresConfirmation: false\n idempotent: true\n sideEffects: []\n";
|
|
4
|
+
export const CONTRACT_JSON_STR = "{\n \"cli_contracts\": \"0.1.0\",\n \"info\": {\n \"title\": \"behavior-contracts CLI\",\n \"version\": \"0.1.0\",\n \"description\": \"bc — the build-time codegen CLI over behavior-contracts' public API. Reads a serialized ComponentGraphIRDoc (the unbranded JSON IR), adopts it via loadCompiledIR, and runs the same generateModule the in-process API runs to emit a runtime-free native module (data baked as literals). The IR doc is a build-time input only; nothing reads it at runtime.\",\n \"license\": {\n \"name\": \"MIT\"\n },\n \"contact\": {\n \"name\": \"foo-ogawa\",\n \"url\": \"https://github.com/foo-ogawa/behavior-contracts\"\n }\n },\n \"artifact_slots\": {\n \"ir-doc\": {\n \"direction\": \"read\",\n \"description\": \"Serialized ComponentGraphIRDoc (unbranded JSON IR) — the codegen input.\"\n },\n \"generated-module\": {\n \"direction\": \"write\",\n \"description\": \"Generated native module source (baked-literal, runtime-free).\"\n }\n },\n \"command_sets\": {\n \"bc\": {\n \"summary\": \"build-time codegen CLI over behavior-contracts' public API.\",\n \"executable\": \"bc\",\n \"global_options\": [\n {\n \"name\": \"version\",\n \"aliases\": [\n \"V\"\n ],\n \"description\": \"Print version and exit.\",\n \"schema\": {\n \"type\": \"boolean\"\n }\n },\n {\n \"name\": \"help\",\n \"aliases\": [\n \"h\"\n ],\n \"description\": \"Show help and exit.\",\n \"schema\": {\n \"type\": \"boolean\"\n }\n }\n ],\n \"commands\": {\n \"generate\": {\n \"summary\": \"Emit a native module from a serialized IR doc.\",\n \"description\": \"Reads the --in ComponentGraphIRDoc, adopts it via loadCompiledIR, and runs generateModule for the --lang emitter. Writes the module source to --out if given, else to stdout. Rejects an unregistered --lang.\",\n \"usage\": [\n \"bc generate --lang rust-typed-native --in ir-doc.json\",\n \"bc generate --lang go-typed-native --in ir-doc.json --out gen.go\",\n \"bc generate --lang typescript-typed --in ir-doc.json --runtime-import ./runtime.js\"\n ],\n \"options\": [\n {\n \"name\": \"lang\",\n \"required\": true,\n \"description\": \"Target emitter (must be a registered language, e.g. rust-typed-native, go-typed-native, typescript-typed).\",\n \"value_name\": \"emitter\",\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"name\": \"in\",\n \"required\": true,\n \"description\": \"Path to the serialized ComponentGraphIRDoc JSON file.\",\n \"value_name\": \"ir-doc.json\",\n \"schema\": {\n \"type\": \"string\"\n },\n \"file\": {\n \"mode\": \"read\",\n \"exists\": true,\n \"media_type\": \"application/json\",\n \"encoding\": \"utf-8\"\n }\n },\n {\n \"name\": \"out\",\n \"required\": false,\n \"description\": \"Write the generated module here instead of stdout.\",\n \"value_name\": \"file\",\n \"schema\": {\n \"type\": \"string\"\n },\n \"file\": {\n \"mode\": \"write\"\n }\n },\n {\n \"name\": \"runtime-import\",\n \"required\": false,\n \"description\": \"Override the runtime import specifier baked into the module.\",\n \"value_name\": \"spec\",\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"exits\": {\n \"0\": {\n \"description\": \"Module generated (written to --out, or printed to stdout).\",\n \"stdout\": {\n \"format\": \"text\"\n }\n },\n \"1\": {\n \"description\": \"Generation failed (unreadable/invalid --in, or --lang is not a registered emitter).\",\n \"stderr\": {\n \"format\": \"text\"\n }\n },\n \"2\": {\n \"description\": \"Usage error — a required option (--lang or --in) was omitted.\",\n \"stderr\": {\n \"format\": \"text\"\n }\n }\n },\n \"x-agent\": {\n \"riskLevel\": \"low\",\n \"requiresConfirmation\": false,\n \"idempotent\": true,\n \"sideEffects\": [\n \"file_write\"\n ],\n \"sideEffectNote\": \"Writes to the filesystem only when --out is specified; otherwise output goes to stdout.\"\n }\n },\n \"check\": {\n \"summary\": \"Verify a committed module matches a fresh generation (drift gate).\",\n \"description\": \"Regenerates the module from --in for --lang and byte-compares it against the committed --out file. Exits non-zero on drift. This is the build's codegen drift gate.\",\n \"usage\": [\n \"bc check --lang rust-typed-native --in ir-doc.json --out gen.rs\"\n ],\n \"options\": [\n {\n \"name\": \"lang\",\n \"required\": true,\n \"description\": \"Target emitter (must be a registered language).\",\n \"value_name\": \"emitter\",\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"name\": \"in\",\n \"required\": true,\n \"description\": \"Path to the serialized ComponentGraphIRDoc JSON file.\",\n \"value_name\": \"ir-doc.json\",\n \"schema\": {\n \"type\": \"string\"\n },\n \"file\": {\n \"mode\": \"read\",\n \"exists\": true,\n \"media_type\": \"application/json\",\n \"encoding\": \"utf-8\"\n }\n },\n {\n \"name\": \"out\",\n \"required\": true,\n \"description\": \"The committed module file to diff a fresh generation against.\",\n \"value_name\": \"file\",\n \"schema\": {\n \"type\": \"string\"\n },\n \"file\": {\n \"mode\": \"read\",\n \"exists\": true\n }\n },\n {\n \"name\": \"runtime-import\",\n \"required\": false,\n \"description\": \"Override the runtime import specifier baked into the module.\",\n \"value_name\": \"spec\",\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"exits\": {\n \"0\": {\n \"description\": \"Up to date — the committed --out matches a fresh generation.\",\n \"stdout\": {\n \"format\": \"text\"\n }\n },\n \"1\": {\n \"description\": \"Drift detected (--out differs or does not exist), or generation failed (unreadable/invalid --in, or unregistered --lang).\",\n \"stderr\": {\n \"format\": \"text\"\n }\n },\n \"2\": {\n \"description\": \"Usage error — a required option (--lang or --in) was omitted.\",\n \"stderr\": {\n \"format\": \"text\"\n }\n }\n },\n \"x-agent\": {\n \"riskLevel\": \"low\",\n \"requiresConfirmation\": false,\n \"idempotent\": true,\n \"sideEffects\": []\n }\n }\n }\n }\n }\n}";
|
|
5
|
+
//# sourceMappingURL=contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/generated/contract.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,gDAAgD;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAW,otMAAotM,CAAC;AAE1vM,MAAM,CAAC,MAAM,iBAAiB,GAAW,4hQAA4hQ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./types.js";
|
|
2
|
+
export * from "./commands.js";
|
|
3
|
+
export * from "./schemas.js";
|
|
4
|
+
export { createProgram } from "./program.js";
|
|
5
|
+
export type { CommandHandlers } from "./program.js";
|
|
6
|
+
export { CONTRACT_YAML, CONTRACT_JSON_STR } from "./contract.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generated/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Auto-generated by cli-contracts. Do not edit.
|
|
2
|
+
export * from "./types.js";
|
|
3
|
+
export * from "./commands.js";
|
|
4
|
+
export * from "./schemas.js";
|
|
5
|
+
export { createProgram } from "./program.js";
|
|
6
|
+
export { CONTRACT_YAML, CONTRACT_JSON_STR } from "./contract.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generated/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAChD,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
export interface CommandHandlers {
|
|
3
|
+
generate: (options: {
|
|
4
|
+
lang?: string;
|
|
5
|
+
in?: string;
|
|
6
|
+
out?: string;
|
|
7
|
+
runtimeImport?: string;
|
|
8
|
+
}, parentOpts: Record<string, unknown>) => Promise<void>;
|
|
9
|
+
check: (options: {
|
|
10
|
+
lang?: string;
|
|
11
|
+
in?: string;
|
|
12
|
+
out?: string;
|
|
13
|
+
runtimeImport?: string;
|
|
14
|
+
}, parentOpts: Record<string, unknown>) => Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
export declare function createProgram(handlers: CommandHandlers, version: string): Command;
|
|
17
|
+
//# sourceMappingURL=program.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/generated/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChJ,KAAK,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9I;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,eAAe,EACzB,OAAO,EAAE,MAAM,GACd,OAAO,CAmHT"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
// Auto-generated by cli-contracts. Do not edit.
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { CONTRACT_YAML, CONTRACT_JSON_STR } from "./contract.js";
|
|
4
|
+
export function createProgram(handlers, version) {
|
|
5
|
+
const program = new Command();
|
|
6
|
+
program
|
|
7
|
+
.name("bc")
|
|
8
|
+
.version(version, "-V, --version")
|
|
9
|
+
.description("build-time codegen CLI over behavior-contracts' public API.");
|
|
10
|
+
program
|
|
11
|
+
.command("generate")
|
|
12
|
+
.description("Emit a native module from a serialized IR doc.")
|
|
13
|
+
.option("--lang <emitter>", "Target emitter (must be a registered language, e.g. rust-typed-native, go-typed-native, typescript-typed).")
|
|
14
|
+
.option("--in <ir-doc.json>", "Path to the serialized ComponentGraphIRDoc JSON file.")
|
|
15
|
+
.option("--out <file>", "Write the generated module here instead of stdout.")
|
|
16
|
+
.option("--runtime-import <spec>", "Override the runtime import specifier baked into the module.")
|
|
17
|
+
.action(async (opts, cmd) => {
|
|
18
|
+
await handlers.generate(opts, cmd.optsWithGlobals());
|
|
19
|
+
});
|
|
20
|
+
program
|
|
21
|
+
.command("check")
|
|
22
|
+
.description("Verify a committed module matches a fresh generation (drift gate).")
|
|
23
|
+
.option("--lang <emitter>", "Target emitter (must be a registered language).")
|
|
24
|
+
.option("--in <ir-doc.json>", "Path to the serialized ComponentGraphIRDoc JSON file.")
|
|
25
|
+
.option("--out <file>", "The committed module file to diff a fresh generation against.")
|
|
26
|
+
.option("--runtime-import <spec>", "Override the runtime import specifier baked into the module.")
|
|
27
|
+
.action(async (opts, cmd) => {
|
|
28
|
+
await handlers.check(opts, cmd.optsWithGlobals());
|
|
29
|
+
});
|
|
30
|
+
// Built-in extract command (auto-injected by cli-contracts)
|
|
31
|
+
program
|
|
32
|
+
.command("extract")
|
|
33
|
+
.description("Extract contract specification for this CLI tool.")
|
|
34
|
+
.argument("[commands...]", "Command IDs to extract. Use dot notation.")
|
|
35
|
+
.option("-a, --all", "Extract all commands.", false)
|
|
36
|
+
.option("--include-meta", "Include extraction metadata.", true)
|
|
37
|
+
.option("-F, --format <format>", "Output format (yaml or json).", "yaml")
|
|
38
|
+
.action(async (commands, opts, cmd) => {
|
|
39
|
+
if (commands.length === 0 && !opts.all) {
|
|
40
|
+
process.stderr.write(JSON.stringify({ code: "INVALID_ARGS", message: "Specify command IDs or use --all" }) + "\n");
|
|
41
|
+
process.exit(2);
|
|
42
|
+
}
|
|
43
|
+
const format = opts.format || "yaml";
|
|
44
|
+
const doc = JSON.parse(CONTRACT_JSON_STR);
|
|
45
|
+
const cmdIds = opts.all ? [] : commands;
|
|
46
|
+
if (cmdIds.length === 0) {
|
|
47
|
+
// --all: output full contract
|
|
48
|
+
if (format === "json") {
|
|
49
|
+
const out = {};
|
|
50
|
+
if (opts.includeMeta) {
|
|
51
|
+
out._meta = {
|
|
52
|
+
source: "embedded",
|
|
53
|
+
type: "cli-contracts/extract",
|
|
54
|
+
extractedAt: new Date().toISOString(),
|
|
55
|
+
specVersion: doc.cli_contracts ?? "0.1.0",
|
|
56
|
+
commands: ["bc.generate", "bc.check"],
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
Object.assign(out, doc);
|
|
60
|
+
process.stdout.write(JSON.stringify(out, null, 2) + "\n");
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
// YAML output
|
|
64
|
+
const yamlLines = [];
|
|
65
|
+
yamlLines.push("# bc extract");
|
|
66
|
+
yamlLines.push("# source: embedded");
|
|
67
|
+
yamlLines.push("# type: cli-contracts/command-extract");
|
|
68
|
+
if (opts.includeMeta) {
|
|
69
|
+
yamlLines.push("---");
|
|
70
|
+
yamlLines.push("source: embedded");
|
|
71
|
+
yamlLines.push("type: cli-contracts/command-extract");
|
|
72
|
+
yamlLines.push("extractedAt: " + new Date().toISOString());
|
|
73
|
+
yamlLines.push("spec_version: " + (doc.cli_contracts ?? "0.1.0"));
|
|
74
|
+
yamlLines.push("commands:");
|
|
75
|
+
for (const id of ["bc.generate", "bc.check"]) {
|
|
76
|
+
yamlLines.push(" - " + id);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
yamlLines.push("---");
|
|
80
|
+
yamlLines.push(CONTRACT_YAML);
|
|
81
|
+
process.stdout.write(yamlLines.join("\n") + "\n");
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
// Filter specific commands
|
|
86
|
+
const filtered = {
|
|
87
|
+
cli_contracts: doc.cli_contracts,
|
|
88
|
+
info: doc.info,
|
|
89
|
+
command_sets: {},
|
|
90
|
+
};
|
|
91
|
+
const fcs = filtered.command_sets;
|
|
92
|
+
for (const [setId, cs] of Object.entries(doc.command_sets ?? {})) {
|
|
93
|
+
const cmds = cs.commands;
|
|
94
|
+
if (!cmds)
|
|
95
|
+
continue;
|
|
96
|
+
const matched = {};
|
|
97
|
+
for (const [cmdId, cmdDef] of Object.entries(cmds)) {
|
|
98
|
+
const fullId = setId + "." + cmdId;
|
|
99
|
+
if (cmdIds.some((id) => id === cmdId || id === fullId || cmdId.startsWith(id + "."))) {
|
|
100
|
+
matched[cmdId] = cmdDef;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (Object.keys(matched).length > 0) {
|
|
104
|
+
const setCopy = { ...cs };
|
|
105
|
+
setCopy.commands = matched;
|
|
106
|
+
fcs[setId] = setCopy;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (doc.components)
|
|
110
|
+
filtered.components = doc.components;
|
|
111
|
+
process.stdout.write(JSON.stringify(filtered, null, 2) + "\n");
|
|
112
|
+
}
|
|
113
|
+
process.exit(0);
|
|
114
|
+
});
|
|
115
|
+
return program;
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=program.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"program.js","sourceRoot":"","sources":["../../src/generated/program.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/generated/schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/generated/schemas.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,OAAO,EAAE,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface GenerateOptions {
|
|
2
|
+
lang: string;
|
|
3
|
+
in: string;
|
|
4
|
+
out?: string;
|
|
5
|
+
runtimeImport?: string;
|
|
6
|
+
}
|
|
7
|
+
export type GenerateExitCode = 0 | 1 | 2;
|
|
8
|
+
export type GenerateExitResult = {
|
|
9
|
+
exitCode: 0;
|
|
10
|
+
stdout: unknown;
|
|
11
|
+
} | {
|
|
12
|
+
exitCode: 1;
|
|
13
|
+
stderr: unknown;
|
|
14
|
+
} | {
|
|
15
|
+
exitCode: 2;
|
|
16
|
+
stderr: unknown;
|
|
17
|
+
};
|
|
18
|
+
export interface CheckOptions {
|
|
19
|
+
lang: string;
|
|
20
|
+
in: string;
|
|
21
|
+
out: string;
|
|
22
|
+
runtimeImport?: string;
|
|
23
|
+
}
|
|
24
|
+
export type CheckExitCode = 0 | 1 | 2;
|
|
25
|
+
export type CheckExitResult = {
|
|
26
|
+
exitCode: 0;
|
|
27
|
+
stdout: unknown;
|
|
28
|
+
} | {
|
|
29
|
+
exitCode: 1;
|
|
30
|
+
stderr: unknown;
|
|
31
|
+
} | {
|
|
32
|
+
exitCode: 2;
|
|
33
|
+
stderr: unknown;
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generated/types.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEzC,MAAM,MAAM,kBAAkB,GAC5B;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEtC,MAAM,MAAM,eAAe,GACzB;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GAChC;IAAE,QAAQ,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/generated/types.ts"],"names":[],"mappings":"AAAA,gDAAgD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/generator/core.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/generator/core.ts"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG;IAAE,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAC;AAEzF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAGD,MAAM,MAAM,oBAAoB,GAC5B,uBAAuB,GACvB,wBAAwB,GACxB,0BAA0B,GAC1B,UAAU,GACV,qBAAqB,GACrB,kBAAkB,GAClB,+BAA+B,CAAC;AAEpC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,EAAE,oBAAoB,CAAC;gBACf,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,MAAM;CAKxD;AAOD,0CAA0C;AAC1C,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,EAAE,EAAE,gBAAgB,CAAC;IACrB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,8BAA8B;IAC9B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,0DAA0D;IAC1D,aAAa,EAAE,MAAM,CAAC;IACtB;;;;;;;;;;;OAWG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1D,gEAAgE;AAChE,MAAM,WAAW,aAAa;IAC5B,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,cAAc,EAAE,qBAAqB,CAAC;IACtC,mCAAmC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,oBAAoB,EAAE,MAAM,CAAC;IAC7B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B;IAC/B,IAAI,CAAC,GAAG,EAAE,WAAW,GAAG,MAAM,CAAC;CAChC;AAID;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAE3D;AAED,uCAAuC;AACvC,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAE9C;AA8CD,MAAM,WAAW,eAAe;IAC9B,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;OAGG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,YAAY;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,2BAA2B;IAC3B,YAAY,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,eAAe,CAsCrF"}
|
package/dist/generator/core.js
CHANGED
|
@@ -26,6 +26,7 @@ import { SPEC_VERSIONS } from "../index.js";
|
|
|
26
26
|
import { assertPortableComponentGraph } from "../guard.js";
|
|
27
27
|
import { fingerprintComponentGraph } from "./fingerprint.js";
|
|
28
28
|
import { assertCompiled } from "../provenance.js";
|
|
29
|
+
import { assertAllNodeTypesDetermined } from "../type-gate.js";
|
|
29
30
|
export class GeneratorFailure extends Error {
|
|
30
31
|
code;
|
|
31
32
|
constructor(code, message) {
|
|
@@ -100,6 +101,11 @@ export function generateModule(ir, options) {
|
|
|
100
101
|
gfail("UNKNOWN_LANGUAGE", `no emitter registered for language '${options.language}' (registered: ${registeredLanguages().join(", ")}) (fail-closed)`);
|
|
101
102
|
assertCompiled(ir); // SA3/SA7 出自ゲート: codegen 入力も無 token/改竄 IR は NON_COMPILED_IR で fail-closed
|
|
102
103
|
const validated = validateGeneratorInput(ir);
|
|
104
|
+
// SA5 / SCP-only end-state: 全ノードの出力型が確定していること(未確定は fail-closed UNTYPED_NODE)を
|
|
105
|
+
// codegen 入口で強制する。authoring path(authoring.ts)と同一の SSoT ゲートを消費する(型 walk を
|
|
106
|
+
// 重複させない)。untyped straight-line フォールバックは存在しない — 型未確定 IR は compile-time エラー。
|
|
107
|
+
for (const comp of validated.components)
|
|
108
|
+
assertAllNodeTypesDetermined(comp);
|
|
103
109
|
const fingerprint = fingerprintComponentGraph(validated);
|
|
104
110
|
const specVersions = {
|
|
105
111
|
behavior: SPEC_VERSIONS.behavior,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/generator/core.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,4BAA4B,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/generator/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -68,8 +68,10 @@ export interface TypePlan {
|
|
|
68
68
|
}
|
|
69
69
|
/**
|
|
70
70
|
* buildTypePlan — IR 全体を走査し、全注記点(body ノード `outType` / component `outputType`)の obj 型を
|
|
71
|
-
* named 宣言に dedup 収集した {@link TypePlan}
|
|
72
|
-
*
|
|
71
|
+
* named 宣言に dedup 収集した {@link TypePlan} を返す。SCP-only mandatory typing 下では未注記ノードは
|
|
72
|
+
* codegen 入口(generateModule)の gate で `UNTYPED_NODE` compile エラーになるため、ここに届く IR は
|
|
73
|
+
* 全ノードが型付きである。decls が空になり得るのは NAMED(obj)型が 1 つも無い良性ケースだけ(スカラは
|
|
74
|
+
* inline で型付き)で、その場合も untyped fallback は存在しない。language-neutral・決定的。
|
|
73
75
|
*/
|
|
74
76
|
export declare function buildTypePlan(ir: ComponentGraphIR): TypePlan;
|
|
75
77
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../../src/generator/typed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAa,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIhF;;;;;;;;;GASG;AACH,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAmDD
|
|
1
|
+
{"version":3,"file":"typed.d.ts","sourceRoot":"","sources":["../../src/generator/typed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAa,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAIhF;;;;;;;;;GASG;AACH,MAAM,MAAM,OAAO,GACf;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpC,mEAAmE;AACnE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,EAAE,CAAC;CAC3C;AAED;;;;GAIG;AACH,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAmDD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,gBAAgB,GAAG,QAAQ,CAiB5D;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAWtE;AAID;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,OAAO,CAEvF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,YAAY,CAAA;CAAE,GAAG,SAAS,EAClF,IAAI,CAAC,EAAE,QAAQ,GACd,OAAO,GAAG,SAAS,CA4BrB;AAoBD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACtC;;OAEG;IACH,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAAC;IAGpC;;;;OAIG;IACH,eAAe,CAAC,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzC;;;;OAIG;IACH,eAAe,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxE;;;;OAIG;IACH,gBAAgB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,OAAO,CAAA;KAAE,CAAC;IACxH;;;OAGG;IACH,cAAc,CAAC,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;CAC1E;AAED,+DAA+D;AAC/D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE3E"}
|
package/dist/generator/typed.js
CHANGED
|
@@ -53,8 +53,10 @@ class TypePlanBuilder {
|
|
|
53
53
|
}
|
|
54
54
|
/**
|
|
55
55
|
* buildTypePlan — IR 全体を走査し、全注記点(body ノード `outType` / component `outputType`)の obj 型を
|
|
56
|
-
* named 宣言に dedup 収集した {@link TypePlan}
|
|
57
|
-
*
|
|
56
|
+
* named 宣言に dedup 収集した {@link TypePlan} を返す。SCP-only mandatory typing 下では未注記ノードは
|
|
57
|
+
* codegen 入口(generateModule)の gate で `UNTYPED_NODE` compile エラーになるため、ここに届く IR は
|
|
58
|
+
* 全ノードが型付きである。decls が空になり得るのは NAMED(obj)型が 1 つも無い良性ケースだけ(スカラは
|
|
59
|
+
* inline で型付き)で、その場合も untyped fallback は存在しない。language-neutral・決定的。
|
|
58
60
|
*/
|
|
59
61
|
export function buildTypePlan(ir) {
|
|
60
62
|
const b = new TypePlanBuilder();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed.js","sourceRoot":"","sources":["../../src/generator/typed.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"typed.js","sourceRoot":"","sources":["../../src/generator/typed.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "behavior-contracts",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.8",
|
|
4
4
|
"description": "Language-agnostic runtime core for behavior contracts (dsl-contracts): validateEnvelope / evaluateExpression / renderTemplate / runPlan / canonical serialization. Single source of truth for the shared DSL runtime primitives.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"bc": "dist/cli.js"
|
|
10
|
+
},
|
|
8
11
|
"files": [
|
|
9
12
|
"dist",
|
|
13
|
+
"cli-contract.yaml",
|
|
10
14
|
"README.md",
|
|
11
15
|
"LICENSE"
|
|
12
16
|
],
|
|
@@ -19,6 +23,7 @@
|
|
|
19
23
|
"scripts": {
|
|
20
24
|
"build": "tsc -p tsconfig.json && node scripts/fix-dts-extensions.mjs",
|
|
21
25
|
"clean": "rm -rf dist",
|
|
26
|
+
"cli:generate": "cli-contracts generate",
|
|
22
27
|
"test": "node --disable-warning=ExperimentalWarning --test \"test/*.test.ts\"",
|
|
23
28
|
"conformance": "node --disable-warning=ExperimentalWarning --test \"test/conformance.test.ts\"",
|
|
24
29
|
"typecheck": "tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.test.json"
|
|
@@ -53,6 +58,8 @@
|
|
|
53
58
|
"url": "https://github.com/foo-ogawa/behavior-contracts/issues"
|
|
54
59
|
},
|
|
55
60
|
"devDependencies": {
|
|
61
|
+
"@types/node": "^22.20.1",
|
|
62
|
+
"cli-contracts": "^0.34.1",
|
|
56
63
|
"typescript": "^6.0.0"
|
|
57
64
|
},
|
|
58
65
|
"engines": {
|
|
@@ -62,5 +69,8 @@
|
|
|
62
69
|
"publishConfig": {
|
|
63
70
|
"access": "public"
|
|
64
71
|
},
|
|
65
|
-
"sideEffects": false
|
|
72
|
+
"sideEffects": false,
|
|
73
|
+
"dependencies": {
|
|
74
|
+
"commander": "^14.0.3"
|
|
75
|
+
}
|
|
66
76
|
}
|