behavior-contracts 0.1.3 → 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.
Files changed (106) hide show
  1. package/README.md +8 -2
  2. package/dist/authoring.d.ts +202 -0
  3. package/dist/authoring.d.ts.map +1 -0
  4. package/dist/authoring.js +787 -0
  5. package/dist/authoring.js.map +1 -0
  6. package/dist/behavior.d.ts +248 -0
  7. package/dist/behavior.d.ts.map +1 -0
  8. package/dist/behavior.js +373 -0
  9. package/dist/behavior.js.map +1 -0
  10. package/dist/builder.d.ts +154 -0
  11. package/dist/builder.d.ts.map +1 -0
  12. package/dist/builder.js +574 -0
  13. package/dist/builder.js.map +1 -0
  14. package/dist/generator/core.d.ts +89 -0
  15. package/dist/generator/core.d.ts.map +1 -0
  16. package/dist/generator/core.js +124 -0
  17. package/dist/generator/core.js.map +1 -0
  18. package/dist/generator/emit-go.d.ts +19 -0
  19. package/dist/generator/emit-go.d.ts.map +1 -0
  20. package/dist/generator/emit-go.js +79 -0
  21. package/dist/generator/emit-go.js.map +1 -0
  22. package/dist/generator/emit-php.d.ts +20 -0
  23. package/dist/generator/emit-php.d.ts.map +1 -0
  24. package/dist/generator/emit-php.js +76 -0
  25. package/dist/generator/emit-php.js.map +1 -0
  26. package/dist/generator/emit-python.d.ts +10 -0
  27. package/dist/generator/emit-python.d.ts.map +1 -0
  28. package/dist/generator/emit-python.js +75 -0
  29. package/dist/generator/emit-python.js.map +1 -0
  30. package/dist/generator/emit-rust.d.ts +25 -0
  31. package/dist/generator/emit-rust.d.ts.map +1 -0
  32. package/dist/generator/emit-rust.js +125 -0
  33. package/dist/generator/emit-rust.js.map +1 -0
  34. package/dist/generator/emit-straightline-go.d.ts +77 -0
  35. package/dist/generator/emit-straightline-go.d.ts.map +1 -0
  36. package/dist/generator/emit-straightline-go.js +592 -0
  37. package/dist/generator/emit-straightline-go.js.map +1 -0
  38. package/dist/generator/emit-straightline-php.d.ts +46 -0
  39. package/dist/generator/emit-straightline-php.d.ts.map +1 -0
  40. package/dist/generator/emit-straightline-php.js +501 -0
  41. package/dist/generator/emit-straightline-php.js.map +1 -0
  42. package/dist/generator/emit-straightline-python.d.ts +36 -0
  43. package/dist/generator/emit-straightline-python.d.ts.map +1 -0
  44. package/dist/generator/emit-straightline-python.js +441 -0
  45. package/dist/generator/emit-straightline-python.js.map +1 -0
  46. package/dist/generator/emit-straightline-rust.d.ts +78 -0
  47. package/dist/generator/emit-straightline-rust.d.ts.map +1 -0
  48. package/dist/generator/emit-straightline-rust.js +615 -0
  49. package/dist/generator/emit-straightline-rust.js.map +1 -0
  50. package/dist/generator/emit-straightline-typed-go.d.ts +39 -0
  51. package/dist/generator/emit-straightline-typed-go.d.ts.map +1 -0
  52. package/dist/generator/emit-straightline-typed-go.js +828 -0
  53. package/dist/generator/emit-straightline-typed-go.js.map +1 -0
  54. package/dist/generator/emit-straightline-typed-rust.d.ts +48 -0
  55. package/dist/generator/emit-straightline-typed-rust.d.ts.map +1 -0
  56. package/dist/generator/emit-straightline-typed-rust.js +823 -0
  57. package/dist/generator/emit-straightline-typed-rust.js.map +1 -0
  58. package/dist/generator/emit-straightline-typed-typescript.d.ts +49 -0
  59. package/dist/generator/emit-straightline-typed-typescript.d.ts.map +1 -0
  60. package/dist/generator/emit-straightline-typed-typescript.js +314 -0
  61. package/dist/generator/emit-straightline-typed-typescript.js.map +1 -0
  62. package/dist/generator/emit-straightline-typescript.d.ts +36 -0
  63. package/dist/generator/emit-straightline-typescript.d.ts.map +1 -0
  64. package/dist/generator/emit-straightline-typescript.js +397 -0
  65. package/dist/generator/emit-straightline-typescript.js.map +1 -0
  66. package/dist/generator/emit-typescript.d.ts +11 -0
  67. package/dist/generator/emit-typescript.d.ts.map +1 -0
  68. package/dist/generator/emit-typescript.js +68 -0
  69. package/dist/generator/emit-typescript.js.map +1 -0
  70. package/dist/generator/fingerprint.d.ts +14 -0
  71. package/dist/generator/fingerprint.d.ts.map +1 -0
  72. package/dist/generator/fingerprint.js +74 -0
  73. package/dist/generator/fingerprint.js.map +1 -0
  74. package/dist/generator/index.d.ts +22 -0
  75. package/dist/generator/index.d.ts.map +1 -0
  76. package/dist/generator/index.js +64 -0
  77. package/dist/generator/index.js.map +1 -0
  78. package/dist/generator/literal.d.ts +15 -0
  79. package/dist/generator/literal.d.ts.map +1 -0
  80. package/dist/generator/literal.js +232 -0
  81. package/dist/generator/literal.js.map +1 -0
  82. package/dist/generator/straightline.d.ts +147 -0
  83. package/dist/generator/straightline.d.ts.map +1 -0
  84. package/dist/generator/straightline.js +122 -0
  85. package/dist/generator/straightline.js.map +1 -0
  86. package/dist/generator/typed.d.ts +156 -0
  87. package/dist/generator/typed.d.ts.map +1 -0
  88. package/dist/generator/typed.js +108 -0
  89. package/dist/generator/typed.js.map +1 -0
  90. package/dist/guard.d.ts +36 -0
  91. package/dist/guard.d.ts.map +1 -1
  92. package/dist/guard.js +186 -0
  93. package/dist/guard.js.map +1 -1
  94. package/dist/index.d.ts +17 -3
  95. package/dist/index.d.ts.map +1 -1
  96. package/dist/index.js +23 -2
  97. package/dist/index.js.map +1 -1
  98. package/dist/plan.d.ts +36 -0
  99. package/dist/plan.d.ts.map +1 -1
  100. package/dist/plan.js +152 -14
  101. package/dist/plan.js.map +1 -1
  102. package/dist/primitives.d.ts +112 -0
  103. package/dist/primitives.d.ts.map +1 -0
  104. package/dist/primitives.js +206 -0
  105. package/dist/primitives.js.map +1 -0
  106. package/package.json +4 -1
package/dist/index.js CHANGED
@@ -26,6 +26,9 @@ export const SPEC_VERSIONS = {
26
26
  template: 1,
27
27
  plan: 1,
28
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";
@@ -34,13 +37,31 @@ export { evaluate as evaluateExpression, encodeValue, cmpCodePoints, ExprFailure
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, assertPortableTypeNotation, PORTABLE_EXPR_OPERATORS, PORTABLE_SCALAR_TYPES, 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
+ // ── codegen primitive surface(bc#36 / typed-codegen.md §3.4)──────────────────
56
+ // 生成コードが直呼びできる安定 primitive 公開面。式演算子は個別関数として公開するが、
57
+ // 意味論は SSoT `evaluateExpression`(expr-eval.ts)へ委譲する薄いラッパ(再実装しない)。
58
+ // 名前衝突を避けるため、個別関数は `codegenPrimitives` namespace として束ねて公開する
59
+ // (authoring.ts の同名 IR ビルダ `add`/`concat`/… とは別物)。runPlan / bounded 並行 /
60
+ // skip・unproduced / hydration helper も同 namespace に含める。
61
+ export * as codegenPrimitives from "./primitives.js";
62
+ export { mapWithConcurrency, unproducedValue, skipSingle, skipConnection, hydrateInto, evalExpr, } from "./primitives.js";
63
+ // ── generator(SCP Runtime Code Generation Layer — 共通 Generator, bc#13)─────
64
+ // 可搬 IR のみを入力とする DSL 非依存の多言語 codegen(scp-ir-architecture.md §7.2–§7.4)。
65
+ // 生成コードは既存 runtime-core API を呼ぶ薄い束ね(実行ロジックは生成しない)。
66
+ export { generateModule, registerEmitter, registeredLanguages, GeneratorFailure, fingerprintComponentGraph, FingerprintFailure, typescriptEmitter, pythonEmitter, typescriptStraightlineEmitter, rustStraightlineEmitter, phpStraightlineEmitter, pythonStraightlineEmitter, typescriptTypedEmitter, tsTypedMaterializer, assertStraightlineSupported, isStraightlineNode, buildTypePlan, deriveTypeRef, } from "./generator/index.js";
46
67
  //# 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,EAAE,6DAA6D;IAC5E,QAAQ,EAAE,CAAC;IACX,IAAI,EAAE,CAAC;IACP,SAAS,EAAE,CAAC,EAAE,8DAA8D;CACpE,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,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAY5D,+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,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9D,8EAA8E;AAC9E,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,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,EACL,cAAc,EACd,4BAA4B,EAC5B,0BAA0B,EAC1B,uBAAuB,EACvB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,+EAA+E;AAC/E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAsB/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,gFAAgF;AAChF,kDAAkD;AAClD,kEAAkE;AAClE,4DAA4D;AAC5D,yEAAyE;AACzE,wDAAwD;AACxD,OAAO,KAAK,iBAAiB,MAAM,iBAAiB,CAAC;AACrD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,cAAc,EACd,WAAW,EACX,QAAQ,GACT,MAAM,iBAAiB,CAAC;AAGzB,6EAA6E;AAC7E,wEAAwE;AACxE,mDAAmD;AACnD,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,sBAAsB,EACtB,mBAAmB,EACnB,2BAA2B,EAC3B,kBAAkB,EAClB,aAAa,EACb,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)。
@@ -1 +1 @@
1
- {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;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;AAG9E,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,CA6B5F;AA0ED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAQjF"}
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"}
package/dist/plan.js CHANGED
@@ -32,8 +32,9 @@ export function runPlan(plan, ops, exec) {
32
32
  validateCoverage(stages, ops.length);
33
33
  // 逐次 stage × stage 内 bounded 並行(結果は完了順非依存なので直列に評価してよい)。
34
34
  for (const stage of stages) {
35
- // mapWithConcurrency は入力順保存・結果不変(§4)。参照実装は決定性のため
36
- // index 昇順で評価する(concurrency 値は結果に影響しない — §3「concurrency は結果不変」)。
35
+ // mapWithConcurrency は入力順保存・結果不変(§4)。同期 API は決定性のため
36
+ // index 昇順で評価する(concurrency 値は結果に影響しない — §3「concurrency は結果不変」。
37
+ // 同期コールバックは重畳できないため、逐次実行が §4.1 の conforming fallback)。
37
38
  const ordered = [...stage].sort((a, b) => a - b);
38
39
  void concurrency; // plan 構造の一部だが結果を変えない(determinism 保証)
39
40
  for (const i of ordered) {
@@ -46,34 +47,159 @@ export function runPlan(plan, ops, exec) {
46
47
  skipped: skippedIdx.sort((a, b) => a - b).map((i) => ops[i].id),
47
48
  };
48
49
  }
49
- function runOp(i, op, states, exec, executedIdx, skippedIdx) {
50
+ /**
51
+ * runPlanAsync — runPlan の非同期版(bc#23)。stage 内メンバを `plan.concurrency` を
52
+ * 上限とした bounded 並列で dispatch する。
53
+ *
54
+ * 決定的 commit プロトコル(execution-plan.md §4.1):
55
+ * 1. preflight(index 昇順): policy 検証・Skip 判定・bindField 束縛を、確定済みの
56
+ * 前 stage state から導出する(stage 内メンバは相互独立 — §1)。
57
+ * 2. dispatch(index 昇順・bounded): 実行対象メンバの exec を並行に発行する。
58
+ * 3. commit(index 昇順): outcome を宣言順に解釈する(Skip 記録 / Policy Kind /
59
+ * Failure 伝播)。最初に fail する解釈が逐次実行と同一の Failure を投げる。
60
+ *
61
+ * 逐次実行との観測等価: result tree / executed / skipped / Failure(code・message)は
62
+ * runPlan と byte 一致。**相違は投機的 dispatch のみ**(あるメンバの解釈が Failure でも、
63
+ * 同 stage の後続メンバの exec は既に発行され得る。旧 graphddb の thread-overlap と同じ許容)。
64
+ *
65
+ * 安全 fallback(結果は不変のまま逐次 dispatch に切り替える):
66
+ * - `concurrency <= 1` / stage メンバが 1 個以下。
67
+ * - stage 内に親子依存があるとき(§1 違反 plan への防御 — 逐次実行の可視性semantics を保存)。
68
+ */
69
+ export async function runPlanAsync(plan, ops, exec) {
70
+ const states = new Array(ops.length);
71
+ const executedIdx = [];
72
+ const skippedIdx = [];
73
+ const stages = plan ? plan.groups : ops.map((_, i) => [i]);
74
+ const concurrency = plan ? plan.concurrency : 1;
75
+ validateCoverage(stages, ops.length);
76
+ for (const stage of stages) {
77
+ const ordered = [...stage].sort((a, b) => a - b);
78
+ const inStage = new Set(ordered);
79
+ const hasIntraDeps = ordered.some((i) => ops[i].parent !== null && inStage.has(ops[i].parent));
80
+ if (concurrency <= 1 || ordered.length <= 1 || hasIntraDeps) {
81
+ // 逐次 fallback: runOp と同一の per-op フロー(exec の await 以外は同一)。
82
+ for (const i of ordered) {
83
+ const pre = preflightOp(i, ops[i], states);
84
+ if (pre.kind === "invalid-policy")
85
+ fail("UNKNOWN_POLICY", pre.message);
86
+ if (pre.kind === "skip") {
87
+ skippedIdx.push(i);
88
+ states[i] = { status: "skipped" };
89
+ continue;
90
+ }
91
+ const outcome = await exec(ops[i], pre.bound);
92
+ states[i] = interpretOutcome(i, ops[i], pre.policy, outcome, executedIdx, skippedIdx);
93
+ }
94
+ continue;
95
+ }
96
+ // ── 並列経路 ────────────────────────────────────────────────────────────
97
+ // preflight(index 昇順): 前 stage state は確定済み・stage 内は相互独立なので、
98
+ // Skip 判定と bindField 束縛は dispatch 前に決定できる(逐次実行と同一の判定)。
99
+ const pre = ordered.map((i) => preflightOp(i, ops[i], states));
100
+ // dispatch(index 昇順・bounded): 発行順は宣言順(semaphore は FIFO)。
101
+ // reject させない({ok:outcome} | {err}) 形で捕捉し、commit 時に宣言順で再送する
102
+ // (後続メンバの投機的 promise が未処理 rejection にならないように)。
103
+ const sem = makeSemaphore(Math.max(1, concurrency));
104
+ const inflight = new Array(ordered.length);
105
+ for (let k = 0; k < ordered.length; k++) {
106
+ const p = pre[k];
107
+ if (p.kind !== "exec")
108
+ continue;
109
+ const i = ordered[k];
110
+ inflight[k] = (async () => {
111
+ await sem.acquire();
112
+ try {
113
+ return { outcome: await exec(ops[i], p.bound) };
114
+ }
115
+ catch (e) {
116
+ return { thrown: e };
117
+ }
118
+ finally {
119
+ sem.release();
120
+ }
121
+ })();
122
+ }
123
+ // commit(index 昇順): 解釈は宣言順 → Failure の同一性が逐次実行と一致する。
124
+ for (let k = 0; k < ordered.length; k++) {
125
+ const i = ordered[k];
126
+ const p = pre[k];
127
+ if (p.kind === "invalid-policy")
128
+ fail("UNKNOWN_POLICY", p.message);
129
+ if (p.kind === "skip") {
130
+ skippedIdx.push(i);
131
+ states[i] = { status: "skipped" };
132
+ continue;
133
+ }
134
+ const settled = await inflight[k];
135
+ if ("thrown" in settled)
136
+ throw settled.thrown; // exec 例外は逐次同様そのまま伝播
137
+ states[i] = interpretOutcome(i, ops[i], p.policy, settled.outcome, executedIdx, skippedIdx);
138
+ }
139
+ }
140
+ return {
141
+ states,
142
+ executed: executedIdx.sort((a, b) => a - b).map((i) => ops[i].id),
143
+ skipped: skippedIdx.sort((a, b) => a - b).map((i) => ops[i].id),
144
+ };
145
+ }
146
+ /** FIFO counting semaphore(dispatch 順 = 宣言順を保証する bounded 並列の骨格)。 */
147
+ function makeSemaphore(limit) {
148
+ let available = limit;
149
+ const waiters = [];
150
+ return {
151
+ acquire: () => new Promise((resolve) => {
152
+ if (available > 0) {
153
+ available--;
154
+ resolve();
155
+ }
156
+ else {
157
+ waiters.push(() => resolve());
158
+ }
159
+ }),
160
+ release: () => {
161
+ const next = waiters.shift();
162
+ if (next)
163
+ next();
164
+ else
165
+ available++;
166
+ },
167
+ };
168
+ }
169
+ /**
170
+ * preflightOp — runOp の exec 前半分(policy 検証 → Skip 判定 → bindField 束縛)を
171
+ * 純粋に判定する。逐次(runOp)と並列 commit の双方がこの判定を共有する。
172
+ * 判定順は runOp と同一: policy 検証が Skip 判定より先(UNKNOWN_POLICY は Skip でも投げる)。
173
+ */
174
+ function preflightOp(i, op, states) {
50
175
  const policy = op.policy ?? "fail";
51
176
  if (policy !== "fail" && policy !== "retry" && policy !== "continue")
52
- fail("UNKNOWN_POLICY", `unknown policy kind: ${policy}`); // fail-closed
177
+ return { kind: "invalid-policy", message: `unknown policy kind: ${policy}` }; // fail-closed
53
178
  // ── §2 Skip 伝播: 依存する入力 Port が Success でなければ Skip(下流へ連鎖)──
54
179
  let boundValue = undefined;
55
180
  if (op.parent !== null) {
56
181
  const parent = states[op.parent];
57
182
  // 規則 2: 親が Skip/Failed(未生成)なら子は Skip。
58
- if (!parent || parent.status !== "ok") {
59
- skippedIdx.push(i);
60
- return { status: "skipped" };
61
- }
183
+ if (!parent || parent.status !== "ok")
184
+ return { kind: "skip" };
62
185
  // null-binding skip(実装済み・データ駆動): 親 result[bindField] が null/欠落なら Skip。
63
186
  if (op.bindField !== undefined) {
64
187
  const pv = parent.value;
65
188
  const bound = pv !== null && typeof pv === "object" && !Array.isArray(pv)
66
189
  ? pv[op.bindField]
67
190
  : undefined;
68
- if (bound === undefined || bound === null) {
69
- skippedIdx.push(i);
70
- return { status: "skipped" };
71
- }
191
+ if (bound === undefined || bound === null)
192
+ return { kind: "skip" };
72
193
  boundValue = bound;
73
194
  }
74
195
  }
75
- // ── ノード実行(consumer 委譲)──
76
- const outcome = exec(op, boundValue);
196
+ return { kind: "exec", policy, bound: boundValue };
197
+ }
198
+ /**
199
+ * interpretOutcome — runOp の exec 後半分(executed 記帳 → Policy Kind 解釈)。
200
+ * 逐次(runOp)と並列 commit の双方がこの解釈を共有する(Failure message も同一)。
201
+ */
202
+ function interpretOutcome(i, op, policy, outcome, executedIdx, skippedIdx) {
77
203
  executedIdx.push(i);
78
204
  if ("ok" in outcome)
79
205
  return { status: "ok", value: outcome.ok };
@@ -93,6 +219,18 @@ function runOp(i, op, states, exec, executedIdx, skippedIdx) {
93
219
  executedIdx.pop(); // 実行はしたが Port を生成しなかった → 未生成として扱う(executed から除外)
94
220
  return { status: "skipped" };
95
221
  }
222
+ function runOp(i, op, states, exec, executedIdx, skippedIdx) {
223
+ const pre = preflightOp(i, op, states);
224
+ if (pre.kind === "invalid-policy")
225
+ fail("UNKNOWN_POLICY", pre.message);
226
+ if (pre.kind === "skip") {
227
+ skippedIdx.push(i);
228
+ return { status: "skipped" };
229
+ }
230
+ // ── ノード実行(consumer 委譲)──
231
+ const outcome = exec(op, pre.bound);
232
+ return interpretOutcome(i, op, pre.policy, outcome, executedIdx, skippedIdx);
233
+ }
96
234
  /** 各 index がちょうど 1 stage に属し、全 op が被覆されることを検査(§1)。 */
97
235
  function validateCoverage(stages, n) {
98
236
  const seen = new Set();
package/dist/plan.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * primitives.ts — codegen が直呼びできる安定 primitive 公開面(bc#36 / typed-codegen.md §3.4)。
3
+ *
4
+ * これは **A0 = 公開面の確定**(emitter 生成ロジックは A1/#37)。生成コードが
5
+ * 「細粒度 primitive を呼ぶ」ための callable surface を additive に切り出す。
6
+ *
7
+ * 最重要規律(AC 7): **演算子意味論は再実装しない。** 各 primitive は Expression IR の
8
+ * 単一キーノードを組んで既存 SSoT `evaluate`(expr-eval.ts)へ委譲するだけの薄いラッパ。
9
+ * よって意味論(INT_OVERFLOW / PRECISION_LOSS / MOD_ZERO / NULL_REF / TYPE_MISMATCH /
10
+ * 短絡未評価 / code-point 順 / CPython float repr 等)は `evaluate` と**完全一致**する
11
+ * ——別実装が存在しないため発散のしようがない。
12
+ *
13
+ * 短絡の保存: `and`/`or`/`cond`/`coalesce` は **未評価の IR ノード**(`Expr`)を引数に取り、
14
+ * 内部で `evaluate` が短絡する。値を先に評価して渡す API にすると短絡が壊れるため採らない。
15
+ *
16
+ * これに加えて runPlan / bounded 並行 / skip・unproduced / hydration helper を再エクスポート
17
+ * または薄く公開する(いずれも既存実装を SSoT として共有)。
18
+ */
19
+ import { type Value, type Scope } from "./expr-eval.js";
20
+ import { type RelationKind } from "./plan.js";
21
+ /** 未評価の Expression IR ノード(primitive の被演算子)。`evaluate` がそのまま解釈する。 */
22
+ export type Expr = unknown;
23
+ /** 参照。`ref(["a","b"], scope)` = `{ref:["a","b"]}`(中間 null は NULL_REF)。 */
24
+ export declare function ref(path: string[], scope: Scope): Value;
25
+ /** null 安全参照。中間 null は null 伝播(NULL_REF を投げない)。 */
26
+ export declare function refOpt(path: string[], scope: Scope): Value;
27
+ /** `{int:"..."}` リテラル(i64 checked)。 */
28
+ export declare function intLit(literal: string, scope?: Scope): Value;
29
+ /** `{float:n}` リテラル(NaN/Inf は NAN_OR_INF)。 */
30
+ export declare function floatLit(n: number, scope?: Scope): Value;
31
+ /** object 構築(own key `__proto__` は FORBIDDEN_KEY)。値は Expression IR。 */
32
+ export declare function obj(fields: Record<string, Expr>, scope: Scope): Value;
33
+ /** array 構築。要素は Expression IR。 */
34
+ export declare function arr(elems: Expr[], scope: Scope): Value;
35
+ /** 加算(int×int checked / float×float checked。混在は TYPE_MISMATCH)。 */
36
+ export declare function add(a: Expr, b: Expr, scope: Scope): Value;
37
+ /** 減算。 */
38
+ export declare function sub(a: Expr, b: Expr, scope: Scope): Value;
39
+ /** 乗算。 */
40
+ export declare function mul(a: Expr, b: Expr, scope: Scope): Value;
41
+ /** 単項マイナス。 */
42
+ export declare function neg(a: Expr, scope: Scope): Value;
43
+ /** 除算(常に float。widening で |int|>2^53 は PRECISION_LOSS、0除算は NAN_OR_INF)。 */
44
+ export declare function div(a: Expr, b: Expr, scope: Scope): Value;
45
+ /** 剰余(truncated、符号は被除数。int の 0 剰余は MOD_ZERO)。 */
46
+ export declare function mod(a: Expr, b: Expr, scope: Scope): Value;
47
+ /** 文字列連結(n-ary, min 2。string のみ。暗黙 toString なし)。 */
48
+ export declare function concat(parts: Expr[], scope: Scope): Value;
49
+ /** 等価(同一スカラ型のみ。null==null 可。obj/arr は未定義)。 */
50
+ export declare function eq(a: Expr, b: Expr, scope: Scope): Value;
51
+ /** 非等価。 */
52
+ export declare function ne(a: Expr, b: Expr, scope: Scope): Value;
53
+ /** 小なり(同一型 int/float/string。string は code-point 順)。 */
54
+ export declare function lt(a: Expr, b: Expr, scope: Scope): Value;
55
+ /** 以下。 */
56
+ export declare function le(a: Expr, b: Expr, scope: Scope): Value;
57
+ /** 大なり。 */
58
+ export declare function gt(a: Expr, b: Expr, scope: Scope): Value;
59
+ /** 以上。 */
60
+ export declare function ge(a: Expr, b: Expr, scope: Scope): Value;
61
+ /** 論理積(短絡: a=false なら b は評価されない)。b は未評価 IR で渡す。 */
62
+ export declare function and(a: Expr, b: Expr, scope: Scope): Value;
63
+ /** 論理和(短絡: a=true なら b は評価されない)。 */
64
+ export declare function or(a: Expr, b: Expr, scope: Scope): Value;
65
+ /** 論理否定(strict bool。truthiness なし)。 */
66
+ export declare function not(a: Expr, scope: Scope): Value;
67
+ /** null 合体(左が null のときだけ右を評価)。右は未評価 IR で渡す。 */
68
+ export declare function coalesce(a: Expr, b: Expr, scope: Scope): Value;
69
+ /** 条件(strict bool。採用側のみ評価)。then/else は未評価 IR で渡す。 */
70
+ export declare function cond(c: Expr, then: Expr, els: Expr, scope: Scope): Value;
71
+ /** 配列長(配列のみ。string length は v1 に無い)。 */
72
+ export declare function len(a: Expr, scope: Scope): Value;
73
+ /**
74
+ * 生の Expression IR を直接評価する汎用 primitive(emitter が単一キーラッパを介さず
75
+ * 任意の式ノードを評価したい場合の逃げ道。意味論は上記個別 primitive と同一 SSoT)。
76
+ */
77
+ export declare function evalExpr(node: Expr, scope?: Scope): Value;
78
+ /**
79
+ * mapWithConcurrency — 入力順を保存し、in-flight を `concurrency` で上限する bounded 並行 map。
80
+ * execution-plan.md §4 の determinism 規律(output[i]=worker(items[i]) / 完了順非依存 /
81
+ * FIFO dispatch)を単体 primitive として公開する。runPlanAsync 内の同名機構と同一規律。
82
+ *
83
+ * @param items 入力(順序保存の基準)。
84
+ * @param concurrency 同時 in-flight 上限(<=1 で逐次)。
85
+ * @param worker 各要素の非同期処理(`worker(item, index)`)。
86
+ * @returns `items` と同じ長さ・順序の結果配列。
87
+ */
88
+ export declare function mapWithConcurrency<T, R>(items: readonly T[], concurrency: number, worker: (item: T, index: number) => R | Promise<R>): Promise<R[]>;
89
+ /**
90
+ * 未生成 Port(Skip)の表現値を返す。single→null / connection→空 connection。
91
+ * plan.ts / behavior.ts の内部 unproducedValue と同一規律を公開面として切り出す
92
+ * (生成コードが Skip 節点の穴埋めに直呼びできるように)。
93
+ */
94
+ export declare function unproducedValue(kind: RelationKind | undefined): Value;
95
+ /** single relation の未生成 = null(unproducedValue("single") の明示版)。 */
96
+ export declare function skipSingle(): Value;
97
+ /** connection relation の未生成 = {items:[],cursor:null}(明示版)。 */
98
+ export declare function skipConnection(): Value;
99
+ /**
100
+ * hydrateInto — map.into(behavior.ts の applyInto)と同一規律の zip-attach helper。
101
+ * `over` の各要素へ `key` で `values[k]` を書き戻した augment 済みリストを返す
102
+ * (over と同じ長さ・順序、親 results 不変=コピー、guard skip 要素は無変更で pass-through)。
103
+ * read が relation を hydrate するときに codegen から直呼びできる面。
104
+ *
105
+ * @param over 元の要素列(object 要素のみ augment 可)。
106
+ * @param key 書き戻すフィールド名。
107
+ * @param keptIdx augment 対象の over index(昇順。guard 通過要素)。
108
+ * @param values keptIdx と同じ長さ・順序の書き戻し値。
109
+ * @throws Error augment 対象が object でない場合(MAP_INTO_ELEMENT_NOT_OBJECT 相当)。
110
+ */
111
+ export declare function hydrateInto(over: Value[], key: string, keptIdx: number[], values: Value[]): Value[];
112
+ //# sourceMappingURL=primitives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"primitives.d.ts","sourceRoot":"","sources":["../src/primitives.ts"],"names":[],"mappings":"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"}