behavior-contracts 0.2.0 → 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/behavior.d.ts +47 -0
- package/dist/behavior.d.ts.map +1 -1
- package/dist/behavior.js.map +1 -1
- package/dist/generator/core.d.ts +1 -1
- package/dist/generator/core.d.ts.map +1 -1
- package/dist/generator/core.js.map +1 -1
- package/dist/generator/emit-straightline-go.d.ts +77 -0
- package/dist/generator/emit-straightline-go.d.ts.map +1 -0
- package/dist/generator/emit-straightline-go.js +592 -0
- package/dist/generator/emit-straightline-go.js.map +1 -0
- package/dist/generator/emit-straightline-php.d.ts +46 -0
- package/dist/generator/emit-straightline-php.d.ts.map +1 -0
- package/dist/generator/emit-straightline-php.js +501 -0
- package/dist/generator/emit-straightline-php.js.map +1 -0
- package/dist/generator/emit-straightline-python.d.ts +36 -0
- package/dist/generator/emit-straightline-python.d.ts.map +1 -0
- package/dist/generator/emit-straightline-python.js +441 -0
- package/dist/generator/emit-straightline-python.js.map +1 -0
- package/dist/generator/emit-straightline-rust.d.ts +78 -0
- package/dist/generator/emit-straightline-rust.d.ts.map +1 -0
- package/dist/generator/emit-straightline-rust.js +615 -0
- package/dist/generator/emit-straightline-rust.js.map +1 -0
- package/dist/generator/emit-straightline-typed-go.d.ts +39 -0
- package/dist/generator/emit-straightline-typed-go.d.ts.map +1 -0
- package/dist/generator/emit-straightline-typed-go.js +828 -0
- package/dist/generator/emit-straightline-typed-go.js.map +1 -0
- package/dist/generator/emit-straightline-typed-rust.d.ts +48 -0
- package/dist/generator/emit-straightline-typed-rust.d.ts.map +1 -0
- package/dist/generator/emit-straightline-typed-rust.js +823 -0
- package/dist/generator/emit-straightline-typed-rust.js.map +1 -0
- package/dist/generator/emit-straightline-typed-typescript.d.ts +49 -0
- package/dist/generator/emit-straightline-typed-typescript.d.ts.map +1 -0
- package/dist/generator/emit-straightline-typed-typescript.js +314 -0
- package/dist/generator/emit-straightline-typed-typescript.js.map +1 -0
- package/dist/generator/emit-straightline-typescript.d.ts +36 -0
- package/dist/generator/emit-straightline-typescript.d.ts.map +1 -0
- package/dist/generator/emit-straightline-typescript.js +397 -0
- package/dist/generator/emit-straightline-typescript.js.map +1 -0
- package/dist/generator/index.d.ts +13 -0
- package/dist/generator/index.d.ts.map +1 -1
- package/dist/generator/index.js +39 -0
- package/dist/generator/index.js.map +1 -1
- package/dist/generator/literal.d.ts +7 -0
- package/dist/generator/literal.d.ts.map +1 -1
- package/dist/generator/literal.js +41 -0
- package/dist/generator/literal.js.map +1 -1
- package/dist/generator/straightline.d.ts +147 -0
- package/dist/generator/straightline.d.ts.map +1 -0
- package/dist/generator/straightline.js +122 -0
- package/dist/generator/straightline.js.map +1 -0
- package/dist/generator/typed.d.ts +156 -0
- package/dist/generator/typed.d.ts.map +1 -0
- package/dist/generator/typed.js +108 -0
- package/dist/generator/typed.js.map +1 -0
- package/dist/guard.d.ts +18 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +56 -0
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/primitives.d.ts +112 -0
- package/dist/primitives.d.ts.map +1 -0
- package/dist/primitives.js +206 -0
- package/dist/primitives.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
import { emitDocLiteral, emitDocLiteralCompact } from "./literal.js";
|
|
2
|
+
import { emitStraightlineModule, } from "./straightline.js";
|
|
3
|
+
/** primitive namespace alias(生成コード内)。 */
|
|
4
|
+
const CGP = "cgp";
|
|
5
|
+
/**
|
|
6
|
+
* scope 式(生成コード内)。scope は「input + それまでの ok 結果」の**その時点のスナップ**で
|
|
7
|
+
* あり、runBehavior の `baseScope()` と同じく exec ごとに新規に組む。primitive へは
|
|
8
|
+
* `scope()`(関数呼び)を渡す(呼び時点の results を読む — 決定的)。
|
|
9
|
+
*/
|
|
10
|
+
const SCOPE = "scope()";
|
|
11
|
+
/**
|
|
12
|
+
* map 本体(over/guard/ports)の要素 scope 式(生成コード内)。runBehavior の map と同じく
|
|
13
|
+
* `{ ...baseScope(), [as]: el }` のスナップを per-element で組む。生成コードはこの名前
|
|
14
|
+
* (`mscope()`)で要素 scope を読む関数を map arm 内にローカル定義する。
|
|
15
|
+
*/
|
|
16
|
+
const MAP_SCOPE = "mscope()";
|
|
17
|
+
/** IR リテラルを TS 式として emit(primitive 被演算子用の単一行リテラル)。 */
|
|
18
|
+
function lit(node) {
|
|
19
|
+
return emitDocLiteralCompact(node, "ts");
|
|
20
|
+
}
|
|
21
|
+
/** args 配列を要素ごとに IR リテラルへ落として `, ` 連結。 */
|
|
22
|
+
function argList(arg) {
|
|
23
|
+
return arg.map((a) => lit(a)).join(", ");
|
|
24
|
+
}
|
|
25
|
+
// A0 codegenPrimitives の引数形に合わせた op → 呼び式の綴じ方。
|
|
26
|
+
// 命名は docs/codegen-primitives.md §4.1(TS 列)に一致。
|
|
27
|
+
const OP_EMITTERS = {
|
|
28
|
+
// 参照(path 配列 + scope)
|
|
29
|
+
ref: (arg, s) => `${CGP}.ref(${lit(arg)}, ${s})`,
|
|
30
|
+
refOpt: (arg, s) => `${CGP}.refOpt(${lit(arg)}, ${s})`,
|
|
31
|
+
// リテラルラッパ(int は文字列, float は number)
|
|
32
|
+
int: (arg, s) => `${CGP}.intLit(${lit(arg)}, ${s})`,
|
|
33
|
+
float: (arg, s) => `${CGP}.floatLit(${lit(arg)}, ${s})`,
|
|
34
|
+
// 構築(fields/elements は未評価 IR)
|
|
35
|
+
obj: (arg, s) => `${CGP}.obj(${lit(arg)}, ${s})`,
|
|
36
|
+
arr: (arg, s) => `${CGP}.arr(${lit(arg)}, ${s})`,
|
|
37
|
+
// 数値(二項は [a,b]・単項は [a])
|
|
38
|
+
add: (arg, s) => `${CGP}.add(${argList(arg)}, ${s})`,
|
|
39
|
+
sub: (arg, s) => `${CGP}.sub(${argList(arg)}, ${s})`,
|
|
40
|
+
mul: (arg, s) => `${CGP}.mul(${argList(arg)}, ${s})`,
|
|
41
|
+
neg: (arg, s) => `${CGP}.neg(${argList(arg)}, ${s})`,
|
|
42
|
+
div: (arg, s) => `${CGP}.div(${argList(arg)}, ${s})`,
|
|
43
|
+
mod: (arg, s) => `${CGP}.mod(${argList(arg)}, ${s})`,
|
|
44
|
+
// 文字列連結(n-ary。parts は未評価 IR 配列)
|
|
45
|
+
concat: (arg, s) => `${CGP}.concat(${lit(arg)}, ${s})`,
|
|
46
|
+
// 比較(二項)
|
|
47
|
+
eq: (arg, s) => `${CGP}.eq(${argList(arg)}, ${s})`,
|
|
48
|
+
ne: (arg, s) => `${CGP}.ne(${argList(arg)}, ${s})`,
|
|
49
|
+
lt: (arg, s) => `${CGP}.lt(${argList(arg)}, ${s})`,
|
|
50
|
+
le: (arg, s) => `${CGP}.le(${argList(arg)}, ${s})`,
|
|
51
|
+
gt: (arg, s) => `${CGP}.gt(${argList(arg)}, ${s})`,
|
|
52
|
+
ge: (arg, s) => `${CGP}.ge(${argList(arg)}, ${s})`,
|
|
53
|
+
// bool/null(短絡: 被演算子は未評価 IR で渡す — primitive 内 evaluate が短絡)
|
|
54
|
+
and: (arg, s) => `${CGP}.and(${argList(arg)}, ${s})`,
|
|
55
|
+
or: (arg, s) => `${CGP}.or(${argList(arg)}, ${s})`,
|
|
56
|
+
not: (arg, s) => `${CGP}.not(${argList(arg)}, ${s})`,
|
|
57
|
+
coalesce: (arg, s) => `${CGP}.coalesce(${argList(arg)}, ${s})`,
|
|
58
|
+
cond: (arg, s) => `${CGP}.cond(${argList(arg)}, ${s})`,
|
|
59
|
+
len: (arg, s) => `${CGP}.len(${argList(arg)}, ${s})`,
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* emitExpr — Expression IR ノードを TS の primitive 呼び式に落とす。
|
|
63
|
+
* - 単一キーの演算子ノード → 対応 primitive(被演算子は IR リテラル=A0 の Expr 契約)。
|
|
64
|
+
* - スカラ/ null / bool のむき出しリテラル(例 cond の then=true, ref path 内 string)や
|
|
65
|
+
* 未知の形は `evalExpr`(同一 SSoT)へ落とす。これで型判定を生成コードに残さない。
|
|
66
|
+
* Portability Guard を通過済み(生成時検査)なので未知 operator はここに来ない。
|
|
67
|
+
*/
|
|
68
|
+
function emitExpr(node, scopeVar) {
|
|
69
|
+
if (node !== null && typeof node === "object" && !Array.isArray(node)) {
|
|
70
|
+
const keys = Object.keys(node);
|
|
71
|
+
if (keys.length === 1) {
|
|
72
|
+
const op = keys[0];
|
|
73
|
+
const em = OP_EMITTERS[op];
|
|
74
|
+
if (em)
|
|
75
|
+
return em(node[op], scopeVar);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// スカラリテラル(string/number/bool/null)や obj 以外 — evaluate SSoT に委譲(同一意味論)。
|
|
79
|
+
return `${CGP}.evalExpr(${lit(node)}, ${scopeVar})`;
|
|
80
|
+
}
|
|
81
|
+
// ── per-node exec 分岐 / component 関数 / module の綴じ方 ──────────────────────
|
|
82
|
+
/** ops リテラル(runPlan に渡す OpSpec[] の TS リテラル)を綴じる。 */
|
|
83
|
+
function emitOpsLiteral(plan) {
|
|
84
|
+
const rows = plan.opsLiteral.map((o) => {
|
|
85
|
+
const parts = [`id: ${JSON.stringify(o.id)}`, `parent: ${o.parent === null ? "null" : String(o.parent)}`];
|
|
86
|
+
if (o.bindField !== undefined)
|
|
87
|
+
parts.push(`bindField: ${JSON.stringify(o.bindField)}`);
|
|
88
|
+
if (o.relationKind !== undefined)
|
|
89
|
+
parts.push(`relationKind: ${JSON.stringify(o.relationKind)}`);
|
|
90
|
+
if (o.policy !== undefined)
|
|
91
|
+
parts.push(`policy: ${JSON.stringify(o.policy)}`);
|
|
92
|
+
return ` { ${parts.join(", ")} },`;
|
|
93
|
+
});
|
|
94
|
+
return `[\n${rows.join("\n")}\n ]`;
|
|
95
|
+
}
|
|
96
|
+
/** map arm の per-element ports リテラル(要素 scope `mscope()` で評価)。 */
|
|
97
|
+
function emitMapPorts(op) {
|
|
98
|
+
if (op.ports.length === 0)
|
|
99
|
+
return "const ports: Record<string, Value> = {};";
|
|
100
|
+
return `const ports: Record<string, Value> = {\n${op.ports
|
|
101
|
+
.map((p) => ` ${JSON.stringify(p.name)}: ${p.expr},`)
|
|
102
|
+
.join("\n")}\n };`;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* emitMapArm — map ノードの直線展開(要素反復・guard skip・per-element/batched handler・into
|
|
106
|
+
* zip-attach)。runBehavior の map 分岐(behavior.ts §map)を生成コードに直線展開する。op-log
|
|
107
|
+
* 等価のため、handler は runBehavior と同じ ctx(非 batched は `{nodeId,component,bound}`、batched は
|
|
108
|
+
* `{nodeId,component}`)・同じ ports 形で呼ぶ。guard は cond primitive(strict-bool SSoT)。into は
|
|
109
|
+
* A0 `hydrateInto` primitive(zip-attach SSoT)。要素反復は宣言どおり逐次(並列単位は body ノード)。
|
|
110
|
+
*/
|
|
111
|
+
function emitMapArm(op, aw) {
|
|
112
|
+
const comp = JSON.stringify(op.component);
|
|
113
|
+
const nodeId = JSON.stringify(op.id);
|
|
114
|
+
const asKey = JSON.stringify(op.as);
|
|
115
|
+
const guardCheck = op.guard === undefined ? "" : `\n if (${op.guard} !== true) continue;`;
|
|
116
|
+
const intoTail = op.into === undefined
|
|
117
|
+
? " return { ok: collected };"
|
|
118
|
+
: ` // map.into zip-attach (behavior.ts applyInto): over と同じ長さ・順序で guard 通過要素へ
|
|
119
|
+
// ${JSON.stringify(op.into)} を書き戻す(skip 要素は無変更で pass-through、親不変=shallow copy)。
|
|
120
|
+
// Failure code は runBehavior と一致(非 object 要素は MAP_INTO_ELEMENT_NOT_OBJECT)。
|
|
121
|
+
{
|
|
122
|
+
const augmented: Value[] = [];
|
|
123
|
+
let mk = 0;
|
|
124
|
+
for (let mj = 0; mj < (over as Value[]).length; mj++) {
|
|
125
|
+
const oel = (over as Value[])[mj];
|
|
126
|
+
if (mk < keptIdx.length && keptIdx[mk] === mj) {
|
|
127
|
+
if (oel === null || typeof oel !== "object" || Array.isArray(oel))
|
|
128
|
+
throw new BehaviorFailure("MAP_INTO_ELEMENT_NOT_OBJECT", \`map '${op.id}': 'into' requires object elements (element \${mj} is not an object)\`);
|
|
129
|
+
augmented.push({ ...(oel as Record<string, Value>), [${JSON.stringify(op.into)}]: collected[mk] });
|
|
130
|
+
mk++;
|
|
131
|
+
} else {
|
|
132
|
+
augmented.push(oel);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
return { ok: augmented };
|
|
136
|
+
}`;
|
|
137
|
+
const body = op.batched
|
|
138
|
+
? ` const items: Value[] = [];
|
|
139
|
+
for (let mi = 0; mi < (over as Value[]).length; mi++) {
|
|
140
|
+
const el = (over as Value[])[mi];
|
|
141
|
+
const mscope = (): Scope => ({ ...scope(), [${asKey}]: el });
|
|
142
|
+
void mscope;${guardCheck}
|
|
143
|
+
${emitMapPorts(op)}
|
|
144
|
+
items.push(ports);
|
|
145
|
+
keptIdx.push(mi);
|
|
146
|
+
}
|
|
147
|
+
let collected: Value[];
|
|
148
|
+
if (items.length === 0) {
|
|
149
|
+
collected = [];
|
|
150
|
+
} else {
|
|
151
|
+
const h = handlers[${comp}];
|
|
152
|
+
if (!h) throw new BehaviorFailure("UNKNOWN_COMPONENT", \`component '${op.component}' has no handler (fail-closed)\`);
|
|
153
|
+
const outcome = ${aw}h({ items }, { nodeId: ${nodeId}, component: ${comp} });
|
|
154
|
+
if ("error" in outcome) return outcome;
|
|
155
|
+
if (!Array.isArray(outcome.ok) || outcome.ok.length !== items.length)
|
|
156
|
+
throw new BehaviorFailure("MAP_BATCH_RESULT_MISMATCH", \`map '${op.id}': batched handler must return a list aligned to items (want \${items.length}, got \${Array.isArray(outcome.ok) ? outcome.ok.length : typeof outcome.ok})\`);
|
|
157
|
+
collected = outcome.ok as Value[];
|
|
158
|
+
}
|
|
159
|
+
${intoTail}`
|
|
160
|
+
: ` const collected: Value[] = [];
|
|
161
|
+
const h = handlers[${comp}];
|
|
162
|
+
if (!h) throw new BehaviorFailure("UNKNOWN_COMPONENT", \`component '${op.component}' has no handler (fail-closed)\`);
|
|
163
|
+
for (let mi = 0; mi < (over as Value[]).length; mi++) {
|
|
164
|
+
const el = (over as Value[])[mi];
|
|
165
|
+
const mscope = (): Scope => ({ ...scope(), [${asKey}]: el });
|
|
166
|
+
void mscope;${guardCheck}
|
|
167
|
+
${emitMapPorts(op)}
|
|
168
|
+
const outcome = ${aw}h(ports, { nodeId: ${nodeId}, component: ${comp}, bound: el });
|
|
169
|
+
if ("error" in outcome) return outcome;
|
|
170
|
+
collected.push(outcome.ok);
|
|
171
|
+
keptIdx.push(mi);
|
|
172
|
+
}
|
|
173
|
+
${intoTail}`;
|
|
174
|
+
return ` if (i === ${op.index}) {
|
|
175
|
+
const over = ${op.over};
|
|
176
|
+
if (!Array.isArray(over)) throw new BehaviorFailure("MAP_OVER_NOT_ARRAY", \`map '${op.id}': 'over' did not evaluate to an array\`);
|
|
177
|
+
const keptIdx: number[] = [];
|
|
178
|
+
${body}
|
|
179
|
+
}`;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* 1ノードの exec 分岐本体(index で分岐 — nodeKind ディスパッチではない)。`aw` は handler 呼びの
|
|
183
|
+
* await キーワード(同期経路は ""、非同期経路 bindAsync は "await ")。cond は handler を呼ばない
|
|
184
|
+
* ので aw は無関係。
|
|
185
|
+
*/
|
|
186
|
+
function emitExecArm(op, aw) {
|
|
187
|
+
if (op.kind === "cond") {
|
|
188
|
+
// cond は純 Expression。scope を渡して1式評価(handler は呼ばない)。
|
|
189
|
+
return ` if (i === ${op.index}) return { ok: ${op.expr} };`;
|
|
190
|
+
}
|
|
191
|
+
if (op.kind === "map")
|
|
192
|
+
return emitMapArm(op, aw);
|
|
193
|
+
// componentRef: 各 port を名前付き primitive 呼びで評価 → handler 注入呼び。
|
|
194
|
+
const portLines = op.ports.length === 0
|
|
195
|
+
? " const ports: Record<string, Value> = {};"
|
|
196
|
+
: ` const ports: Record<string, Value> = {\n${op.ports
|
|
197
|
+
.map((p) => ` ${JSON.stringify(p.name)}: ${p.expr},`)
|
|
198
|
+
.join("\n")}\n };`;
|
|
199
|
+
return ` if (i === ${op.index}) {
|
|
200
|
+
${portLines}
|
|
201
|
+
const h = handlers[${JSON.stringify(op.component)}];
|
|
202
|
+
if (!h) throw new BehaviorFailure("UNKNOWN_COMPONENT", \`component '${op.component}' has no handler (fail-closed)\`);
|
|
203
|
+
return ${aw}h(ports, { nodeId: ${JSON.stringify(op.id)}, component: ${JSON.stringify(op.component)} });
|
|
204
|
+
}`;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* emitComponentFn — 1 component の直線関数を綴じる。runBehavior の実行フロー(results 蓄積 +
|
|
208
|
+
* baseScope + runPlan + writeUnproduced + output 評価)を **生成コードに直線展開**する
|
|
209
|
+
* (汎用 exec/nodeKind/evalPorts は無い。各 exec 分岐は index で確定・ハードコード)。
|
|
210
|
+
*/
|
|
211
|
+
function emitComponentFn(plan) {
|
|
212
|
+
const syncArms = plan.ops.map((o) => emitExecArm(o, "")).join("\n");
|
|
213
|
+
const asyncArms = plan.ops.map((o) => emitExecArm(o, "await ")).join("\n");
|
|
214
|
+
const planLiteral = plan.component.plan
|
|
215
|
+
? emitDocLiteral(plan.component.plan, "ts", 1)
|
|
216
|
+
: "null";
|
|
217
|
+
const output = emitExpr(plan.component.output, SCOPE);
|
|
218
|
+
const relationKinds = plan.opsLiteral.map((o) => (o.relationKind === "connection" ? "connection" : "single"));
|
|
219
|
+
const relDecl = `const relationKinds: (RelationKind | undefined)[] = ${JSON.stringify(relationKinds)};`;
|
|
220
|
+
const sync = `function run_${sanitize(plan.name)}(handlers: Handlers, input: Scope): Value {
|
|
221
|
+
const ops: OpSpec[] = ${emitOpsLiteral(plan)};
|
|
222
|
+
const results: Record<string, Value> = {};
|
|
223
|
+
const scope = (): Scope => ({ ...input, ...results });
|
|
224
|
+
${relDecl}
|
|
225
|
+
const exec: Exec = (op) => {
|
|
226
|
+
const i = ops.findIndex((o) => o.id === op.id);
|
|
227
|
+
${syncArms}
|
|
228
|
+
throw new BehaviorFailure("UNKNOWN_NODE_KIND", \`op '\${op.id}' has no generated exec arm (fail-closed)\`);
|
|
229
|
+
};
|
|
230
|
+
const wrappedExec: Exec = (op, bound) => {
|
|
231
|
+
const outcome = exec(op, bound);
|
|
232
|
+
if ("ok" in outcome) results[op.id] = outcome.ok;
|
|
233
|
+
return outcome;
|
|
234
|
+
};
|
|
235
|
+
const run = runPlan(${planLiteral}, ops, wrappedExec);
|
|
236
|
+
run.states.forEach((st, i) => {
|
|
237
|
+
if (st.status === "skipped") results[ops[i].id] = unproducedValue(relationKinds[i]);
|
|
238
|
+
});
|
|
239
|
+
return ${output};
|
|
240
|
+
}`;
|
|
241
|
+
// async 版: plan の stage 内独立 op を plan.concurrency で bounded 並列に dispatch する
|
|
242
|
+
// (runPlanAsync = A0 の bounded 並行 plan primitive を per-node thunk で直呼び)。並行を
|
|
243
|
+
// 潰さず runBehaviorAsync と同一の並列挙動(同一 emitted-op 多重集合 / 同一結果)を持つ。
|
|
244
|
+
// 逐次化(concurrency=1 へ改変)すると in-flight 並列が消え pin が壊れる(AC#2/#3 非空虚)。
|
|
245
|
+
const asyncFn = `async function run_${sanitize(plan.name)}_async(handlers: AsyncHandlers, input: Scope): Promise<Value> {
|
|
246
|
+
const ops: OpSpec[] = ${emitOpsLiteral(plan)};
|
|
247
|
+
const results: Record<string, Value> = {};
|
|
248
|
+
const scope = (): Scope => ({ ...input, ...results });
|
|
249
|
+
${relDecl}
|
|
250
|
+
const exec: AsyncExec = async (op) => {
|
|
251
|
+
const i = ops.findIndex((o) => o.id === op.id);
|
|
252
|
+
${asyncArms}
|
|
253
|
+
throw new BehaviorFailure("UNKNOWN_NODE_KIND", \`op '\${op.id}' has no generated exec arm (fail-closed)\`);
|
|
254
|
+
};
|
|
255
|
+
const wrappedExec: AsyncExec = async (op, bound) => {
|
|
256
|
+
const outcome = await exec(op, bound);
|
|
257
|
+
if ("ok" in outcome) results[op.id] = outcome.ok;
|
|
258
|
+
return outcome;
|
|
259
|
+
};
|
|
260
|
+
const run = await runPlanAsync(${planLiteral}, ops, wrappedExec);
|
|
261
|
+
run.states.forEach((st, i) => {
|
|
262
|
+
if (st.status === "skipped") results[ops[i].id] = unproducedValue(relationKinds[i]);
|
|
263
|
+
});
|
|
264
|
+
return ${output};
|
|
265
|
+
}`;
|
|
266
|
+
return `${sync}\n\n${asyncFn}`;
|
|
267
|
+
}
|
|
268
|
+
/** component 名を関数名に使える形へ(決定的・衝突は index で回避しない: 名前は一意 — DUPLICATE_COMPONENT で保証)。 */
|
|
269
|
+
function sanitize(name) {
|
|
270
|
+
return name.replace(/[^A-Za-z0-9_$]/g, "_");
|
|
271
|
+
}
|
|
272
|
+
function emitComponent(plan, _ctx) {
|
|
273
|
+
return emitComponentFn(plan);
|
|
274
|
+
}
|
|
275
|
+
function emitModule(plans, ctx) {
|
|
276
|
+
const { fingerprint, specVersions, componentNames, runtimeImport } = ctx;
|
|
277
|
+
const spec = runtimeImport;
|
|
278
|
+
const names = componentNames.map((n) => JSON.stringify(n)).join(", ");
|
|
279
|
+
const irLiteral = emitDocLiteral(ctx.ir, "ts");
|
|
280
|
+
const fns = plans.map((p) => emitComponent(p, ctx)).join("\n\n");
|
|
281
|
+
const dispatchArms = plans
|
|
282
|
+
.map((p) => ` if (name === ${JSON.stringify(p.name)}) return run_${sanitize(p.name)}(handlers, { ...input });`)
|
|
283
|
+
.join("\n");
|
|
284
|
+
const dispatchAsyncArms = plans
|
|
285
|
+
.map((p) => ` if (name === ${JSON.stringify(p.name)}) return run_${sanitize(p.name)}_async(handlers, { ...input });`)
|
|
286
|
+
.join("\n");
|
|
287
|
+
return `// GENERATED by behavior-contracts common generator (bc#37/#42, straight-line) — DO NOT EDIT.
|
|
288
|
+
// Input: portable component-graph IR only (scp-ir-architecture.md §5/§7.4).
|
|
289
|
+
// This is the STRAIGHT-LINE codegen endpoint (typed-codegen.md §4.1): each component is
|
|
290
|
+
// emitted as a native function that drives the plan via the runPlan primitive and evaluates
|
|
291
|
+
// every port + output through the A0 expression-operator primitives (#36) + injected handlers.
|
|
292
|
+
// It does NOT go through runBehavior's tree-walk (no nodeKind dispatch / no evalPorts loop /
|
|
293
|
+
// no generic exec). Scope: componentRef + cond + map (over/when/into/batched — bc#42 A3), with
|
|
294
|
+
// simple Expression ports. bind() drives runPlan (same-value sequential fallback per plan.ts);
|
|
295
|
+
// bindAsync() drives the runPlanAsync bounded-parallel primitive with per-node thunks so the
|
|
296
|
+
// generated code preserves plan.concurrency (same parallel behavior as runBehaviorAsync — bc#42
|
|
297
|
+
// AC#2). Handlers are ALWAYS injected at the boundary; they are never generated.
|
|
298
|
+
// irFingerprint: ${fingerprint}
|
|
299
|
+
import { SPEC_VERSIONS, fingerprintComponentGraph, BehaviorFailure, codegenPrimitives as ${CGP}, runPlan, runPlanAsync, unproducedValue } from ${JSON.stringify(spec)};
|
|
300
|
+
import type { AsyncExec, AsyncHandlers, ComponentGraphIR, Exec, Handlers, OpSpec, RelationKind, Scope, Value } from ${JSON.stringify(spec)};
|
|
301
|
+
|
|
302
|
+
/** Spec versions baked at generation time (fail-closed constant comparison at load). */
|
|
303
|
+
export const EXPECTED_SPEC_VERSIONS = { behavior: ${specVersions.behavior}, expression: ${specVersions.expression}, plan: ${specVersions.plan} } as const;
|
|
304
|
+
|
|
305
|
+
/** FNV-1a 64 fingerprint of the source portable IR (canonicalJson discipline, #208). */
|
|
306
|
+
export const IR_FINGERPRINT = ${JSON.stringify(fingerprint)};
|
|
307
|
+
|
|
308
|
+
/** Component names exposed by bind(), in IR declaration order. */
|
|
309
|
+
export const COMPONENT_NAMES: readonly string[] = [${names}];
|
|
310
|
+
|
|
311
|
+
/** The portable component-graph IR, embedded for the load-time fingerprint self-check only. */
|
|
312
|
+
export const IR: ComponentGraphIR = ${irLiteral};
|
|
313
|
+
|
|
314
|
+
// ── load-time fail-closed checks (#208 prepared-artifact discipline, checked ONCE) ─────
|
|
315
|
+
for (const [k, want] of Object.entries(EXPECTED_SPEC_VERSIONS)) {
|
|
316
|
+
const got = (SPEC_VERSIONS as Record<string, number>)[k];
|
|
317
|
+
if (got !== want)
|
|
318
|
+
throw new Error(
|
|
319
|
+
\`behavior-contracts generated module: spec-version skew for '\${k}' (generated=\${want}, runtime=\${got}) — regenerate against this runtime (fail-closed)\`,
|
|
320
|
+
);
|
|
321
|
+
}
|
|
322
|
+
if (fingerprintComponentGraph(IR) !== IR_FINGERPRINT)
|
|
323
|
+
throw new Error(
|
|
324
|
+
\`behavior-contracts generated module: IR fingerprint mismatch (baked=\${IR_FINGERPRINT}, embedded literal=\${fingerprintComponentGraph(IR)}) — the generated code was modified or corrupted (fail-closed)\`,
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
// ── straight-line component functions (no runBehavior tree-walk) ───────────────────
|
|
328
|
+
${fns}
|
|
329
|
+
|
|
330
|
+
/**
|
|
331
|
+
* bind — inject handlers (boundary injection; catalog name → implementation) and get one
|
|
332
|
+
* callable per component. Each callable runs the straight-line function for that component
|
|
333
|
+
* (plan via runPlan primitive + per-node primitive port eval + injected handler) — NOT
|
|
334
|
+
* the runBehavior tree-walk. Observationally equivalent to the runBehavior path:
|
|
335
|
+
* same values, same emitted op sequence, same Failure code/message.
|
|
336
|
+
*/
|
|
337
|
+
export function bind(handlers: Handlers): Record<string, (input?: Scope) => Value> {
|
|
338
|
+
const bound: Record<string, (input?: Scope) => Value> = {};
|
|
339
|
+
for (const name of COMPONENT_NAMES) bound[name] = (input: Scope = {}) => dispatch(name, handlers, input);
|
|
340
|
+
return bound;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
function dispatch(name: string, handlers: Handlers, input: Scope): Value {
|
|
344
|
+
${dispatchArms}
|
|
345
|
+
throw new BehaviorFailure("UNKNOWN_ENTRY", \`component '\${name}' not found in this module (fail-closed)\`);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* bindAsync — as bind, but each callable drives the plan via the runPlanAsync bounded-parallel
|
|
350
|
+
* primitive with per-node thunks. Same-stage independent ops are dispatched up to
|
|
351
|
+
* plan.concurrency in flight (async handlers awaited), preserving the exact parallel behavior of
|
|
352
|
+
* the async ir path (same emitted-op multiset + same result). Map bodies iterate elements in
|
|
353
|
+
* declaration order (the parallel unit is the body node, per §7). Observationally equivalent to
|
|
354
|
+
* the async ir path.
|
|
355
|
+
*/
|
|
356
|
+
export function bindAsync(handlers: AsyncHandlers): Record<string, (input?: Scope) => Promise<Value>> {
|
|
357
|
+
const bound: Record<string, (input?: Scope) => Promise<Value>> = {};
|
|
358
|
+
for (const name of COMPONENT_NAMES) bound[name] = (input: Scope = {}) => dispatchAsync(name, handlers, input);
|
|
359
|
+
return bound;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
function dispatchAsync(name: string, handlers: AsyncHandlers, input: Scope): Promise<Value> {
|
|
363
|
+
${dispatchAsyncArms}
|
|
364
|
+
throw new BehaviorFailure("UNKNOWN_ENTRY", \`component '\${name}' not found in this module (fail-closed)\`);
|
|
365
|
+
}
|
|
366
|
+
`;
|
|
367
|
+
}
|
|
368
|
+
const dialect = {
|
|
369
|
+
emitExpr,
|
|
370
|
+
mapScopeVar: MAP_SCOPE,
|
|
371
|
+
emitComponent,
|
|
372
|
+
emitModule,
|
|
373
|
+
};
|
|
374
|
+
/**
|
|
375
|
+
* 公開再エクスポート(bc#46 B2 typed emitter が同じ TS dialect / scope 名を流用するため)。
|
|
376
|
+
* typed 経路は runtime 本体をこの straight-line dialect で綴じ、byte 同一の runtime を保つ。
|
|
377
|
+
*/
|
|
378
|
+
export const straightlineTsDialect = dialect;
|
|
379
|
+
/** 生成コード内の scope 式(`scope()`)。typed emitter が同名で port/output を評価する。 */
|
|
380
|
+
export const TS_SCOPE = SCOPE;
|
|
381
|
+
/** 生成コード内の map 要素 scope 式(`mscope()`)。 */
|
|
382
|
+
export const TS_MAP_SCOPE = MAP_SCOPE;
|
|
383
|
+
function emit(ctx) {
|
|
384
|
+
return emitStraightlineModule(ctx, dialect, SCOPE);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* typescriptStraightlineEmitter — 言語識別子 `"typescript-straightline"` の emitter plugin。
|
|
388
|
+
* 既存の `typescript`(リテラル焼き込み・endpoint 3-literal)と併存する additive な第2モード。
|
|
389
|
+
*/
|
|
390
|
+
export const typescriptStraightlineEmitter = {
|
|
391
|
+
language: "typescript-straightline",
|
|
392
|
+
fileExtension: ".ts",
|
|
393
|
+
defaultRuntimeImport: "behavior-contracts",
|
|
394
|
+
filenameHint: "behaviors.straightline.generated.ts",
|
|
395
|
+
emit,
|
|
396
|
+
};
|
|
397
|
+
//# sourceMappingURL=emit-straightline-typescript.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit-straightline-typescript.js","sourceRoot":"","sources":["../../src/generator/emit-straightline-typescript.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,4 +6,17 @@ export { pythonEmitter } from "./emit-python.js";
|
|
|
6
6
|
export { goEmitter } from "./emit-go.js";
|
|
7
7
|
export { rustEmitter } from "./emit-rust.js";
|
|
8
8
|
export { phpEmitter } from "./emit-php.js";
|
|
9
|
+
export { typescriptStraightlineEmitter } from "./emit-straightline-typescript.js";
|
|
10
|
+
export { rustStraightlineEmitter } from "./emit-straightline-rust.js";
|
|
11
|
+
export { phpStraightlineEmitter } from "./emit-straightline-php.js";
|
|
12
|
+
export { goStraightlineEmitter } from "./emit-straightline-go.js";
|
|
13
|
+
export { pythonStraightlineEmitter } from "./emit-straightline-python.js";
|
|
14
|
+
export { typescriptTypedEmitter, tsTypedMaterializer } from "./emit-straightline-typed-typescript.js";
|
|
15
|
+
export { goTypedEmitter, goTypedMaterializer } from "./emit-straightline-typed-go.js";
|
|
16
|
+
export { rustTypedEmitter, rustTypedMaterializer } from "./emit-straightline-typed-rust.js";
|
|
17
|
+
export { rustStraightlineInternals } from "./emit-straightline-rust.js";
|
|
18
|
+
export { assertStraightlineSupported, isStraightlineNode, buildComponentPlan, emitStraightlineModule, } from "./straightline.js";
|
|
19
|
+
export type { StraightlineDialect, StraightlineOp, ComponentPlan, OpLiteral, } from "./straightline.js";
|
|
20
|
+
export { buildTypePlan, deriveTypeRef, findDecl } from "./typed.js";
|
|
21
|
+
export type { TypePlan, TypeRef, TypeDecl, TypedMaterializer } from "./typed.js";
|
|
9
22
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AA+CA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,6BAA6B,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC5F,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,SAAS,GACV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/generator/index.js
CHANGED
|
@@ -10,11 +10,39 @@ import { pythonEmitter } from "./emit-python.js";
|
|
|
10
10
|
import { goEmitter } from "./emit-go.js";
|
|
11
11
|
import { rustEmitter } from "./emit-rust.js";
|
|
12
12
|
import { phpEmitter } from "./emit-php.js";
|
|
13
|
+
import { typescriptStraightlineEmitter } from "./emit-straightline-typescript.js";
|
|
14
|
+
import { rustStraightlineEmitter } from "./emit-straightline-rust.js";
|
|
15
|
+
import { phpStraightlineEmitter } from "./emit-straightline-php.js";
|
|
16
|
+
import { goStraightlineEmitter } from "./emit-straightline-go.js";
|
|
17
|
+
import { pythonStraightlineEmitter } from "./emit-straightline-python.js";
|
|
18
|
+
import { typescriptTypedEmitter } from "./emit-straightline-typed-typescript.js";
|
|
19
|
+
import { goTypedEmitter } from "./emit-straightline-typed-go.js";
|
|
20
|
+
import { rustTypedEmitter } from "./emit-straightline-typed-rust.js";
|
|
13
21
|
registerEmitter(typescriptEmitter);
|
|
14
22
|
registerEmitter(pythonEmitter);
|
|
15
23
|
registerEmitter(goEmitter);
|
|
16
24
|
registerEmitter(rustEmitter);
|
|
17
25
|
registerEmitter(phpEmitter);
|
|
26
|
+
// bc#37 A1: 直線 emit の TS emitter(golden oracle)。既存のリテラル焼き込みと併存する additive
|
|
27
|
+
// な第2モード(go/rust/python/php は A2 で同じ StraightlineDialect 枠に乗る)。
|
|
28
|
+
registerEmitter(typescriptStraightlineEmitter);
|
|
29
|
+
// bc#39 A2-rust: 直線 emit の rust emitter(単純式ネイティブ化 = Phase B 脱解釈)。
|
|
30
|
+
registerEmitter(rustStraightlineEmitter);
|
|
31
|
+
// bc#41 A2-php: 直線 emit の PHP emitter(単純式 native 化 = 脱解釈)。既存の php と併存。
|
|
32
|
+
registerEmitter(phpStraightlineEmitter);
|
|
33
|
+
// bc#38 A2: 直線 emit の Go emitter(de-interpretation: 単純 port を native 化)。
|
|
34
|
+
registerEmitter(goStraightlineEmitter);
|
|
35
|
+
// bc#40 A2: 直線 emit の python emitter(単純式を native 化する脱解釈経路)。
|
|
36
|
+
registerEmitter(pythonStraightlineEmitter);
|
|
37
|
+
// bc#46 B2-ts: typed 直線 emitter(outType → TS interface/型注釈, tsc 検証 oracle)。
|
|
38
|
+
// straight-line と併存する additive な第3モード。go/rust は #47/#48 で同じ typed seam に乗る。
|
|
39
|
+
registerEmitter(typescriptTypedEmitter);
|
|
40
|
+
// bc#47 B2-go: typed 直線 emitter(outType → 具体 Go struct・実 de-box)。最初のコンパイル言語の
|
|
41
|
+
// typed emitter として TypedMaterializer seam を runtime-materialization 対応へ拡張(rust #48 が乗る)。
|
|
42
|
+
registerEmitter(goTypedEmitter);
|
|
43
|
+
// bc#48 B2-rust: typed 直線 emitter(outType → 具体 Rust struct・実 de-box)。#47 で拡張された
|
|
44
|
+
// TypedMaterializer seam に同型で乗る(rust の materialization/型描画のみ足す・de-box 利得は最大)。
|
|
45
|
+
registerEmitter(rustTypedEmitter);
|
|
18
46
|
export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, } from "./core.js";
|
|
19
47
|
export { fingerprintComponentGraph, FingerprintFailure } from "./fingerprint.js";
|
|
20
48
|
export { typescriptEmitter } from "./emit-typescript.js";
|
|
@@ -22,4 +50,15 @@ export { pythonEmitter } from "./emit-python.js";
|
|
|
22
50
|
export { goEmitter } from "./emit-go.js";
|
|
23
51
|
export { rustEmitter } from "./emit-rust.js";
|
|
24
52
|
export { phpEmitter } from "./emit-php.js";
|
|
53
|
+
export { typescriptStraightlineEmitter } from "./emit-straightline-typescript.js";
|
|
54
|
+
export { rustStraightlineEmitter } from "./emit-straightline-rust.js";
|
|
55
|
+
export { phpStraightlineEmitter } from "./emit-straightline-php.js";
|
|
56
|
+
export { goStraightlineEmitter } from "./emit-straightline-go.js";
|
|
57
|
+
export { pythonStraightlineEmitter } from "./emit-straightline-python.js";
|
|
58
|
+
export { typescriptTypedEmitter, tsTypedMaterializer } from "./emit-straightline-typed-typescript.js";
|
|
59
|
+
export { goTypedEmitter, goTypedMaterializer } from "./emit-straightline-typed-go.js";
|
|
60
|
+
export { rustTypedEmitter, rustTypedMaterializer } from "./emit-straightline-typed-rust.js";
|
|
61
|
+
export { rustStraightlineInternals } from "./emit-straightline-rust.js";
|
|
62
|
+
export { assertStraightlineSupported, isStraightlineNode, buildComponentPlan, emitStraightlineModule, } from "./straightline.js";
|
|
63
|
+
export { buildTypePlan, deriveTypeRef, findDecl } from "./typed.js";
|
|
25
64
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/generator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,4 +5,11 @@ export type LiteralStyle = "ts" | "py" | "go" | "rust" | "php";
|
|
|
5
5
|
* 複数行(JSON.stringify(v, null, indent) と同じレイアウト規則)。
|
|
6
6
|
*/
|
|
7
7
|
export declare function emitDocLiteral(doc: unknown, style: LiteralStyle, indent?: number, path?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* emitDocLiteralCompact — {@link emitDocLiteral} の**単一行**版(改行・インデントなし)。
|
|
10
|
+
* 直線 emit(bc#37)が primitive 呼びの被演算子として渡す IR リテラルに使う(生成コードの
|
|
11
|
+
* 可読性と mutation の追跡性のため。決定性・スカラ規律・キー順保存は emitDocLiteral と同一)。
|
|
12
|
+
* additive: emitDocLiteral 本体は不変。
|
|
13
|
+
*/
|
|
14
|
+
export declare function emitDocLiteralCompact(doc: unknown, style: LiteralStyle, path?: string): string;
|
|
8
15
|
//# sourceMappingURL=literal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/generator/literal.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/generator/literal.ts"],"names":[],"mappings":"AA6BA,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,KAAK,CAAC;AA4J/D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,SAAI,EAAE,IAAI,SAAM,GAAG,MAAM,CA0BhG;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,SAAM,GAAG,MAAM,CA2B3F"}
|
|
@@ -139,6 +139,8 @@ const DIALECTS = {
|
|
|
139
139
|
emptyObj: "(object) []",
|
|
140
140
|
arr: (items, pad, padIn) => `[\n${items.map((v) => `${padIn}${v},`).join("\n")}\n${pad}]`,
|
|
141
141
|
obj: (entries, pad, padIn) => `(object) [\n${entries.map(([k, v]) => `${padIn}${phpStr(k)} => ${v},`).join("\n")}\n${pad}]`,
|
|
142
|
+
// 単一行 object(compact): PHP は `(object) ["k" => v, …]`({ } は PHP object リテラルでない)。
|
|
143
|
+
objCompact: (entries) => `(object) [${entries.map(([k, v]) => `${phpStr(k)} => ${v}`).join(", ")}]`,
|
|
142
144
|
},
|
|
143
145
|
};
|
|
144
146
|
function scalarNumber(n, path, d) {
|
|
@@ -188,4 +190,43 @@ export function emitDocLiteral(doc, style, indent = 0, path = "$") {
|
|
|
188
190
|
}
|
|
189
191
|
throw new FingerprintFailure("INVALID_VALUE", `value of type ${typeof doc} at ${path} cannot be emitted as a portable IR literal (fail-closed)`);
|
|
190
192
|
}
|
|
193
|
+
/**
|
|
194
|
+
* emitDocLiteralCompact — {@link emitDocLiteral} の**単一行**版(改行・インデントなし)。
|
|
195
|
+
* 直線 emit(bc#37)が primitive 呼びの被演算子として渡す IR リテラルに使う(生成コードの
|
|
196
|
+
* 可読性と mutation の追跡性のため。決定性・スカラ規律・キー順保存は emitDocLiteral と同一)。
|
|
197
|
+
* additive: emitDocLiteral 本体は不変。
|
|
198
|
+
*/
|
|
199
|
+
export function emitDocLiteralCompact(doc, style, path = "$") {
|
|
200
|
+
const d = DIALECTS[style];
|
|
201
|
+
if (doc === null)
|
|
202
|
+
return d.null;
|
|
203
|
+
if (typeof doc === "boolean")
|
|
204
|
+
return doc ? d.true : d.false;
|
|
205
|
+
if (typeof doc === "string")
|
|
206
|
+
return d.str(doc);
|
|
207
|
+
if (typeof doc === "number")
|
|
208
|
+
return scalarNumber(doc, path, d);
|
|
209
|
+
if (Array.isArray(doc)) {
|
|
210
|
+
if (doc.length === 0)
|
|
211
|
+
return d.emptyArr;
|
|
212
|
+
const items = doc.map((v, i) => emitDocLiteralCompact(v, style, `${path}[${i}]`));
|
|
213
|
+
// Go は複合リテラルが JObjOf(...) / []dslcontracts.JNode{...} 形(JSON 字句は非合法)なので
|
|
214
|
+
// dialect の綴じ方を単一行で使う。他言語は JSON 風の `[...]` / `{...}` でよい(TS 現行)。
|
|
215
|
+
if (style === "go")
|
|
216
|
+
return `[]dslcontracts.JNode{${items.join(", ")}}`;
|
|
217
|
+
return "[" + items.join(", ") + "]";
|
|
218
|
+
}
|
|
219
|
+
if (typeof doc === "object") {
|
|
220
|
+
const entries = Object.entries(doc);
|
|
221
|
+
if (entries.length === 0)
|
|
222
|
+
return d.emptyObj;
|
|
223
|
+
const emitted = entries.map(([k, v]) => [k, emitDocLiteralCompact(v, style, `${path}.${k}`)]);
|
|
224
|
+
if (d.objCompact)
|
|
225
|
+
return d.objCompact(emitted);
|
|
226
|
+
if (style === "go")
|
|
227
|
+
return `dslcontracts.JObjOf(${emitted.map(([k, v]) => `${d.str(k)}, ${v}`).join(", ")})`;
|
|
228
|
+
return "{ " + emitted.map(([k, v]) => `${d.str(k)}: ${v}`).join(", ") + " }";
|
|
229
|
+
}
|
|
230
|
+
throw new FingerprintFailure("INVALID_VALUE", `value of type ${typeof doc} at ${path} cannot be emitted as a portable IR literal (fail-closed)`);
|
|
231
|
+
}
|
|
191
232
|
//# sourceMappingURL=literal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/generator/literal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItD,uEAAuE;AACvE,sEAAsE;AACtE,SAAS,OAAO,CAAC,CAAS;IACxB,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,IAAI,EAAE,KAAK,GAAG;YAAE,GAAG,IAAI,KAAK,CAAC;aACxB,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,MAAM,CAAC;aAC/B,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,KAAK,CAAC;aAC9B,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,KAAK,CAAC;aAC9B,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,KAAK,CAAC;aAC9B,IAAI,EAAE,GAAG,IAAI;YAAE,GAAG,IAAI,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;;YAChD,GAAG,IAAI,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED,2DAA2D;AAC3D,SAAS,MAAM,CAAC,CAAS;IACvB,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,KAAK,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC;QAC9B,IAAI,EAAE,KAAK,GAAG;YAAE,GAAG,IAAI,KAAK,CAAC;aACxB,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,MAAM,CAAC;aAC/B,IAAI,EAAE,KAAK,GAAG;YAAE,GAAG,IAAI,KAAK,CAAC;aAC7B,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,KAAK,CAAC;aAC9B,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,KAAK,CAAC;aAC9B,IAAI,EAAE,KAAK,IAAI;YAAE,GAAG,IAAI,KAAK,CAAC;aAC9B,IAAI,EAAE,GAAG,IAAI;YAAE,GAAG,IAAI,OAAO,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;;YAChD,GAAG,IAAI,EAAE,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/generator/literal.ts"],"names":[],"mappings":"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"}
|