litedbmodel 2.0.2 → 2.1.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.
Files changed (80) hide show
  1. package/dist/decorators.d.ts.map +1 -1
  2. package/dist/decorators.js +44 -24
  3. package/dist/decorators.js.map +1 -1
  4. package/dist/drivers/mysql.d.ts.map +1 -1
  5. package/dist/drivers/mysql.js +6 -0
  6. package/dist/drivers/mysql.js.map +1 -1
  7. package/dist/drivers/postgres.d.ts.map +1 -1
  8. package/dist/drivers/postgres.js +7 -0
  9. package/dist/drivers/postgres.js.map +1 -1
  10. package/dist/drivers/sqlite.d.ts +2 -0
  11. package/dist/drivers/sqlite.d.ts.map +1 -1
  12. package/dist/drivers/sqlite.js +37 -2
  13. package/dist/drivers/sqlite.js.map +1 -1
  14. package/dist/scp/authoring.d.ts +66 -3
  15. package/dist/scp/authoring.d.ts.map +1 -1
  16. package/dist/scp/authoring.js +194 -5
  17. package/dist/scp/authoring.js.map +1 -1
  18. package/dist/scp/catalog.d.ts +2 -1
  19. package/dist/scp/catalog.d.ts.map +1 -1
  20. package/dist/scp/catalog.js +12 -1
  21. package/dist/scp/catalog.js.map +1 -1
  22. package/dist/scp/codegen.d.ts +43 -31
  23. package/dist/scp/codegen.d.ts.map +1 -1
  24. package/dist/scp/codegen.js +279 -95
  25. package/dist/scp/codegen.js.map +1 -1
  26. package/dist/scp/coltype.d.ts +83 -0
  27. package/dist/scp/coltype.d.ts.map +1 -1
  28. package/dist/scp/coltype.js +220 -0
  29. package/dist/scp/coltype.js.map +1 -1
  30. package/dist/scp/guard.d.ts +1 -1
  31. package/dist/scp/guard.d.ts.map +1 -1
  32. package/dist/scp/guard.js +6 -0
  33. package/dist/scp/guard.js.map +1 -1
  34. package/dist/scp/index.cjs +7149 -9379
  35. package/dist/scp/index.d.ts +7 -6
  36. package/dist/scp/index.d.ts.map +1 -1
  37. package/dist/scp/index.js +21 -6
  38. package/dist/scp/index.js.map +1 -1
  39. package/dist/scp/index.mjs +729 -178
  40. package/dist/scp/makesql/authoring-compile.d.ts.map +1 -1
  41. package/dist/scp/makesql/authoring-compile.js +11 -0
  42. package/dist/scp/makesql/authoring-compile.js.map +1 -1
  43. package/dist/scp/makesql/index.d.ts +2 -3
  44. package/dist/scp/makesql/index.d.ts.map +1 -1
  45. package/dist/scp/makesql/index.js +6 -6
  46. package/dist/scp/makesql/index.js.map +1 -1
  47. package/dist/scp/makesql/json-batch.d.ts.map +1 -1
  48. package/dist/scp/makesql/json-batch.js +6 -1
  49. package/dist/scp/makesql/json-batch.js.map +1 -1
  50. package/dist/scp/makesql/outtype.d.ts +61 -6
  51. package/dist/scp/makesql/outtype.d.ts.map +1 -1
  52. package/dist/scp/makesql/outtype.js +164 -33
  53. package/dist/scp/makesql/outtype.js.map +1 -1
  54. package/dist/scp/makesql/pool-executor.d.ts +70 -0
  55. package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
  56. package/dist/scp/makesql/pool-executor.js +73 -5
  57. package/dist/scp/makesql/pool-executor.js.map +1 -1
  58. package/dist/scp/makesql/static-bundle.d.ts +39 -30
  59. package/dist/scp/makesql/static-bundle.d.ts.map +1 -1
  60. package/dist/scp/makesql/static-bundle.js +269 -138
  61. package/dist/scp/makesql/static-bundle.js.map +1 -1
  62. package/dist/scp/makesql/writeouttype.d.ts +5 -6
  63. package/dist/scp/makesql/writeouttype.d.ts.map +1 -1
  64. package/dist/scp/makesql/writeouttype.js +5 -6
  65. package/dist/scp/makesql/writeouttype.js.map +1 -1
  66. package/dist/scp/relation.d.ts +15 -1
  67. package/dist/scp/relation.d.ts.map +1 -1
  68. package/dist/scp/relation.js +61 -2
  69. package/dist/scp/relation.js.map +1 -1
  70. package/dist/scp/runtime.d.ts +6 -5
  71. package/dist/scp/runtime.d.ts.map +1 -1
  72. package/dist/scp/runtime.js +27 -5
  73. package/dist/scp/runtime.js.map +1 -1
  74. package/docs/BENCHMARK.md +58 -56
  75. package/docs/benchmark-chart.svg +166 -166
  76. package/package.json +8 -2
  77. package/dist/scp/makesql/ir.d.ts +0 -42
  78. package/dist/scp/makesql/ir.d.ts.map +0 -1
  79. package/dist/scp/makesql/ir.js +0 -66
  80. package/dist/scp/makesql/ir.js.map +0 -1
@@ -43,8 +43,25 @@
43
43
  * the eager path and the declaration path for an equivalent query produce byte-identical
44
44
  * component IR.
45
45
  */
46
- import { type BehaviorClass, type Component, type ComponentGraphIR, type MapNode, type ComponentRefNode, type PortSchema, type Recorded } from 'behavior-contracts';
46
+ import { type BehaviorClass, type ComponentGraphIRDoc, type PortSchema, type Recorded } from 'behavior-contracts';
47
+ /** Unbranded whole-IR structural shape (bc `ComponentGraphIRDoc`) — litedbmodel's carried/transformed IR. */
48
+ export type ComponentGraphIR = ComponentGraphIRDoc;
49
+ /** Unbranded component structural shape (`ir.components[number]`). */
50
+ export type Component = ComponentGraphIRDoc['components'][number];
51
+ /** Unbranded body-node structural shapes. */
52
+ export type BodyNode = Component['body'][number];
53
+ export type MapNode = Extract<BodyNode, {
54
+ map: unknown;
55
+ }>;
56
+ export type FanoutNode = Extract<BodyNode, {
57
+ fanout: unknown;
58
+ }>;
59
+ export type CondNode = Extract<BodyNode, {
60
+ cond: unknown;
61
+ }>;
62
+ export type ComponentRefNode = Exclude<BodyNode, MapNode | FanoutNode | CondNode>;
47
63
  import { type CatalogName, type ContractEffect } from './catalog';
64
+ import { type MaterializeResolver, type ColumnTypeResolver } from './coltype';
48
65
  /**
49
66
  * The litedbmodel leaf-component functions for the shared authoring surface —
50
67
  * `catalogComponents(LITEDBMODEL_CATALOG)` bound once, lazily (so importing this module
@@ -70,7 +87,11 @@ import { type CatalogName, type ContractEffect } from './catalog';
70
87
  * time — the atomic transaction envelope is a WS3 runtime concern, never authored.
71
88
  */
72
89
  export type ComponentFns = Record<CatalogName, (ports: Record<string, unknown>) => Recorded>;
73
- /** The `catalogComponents(LITEDBMODEL_CATALOG)` leaf-function map (typed, memoized). */
90
+ /**
91
+ * The litedbmodel leaf-function map (typed, memoized). Each typed-CRUD leaf self-annotates its output
92
+ * `PortableType` via `.as` from the ambient per-compile `static columns` resolver (see
93
+ * {@link currentResolver}); authors call `L.Select({…})` exactly as before — the typing is automatic.
94
+ */
74
95
  export declare function components(): ComponentFns;
75
96
  /**
76
97
  * One published behavior method: the bc-lowered component (name = the method name) plus
@@ -99,6 +120,41 @@ export interface BehaviorModelContract {
99
120
  readonly components: readonly Component[];
100
121
  /** Method name → lowered component + derived effect. */
101
122
  readonly methods: Readonly<Record<string, BehaviorMethodSpec>>;
123
+ /**
124
+ * The STATIC read-path materialize resolver (issue #59), derived ONCE at registration from the
125
+ * model's INLINE typed-column declaration (`static columns` — see {@link ModelColumns}).
126
+ * `(table, column) → MaterializeClass`, pure in-memory map lookups — ZERO per-read DB
127
+ * introspection. The read entry points (`executeBehavior`/`executeBehaviorAsync`/`read`) consult
128
+ * it so INT→number / BIGINT→string / DATE→string / BOOLEAN→boolean de-boxes for every read. Absent
129
+ * only when the model declared no `columns` (a model with no typed reads → raw driver values).
130
+ */
131
+ readonly materializeResolver?: MaterializeResolver;
132
+ /**
133
+ * The STATIC codegen column-type resolver (issue #58/#59), derived from the SAME inline `columns`
134
+ * declaration — `(table, column) → SQL type token`. Feeds `deriveReadOutTypes` so the typed-native
135
+ * codegen `outType` annotations come from the declaration (not an external DDL). Absent when the
136
+ * model declared no `columns`.
137
+ */
138
+ readonly resolveColumnType?: ColumnTypeResolver;
139
+ }
140
+ /**
141
+ * The INLINE typed-column declaration (issue #59): `table → (column → SQL type token)`, declared
142
+ * ONCE per table on the behavior model — the BC-native, consumer-inline column-type SoT (bc never
143
+ * infers types; the author annotates them, exactly as graphddb declares its typed entity columns).
144
+ * A read's projection resolves each column's type from THIS declaration (no external DDL string, no
145
+ * DB introspection). The registration precomputes both the codegen `outType` resolver and the TS
146
+ * read-path materialize resolver from it, so de-box is always-on for every registered model. SQL
147
+ * type tokens are the §4.1 vocabulary (`INTEGER`/`INT`/`BIGINT`/`REAL`/`DOUBLE`/`DECIMAL(…)`/`TEXT`/
148
+ * `VARCHAR(…)`/`BOOLEAN`/`DATE`/`TIMESTAMP`/`JSON`/`JSONB`/`UUID`/…).
149
+ */
150
+ export type ModelColumns = Readonly<Record<string, Readonly<Record<string, string>>>>;
151
+ /**
152
+ * A behavior model class may declare its columns inline via a `static columns` field — the typed
153
+ * catalog the reads project from. `publishBehaviors` reads it at registration to build the de-box
154
+ * resolvers. (Optional per class; a model with no typed reads may omit it.)
155
+ */
156
+ export interface TypedModelClass {
157
+ readonly columns?: ModelColumns;
102
158
  }
103
159
  /** Options passed through to bc `compileBehaviors` (additive; all optional). */
104
160
  export interface PublishBehaviorsOptions {
@@ -110,6 +166,14 @@ export interface PublishBehaviorsOptions {
110
166
  readonly inputPorts?: Record<string, Record<string, PortSchema>>;
111
167
  /** Plan concurrency recorded on the lowered components (bc default: 16). */
112
168
  readonly concurrency?: number;
169
+ /**
170
+ * The model's inline typed-column declaration (issue #59) — see {@link ModelColumns}. Normally
171
+ * declared as a `static columns` field ON the behavior class (the BC-native shape); this option is
172
+ * an alternative for callers that build the class dynamically. When both are present the option
173
+ * takes precedence. Absent from BOTH ⇒ the model has no declared types → reads stay un-materialized
174
+ * (raw driver values; pre-#59 — a model with no typed reads).
175
+ */
176
+ readonly columns?: ModelColumns;
113
177
  }
114
178
  /**
115
179
  * Publish an SCP declaration block: a `SemanticBehavior` (or `@behavior`) class whose
@@ -151,5 +215,4 @@ export type EagerBehavior = ($: Recorded, L: ComponentFns) => unknown;
151
215
  * @throws the same failures as {@link publishBehaviors} (single path, single guard).
152
216
  */
153
217
  export declare function compileEager(name: string, fn: EagerBehavior, options?: PublishBehaviorsOptions): BehaviorModelContract;
154
- export type { Component, ComponentGraphIR, MapNode, ComponentRefNode };
155
218
  //# sourceMappingURL=authoring.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/scp/authoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4CG;AAEH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,cAAc,EACpB,MAAM,WAAW,CAAC;AAGnB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC;AAI7F,wFAAwF;AACxF,wBAAgB,UAAU,IAAI,YAAY,CAKzC;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;CAC/B;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,kDAAkD;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAC;IAC9B,uEAAuE;IACvE,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1C,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;CAChE;AAED,gFAAgF;AAChF,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;IACjE,4EAA4E;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AA+CD;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,aAAa,EAClB,OAAO,GAAE,uBAA4B,GACpC,qBAAqB,CAEvB;AAID;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC;AAEtE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,aAAa,EACjB,OAAO,GAAE,uBAA4B,GACpC,qBAAqB,CAGvB;AA+BD,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
1
+ {"version":3,"file":"authoring.d.ts","sourceRoot":"","sources":["../../src/scp/authoring.ts"],"names":[],"mappings":"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"}
@@ -51,11 +51,87 @@ exports.compileEager = compileEager;
51
51
  const behavior_contracts_1 = require("behavior-contracts");
52
52
  const catalog_1 = require("./catalog");
53
53
  const guard_1 = require("./guard");
54
+ const coltype_1 = require("./coltype");
55
+ const outtype_1 = require("./makesql/outtype");
56
+ let boundRaw;
54
57
  let boundComponents;
55
- /** The `catalogComponents(LITEDBMODEL_CATALOG)` leaf-function map (typed, memoized). */
58
+ /**
59
+ * The AMBIENT per-compile column-type resolver (bc 0.8.0 SA5 / #12). `lowerBehaviorClass` sets this
60
+ * from the model's inline `static columns` immediately BEFORE `compileBehaviors` and clears it right
61
+ * after (a synchronous window — bc records every method body inside that single call). The typed CRUD
62
+ * leaf wrappers (Select/Insert/Update/Delete) read it to compute each authored node's determined
63
+ * output `PortableType` and stamp it via bc's `.as(t)` recording API, so `compileBehaviors`'
64
+ * all-nodes-typed gate passes. It is the SAME `static columns` SoT the post-compile de-box
65
+ * (`deriveReadOutTypes`) reads — moved to authoring time so the type is fixed at compile (declare-via-BC:
66
+ * column-types-in-authoring, no hand-built IR; SQL stays opaque text on the makeSQL leaf).
67
+ */
68
+ let currentResolver;
69
+ /** Run `fn` with the ambient compile-time column resolver bound (restored on exit — reentrancy-safe). */
70
+ function withColumnResolver(resolve, fn) {
71
+ const prev = currentResolver;
72
+ currentResolver = resolve;
73
+ try {
74
+ return fn();
75
+ }
76
+ finally {
77
+ currentResolver = prev;
78
+ }
79
+ }
80
+ /**
81
+ * Leaves whose authored node's output row shape is per-projection and MUST be typed via `.as` from the
82
+ * model's `static columns` (bc 0.8.0 SA5). A `Select` (read) is de-boxed by the typed read/codegen
83
+ * path, so its row REQUIRES the column-type SoT (fail-closed when absent — mirrors #59's
84
+ * `assertReadColumnsDeclared`). A write (`Insert`/`Update`/`Delete`) is NOT typed-codegen'd — its
85
+ * RETURNING de-box is derived POST-compile from the tuned SQL (`writeouttype.ts`); the write NODE's
86
+ * compile-time outType exists only to satisfy bc's all-nodes-typed gate, so it is typed from the
87
+ * `returning` port WHEN `static columns` is present, else annotated with the determined empty-row list
88
+ * `{arr:{obj:{}}}` (writes stay EXEMPT from a `static columns` requirement, as before #12).
89
+ */
90
+ const READ_TYPED_LEAF = 'Select';
91
+ const WRITE_TYPED_LEAVES = new Set(['Insert', 'Update', 'Delete']);
92
+ /**
93
+ * Wrap one raw `catalogComponents` leaf so a typed-CRUD leaf stamps its authored node's determined
94
+ * output type via bc's `.as(t)` (bc 0.8.0 SA5). `Count` (static `int` via the catalog `elemType`),
95
+ * `Fragment`, and `Tx` pass through unchanged (no per-projection output).
96
+ */
97
+ function wrapLeaf(name, raw) {
98
+ const isRead = name === READ_TYPED_LEAF;
99
+ const isWrite = WRITE_TYPED_LEAVES.has(name);
100
+ if (!isRead && !isWrite)
101
+ return raw;
102
+ return (ports) => {
103
+ const handle = raw(ports);
104
+ // Reads REQUIRE the column-type SoT (typed de-box); writes do not (RETURNING de-box is post-compile).
105
+ if (isRead && currentResolver === undefined) {
106
+ throw new Error(`scp authoring: a Select node needs its output row type at compile time (bc 0.8.0 all-nodes-typed ` +
107
+ `gate), but the model declares NO \`columns\` — a typed read REQUIRES an inline \`static columns\` ` +
108
+ `SoT (or \`options.columns\`). No-assume, no-fallback.`);
109
+ }
110
+ const outType = currentResolver !== undefined
111
+ ? (0, outtype_1.crudNodeAsType)(name, ports, currentResolver, `${name} node`)
112
+ : { arr: { obj: {} } }; // write with no `static columns`: determined empty-row list (gate-only, inert)
113
+ return handle.as(outType);
114
+ };
115
+ }
116
+ /** The raw `catalogComponents(LITEDBMODEL_CATALOG)` leaf map (memoized). */
117
+ function rawComponents() {
118
+ if (boundRaw === undefined) {
119
+ boundRaw = (0, behavior_contracts_1.catalogComponents)(catalog_1.LITEDBMODEL_CATALOG);
120
+ }
121
+ return boundRaw;
122
+ }
123
+ /**
124
+ * The litedbmodel leaf-function map (typed, memoized). Each typed-CRUD leaf self-annotates its output
125
+ * `PortableType` via `.as` from the ambient per-compile `static columns` resolver (see
126
+ * {@link currentResolver}); authors call `L.Select({…})` exactly as before — the typing is automatic.
127
+ */
56
128
  function components() {
57
129
  if (boundComponents === undefined) {
58
- boundComponents = (0, behavior_contracts_1.catalogComponents)(catalog_1.LITEDBMODEL_CATALOG);
130
+ const raw = rawComponents();
131
+ const wrapped = {};
132
+ for (const name of Object.keys(raw))
133
+ wrapped[name] = wrapLeaf(name, raw[name]);
134
+ boundComponents = wrapped;
59
135
  }
60
136
  return boundComponents;
61
137
  }
@@ -79,10 +155,25 @@ function components() {
79
155
  * ({@link deriveContractEffect}); the author never declares it.
80
156
  */
81
157
  function lowerBehaviorClass(cls, options) {
82
- const ir = (0, behavior_contracts_1.compileBehaviors)(cls, {
158
+ // STATIC de-box resolvers (issue #59): the column types come from the model's INLINE declaration
159
+ // (`static columns` on the class, or `options.columns`) — the BC-native, consumer-inline SoT (bc
160
+ // never infers types). Build the `table → (col → SQL type)` map ONCE at registration into BOTH the
161
+ // codegen outType resolver AND the FAIL-CLOSED TS read-path materialize resolver. A read then
162
+ // de-boxes with ZERO DB introspection (litedbmodel's static-resolution core value).
163
+ //
164
+ // bc 0.8.0 (#12 / SA5): the resolver is built BEFORE `compileBehaviors` and bound as the AMBIENT
165
+ // compile-time resolver (`withColumnResolver`) so the typed CRUD leaf wrappers can stamp each
166
+ // authored node's determined output type via `.as` DURING recording — clearing bc's all-nodes-typed
167
+ // gate. Same `static columns` SoT as the post-compile de-box, moved to authoring time.
168
+ const className = cls.name ?? '<anonymous>';
169
+ const declaredColumns = options.columns ?? cls.columns;
170
+ const columnMap = declaredColumns !== undefined ? toColumnMap(declaredColumns) : undefined;
171
+ const materializeResolver = columnMap !== undefined ? (0, coltype_1.failClosedMaterializeResolverFromColumnMap)(columnMap) : undefined;
172
+ const resolveColumnType = columnMap !== undefined ? (0, coltype_1.columnTypeResolverFromColumnMap)(columnMap) : undefined;
173
+ const ir = withColumnResolver(resolveColumnType, () => (0, behavior_contracts_1.compileBehaviors)(cls, {
83
174
  ...(options.inputPorts !== undefined ? { inputPorts: options.inputPorts } : {}),
84
175
  ...(options.concurrency !== undefined ? { concurrency: options.concurrency } : {}),
85
- });
176
+ }));
86
177
  (0, catalog_1.assertComponentsInCatalog)(ir.components);
87
178
  (0, guard_1.assertComponentGraphPortable)(ir);
88
179
  const methods = {};
@@ -93,13 +184,108 @@ function lowerBehaviorClass(cls, options) {
93
184
  component,
94
185
  };
95
186
  }
187
+ // FAIL-CLOSED coverage-by-construction (issue #59 audit): every column a READ method projects MUST
188
+ // have a declared type. Validate NOW, at registration — a read whose projected columns aren't fully
189
+ // declared cannot be published (so no production read can silently skip de-box and leak a rounded
190
+ // i64). A model with NO `columns` but a read that projects columns fails here too (columns are
191
+ // REQUIRED for a typed read). A write / a read that projects no explicit columns is exempt.
192
+ assertReadColumnsDeclared(className, ir.components, methods, resolveColumnType);
96
193
  return {
97
- className: cls.name ?? '<anonymous>',
194
+ className,
98
195
  ir,
99
196
  components: ir.components,
100
197
  methods,
198
+ ...(materializeResolver !== undefined ? { materializeResolver } : {}),
199
+ ...(resolveColumnType !== undefined ? { resolveColumnType } : {}),
101
200
  };
102
201
  }
202
+ /** Normalize a declared {@link ModelColumns} into the `Map<table, Map<column, sqlType>>` the resolvers use. */
203
+ function toColumnMap(columns) {
204
+ const map = new Map();
205
+ for (const [table, cols] of Object.entries(columns)) {
206
+ const inner = new Map();
207
+ for (const [col, sqlType] of Object.entries(cols))
208
+ inner.set(col, sqlType);
209
+ map.set(table, inner);
210
+ }
211
+ return map;
212
+ }
213
+ /** Read a literal string port of a body node, or `undefined` (not a literal). */
214
+ function literalStringPort(ports, name) {
215
+ const v = ports[name];
216
+ return typeof v === 'string' ? v : undefined;
217
+ }
218
+ /** Read a literal `{arr:[str,…]}` string-list port, or `undefined` (not a literal list). */
219
+ function literalStringArrayPort(ports, name) {
220
+ const v = ports[name];
221
+ if (v !== null && typeof v === 'object' && 'arr' in v && Array.isArray(v.arr)) {
222
+ const arr = v.arr;
223
+ if (arr.every((e) => typeof e === 'string'))
224
+ return arr;
225
+ }
226
+ return undefined;
227
+ }
228
+ /** Extract each `Select` body node's `{ table, columns }` projection (skips Count / non-literal). */
229
+ function selectProjectionsOf(component) {
230
+ const out = [];
231
+ for (const n of component.body) {
232
+ if ('cond' in n)
233
+ continue;
234
+ if ('fanout' in n) {
235
+ // bc 0.7.3+ `FanoutNode`. litedbmodel never emits fanout — reject fail-closed rather
236
+ // than mis-read it as a component ref with no `Select` projection.
237
+ throw new Error(`selectProjectionsOf: component '${component.name}' node '${n.id}' is a fanout node, not supported by litedbmodel (bc FanoutNode)`);
238
+ }
239
+ const ref = 'map' in n ? n.map : n;
240
+ if (ref.component !== 'Select')
241
+ continue; // Count → scalar; no projection
242
+ const ports = ref.ports;
243
+ const table = literalStringPort(ports, 'table');
244
+ const columns = literalStringArrayPort(ports, 'select');
245
+ if (table === undefined || columns === undefined || columns.length === 0)
246
+ continue;
247
+ out.push({ table, columns });
248
+ }
249
+ return out;
250
+ }
251
+ /**
252
+ * FAIL-CLOSED registration guard (issue #59 audit): every column a READ (`query`) method PROJECTS —
253
+ * in ANY shape (bare `col`, qualified `t.col`, aliased `col AS b`) — must resolve to a declared type
254
+ * in the model's inline `columns`. Uses the SHARED {@link parseProjectionColumn} (the SAME projection
255
+ * parser the read-path materializer + codegen outType derivations use), so no projection shape can
256
+ * escape validation. A `*` / computed projection, an undeclared underlying column, or a read with NO
257
+ * `columns` declared at all, THROWS here — a typed read whose projected columns aren't fully declared
258
+ * cannot be registered, so no production read can silently skip de-box and return a rounded i64.
259
+ * Writes are exempt.
260
+ */
261
+ function assertReadColumnsDeclared(className, components, methods, resolveColumnType) {
262
+ for (const component of components) {
263
+ if (methods[component.name]?.effect !== 'query')
264
+ continue; // reads only (writes exempt)
265
+ for (const proj of selectProjectionsOf(component)) {
266
+ const at = `model '${className}' method '${component.name}'`;
267
+ // SHARED parse (all shapes): `*` → throw; computed → no schema column (skip); bare/qualified/
268
+ // aliased schema column → must be declared (against its OWNER table = qualifier ?? base table).
269
+ const schemaCols = proj.columns
270
+ .map((col) => (0, outtype_1.parseProjectionColumn)(col, proj.table, at))
271
+ .filter((e) => e.kind === 'column')
272
+ .map((e) => ({ table: e.qualifier ?? proj.table, column: e.underlying }));
273
+ if (schemaCols.length === 0)
274
+ continue; // only computed projections — nothing to type
275
+ if (resolveColumnType === undefined) {
276
+ // A read projecting schema columns with NO `columns` declared → fail closed (columns REQUIRED).
277
+ throw new Error(`scp publishBehaviors: ${at} reads projecting typed columns ` +
278
+ `[${schemaCols.map((s) => `${s.table}.${s.column}`).join(', ')}] but the model declares NO ` +
279
+ `\`columns\`. A typed read REQUIRES an inline \`static columns\` declaration so the read-path ` +
280
+ `de-box (INT→number / BIGINT→string / DATE→string / BOOLEAN→boolean) is always-on — never a ` +
281
+ `silent raw (rounded i64) result. Declare the model's \`static columns\`.`);
282
+ }
283
+ // resolveColumnType THROWS (naming the table/column) for any undeclared UNDERLYING column.
284
+ for (const s of schemaCols)
285
+ resolveColumnType(s.table, s.column);
286
+ }
287
+ }
288
+ }
103
289
  /**
104
290
  * Publish an SCP declaration block: a `SemanticBehavior` (or `@behavior`) class whose
105
291
  * public methods are the root Behaviors (spec §2.4). Lowers through the single compile
@@ -159,4 +345,7 @@ function makeEagerClass(name, fn) {
159
345
  Object.defineProperty(cls, 'name', { value: name, configurable: true });
160
346
  return cls;
161
347
  }
348
+ // The component-graph node/component/graph types consumers (WS3) narrow the emitted IR with are
349
+ // declared+exported as UNBRANDED structural aliases near the top of this module (bc 0.8.0: the branded
350
+ // compile-seam handle is re-adopted only at `generateModule` via `loadCompiledIR`).
162
351
  //# sourceMappingURL=authoring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/scp/authoring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authoring.js","sourceRoot":"","sources":["../../src/scp/authoring.ts"],"names":[],"mappings":"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"}
@@ -33,7 +33,8 @@
33
33
  * DECLARED port keeps bc's required/type checks regardless of the opt-in. `Tx`'s single
34
34
  * port is static, so it keeps bc's fail-closed default.
35
35
  */
36
- import { type Catalog, type CatalogEntry, type Component } from 'behavior-contracts';
36
+ import { type Catalog, type CatalogEntry } from 'behavior-contracts';
37
+ import type { Component } from './authoring';
37
38
  /**
38
39
  * The catalog-name literal union — one entry per SQL primitive litedbmodel declares:
39
40
  * the CRUD leaves (`Select` / `Insert` / `Update` / `Delete`), the dynamic WHERE/SET
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAA0B,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAmB,MAAM,oBAAoB,CAAC;AAE9H;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,IAAI,CAAC;AAwET;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAwBjC,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEnE;AAED,uEAAuE;AACvE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAQ/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,WAAW,EAKrD,CAAC;AAIF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAIhD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CA4BhF;AAGD,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAEzE"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAA0B,KAAK,OAAO,EAAE,KAAK,YAAY,EAAmB,MAAM,oBAAoB,CAAC;AAI9G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,IAAI,CAAC;AAwET;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,OA2BjC,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEnE;AAED,uEAAuE;AACvE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAQ/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,WAAW,EAKrD,CAAC;AAIF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAIhD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAoChF;AAGD,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAEzE"}
@@ -121,7 +121,10 @@ exports.LITEDBMODEL_CATALOG = {
121
121
  // Only `table` (required) + the optional `where` fragment tree — v1's count carries no
122
122
  // projection/order/limit/offset (it counts the filtered rows). Output is a one-row `[{count}]`
123
123
  // list (the `items` shape, like every read); the consumer reads `count` — v1's `parseInt(count)`.
124
- Count: entry('Count', { table: P('string', true), where: P('fragment') }, 'items', true),
124
+ // bc 0.8.0 (SA5): Count's output element type is STATICALLY determined (`int` — the counted rows),
125
+ // so it declares a catalog `elemType` and needs no per-call `.as` (unlike Select, whose row shape is
126
+ // per-projection). `baseOutTypeFromEntry` bakes node.outType = {arr:'int'} (items shape) at record.
127
+ Count: { ...entry('Count', { table: P('string', true), where: P('fragment') }, 'items', true), elemType: 'int' },
125
128
  // Writes yield the RETURNING row list (`items`); a single-row write collapses at the
126
129
  // consumer boundary, same as reads.
127
130
  Insert: entry('Insert', WRITE_PORTS, 'items', true),
@@ -196,6 +199,14 @@ function assertComponentsInCatalog(components) {
196
199
  for (const n of c.body) {
197
200
  if ('cond' in n)
198
201
  continue;
202
+ if ('fanout' in n) {
203
+ // bc 0.7.3+ `FanoutNode` (connection fan-out / batched BatchGet). litedbmodel authors
204
+ // only Select/Count/map/cond via LITEDBMODEL_CATALOG and never emits fanout, so a
205
+ // fanout node here means an unsupported graph reached the emitter — reject fail-closed
206
+ // rather than mis-validate it as a component ref.
207
+ errs.push(`${c.name}/${n.id}: fanout node is not supported by litedbmodel (bc FanoutNode)`);
208
+ continue;
209
+ }
199
210
  const ref = 'map' in n ? n.map : n;
200
211
  const entryDef = exports.LITEDBMODEL_CATALOG[ref.component];
201
212
  if (entryDef === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"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"}
@@ -12,8 +12,8 @@
12
12
  * concrete `HandlerNR<Comp>`/`InNR<Comp>`/`PortsNR<Comp><node>`/`RawRowNR<Comp><node>` structs,
13
13
  * ZERO boxed `Value`/`RawValue`, ZERO IR baked into the module), the CODEGEN-ONLY lowering
14
14
  * below ({@link lowerReadGraphForTypedNative}) makes the read's shape structurally ELIGIBLE
15
- * (splits the surrogate `__scope` boxed-obj port into individual scalar ref ports + types the
16
- * component's `inputPorts` from the schema) before handing it to bc. For a WRITE bundle, or a
15
+ * (derives each real Select-node's referenced heads from its statements → individual scalar ref
16
+ * ports + types the component's `inputPorts` from the schema) before handing it to bc. For a WRITE bundle, or a
17
17
  * READ shape typed-native does not (yet) cover, codegen uses bc's existing de-interpreted
18
18
  * STRAIGHT-LINE endpoint (`<lang>-straightline`, bc#75) — see {@link typedEmitterFor}.
19
19
  * 2. **SQL catalog companion** — the pure-JSON STATIC makeSQL catalog (per-node statement
@@ -24,9 +24,9 @@
24
24
  *
25
25
  * This lowering exists SOLELY for the codegen emitter call — it builds a NEW, separate
26
26
  * `ComponentGraphIR` from the bundle's `readGraph`; it never mutates `SqlBundle`/`ReadGraph` and
27
- * never touches the shared `readGraph`/`executeReadGraph` the ir/interpret exec surface (and the
28
- * frozen conformance corpus) depend on. Those keep consuming the ORIGINAL boxed-`__scope`-port
29
- * surrogate IR ({@link bundleToPortableIR}), completely unaffected by anything in this file.
27
+ * never touches the shared `readGraph`/`executeReadGraph` the native exec surface (and the
28
+ * frozen conformance corpus) depend on. Those keep consuming the REAL Select-node
29
+ * `readGraph.ir`, completely unaffected by anything in this file.
30
30
  *
31
31
  * ## Behavior-identical to the thin-runtime (mode-2), by construction
32
32
  *
@@ -40,11 +40,19 @@
40
40
  * ## No literal-bake / no boxed fallback
41
41
  *
42
42
  * typed-native fails CLOSED on an uncovered shape (a `map`/`cond` relation kind it does not cover,
43
- * or an input head that cannot lower to a native scalar — e.g. an IN-list's array-typed head).
44
- * Such a shape is NOT silently regenerated on the boxed `-typed`/`-typed-raw` emitter — it THROWS,
45
- * naming the exact gap, so it can be tracked as a bc coverage gap (bc#86) rather than masked.
43
+ * or an input head that cannot lower to a native port). Such a shape is NOT silently regenerated on
44
+ * the boxed `-typed`/`-typed-raw` emitter — it THROWS, naming the exact gap, so it can be tracked as
45
+ * a bc coverage gap rather than masked.
46
+ *
47
+ * IN-list / array-bound WHERE heads (the `whereIn` `{__jsonArray:{ref:[head]},dialect}` param) are
48
+ * now COVERED via bc#110 (native array/list port for a componentRef input port): the lowering
49
+ * resolves the IN-list column's element scalar and emits a native ARRAY input port
50
+ * (`{type:'array', elemType}` → `Vec<ElemT>`/`[]ElemT`), so `complexWhere`/`inList` reach the
51
+ * zero-boxing native hot path (no serde_json/encoding-json, no boxed `Value`). They no longer
52
+ * fail closed as a bc#86/coverage gap.
46
53
  */
47
- import { type ComponentGraphIR, type GeneratedModule, type Scope, type Value } from 'behavior-contracts';
54
+ import { type GeneratedModule, type Scope, type Value } from 'behavior-contracts';
55
+ import type { ComponentGraphIR } from './authoring';
48
56
  import type { SqlBundle, SqliteDb } from './runtime';
49
57
  import type { DialectName } from './dialect';
50
58
  import type { RelationOp } from './relation';
@@ -125,13 +133,16 @@ export interface CodegenArtifact {
125
133
  readonly bundle: SqlBundle;
126
134
  }
127
135
  /**
128
- * The portable {@link ComponentGraphIR} view of a §8 bundle: a read bundle's surrogate IR (each
129
- * SQL node → a `makeSQL` node), or the single `makeSQL` component IR for a write. This is the
130
- * ORIGINAL boxed-`__scope`-port form the ir/interpret exec surface's `executeReadGraph` also
131
- * consumes (via `bundle.readGraph.ir` directly) — {@link generateCodegenArtifact} does NOT use
132
- * this for a READ bundle (it uses the codegen-only lowered form, {@link lowerReadGraphForTypedNative});
133
- * this function is kept for callers that want the untouched portable IR (e.g. diagnostics, the
134
- * write path, or a future straight-line fallback caller).
136
+ * The portable {@link ComponentGraphIR} view of a §8 READ bundle: `compileBehaviors`' real-node
137
+ * read-graph IR (the de-surrogated `Select`/`Count`/map nodes; #12) — the SAME IR the native exec
138
+ * surface (`executeReadGraph`) walks (via `bundle.readGraph.ir` directly). litedbmodel constructs NO
139
+ * `ComponentGraphIR` literal here; it returns the compiler's own output. {@link generateCodegenArtifact}
140
+ * does NOT use this for a typed-native READ target (that uses the codegen-only lowered form,
141
+ * {@link lowerReadGraphForTypedNative}); this is the portable IR for a boxed READ endpoint / fingerprint.
142
+ *
143
+ * WRITE bundles have NO portable component-graph IR (they carry a single compiled `statement`, not a
144
+ * component graph — and are NOT codegen-module cases: {@link generateCodegenArtifact} rejects them).
145
+ * There is therefore no hand-built `makeSQL` write surrogate anymore (#12) — a write bundle throws.
135
146
  */
136
147
  export declare function bundleToPortableIR(bundle: SqlBundle): ComponentGraphIR;
137
148
  /** A head could not be typed for typed-native codegen — the read is NOT typed-native-coverable. */
@@ -141,13 +152,13 @@ export declare class TypedNativeCoverageError extends Error {
141
152
  constructor(component: string, reasons: readonly string[]);
142
153
  }
143
154
  /**
144
- * Lower a read bundle's surrogate `ComponentGraphIR` into a NEW, CODEGEN-ONLY IR eligible for bc's
145
- * typed-native endpoint (#60 milestone 1): split the single `__scope: {obj:{...}}` boxed port into
146
- * individual scalar `{ref:[head]}` ports, and type the component's `inputPorts` from the schema
147
- * (via {@link deriveHeadTypesFromStatements}). Throws {@link TypedNativeCoverageError} if any
148
- * referenced head cannot be natively typed (e.g. an IN-list's array head) — NO silent `unknown`
149
- * port, NO fallback. Does NOT mutate `bundle`/`bundle.readGraph` (a fresh IR object is returned);
150
- * the ir/interpret exec surface's `executeReadGraph` keeps consuming the ORIGINAL `readGraph.ir`.
155
+ * Lower a read bundle's REAL Select-node `ComponentGraphIR` into a NEW, CODEGEN-ONLY IR eligible
156
+ * for bc's typed-native endpoint (#60 milestone 1): derive each node's referenced heads from its
157
+ * `statementsById` fragments and emit individual native-scalar `{ref:[head]}` ports, typing the
158
+ * component's `inputPorts` from the schema (via {@link deriveHeadTypesFromStatements}). Throws
159
+ * {@link TypedNativeCoverageError} if any referenced head cannot be natively typed (e.g. an IN-list's
160
+ * array head) — NO silent `unknown` port, NO fallback. Does NOT mutate `bundle`/`bundle.readGraph`
161
+ * (a fresh IR object is returned); the native `executeReadGraph` keeps consuming the real `readGraph.ir`.
151
162
  *
152
163
  * Scope: bc's typed-native predicate itself still governs `map`/`cond`/relationKind/policy
153
164
  * coverage (this lowering does not special-case those — `generateModule` fails closed on them with
@@ -167,14 +178,15 @@ export declare function typedEmitterFor(language: string, registered: readonly s
167
178
  */
168
179
  export declare function codegenEmitterFor(language: string, registered: readonly string[]): string;
169
180
  /**
170
- * Generate the mode-3 READ codegen artifact for ONE §8 READ bundle in ONE target language. For a
171
- * typed-NATIVE target (go/rust, bc#77/#90), lowers the bundle's surrogate read graph into the
172
- * typed-native-eligible IR ({@link lowerReadGraphForTypedNative}) first — REAL static native
173
- * source, RUNTIME-FREE, no baked-IR interpret path. For any OTHER registered endpoint (currently
174
- * only TS's boxed `typescript-typed`, which has no typed-native counterpart yet), the ORIGINAL
175
- * portable IR ({@link bundleToPortableIR}) is used unchanged — the lowering is typed-native-only
176
- * and would needlessly narrow a boxed endpoint's existing coverage. litedbmodel supplies the
177
- * input (portable IR + catalog); bc owns the emitter.
181
+ * Generate the mode-3 READ codegen artifact for ONE §8 READ bundle in ONE target language. Lowers
182
+ * the bundle's real Select-node read graph into the native-scalar-port IR
183
+ * ({@link lowerReadGraphForTypedNative}) FIRST — for go/rust's typed-NATIVE endpoint (bc#77/#90,
184
+ * RUNTIME-FREE) AND for TS's boxed `typescript-typed` endpoint alike. Both consume the SAME
185
+ * genuine-bound-head shape: the lowering derives each node's ports from its compiled
186
+ * `statementsById` fragments, so a WHERE COLUMN-NAME MARKER head (`whereGe($.created_at, $.since)`
187
+ * — `$.created_at` names the column, is never bound) is EXCLUDED from the emitted ports/input
188
+ * struct, exactly as go/rust already handled it (#12 regression: TS previously fed the raw IR and
189
+ * emitted a stray `created_at` binding → `unknown binding: created_at` at execution).
178
190
  *
179
191
  * WRITE bundles are OUT OF SCOPE (#60 milestone 1: writes stay on the existing write/tx execution
180
192
  * path, never a codegen module) — throws if `bundle.readGraph` is absent.
@@ -1 +1 @@
1
- {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/scp/codegen.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codegen.d.ts","sourceRoot":"","sources":["../../src/scp/codegen.ts"],"names":[],"mappings":"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"}