behavior-contracts 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/dist/authoring.d.ts +202 -0
- package/dist/authoring.d.ts.map +1 -0
- package/dist/authoring.js +787 -0
- package/dist/authoring.js.map +1 -0
- package/dist/behavior.d.ts +201 -0
- package/dist/behavior.d.ts.map +1 -0
- package/dist/behavior.js +373 -0
- package/dist/behavior.js.map +1 -0
- package/dist/builder.d.ts +154 -0
- package/dist/builder.d.ts.map +1 -0
- package/dist/builder.js +574 -0
- package/dist/builder.js.map +1 -0
- package/dist/canonical.d.ts +1 -1
- package/dist/canonical.d.ts.map +1 -1
- package/dist/canonical.js +13 -1
- package/dist/canonical.js.map +1 -1
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +7 -1
- package/dist/codec.js.map +1 -1
- package/dist/expr-eval.d.ts +9 -1
- package/dist/expr-eval.d.ts.map +1 -1
- package/dist/expr-eval.js +21 -3
- package/dist/expr-eval.js.map +1 -1
- package/dist/generator/core.d.ts +89 -0
- package/dist/generator/core.d.ts.map +1 -0
- package/dist/generator/core.js +124 -0
- package/dist/generator/core.js.map +1 -0
- package/dist/generator/emit-go.d.ts +19 -0
- package/dist/generator/emit-go.d.ts.map +1 -0
- package/dist/generator/emit-go.js +79 -0
- package/dist/generator/emit-go.js.map +1 -0
- package/dist/generator/emit-php.d.ts +20 -0
- package/dist/generator/emit-php.d.ts.map +1 -0
- package/dist/generator/emit-php.js +76 -0
- package/dist/generator/emit-php.js.map +1 -0
- package/dist/generator/emit-python.d.ts +10 -0
- package/dist/generator/emit-python.d.ts.map +1 -0
- package/dist/generator/emit-python.js +75 -0
- package/dist/generator/emit-python.js.map +1 -0
- package/dist/generator/emit-rust.d.ts +25 -0
- package/dist/generator/emit-rust.d.ts.map +1 -0
- package/dist/generator/emit-rust.js +125 -0
- package/dist/generator/emit-rust.js.map +1 -0
- package/dist/generator/emit-typescript.d.ts +11 -0
- package/dist/generator/emit-typescript.d.ts.map +1 -0
- package/dist/generator/emit-typescript.js +68 -0
- package/dist/generator/emit-typescript.js.map +1 -0
- package/dist/generator/fingerprint.d.ts +14 -0
- package/dist/generator/fingerprint.d.ts.map +1 -0
- package/dist/generator/fingerprint.js +74 -0
- package/dist/generator/fingerprint.js.map +1 -0
- package/dist/generator/index.d.ts +9 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +25 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/literal.d.ts +8 -0
- package/dist/generator/literal.d.ts.map +1 -0
- package/dist/generator/literal.js +191 -0
- package/dist/generator/literal.js.map +1 -0
- package/dist/guard.d.ts +18 -0
- package/dist/guard.d.ts.map +1 -1
- package/dist/guard.js +130 -0
- package/dist/guard.js.map +1 -1
- package/dist/index.d.ts +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/dist/plan.d.ts +36 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js +152 -14
- package/dist/plan.js.map +1 -1
- package/package.json +6 -3
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* literal.ts — 可搬 IR ドキュメントの決定的ネイティブリテラル emit(共通 Generator 内部)。
|
|
3
|
+
*
|
|
4
|
+
* 決定性の規律: 入力ドキュメントの**キー順を保存**したまま(ソートしない — port 式の
|
|
5
|
+
* 評価順序は宣言順が規範で、並べ替えは §7.3 の経路等価を壊し得る)、同一入力から
|
|
6
|
+
* byte-identical なリテラル文字列を出す。JSON.parse 済みドキュメントが入力なので、
|
|
7
|
+
* キー順は JSON テキストの順(JS の integer-like キー正規化を含む)で既に決定的。
|
|
8
|
+
* キーソートは fingerprint 側だけで行う(SP1 audit の SP2 指針 (a))。
|
|
9
|
+
*
|
|
10
|
+
* スカラ規律(クロス言語):
|
|
11
|
+
* - 文字列: 言語別エスケープ(ts/py/go は JSON エスケープで合法。rust は \u{...} 形、
|
|
12
|
+
* php は double-quote + $ エスケープ)。
|
|
13
|
+
* - 整数値 number: 整数リテラル(Python は int / Go は json.Number("…") — dynamic 経路の
|
|
14
|
+
* パーサ出力と一致)。|n| >= 2^53 は fail-closed(fingerprint.ts と同じ規律)。
|
|
15
|
+
* - 非整数 number: shortest round-trip 10進(`String(n)` — 全対象言語で合法なリテラル)。
|
|
16
|
+
* - -0.0: `-0.0` と emit(JSON.parse は -0 を保存する — 落とすと canonical 出力が発散)。
|
|
17
|
+
* - true/false/null: 言語別トークン。
|
|
18
|
+
* - undefined / 関数等: fail-closed(JSON.stringify の「黙って落とす」を許さない)。
|
|
19
|
+
*
|
|
20
|
+
* 言語別の複合リテラル形(各 emitter の実行 IF に合わせる):
|
|
21
|
+
* - ts: `{...}` / `[...]`(ComponentGraphIR 型付き const)
|
|
22
|
+
* - py: dict / list
|
|
23
|
+
* - go: `dslcontracts.JObjOf("k", v, …)` / `[]dslcontracts.JNode{…}` / `json.Number("…")`
|
|
24
|
+
* (RunBehavior の消費する JNode ドメイン。インデントは gofmt 規範の tab)
|
|
25
|
+
* - rust: serde_json `json!({...})` の中身(JSON 形。トークンは Rust 字句で合法)
|
|
26
|
+
* - php: `(object) [...]` / `[...]`(Behavior::runBehavior の stdClass/array ドメイン)
|
|
27
|
+
*/
|
|
28
|
+
import { FingerprintFailure } from "./fingerprint.js";
|
|
29
|
+
// ── 言語別文字列エスケープ ─────────────────────────────────────────────────────
|
|
30
|
+
/** Rust 文字列リテラル(\b/\f/\uXXXX は Rust に無いので \u{…} を使う。非 ASCII は素通し)。 */
|
|
31
|
+
function rustStr(s) {
|
|
32
|
+
let out = '"';
|
|
33
|
+
for (const ch of s) {
|
|
34
|
+
const cp = ch.codePointAt(0);
|
|
35
|
+
if (ch === '"')
|
|
36
|
+
out += '\\"';
|
|
37
|
+
else if (ch === "\\")
|
|
38
|
+
out += "\\\\";
|
|
39
|
+
else if (ch === "\n")
|
|
40
|
+
out += "\\n";
|
|
41
|
+
else if (ch === "\r")
|
|
42
|
+
out += "\\r";
|
|
43
|
+
else if (ch === "\t")
|
|
44
|
+
out += "\\t";
|
|
45
|
+
else if (cp < 0x20)
|
|
46
|
+
out += `\\u{${cp.toString(16)}}`;
|
|
47
|
+
else
|
|
48
|
+
out += ch;
|
|
49
|
+
}
|
|
50
|
+
return out + '"';
|
|
51
|
+
}
|
|
52
|
+
/** PHP double-quote 文字列リテラル($ は補間を防ぐためエスケープ。制御は \u{…})。 */
|
|
53
|
+
function phpStr(s) {
|
|
54
|
+
let out = '"';
|
|
55
|
+
for (const ch of s) {
|
|
56
|
+
const cp = ch.codePointAt(0);
|
|
57
|
+
if (ch === '"')
|
|
58
|
+
out += '\\"';
|
|
59
|
+
else if (ch === "\\")
|
|
60
|
+
out += "\\\\";
|
|
61
|
+
else if (ch === "$")
|
|
62
|
+
out += "\\$";
|
|
63
|
+
else if (ch === "\n")
|
|
64
|
+
out += "\\n";
|
|
65
|
+
else if (ch === "\r")
|
|
66
|
+
out += "\\r";
|
|
67
|
+
else if (ch === "\t")
|
|
68
|
+
out += "\\t";
|
|
69
|
+
else if (cp < 0x20)
|
|
70
|
+
out += `\\u{${cp.toString(16)}}`;
|
|
71
|
+
else
|
|
72
|
+
out += ch;
|
|
73
|
+
}
|
|
74
|
+
return out + '"';
|
|
75
|
+
}
|
|
76
|
+
const jsonishArr = (open, close) => (items, pad, padIn) => `${open}\n${items.map((v) => padIn + v).join(",\n")}\n${pad}${close}`;
|
|
77
|
+
const DIALECTS = {
|
|
78
|
+
ts: {
|
|
79
|
+
indentUnit: " ",
|
|
80
|
+
null: "null",
|
|
81
|
+
true: "true",
|
|
82
|
+
false: "false",
|
|
83
|
+
str: (s) => JSON.stringify(s),
|
|
84
|
+
int: (t) => t,
|
|
85
|
+
float: (t) => t,
|
|
86
|
+
emptyArr: "[]",
|
|
87
|
+
emptyObj: "{}",
|
|
88
|
+
arr: jsonishArr("[", "]"),
|
|
89
|
+
obj: (entries, pad, padIn) => `{\n${entries.map(([k, v]) => `${padIn}${JSON.stringify(k)}: ${v}`).join(",\n")}\n${pad}}`,
|
|
90
|
+
},
|
|
91
|
+
py: {
|
|
92
|
+
indentUnit: " ",
|
|
93
|
+
null: "None",
|
|
94
|
+
true: "True",
|
|
95
|
+
false: "False",
|
|
96
|
+
str: (s) => JSON.stringify(s),
|
|
97
|
+
int: (t) => t,
|
|
98
|
+
float: (t) => t,
|
|
99
|
+
emptyArr: "[]",
|
|
100
|
+
emptyObj: "{}",
|
|
101
|
+
arr: jsonishArr("[", "]"),
|
|
102
|
+
obj: (entries, pad, padIn) => `{\n${entries.map(([k, v]) => `${padIn}${JSON.stringify(k)}: ${v}`).join(",\n")}\n${pad}}`,
|
|
103
|
+
},
|
|
104
|
+
go: {
|
|
105
|
+
indentUnit: "\t",
|
|
106
|
+
null: "nil",
|
|
107
|
+
true: "true",
|
|
108
|
+
false: "false",
|
|
109
|
+
str: (s) => JSON.stringify(s), // JSON エスケープは Go 文字列リテラルとして合法
|
|
110
|
+
int: (t) => `json.Number("${t}")`,
|
|
111
|
+
float: (t) => `json.Number("${t}")`,
|
|
112
|
+
emptyArr: "[]dslcontracts.JNode{}",
|
|
113
|
+
emptyObj: "dslcontracts.JObjOf()",
|
|
114
|
+
arr: (items, pad, padIn) => `[]dslcontracts.JNode{\n${items.map((v) => `${padIn}${v},`).join("\n")}\n${pad}}`,
|
|
115
|
+
obj: (entries, pad, padIn) => `dslcontracts.JObjOf(\n${entries.map(([k, v]) => `${padIn}${JSON.stringify(k)}, ${v},`).join("\n")}\n${pad})`,
|
|
116
|
+
},
|
|
117
|
+
rust: {
|
|
118
|
+
indentUnit: " ",
|
|
119
|
+
null: "null", // json! マクロ内の JSON トークン
|
|
120
|
+
true: "true",
|
|
121
|
+
false: "false",
|
|
122
|
+
str: rustStr,
|
|
123
|
+
int: (t) => t,
|
|
124
|
+
float: (t) => t,
|
|
125
|
+
emptyArr: "[]",
|
|
126
|
+
emptyObj: "{}",
|
|
127
|
+
arr: jsonishArr("[", "]"),
|
|
128
|
+
obj: (entries, pad, padIn) => `{\n${entries.map(([k, v]) => `${padIn}${rustStr(k)}: ${v}`).join(",\n")}\n${pad}}`,
|
|
129
|
+
},
|
|
130
|
+
php: {
|
|
131
|
+
indentUnit: " ",
|
|
132
|
+
null: "null",
|
|
133
|
+
true: "true",
|
|
134
|
+
false: "false",
|
|
135
|
+
str: phpStr,
|
|
136
|
+
int: (t) => t,
|
|
137
|
+
float: (t) => t,
|
|
138
|
+
emptyArr: "[]",
|
|
139
|
+
emptyObj: "(object) []",
|
|
140
|
+
arr: (items, pad, padIn) => `[\n${items.map((v) => `${padIn}${v},`).join("\n")}\n${pad}]`,
|
|
141
|
+
obj: (entries, pad, padIn) => `(object) [\n${entries.map(([k, v]) => `${padIn}${phpStr(k)} => ${v},`).join("\n")}\n${pad}]`,
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
function scalarNumber(n, path, d) {
|
|
145
|
+
if (!Number.isFinite(n))
|
|
146
|
+
throw new FingerprintFailure("INVALID_VALUE", `non-finite number at ${path} cannot be emitted (fail-closed)`);
|
|
147
|
+
if (Object.is(n, -0))
|
|
148
|
+
return d.float("-0.0");
|
|
149
|
+
if (Number.isInteger(n)) {
|
|
150
|
+
if (Math.abs(n) >= 2 ** 53)
|
|
151
|
+
throw new FingerprintFailure("UNSAFE_NUMBER", `integral number ${n} at ${path} exceeds float64-exact range; portable IR must use {int:"..."} (fail-closed)`);
|
|
152
|
+
return d.int(String(n));
|
|
153
|
+
}
|
|
154
|
+
return d.float(String(n)); // shortest round-trip("0.1" / "1e-7" — 全対象言語で合法)
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* emitDocLiteral — ドキュメントを言語ネイティブのリテラル式として emit する。
|
|
158
|
+
* インデント 1 段 = dialect の indentUnit(ts/py 2 space・go tab・rust/php 4 space)・
|
|
159
|
+
* 複数行(JSON.stringify(v, null, indent) と同じレイアウト規則)。
|
|
160
|
+
*/
|
|
161
|
+
export function emitDocLiteral(doc, style, indent = 0, path = "$") {
|
|
162
|
+
const d = DIALECTS[style];
|
|
163
|
+
const pad = d.indentUnit.repeat(indent);
|
|
164
|
+
const padIn = d.indentUnit.repeat(indent + 1);
|
|
165
|
+
if (doc === null)
|
|
166
|
+
return d.null;
|
|
167
|
+
if (typeof doc === "boolean")
|
|
168
|
+
return doc ? d.true : d.false;
|
|
169
|
+
if (typeof doc === "string")
|
|
170
|
+
return d.str(doc);
|
|
171
|
+
if (typeof doc === "number")
|
|
172
|
+
return scalarNumber(doc, path, d);
|
|
173
|
+
if (Array.isArray(doc)) {
|
|
174
|
+
if (doc.length === 0)
|
|
175
|
+
return d.emptyArr;
|
|
176
|
+
const items = doc.map((v, i) => emitDocLiteral(v, style, indent + 1, `${path}[${i}]`));
|
|
177
|
+
return d.arr(items, pad, padIn);
|
|
178
|
+
}
|
|
179
|
+
if (typeof doc === "object") {
|
|
180
|
+
const entries = Object.entries(doc);
|
|
181
|
+
if (entries.length === 0)
|
|
182
|
+
return d.emptyObj;
|
|
183
|
+
const emitted = entries.map(([k, v]) => [
|
|
184
|
+
k,
|
|
185
|
+
emitDocLiteral(v, style, indent + 1, `${path}.${k}`),
|
|
186
|
+
]);
|
|
187
|
+
return d.obj(emitted, pad, padIn);
|
|
188
|
+
}
|
|
189
|
+
throw new FingerprintFailure("INVALID_VALUE", `value of type ${typeof doc} at ${path} cannot be emitted as a portable IR literal (fail-closed)`);
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=literal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/generator/literal.ts"],"names":[],"mappings":"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"}
|
package/dist/guard.d.ts
CHANGED
|
@@ -24,4 +24,22 @@ export declare class PortabilityError extends Error {
|
|
|
24
24
|
* @throws {PortabilityError} non-portable な値を検出したとき。
|
|
25
25
|
*/
|
|
26
26
|
export declare function assertPortable(value: unknown, path?: string): void;
|
|
27
|
+
/**
|
|
28
|
+
* 可搬 IR で許可される Expression IR オペレータの閉集合(expression-ir.md §3)。
|
|
29
|
+
* `assertPortableComponentGraph` はこの集合外の単一キーオブジェクトノードを未知 operator
|
|
30
|
+
* として fail-closed で拒否する(component-graph の port 式・output・map.over/cond に適用)。
|
|
31
|
+
*/
|
|
32
|
+
export declare const PORTABLE_EXPR_OPERATORS: ReadonlySet<string>;
|
|
33
|
+
/**
|
|
34
|
+
* assertPortableComponentGraph — component-graph IR(scp-ir-architecture.md §5)の
|
|
35
|
+
* 可搬性 Guard(P0-2)。generic な {@link assertPortable}(関数/Date/Promise 残存禁止)に加え、
|
|
36
|
+
* SCP 汎用層に固有の不変条件を fail-closed で強制する:
|
|
37
|
+
* 1. `component` フィールド(componentRef / map)は **文字列参照のみ**(catalog 名)。
|
|
38
|
+
* 2. port 式・output・map.over・cond に現れる Expression IR ノードは **既知 operator の閉集合のみ**
|
|
39
|
+
* (PORTABLE_EXPR_OPERATORS 外の単一キーオブジェクトは未知 operator として拒否)。
|
|
40
|
+
* 3. 関数残存禁止(generic guard を全域に適用)。
|
|
41
|
+
*
|
|
42
|
+
* @throws {PortabilityError} 非可搬な構造を検出したとき。
|
|
43
|
+
*/
|
|
44
|
+
export declare function assertPortableComponentGraph(ir: unknown, path?: string): void;
|
|
27
45
|
//# sourceMappingURL=guard.d.ts.map
|
package/dist/guard.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,IAAI,EAAE,MAAM,CAAC;gBACD,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,IAAI,CAa/D;AAED;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAKtD,CAAC;AAEH;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,SAAM,GAAG,IAAI,CAQ1E"}
|
package/dist/guard.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* - **含めない**: `makeContractService` / `buildIR`(Metadata → IR)は graphddb 固有の
|
|
12
12
|
* Metadata/OperationDef 形状に依存する consumer レベル API のため examples に残す。
|
|
13
13
|
*/
|
|
14
|
+
import { FORBIDDEN_OBJECT_KEY } from "./expr-eval.js";
|
|
14
15
|
export class PortabilityError extends Error {
|
|
15
16
|
path;
|
|
16
17
|
constructor(path, message) {
|
|
@@ -40,4 +41,133 @@ export function assertPortable(value, path = "$") {
|
|
|
40
41
|
assertPortable(v, `${path}.${k}`);
|
|
41
42
|
}
|
|
42
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* 可搬 IR で許可される Expression IR オペレータの閉集合(expression-ir.md §3)。
|
|
46
|
+
* `assertPortableComponentGraph` はこの集合外の単一キーオブジェクトノードを未知 operator
|
|
47
|
+
* として fail-closed で拒否する(component-graph の port 式・output・map.over/cond に適用)。
|
|
48
|
+
*/
|
|
49
|
+
export const PORTABLE_EXPR_OPERATORS = /* @__PURE__ */ new Set([
|
|
50
|
+
"int", "float", "ref", "refOpt", "obj", "arr",
|
|
51
|
+
"add", "sub", "mul", "neg", "div", "mod",
|
|
52
|
+
"concat", "eq", "ne", "lt", "le", "gt", "ge",
|
|
53
|
+
"and", "or", "not", "coalesce", "cond", "len",
|
|
54
|
+
]);
|
|
55
|
+
/**
|
|
56
|
+
* assertPortableComponentGraph — component-graph IR(scp-ir-architecture.md §5)の
|
|
57
|
+
* 可搬性 Guard(P0-2)。generic な {@link assertPortable}(関数/Date/Promise 残存禁止)に加え、
|
|
58
|
+
* SCP 汎用層に固有の不変条件を fail-closed で強制する:
|
|
59
|
+
* 1. `component` フィールド(componentRef / map)は **文字列参照のみ**(catalog 名)。
|
|
60
|
+
* 2. port 式・output・map.over・cond に現れる Expression IR ノードは **既知 operator の閉集合のみ**
|
|
61
|
+
* (PORTABLE_EXPR_OPERATORS 外の単一キーオブジェクトは未知 operator として拒否)。
|
|
62
|
+
* 3. 関数残存禁止(generic guard を全域に適用)。
|
|
63
|
+
*
|
|
64
|
+
* @throws {PortabilityError} 非可搬な構造を検出したとき。
|
|
65
|
+
*/
|
|
66
|
+
export function assertPortableComponentGraph(ir, path = "$") {
|
|
67
|
+
assertPortable(ir, path); // 関数/Date/Promise 残存を全域で禁止(1・3)。
|
|
68
|
+
if (!ir || typeof ir !== "object")
|
|
69
|
+
throw new PortabilityError(path, `Portability Guard: IR root must be an object (at ${path})`);
|
|
70
|
+
const root = ir;
|
|
71
|
+
if (!Array.isArray(root.components))
|
|
72
|
+
throw new PortabilityError(`${path}.components`, `Portability Guard: IR.components must be an array`);
|
|
73
|
+
root.components.forEach((c, ci) => assertPortableComponent(c, `${path}.components[${ci}]`));
|
|
74
|
+
}
|
|
75
|
+
function assertPortableComponent(c, path) {
|
|
76
|
+
if (!c || typeof c !== "object")
|
|
77
|
+
throw new PortabilityError(path, `Portability Guard: component must be an object (at ${path})`);
|
|
78
|
+
const comp = c;
|
|
79
|
+
if (typeof comp.name !== "string")
|
|
80
|
+
throw new PortabilityError(`${path}.name`, `Portability Guard: component.name must be a string`);
|
|
81
|
+
if (!Array.isArray(comp.body))
|
|
82
|
+
throw new PortabilityError(`${path}.body`, `Portability Guard: component.body must be an array`);
|
|
83
|
+
comp.body.forEach((n, ni) => assertPortableBodyNode(n, `${path}.body[${ni}]`));
|
|
84
|
+
assertPortableExpr(comp.output, `${path}.output`);
|
|
85
|
+
}
|
|
86
|
+
function assertPortableBodyNode(n, path) {
|
|
87
|
+
if (!n || typeof n !== "object")
|
|
88
|
+
throw new PortabilityError(path, `Portability Guard: body node must be an object (at ${path})`);
|
|
89
|
+
const node = n;
|
|
90
|
+
if ("map" in node) {
|
|
91
|
+
const m = node.map;
|
|
92
|
+
requireStringComponent(m.component, `${path}.map.component`);
|
|
93
|
+
assertPortableExpr(m.over, `${path}.map.over`);
|
|
94
|
+
assertPortablePorts(m.ports, `${path}.map.ports`);
|
|
95
|
+
// v2 語彙: when は Expression IR(未知 operator を fail-closed)、into は string、batched は bool。
|
|
96
|
+
if (m.when !== undefined)
|
|
97
|
+
assertPortableExpr(m.when, `${path}.map.when`);
|
|
98
|
+
if (m.into !== undefined && typeof m.into !== "string")
|
|
99
|
+
throw new PortabilityError(`${path}.map.into`, `Portability Guard: 'into' must be a string key (at ${path}.map.into)`);
|
|
100
|
+
if (m.batched !== undefined && typeof m.batched !== "boolean")
|
|
101
|
+
throw new PortabilityError(`${path}.map.batched`, `Portability Guard: 'batched' must be a boolean (at ${path}.map.batched)`);
|
|
102
|
+
}
|
|
103
|
+
else if ("cond" in node) {
|
|
104
|
+
const co = node.cond;
|
|
105
|
+
assertPortableExpr(co.if, `${path}.cond.if`);
|
|
106
|
+
assertPortableExpr(co.then, `${path}.cond.then`);
|
|
107
|
+
assertPortableExpr(co.else, `${path}.cond.else`);
|
|
108
|
+
}
|
|
109
|
+
else if ("component" in node) {
|
|
110
|
+
requireStringComponent(node.component, `${path}.component`);
|
|
111
|
+
assertPortablePorts(node.ports, `${path}.ports`);
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
throw new PortabilityError(path, `Portability Guard: unknown body node kind (not componentRef/map/cond) at ${path}`);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
function requireStringComponent(v, path) {
|
|
118
|
+
if (typeof v !== "string")
|
|
119
|
+
throw new PortabilityError(path, `Portability Guard: 'component' must be a string catalog reference, not ${typeof v} (at ${path})`);
|
|
120
|
+
}
|
|
121
|
+
function assertPortablePorts(ports, path) {
|
|
122
|
+
if (!ports || typeof ports !== "object" || Array.isArray(ports))
|
|
123
|
+
throw new PortabilityError(path, `Portability Guard: ports must be an object (at ${path})`);
|
|
124
|
+
for (const [k, v] of Object.entries(ports))
|
|
125
|
+
assertPortableExpr(v, `${path}.${k}`);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Expression IR ノードを再帰的に検査し、未知 operator(PORTABLE_EXPR_OPERATORS 外の
|
|
129
|
+
* 単一キーオブジェクト)を fail-closed で拒否する。リテラル(null/bool/string/number)と
|
|
130
|
+
* 配列(arr のラップ内など)は許可し、子を再帰。
|
|
131
|
+
*/
|
|
132
|
+
function assertPortableExpr(node, path) {
|
|
133
|
+
if (node === null || typeof node === "boolean" || typeof node === "string" || typeof node === "number")
|
|
134
|
+
return;
|
|
135
|
+
if (typeof node === "function")
|
|
136
|
+
throw new PortabilityError(path, `Portability Guard: functions cannot be placed in IR (at ${path})`);
|
|
137
|
+
if (Array.isArray(node)) {
|
|
138
|
+
node.forEach((e, i) => assertPortableExpr(e, `${path}[${i}]`));
|
|
139
|
+
return;
|
|
140
|
+
}
|
|
141
|
+
if (typeof node !== "object")
|
|
142
|
+
throw new PortabilityError(path, `Portability Guard: invalid expression node at ${path}`);
|
|
143
|
+
const keys = Object.keys(node);
|
|
144
|
+
if (keys.length === 1) {
|
|
145
|
+
const op = keys[0];
|
|
146
|
+
if (!PORTABLE_EXPR_OPERATORS.has(op))
|
|
147
|
+
throw new PortabilityError(path, `Portability Guard: unknown operator '${op}' (fail-closed) at ${path}`);
|
|
148
|
+
// obj は「任意の data key → 子式」の構築ノード(expression-ir.md §3)。arg の key は
|
|
149
|
+
// operator ではなく data であり、値だけを式として再帰する(単一 data key の obj が
|
|
150
|
+
// 未知 operator と誤判定されないように — evaluate() の意味論と一致させる)。
|
|
151
|
+
if (op === "obj") {
|
|
152
|
+
const arg = node[op];
|
|
153
|
+
if (!arg || typeof arg !== "object" || Array.isArray(arg))
|
|
154
|
+
throw new PortabilityError(`${path}.obj`, `Portability Guard: {obj: ...} expects an object (at ${path}.obj)`);
|
|
155
|
+
for (const [k, v] of Object.entries(arg)) {
|
|
156
|
+
// 静的 fail-closed(defense-in-depth): own key "__proto__" は evaluator が実行時に
|
|
157
|
+
// FORBIDDEN_KEY で拒否する(expression-ir.md §2.3/§8 — 言語間発散 / prototype
|
|
158
|
+
// pollution 対策)。guard でも静的に拒否する(JSON.parse 由来の IR では own key)。
|
|
159
|
+
if (k === FORBIDDEN_OBJECT_KEY)
|
|
160
|
+
throw new PortabilityError(`${path}.obj`, `Portability Guard: object key "${FORBIDDEN_OBJECT_KEY}" is forbidden (fail-closed) at ${path}.obj`);
|
|
161
|
+
assertPortableExpr(v, `${path}.obj.${k}`);
|
|
162
|
+
}
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
// それ以外は arg(配列 or 式)を再帰。
|
|
166
|
+
assertPortableExpr(node[op], `${path}.${op}`);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// 多キーオブジェクト(式木では通常出現しない)は各値を再帰検査(関数残存等の検出)。
|
|
170
|
+
for (const [k, v] of Object.entries(node))
|
|
171
|
+
assertPortableExpr(v, `${path}.${k}`);
|
|
172
|
+
}
|
|
43
173
|
//# sourceMappingURL=guard.js.map
|
package/dist/guard.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,IAAI,CAAS;IACb,YAAY,IAAY,EAAE,OAAe;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,IAAI,GAAG,GAAG;IACvD,IAAI,OAAO,KAAK,KAAK,UAAU;QAC7B,MAAM,IAAI,gBAAgB,CAAC,IAAI,EAAE,2DAA2D,IAAI,GAAG,CAAC,CAAC;IACvG,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,YAAY,OAAO;QACnD,MAAM,IAAI,gBAAgB,CACxB,IAAI,EACJ,sBAAsB,KAAK,CAAC,WAAW,CAAC,IAAI,+BAA+B,IAAI,GAAG,CACnF,CAAC;IACJ,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9C,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,cAAc,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -20,24 +20,35 @@
|
|
|
20
20
|
* consumer レベル API のため **含めない**(examples/src/core.ts に残置)。
|
|
21
21
|
*/
|
|
22
22
|
export declare const SPEC_VERSIONS: {
|
|
23
|
-
readonly expression:
|
|
23
|
+
readonly expression: 2;
|
|
24
24
|
readonly template: 1;
|
|
25
25
|
readonly plan: 1;
|
|
26
|
-
readonly canonical:
|
|
26
|
+
readonly canonical: 2;
|
|
27
|
+
readonly behavior: 2;
|
|
28
|
+
readonly guard: 1;
|
|
29
|
+
readonly c2: 1;
|
|
27
30
|
};
|
|
28
31
|
/** validateEnvelope に渡す graphddb 形式の既定 supported 版(`"<major>.<minor>"`)。 */
|
|
29
32
|
export declare const ENVELOPE_SPEC_VERSION: "1.1";
|
|
30
33
|
export type { Value, Scope } from "./expr-eval.js";
|
|
31
|
-
export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure } from "./expr-eval.js";
|
|
34
|
+
export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure, FORBIDDEN_OBJECT_KEY } from "./expr-eval.js";
|
|
32
35
|
export type { FailureCode as ExprFailureCode } from "./expr-eval.js";
|
|
33
36
|
export { renderTemplate, resolvePartial, TemplateFailure } from "./template.js";
|
|
34
37
|
export type { TemplateFailureCode } from "./template.js";
|
|
35
|
-
export { runPlan, finalTree, PlanFailure } from "./plan.js";
|
|
36
|
-
export type { ExecutionPlanSpec, OpSpec, Exec, ExecOutcome, RunResult, PolicyKind, RelationKind, PlanFailureCode, } from "./plan.js";
|
|
38
|
+
export { runPlan, runPlanAsync, finalTree, PlanFailure } from "./plan.js";
|
|
39
|
+
export type { ExecutionPlanSpec, OpSpec, Exec, AsyncExec, ExecOutcome, RunResult, PolicyKind, RelationKind, PlanFailureCode, } from "./plan.js";
|
|
37
40
|
export { canonicalValue, canonicalJson, pyFloatRepr, CanonicalFailure } from "./canonical.js";
|
|
38
41
|
export type { CanonicalFailureCode } from "./canonical.js";
|
|
39
42
|
export { validateEnvelope, EnvelopeFailure } from "./envelope.js";
|
|
40
43
|
export type { EnvelopeFailureCode } from "./envelope.js";
|
|
41
|
-
export { assertPortable, PortabilityError } from "./guard.js";
|
|
44
|
+
export { assertPortable, assertPortableComponentGraph, PORTABLE_EXPR_OPERATORS, PortabilityError } from "./guard.js";
|
|
45
|
+
export { runBehavior, runBehaviorAsync, BehaviorFailure } from "./behavior.js";
|
|
46
|
+
export type { ComponentGraphIR, Component, BodyNode, ComponentRefNode, MapNode, CondNode, PortSchema, CatalogEntry, CatalogOutput, Catalog, Handler, HandlerCtx, Handlers, AsyncHandler, AsyncHandlers, BehaviorFailureCode, } from "./behavior.js";
|
|
47
|
+
export { buildComponentDefinition, BuilderFailure } from "./builder.js";
|
|
48
|
+
export type { ComponentDefinitionData, BuildComponentDefinitionOptions, BuilderFailureCode, } from "./builder.js";
|
|
49
|
+
export { SemanticBehavior, behavior, compileBehaviors, catalogComponents, when, concat, add, sub, mul, div, mod, neg, eq, ne, lt, le, gt, ge, and, or, not, coalesce, len, opt, referencedComponents, classifyBehaviorEffect, AuthoringFailure, } from "./authoring.js";
|
|
50
|
+
export type { In, Recorded, BehaviorClass, CompileBehaviorsOptions, BehaviorEffect, AuthoringFailureCode, } from "./authoring.js";
|
|
42
51
|
export { decodeValue, deepEquals } from "./codec.js";
|
|
52
|
+
export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, } from "./generator/index.js";
|
|
53
|
+
export type { GenerateOptions, GeneratedModule, EmitContext, EmitterPlugin, GeneratorFailureCode, } from "./generator/index.js";
|
|
43
54
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,eAAO,MAAM,aAAa;;;;;;;;CAQhB,CAAC;AAEX,4EAA4E;AAC5E,eAAO,MAAM,qBAAqB,EAAG,KAAc,CAAC;AAGpD,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGnD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/H,YAAY,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAGrE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChF,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1E,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,IAAI,EACJ,SAAS,EACT,WAAW,EACX,SAAS,EACT,UAAU,EACV,YAAY,EACZ,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAC9F,YAAY,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAClE,YAAY,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGrH,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EACV,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,gBAAgB,EAChB,OAAO,EACP,QAAQ,EACR,UAAU,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACP,OAAO,EACP,UAAU,EACV,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACxE,YAAY,EACV,uBAAuB,EACvB,+BAA+B,EAC/B,kBAAkB,GACnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,GAAG,EACH,EAAE,EACF,GAAG,EACH,QAAQ,EACR,GAAG,EACH,GAAG,EACH,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,EAAE,EACF,QAAQ,EACR,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAKrD,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,eAAe,EACf,WAAW,EACX,aAAa,EACb,oBAAoB,GACrB,MAAM,sBAAsB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -22,25 +22,38 @@
|
|
|
22
22
|
// ── 対応する仕様バージョン(IR/vector の spec version。ライブラリ semver とは別管理)──
|
|
23
23
|
// runtime-plan.md §3: 各ライブラリは対応 spec version を宣言し、範囲外は fail-closed。
|
|
24
24
|
export const SPEC_VERSIONS = {
|
|
25
|
-
expression:
|
|
25
|
+
expression: 2, // v2: obj の __proto__ own key を FORBIDDEN_KEY に(fail-closed)
|
|
26
26
|
template: 1,
|
|
27
27
|
plan: 1,
|
|
28
|
-
canonical:
|
|
28
|
+
canonical: 2, // v2: obj 値の __proto__ own key を FORBIDDEN_KEY に(fail-closed)
|
|
29
|
+
behavior: 2, // v2: map.when / map.into / map.batched / handler ctx(bc#22。v1 IR の意味論は不変)
|
|
30
|
+
guard: 1, // 初版(bc#25: assertPortableComponentGraph の accept/reject を vector-pin)
|
|
31
|
+
c2: 1, // 初版(bc#28: c2-catalog-swap — catalog-swap 実行 + IR 構造一致の 5 言語 pin)
|
|
29
32
|
};
|
|
30
33
|
/** validateEnvelope に渡す graphddb 形式の既定 supported 版(`"<major>.<minor>"`)。 */
|
|
31
34
|
export const ENVELOPE_SPEC_VERSION = "1.1";
|
|
32
35
|
// ── expression(evaluateExpression) ──────────────────────────────────────────
|
|
33
|
-
export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure } from "./expr-eval.js";
|
|
36
|
+
export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure, FORBIDDEN_OBJECT_KEY } from "./expr-eval.js";
|
|
34
37
|
// ── template(renderTemplate) ────────────────────────────────────────────────
|
|
35
38
|
export { renderTemplate, resolvePartial, TemplateFailure } from "./template.js";
|
|
36
39
|
// ── plan(runPlan) ───────────────────────────────────────────────────────────
|
|
37
|
-
export { runPlan, finalTree, PlanFailure } from "./plan.js";
|
|
40
|
+
export { runPlan, runPlanAsync, finalTree, PlanFailure } from "./plan.js";
|
|
38
41
|
// ── canonical(canonicalValue / canonicalJson / pyFloatRepr) ─────────────────
|
|
39
42
|
export { canonicalValue, canonicalJson, pyFloatRepr, CanonicalFailure } from "./canonical.js";
|
|
40
43
|
// ── envelope(validateEnvelope) ──────────────────────────────────────────────
|
|
41
44
|
export { validateEnvelope, EnvelopeFailure } from "./envelope.js";
|
|
42
45
|
// ── guard(Portability Guard) ────────────────────────────────────────────────
|
|
43
|
-
export { assertPortable, PortabilityError } from "./guard.js";
|
|
46
|
+
export { assertPortable, assertPortableComponentGraph, PORTABLE_EXPR_OPERATORS, PortabilityError } from "./guard.js";
|
|
47
|
+
// ── behavior(component-graph IR + runBehavior) ──────────────────────────────
|
|
48
|
+
export { runBehavior, runBehaviorAsync, BehaviorFailure } from "./behavior.js";
|
|
49
|
+
// ── builder(データ登録 IF — model-driven consumer 向け, bc#26)───────────────
|
|
50
|
+
export { buildComponentDefinition, BuilderFailure } from "./builder.js";
|
|
51
|
+
// ── authoring(共有 SCP authoring surface — SemanticBehavior / @behavior, bc#24)──
|
|
52
|
+
export { SemanticBehavior, behavior, compileBehaviors, catalogComponents, when, concat, add, sub, mul, div, mod, neg, eq, ne, lt, le, gt, ge, and, or, not, coalesce, len, opt, referencedComponents, classifyBehaviorEffect, AuthoringFailure, } from "./authoring.js";
|
|
44
53
|
// ── conformance runner adapter 共通部 ─────────────────────────────────────────
|
|
45
54
|
export { decodeValue, deepEquals } from "./codec.js";
|
|
55
|
+
// ── generator(SCP Runtime Code Generation Layer — 共通 Generator, bc#13)─────
|
|
56
|
+
// 可搬 IR のみを入力とする DSL 非依存の多言語 codegen(scp-ir-architecture.md §7.2–§7.4)。
|
|
57
|
+
// 生成コードは既存 runtime-core API を呼ぶ薄い束ね(実行ロジックは生成しない)。
|
|
58
|
+
export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, } from "./generator/index.js";
|
|
46
59
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,gEAAgE;AAChE,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,gEAAgE;AAChE,oEAAoE;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,CAAC,EAAE,6DAA6D;IAC5E,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC,EAAE,8DAA8D;IAC5E,QAAQ,EAAE,CAAC,EAAE,2EAA2E;IACxF,KAAK,EAAE,CAAC,EAAE,uEAAuE;IACjF,EAAE,EAAE,CAAC,EAAE,mEAAmE;CAClE,CAAC;AAEX,4EAA4E;AAC5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAc,CAAC;AAKpD,+EAA+E;AAC/E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAG/H,+EAA+E;AAC/E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhF,+EAA+E;AAC/E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAa1E,+EAA+E;AAC/E,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAG9F,+EAA+E;AAC/E,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGlE,+EAA+E;AAC/E,OAAO,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAErH,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAoB/E,wEAAwE;AACxE,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAOxE,iFAAiF;AACjF,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,gBAAgB,EAChB,iBAAiB,EACjB,IAAI,EACJ,MAAM,EACN,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,GAAG,EACH,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,EAAE,EACF,GAAG,EACH,EAAE,EACF,GAAG,EACH,QAAQ,EACR,GAAG,EACH,GAAG,EACH,oBAAoB,EACpB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AAUxB,8EAA8E;AAC9E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,6EAA6E;AAC7E,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,GACd,MAAM,sBAAsB,CAAC"}
|
package/dist/plan.d.ts
CHANGED
|
@@ -14,6 +14,15 @@
|
|
|
14
14
|
* - mapWithConcurrency は入力順を保存(output[i] = worker(items[i]))。完了順非依存。
|
|
15
15
|
* - stage 間は逐次(後 stage が前 stage の result を読む)。
|
|
16
16
|
* - 各 worker は result tree の disjoint スロット(自ノードの port)に書く → Φ 合流は決定的。
|
|
17
|
+
*
|
|
18
|
+
* 並列実行(bc#23、execution-plan.md §4.1):
|
|
19
|
+
* - 同期 API(runPlan): 同期コールバックは JS では重畳できないため**逐次のまま**
|
|
20
|
+
* (§4.1 の conforming fallback。結果は並列版と byte 一致)。
|
|
21
|
+
* - 非同期 API(runPlanAsync): exec が Promise を返す場合、stage 内メンバを
|
|
22
|
+
* `plan.concurrency` を上限とした bounded 並列で**投機的に dispatch** し、
|
|
23
|
+
* 解釈(Skip/Policy/Failure)は **index 昇順の決定的 commit** で行う。
|
|
24
|
+
* 観測結果(result tree / executed / skipped / Failure code・message)は逐次実行と
|
|
25
|
+
* 完全一致(determinism proof = 既存 conformance vectors が両経路で PASS すること)。
|
|
17
26
|
*/
|
|
18
27
|
import type { Value } from "./expr-eval.js";
|
|
19
28
|
export interface ExecutionPlanSpec {
|
|
@@ -42,6 +51,13 @@ export type ExecOutcome = {
|
|
|
42
51
|
};
|
|
43
52
|
/** exec(op, boundValue) — boundValue は親 result[bindField](root は null)。 */
|
|
44
53
|
export type Exec = (op: OpSpec, boundValue: Value | undefined) => ExecOutcome;
|
|
54
|
+
/**
|
|
55
|
+
* 非同期 exec(runPlanAsync 用)。ExecOutcome を同期で返しても Promise で返してもよい。
|
|
56
|
+
* `plan.concurrency > 1` のとき、同一 stage 内のメンバに対して**並行に呼ばれ得る**
|
|
57
|
+
* (=consumer 実装はその並行度までスレッド安全/再入安全であることを宣言したことになる。
|
|
58
|
+
* 並行呼び出しを許容しない consumer は `concurrency: 1` の plan を出荷する)。
|
|
59
|
+
*/
|
|
60
|
+
export type AsyncExec = (op: OpSpec, boundValue: Value | undefined) => ExecOutcome | Promise<ExecOutcome>;
|
|
45
61
|
type OpState = {
|
|
46
62
|
status: "ok";
|
|
47
63
|
value: Value;
|
|
@@ -72,6 +88,26 @@ export interface RunResult {
|
|
|
72
88
|
* @param exec ノード実行 mock(consumer 委譲)。
|
|
73
89
|
*/
|
|
74
90
|
export declare function runPlan(plan: ExecutionPlanSpec | null, ops: OpSpec[], exec: Exec): RunResult;
|
|
91
|
+
/**
|
|
92
|
+
* runPlanAsync — runPlan の非同期版(bc#23)。stage 内メンバを `plan.concurrency` を
|
|
93
|
+
* 上限とした bounded 並列で dispatch する。
|
|
94
|
+
*
|
|
95
|
+
* 決定的 commit プロトコル(execution-plan.md §4.1):
|
|
96
|
+
* 1. preflight(index 昇順): policy 検証・Skip 判定・bindField 束縛を、確定済みの
|
|
97
|
+
* 前 stage state から導出する(stage 内メンバは相互独立 — §1)。
|
|
98
|
+
* 2. dispatch(index 昇順・bounded): 実行対象メンバの exec を並行に発行する。
|
|
99
|
+
* 3. commit(index 昇順): outcome を宣言順に解釈する(Skip 記録 / Policy Kind /
|
|
100
|
+
* Failure 伝播)。最初に fail する解釈が逐次実行と同一の Failure を投げる。
|
|
101
|
+
*
|
|
102
|
+
* 逐次実行との観測等価: result tree / executed / skipped / Failure(code・message)は
|
|
103
|
+
* runPlan と byte 一致。**相違は投機的 dispatch のみ**(あるメンバの解釈が Failure でも、
|
|
104
|
+
* 同 stage の後続メンバの exec は既に発行され得る。旧 graphddb の thread-overlap と同じ許容)。
|
|
105
|
+
*
|
|
106
|
+
* 安全 fallback(結果は不変のまま逐次 dispatch に切り替える):
|
|
107
|
+
* - `concurrency <= 1` / stage メンバが 1 個以下。
|
|
108
|
+
* - stage 内に親子依存があるとき(§1 違反 plan への防御 — 逐次実行の可視性semantics を保存)。
|
|
109
|
+
*/
|
|
110
|
+
export declare function runPlanAsync(plan: ExecutionPlanSpec | null, ops: OpSpec[], exec: AsyncExec): Promise<RunResult>;
|
|
75
111
|
/**
|
|
76
112
|
* finalTree — states を index→port の result tree(Φ 合流の観測形)へ整形する。
|
|
77
113
|
* ok → 値 / skipped → 未生成表現(single=null / connection=空 connection)。
|
package/dist/plan.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AACvD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEnD,MAAM,WAAW,MAAM;IACrB,eAAe;IACf,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,kCAAkC;IAClC,MAAM,CAAC,EAAE,UAAU,CAAC;CACrB;AAED,mCAAmC;AACnC,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,KAAK,CAAA;CAAE,GACb;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtB,2EAA2E;AAC3E,MAAM,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,SAAS,KAAK,WAAW,CAAC;AAE9E;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,GAAG,SAAS,KAAK,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAG1G,KAAK,OAAO,GACR;IAAE,MAAM,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAC9B;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,gBAAgB,GAChB,cAAc,CAAC;AAEnB,qBAAa,WAAY,SAAQ,KAAK;IACpC,IAAI,EAAE,eAAe,CAAC;gBACV,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM;CAKnD;AAMD,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gCAAgC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAOD;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,SAAS,CA8B5F;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,iBAAiB,GAAG,IAAI,EAC9B,GAAG,EAAE,MAAM,EAAE,EACb,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,SAAS,CAAC,CA+EpB;AA8HD;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAQjF"}
|