litedbmodel 2.0.2 → 2.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.
Files changed (193) hide show
  1. package/README.md +7 -0
  2. package/dist/DBConditions.d.ts.map +1 -1
  3. package/dist/DBConditions.js +16 -1
  4. package/dist/DBConditions.js.map +1 -1
  5. package/dist/DBHandler.d.ts.map +1 -1
  6. package/dist/DBHandler.js +6 -0
  7. package/dist/DBHandler.js.map +1 -1
  8. package/dist/DBModel.d.ts +84 -2
  9. package/dist/DBModel.d.ts.map +1 -1
  10. package/dist/DBModel.js +312 -29
  11. package/dist/DBModel.js.map +1 -1
  12. package/dist/decorators.d.ts +52 -0
  13. package/dist/decorators.d.ts.map +1 -1
  14. package/dist/decorators.js +127 -24
  15. package/dist/decorators.js.map +1 -1
  16. package/dist/drivers/mysql.d.ts.map +1 -1
  17. package/dist/drivers/mysql.js +12 -2
  18. package/dist/drivers/mysql.js.map +1 -1
  19. package/dist/drivers/postgres.d.ts.map +1 -1
  20. package/dist/drivers/postgres.js +13 -2
  21. package/dist/drivers/postgres.js.map +1 -1
  22. package/dist/drivers/sqlite.d.ts +2 -0
  23. package/dist/drivers/sqlite.d.ts.map +1 -1
  24. package/dist/drivers/sqlite.js +49 -4
  25. package/dist/drivers/sqlite.js.map +1 -1
  26. package/dist/index.cjs +10741 -0
  27. package/dist/index.d.cts +1 -0
  28. package/dist/scp/coltype.d.ts +108 -0
  29. package/dist/scp/coltype.d.ts.map +1 -1
  30. package/dist/scp/coltype.js +293 -6
  31. package/dist/scp/coltype.js.map +1 -1
  32. package/dist/scp/connection-routing.d.ts +312 -0
  33. package/dist/scp/connection-routing.d.ts.map +1 -0
  34. package/dist/scp/connection-routing.js +394 -0
  35. package/dist/scp/connection-routing.js.map +1 -0
  36. package/dist/scp/dbmodel-runtime.d.ts +101 -0
  37. package/dist/scp/dbmodel-runtime.d.ts.map +1 -0
  38. package/dist/scp/dbmodel-runtime.js +174 -0
  39. package/dist/scp/dbmodel-runtime.js.map +1 -0
  40. package/dist/scp/decorator-adapter.d.ts +196 -0
  41. package/dist/scp/decorator-adapter.d.ts.map +1 -0
  42. package/dist/scp/decorator-adapter.js +286 -0
  43. package/dist/scp/decorator-adapter.js.map +1 -0
  44. package/dist/scp/emit/emitter.d.ts +108 -0
  45. package/dist/scp/emit/emitter.d.ts.map +1 -0
  46. package/dist/scp/emit/emitter.js +782 -0
  47. package/dist/scp/emit/emitter.js.map +1 -0
  48. package/dist/scp/emit/endpoint.d.ts +248 -0
  49. package/dist/scp/emit/endpoint.d.ts.map +1 -0
  50. package/dist/scp/emit/endpoint.js +20 -0
  51. package/dist/scp/emit/endpoint.js.map +1 -0
  52. package/dist/scp/emit/index.d.ts +11 -0
  53. package/dist/scp/emit/index.d.ts.map +1 -0
  54. package/dist/scp/emit/index.js +13 -0
  55. package/dist/scp/emit/index.js.map +1 -0
  56. package/dist/scp/errors.d.ts +45 -1
  57. package/dist/scp/errors.d.ts.map +1 -1
  58. package/dist/scp/errors.js +47 -1
  59. package/dist/scp/errors.js.map +1 -1
  60. package/dist/scp/exec-context.d.ts +390 -0
  61. package/dist/scp/exec-context.d.ts.map +1 -0
  62. package/dist/scp/exec-context.js +540 -0
  63. package/dist/scp/exec-context.js.map +1 -0
  64. package/dist/scp/grouping.d.ts +32 -0
  65. package/dist/scp/grouping.d.ts.map +1 -0
  66. package/dist/scp/grouping.js +0 -0
  67. package/dist/scp/grouping.js.map +1 -0
  68. package/dist/scp/index.cjs +6432 -17579
  69. package/dist/scp/index.d.cts +1 -0
  70. package/dist/scp/index.d.mts +1 -0
  71. package/dist/scp/index.d.ts +51 -52
  72. package/dist/scp/index.d.ts.map +1 -1
  73. package/dist/scp/index.js +189 -152
  74. package/dist/scp/index.js.map +1 -1
  75. package/dist/scp/index.mjs +6067 -3659
  76. package/dist/scp/leaf-transport.d.ts +50 -0
  77. package/dist/scp/leaf-transport.d.ts.map +1 -0
  78. package/dist/scp/leaf-transport.js +92 -0
  79. package/dist/scp/leaf-transport.js.map +1 -0
  80. package/dist/scp/leaves.d.ts +174 -0
  81. package/dist/scp/leaves.d.ts.map +1 -0
  82. package/dist/scp/leaves.js +287 -0
  83. package/dist/scp/leaves.js.map +1 -0
  84. package/dist/scp/limit-config.d.ts +118 -0
  85. package/dist/scp/limit-config.d.ts.map +1 -0
  86. package/dist/scp/limit-config.js +126 -0
  87. package/dist/scp/limit-config.js.map +1 -0
  88. package/dist/scp/makesql/compile-relation.d.ts +49 -23
  89. package/dist/scp/makesql/compile-relation.d.ts.map +1 -1
  90. package/dist/scp/makesql/compile-relation.js +101 -76
  91. package/dist/scp/makesql/compile-relation.js.map +1 -1
  92. package/dist/scp/makesql/compile-select.d.ts +45 -10
  93. package/dist/scp/makesql/compile-select.d.ts.map +1 -1
  94. package/dist/scp/makesql/compile-select.js +50 -10
  95. package/dist/scp/makesql/compile-select.js.map +1 -1
  96. package/dist/scp/makesql/handler.d.ts +1 -1
  97. package/dist/scp/makesql/handler.d.ts.map +1 -1
  98. package/dist/scp/makesql/index.d.ts +7 -10
  99. package/dist/scp/makesql/index.d.ts.map +1 -1
  100. package/dist/scp/makesql/index.js +19 -30
  101. package/dist/scp/makesql/index.js.map +1 -1
  102. package/dist/scp/makesql/json-array.d.ts +65 -0
  103. package/dist/scp/makesql/json-array.d.ts.map +1 -1
  104. package/dist/scp/makesql/json-array.js +99 -10
  105. package/dist/scp/makesql/json-array.js.map +1 -1
  106. package/dist/scp/makesql/json-batch.d.ts.map +1 -1
  107. package/dist/scp/makesql/json-batch.js +21 -19
  108. package/dist/scp/makesql/json-batch.js.map +1 -1
  109. package/dist/scp/makesql/makesql.d.ts +1 -1
  110. package/dist/scp/makesql/makesql.d.ts.map +1 -1
  111. package/dist/scp/makesql/mysql-returning.d.ts +93 -0
  112. package/dist/scp/makesql/mysql-returning.d.ts.map +1 -0
  113. package/dist/scp/makesql/mysql-returning.js +215 -0
  114. package/dist/scp/makesql/mysql-returning.js.map +1 -0
  115. package/dist/scp/makesql/outtype.d.ts +75 -34
  116. package/dist/scp/makesql/outtype.d.ts.map +1 -1
  117. package/dist/scp/makesql/outtype.js +91 -118
  118. package/dist/scp/makesql/outtype.js.map +1 -1
  119. package/dist/scp/makesql/pool-executor.d.ts +135 -13
  120. package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
  121. package/dist/scp/makesql/pool-executor.js +229 -21
  122. package/dist/scp/makesql/pool-executor.js.map +1 -1
  123. package/dist/scp/makesql/tx.d.ts +107 -22
  124. package/dist/scp/makesql/tx.d.ts.map +1 -1
  125. package/dist/scp/makesql/tx.js +451 -97
  126. package/dist/scp/makesql/tx.js.map +1 -1
  127. package/dist/scp/makesql/writeouttype.d.ts +7 -8
  128. package/dist/scp/makesql/writeouttype.d.ts.map +1 -1
  129. package/dist/scp/makesql/writeouttype.js +8 -7
  130. package/dist/scp/makesql/writeouttype.js.map +1 -1
  131. package/dist/scp/middleware.d.ts +287 -0
  132. package/dist/scp/middleware.d.ts.map +1 -0
  133. package/dist/scp/middleware.js +358 -0
  134. package/dist/scp/middleware.js.map +1 -0
  135. package/dist/scp/relation.d.ts +80 -9
  136. package/dist/scp/relation.d.ts.map +1 -1
  137. package/dist/scp/relation.js +198 -78
  138. package/dist/scp/relation.js.map +1 -1
  139. package/dist/scp/tx-options.d.ts +136 -0
  140. package/dist/scp/tx-options.d.ts.map +1 -0
  141. package/dist/scp/tx-options.js +184 -0
  142. package/dist/scp/tx-options.js.map +1 -0
  143. package/dist/scp/write-bundle.d.ts +131 -0
  144. package/dist/scp/write-bundle.d.ts.map +1 -0
  145. package/dist/scp/write-bundle.js +160 -0
  146. package/dist/scp/write-bundle.js.map +1 -0
  147. package/dist/types.d.ts +7 -0
  148. package/dist/types.d.ts.map +1 -1
  149. package/dist/types.js.map +1 -1
  150. package/docs/BENCHMARK.md +58 -56
  151. package/docs/benchmark-chart.svg +166 -166
  152. package/docs/design/phase-a-execution-context.md +139 -0
  153. package/package.json +16 -9
  154. package/dist/scp/authoring-sql.d.ts +0 -134
  155. package/dist/scp/authoring-sql.d.ts.map +0 -1
  156. package/dist/scp/authoring-sql.js +0 -191
  157. package/dist/scp/authoring-sql.js.map +0 -1
  158. package/dist/scp/authoring.d.ts +0 -155
  159. package/dist/scp/authoring.d.ts.map +0 -1
  160. package/dist/scp/authoring.js +0 -162
  161. package/dist/scp/authoring.js.map +0 -1
  162. package/dist/scp/catalog.d.ts +0 -94
  163. package/dist/scp/catalog.d.ts.map +0 -1
  164. package/dist/scp/catalog.js +0 -234
  165. package/dist/scp/catalog.js.map +0 -1
  166. package/dist/scp/codegen.d.ts +0 -189
  167. package/dist/scp/codegen.d.ts.map +0 -1
  168. package/dist/scp/codegen.js +0 -421
  169. package/dist/scp/codegen.js.map +0 -1
  170. package/dist/scp/find-filter-guard.d.ts +0 -68
  171. package/dist/scp/find-filter-guard.d.ts.map +0 -1
  172. package/dist/scp/find-filter-guard.js +0 -88
  173. package/dist/scp/find-filter-guard.js.map +0 -1
  174. package/dist/scp/guard.d.ts +0 -43
  175. package/dist/scp/guard.d.ts.map +0 -1
  176. package/dist/scp/guard.js +0 -134
  177. package/dist/scp/guard.js.map +0 -1
  178. package/dist/scp/makesql/authoring-compile.d.ts +0 -90
  179. package/dist/scp/makesql/authoring-compile.d.ts.map +0 -1
  180. package/dist/scp/makesql/authoring-compile.js +0 -494
  181. package/dist/scp/makesql/authoring-compile.js.map +0 -1
  182. package/dist/scp/makesql/ir.d.ts +0 -42
  183. package/dist/scp/makesql/ir.d.ts.map +0 -1
  184. package/dist/scp/makesql/ir.js +0 -66
  185. package/dist/scp/makesql/ir.js.map +0 -1
  186. package/dist/scp/makesql/static-bundle.d.ts +0 -187
  187. package/dist/scp/makesql/static-bundle.d.ts.map +0 -1
  188. package/dist/scp/makesql/static-bundle.js +0 -1113
  189. package/dist/scp/makesql/static-bundle.js.map +0 -1
  190. package/dist/scp/runtime.d.ts +0 -242
  191. package/dist/scp/runtime.d.ts.map +0 -1
  192. package/dist/scp/runtime.js +0 -400
  193. package/dist/scp/runtime.js.map +0 -1
@@ -0,0 +1 @@
1
+ export * from './index.js';
@@ -10,11 +10,83 @@
10
10
  */
11
11
  /** bc typed outType のスカラ型(bc 0.3.0 の portable notation と一致;date 型は無い)。 */
12
12
  export type BcScalar = 'string' | 'int' | 'float' | 'bool' | 'null';
13
+ /**
14
+ * SQL 型トークンを基底型名へ正規化する SSoT(`sqlTypeToBcScalar` / `sqlTypeToMaterializeClass` が共有)。
15
+ * 括弧のサイズ/精度と、型判定に無関係な列修飾(`UNSIGNED`/`ZEROFILL`/`PRECISION` と NULL 可否
16
+ * `NOT NULL`/`NULL`)を落として基底型名だけを残す。NULL 可否は {@link sqlTypeIsNotNull} が別に読む
17
+ * (型スカラと直交する — nullability は outType の `opt` ラップの有無、基底スカラではない)。
18
+ */
19
+ export declare function normalizeSqlTypeToken(sqlType: string): string;
20
+ /**
21
+ * 宣言された SQL 型が `NOT NULL` 制約を持つか(`static columns` は列制約を型トークンに書ける)。
22
+ * `true` の列は読み出しセルが非 null 確定 → 読み outType は `opt` ラップ無しの生スカラ(RETURNING の
23
+ * 主キーのような非 null 値を value 位置で消費できる — spec §4.1 の nullability)。既定(無指定)は
24
+ * nullable(ドライバ列は NULL を返し得る)。
25
+ */
26
+ export declare function sqlTypeIsNotNull(sqlType: string): boolean;
13
27
  /**
14
28
  * SQL 型(DDL のトークン。`DECIMAL(10,2)` 等の括弧やサイズは無視)→ bc outType スカラ。
15
29
  * spec §4.1 の正規表に一致。未知/曖昧は throw(fail-closed)。
16
30
  */
17
31
  export declare function sqlTypeToBcScalar(sqlType: string): BcScalar;
32
+ /**
33
+ * The TS read-path MATERIALIZATION class for a SQL column (issue #59, owner-approved
34
+ * type-honoring de-box). The bc `outType` scalar (`int`/`float`/`string`/`bool`) is the PORTABLE
35
+ * type the native codegen materializes; but on the TS/driver read path we additionally split the
36
+ * `int` scalar by SQL WIDTH and coerce `date`/`bool` to their exact JS form, because a JS `number`
37
+ * cannot hold an i64 and the drivers otherwise return a JS `Date` / `0|1` that violate the
38
+ * declared `string`/`bool` outType. A materialization class is:
39
+ *
40
+ * - `'int32'` — 32-bit int family (INT/INTEGER/SMALLINT/TINYINT/MEDIUMINT/INT2/INT4). Its full
41
+ * range fits in a JS `number` exactly, so it materializes to `number` (fast,
42
+ * arith/JSON-friendly). This is the UNCHANGED, already-correct behavior.
43
+ * - `'int64'` — 64-bit int (BIGINT/INT8). Exceeds `Number.MAX_SAFE_INTEGER`, so a JS `number`
44
+ * would round it. Materializes to a value-preserving decimal STRING (e.g.
45
+ * `"9223372036854775807"`) — EXACT and JSON-safe (a JS `bigint` throws in
46
+ * `JSON.stringify`, so string is the JSON-friendly exact form, mirroring the
47
+ * decimal→string / date→string mappings). This is the ONLY int class whose JS
48
+ * type changes (#59 fix).
49
+ * - `'date'` — DATE/TIMESTAMP/TIMESTAMPTZ/DATETIME/TIME. The bc outType is `string`; drivers
50
+ * return a JS `Date` (TZ-shifted). Materializes to a TZ-attached STRING (the
51
+ * driver's textual form), honoring the `string` outType (#59 fix; overrides the
52
+ * old v2 "date→JS Date on TS" mapping).
53
+ * - `'bool'` — BOOLEAN/BOOL. Drivers may return `0`/`1`; materializes to a JS `boolean`.
54
+ * - `'passthrough'` — every other class (float, text, decimal-as-string, json, uuid): the driver
55
+ * value already matches the outType, so no coercion.
56
+ */
57
+ export type MaterializeClass = 'int32' | 'int64' | 'date' | 'bool' | 'passthrough';
58
+ /**
59
+ * Derive the TS read-path {@link MaterializeClass} for a SQL type (spec §4.1 owner de-box). Uses
60
+ * the SAME normalization + closed-set discipline as {@link sqlTypeToBcScalar} (unknown ⇒ throw),
61
+ * so a column that types for the bc scalar also types for materialization (and vice-versa). The
62
+ * `int` scalar splits int32/int64 by width; `date`/`bool` get their own class; everything else is
63
+ * `passthrough`.
64
+ */
65
+ export declare function arrayElementType(sqlType: string): string | null;
66
+ export declare function sqlTypeToMaterializeClass(sqlType: string): MaterializeClass;
67
+ /**
68
+ * The bc scalar of a de-boxed READ KEY value — the element type a relation key-array (`pluck` → `.as`)
69
+ * carries when it is bound to `= ANY($1)` / `json_each(?)` (#141, spec §4.1). A key array is an opaque
70
+ * transport value list, so its bc element tag is the JS type of the READ-materialized key cell, NOT the
71
+ * column's `sqlTypeToBcScalar` outType: an `int32` column materializes to a JS `number` (bc `float`),
72
+ * a `BIGINT`/`int64` to a decimal STRING (bc `string`), a `date` to a string, a `bool` to a boolean.
73
+ * Derived by composing {@link sqlTypeToMaterializeClass} (the read de-box class) with the base scalar,
74
+ * so it stays the SINGLE type-system SoT — no hand-rolled type table at the relation call site.
75
+ */
76
+ export declare function keyArrayElemScalar(sqlType: string): BcScalar;
77
+ /**
78
+ * Coerce ONE raw driver cell to the JS form its {@link MaterializeClass} declares (issue #59 TS
79
+ * read-path de-box). NULL passes through (nullable columns). This is driver-agnostic: it accepts
80
+ * whatever form each driver returned for the class and normalizes it —
81
+ * - `int64`: a string (pg int8 / mysql2 bigNumberStrings), a bigint (better-sqlite3 safeIntegers),
82
+ * or a safe JS number → an EXACT decimal STRING (JSON-safe, value-preserving). An
83
+ * already-rounded unsafe JS number is a hard error (precision was lost upstream).
84
+ * - `int32`: a bigint (a driver in safe-integer mode) or string → `number`; a number stays.
85
+ * - `date` : a JS Date → its textual form; a string stays (already the textual form).
86
+ * - `bool` : `0`/`1`/`0n`/`1n` → boolean; a boolean stays.
87
+ * - `passthrough`: unchanged.
88
+ */
89
+ export declare function materializeCell(value: unknown, klass: MaterializeClass): unknown;
18
90
  /**
19
91
  * A column-type resolver: `(table, column) → SQL type token`. It is the SoT (spec §4.1: the
20
92
  * `schema.sql` DDL) a codegen `outType` derivation consults to type each SELECT projection column.
@@ -22,6 +94,42 @@ export declare function sqlTypeToBcScalar(sqlType: string): BcScalar;
22
94
  * hard error (no-assume, no-fallback), never a silent boxed fallback.
23
95
  */
24
96
  export type ColumnTypeResolver = (table: string, column: string) => string;
97
+ /**
98
+ * A resolver that yields the TS read-path {@link MaterializeClass} of a `(table, column)`, or
99
+ * `undefined` when the column's type is unknown/untypeable. Unlike {@link ColumnTypeResolver} this
100
+ * is TOLERANT (never throws for an unknown column) — it drives the ALWAYS-ON production read-path
101
+ * materialization (issue #59), which must degrade to leaving an untyped column as the raw driver
102
+ * value rather than failing a real read. It is derived automatically from the DB's own schema (the
103
+ * live column-type SoT), so it fires for EVERY production read with no caller-supplied resolver.
104
+ */
105
+ export type MaterializeResolver = (table: string, column: string) => MaterializeClass | undefined;
106
+ /**
107
+ * A `table → (column → SQL type)` map → a TOLERANT {@link MaterializeResolver}: an unknown
108
+ * `(table, column)` or an un-mappable SQL type resolves to `undefined` (the raw driver value is
109
+ * kept). Retained for callers that WANT tolerance (e.g. optional/introspection contexts). The
110
+ * ALWAYS-ON registration path uses the FAIL-CLOSED variant below instead.
111
+ */
112
+ export declare function materializeResolverFromColumnMap(columnTypes: ReadonlyMap<string, ReadonlyMap<string, string>>): MaterializeResolver;
113
+ /**
114
+ * A `table → (column → SQL type)` map → a FAIL-CLOSED {@link MaterializeResolver} (issue #59 audit):
115
+ * an undeclared `(table, column)` THROWS (naming the model/table/column) — reconciled with the
116
+ * codegen resolver so the TS read path can NEVER silently skip de-box for an undeclared projected
117
+ * column (which would leak a rounded i64). A DECLARED column returns its materialize class (incl.
118
+ * `passthrough` for float/text/decimal/json — a no-op coercion, but it WAS type-checked). This is the
119
+ * resolver the registration precomputes ONCE from the model's INLINE `columns` declaration and
120
+ * carries on the contract — pure in-memory lookups, ZERO per-read DB introspection.
121
+ */
122
+ export declare function failClosedMaterializeResolverFromColumnMap(columnTypes: ReadonlyMap<string, ReadonlyMap<string, string>>): MaterializeResolver;
123
+ /**
124
+ * A `table → (column → SQL type)` map → a fail-closed {@link ColumnTypeResolver} (the codegen
125
+ * `outType` SoT). THROWS for an unknown `table`/`column` (no-assume, no-fallback — a typed-native
126
+ * read must not silently box an untyped column). Built from the model's INLINE `columns` declaration
127
+ * at registration, it replaces the external `schemaColumnTypeResolver(ddl)` as the codegen type
128
+ * source, so `deriveReadRow` (the read de-box SSoT) reads the declared types.
129
+ */
130
+ export declare function columnTypeResolverFromColumnMap(columnTypes: ReadonlyMap<string, ReadonlyMap<string, string>>): ColumnTypeResolver;
131
+ /** {@link sqlTypeToMaterializeClass} but TOLERANT: returns `undefined` for an unknown SQL type. */
132
+ export declare function materializeClassOrUndefined(sqlType: string): MaterializeClass | undefined;
25
133
  /**
26
134
  * Parse a list of `CREATE TABLE` DDL statements into a `table → (column → SQL type)` map. This is
27
135
  * the spec §4.1 SoT: the physical SQL type of each column, from which `sqlTypeToBcScalar` derives
@@ -1 +1 @@
1
- {"version":3,"file":"coltype.d.ts","sourceRoot":"","sources":["../../src/scp/coltype.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CA+D3D;AAED;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAE3E;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwB/F;AAyCD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAqBnF"}
1
+ {"version":3,"file":"coltype.d.ts","sourceRoot":"","sources":["../../src/scp/coltype.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAgE3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;AAEnF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAG/D;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,CAoE3E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,CAa5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAsDhF;AAaD;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;AAE3E;;;;;;;GAOG;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,gBAAgB,GAAG,SAAS,CAAC;AAElG;;;;;GAKG;AACH,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5D,mBAAmB,CAKrB;AAED;;;;;;;;GAQG;AACH,wBAAgB,0CAA0C,CACxD,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5D,mBAAmB,CAQrB;AAED;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAC5D,kBAAkB,CAmBpB;AAED,mGAAmG;AACnG,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAMzF;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAwB/F;AAyCD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,kBAAkB,CAqBnF"}
@@ -10,24 +10,53 @@
10
10
  * 行/リレーションの構造型(`obj`/`arr`/`opt`)は列型ではなくクエリ由来なので本変換の対象外。
11
11
  */
12
12
  Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.normalizeSqlTypeToken = normalizeSqlTypeToken;
14
+ exports.sqlTypeIsNotNull = sqlTypeIsNotNull;
13
15
  exports.sqlTypeToBcScalar = sqlTypeToBcScalar;
16
+ exports.arrayElementType = arrayElementType;
17
+ exports.sqlTypeToMaterializeClass = sqlTypeToMaterializeClass;
18
+ exports.keyArrayElemScalar = keyArrayElemScalar;
19
+ exports.materializeCell = materializeCell;
20
+ exports.materializeResolverFromColumnMap = materializeResolverFromColumnMap;
21
+ exports.failClosedMaterializeResolverFromColumnMap = failClosedMaterializeResolverFromColumnMap;
22
+ exports.columnTypeResolverFromColumnMap = columnTypeResolverFromColumnMap;
23
+ exports.materializeClassOrUndefined = materializeClassOrUndefined;
14
24
  exports.parseSchemaColumnTypes = parseSchemaColumnTypes;
15
25
  exports.schemaColumnTypeResolver = schemaColumnTypeResolver;
16
26
  /**
17
- * SQL 型(DDL のトークン。`DECIMAL(10,2)` 等の括弧やサイズは無視)→ bc outType スカラ。
18
- * spec §4.1 の正規表に一致。未知/曖昧は throw(fail-closed)。
27
+ * SQL 型トークンを基底型名へ正規化する SSoT(`sqlTypeToBcScalar` / `sqlTypeToMaterializeClass` が共有)。
28
+ * 括弧のサイズ/精度と、型判定に無関係な列修飾(`UNSIGNED`/`ZEROFILL`/`PRECISION` と NULL 可否
29
+ * `NOT NULL`/`NULL`)を落として基底型名だけを残す。NULL 可否は {@link sqlTypeIsNotNull} が別に読む
30
+ * (型スカラと直交する — nullability は outType の `opt` ラップの有無、基底スカラではない)。
19
31
  */
20
- function sqlTypeToBcScalar(sqlType) {
21
- // 括弧のサイズ/精度・`UNSIGNED` 等の修飾を落として基底型名で判定。
22
- const t = sqlType
32
+ function normalizeSqlTypeToken(sqlType) {
33
+ return sqlType
23
34
  .trim()
24
35
  .toUpperCase()
25
36
  .replace(/\(.*\)/, '')
26
- .replace(/\b(UNSIGNED|ZEROFILL|PRECISION)\b/g, '')
37
+ .replace(/\b(UNSIGNED|ZEROFILL|PRECISION|NOT\s+NULL|NULL)\b/g, '')
27
38
  .replace(/\s+/g, ' ')
28
39
  .trim();
40
+ }
41
+ /**
42
+ * 宣言された SQL 型が `NOT NULL` 制約を持つか(`static columns` は列制約を型トークンに書ける)。
43
+ * `true` の列は読み出しセルが非 null 確定 → 読み outType は `opt` ラップ無しの生スカラ(RETURNING の
44
+ * 主キーのような非 null 値を value 位置で消費できる — spec §4.1 の nullability)。既定(無指定)は
45
+ * nullable(ドライバ列は NULL を返し得る)。
46
+ */
47
+ function sqlTypeIsNotNull(sqlType) {
48
+ return /\bNOT\s+NULL\b/i.test(sqlType);
49
+ }
50
+ /**
51
+ * SQL 型(DDL のトークン。`DECIMAL(10,2)` 等の括弧やサイズは無視)→ bc outType スカラ。
52
+ * spec §4.1 の正規表に一致。未知/曖昧は throw(fail-closed)。
53
+ */
54
+ function sqlTypeToBcScalar(sqlType) {
55
+ const t = normalizeSqlTypeToken(sqlType);
29
56
  switch (t) {
30
57
  // int は既定 64bit(i64)。INTEGER も BIGINT も int(bigint を別型にしない — サイズ制限は列制約で表現)。
58
+ // PostgreSQL の SERIAL/SERIAL4/BIGSERIAL/SERIAL8/SMALLSERIAL/SERIAL2(auto-increment 疑似型)も
59
+ // 基底は整数(int4 / int8)で、read 型は plain integer。
31
60
  case 'INTEGER':
32
61
  case 'INT':
33
62
  case 'BIGINT':
@@ -37,6 +66,12 @@ function sqlTypeToBcScalar(sqlType) {
37
66
  case 'INT2':
38
67
  case 'INT4':
39
68
  case 'INT8':
69
+ case 'SERIAL':
70
+ case 'SERIAL4':
71
+ case 'BIGSERIAL':
72
+ case 'SERIAL8':
73
+ case 'SMALLSERIAL':
74
+ case 'SERIAL2':
40
75
  return 'int';
41
76
  // int と real は明確に分離。
42
77
  case 'REAL':
@@ -79,6 +114,258 @@ function sqlTypeToBcScalar(sqlType) {
79
114
  `are a hard error (no-assume, no-fallback), never defaulted.`);
80
115
  }
81
116
  }
117
+ /**
118
+ * Derive the TS read-path {@link MaterializeClass} for a SQL type (spec §4.1 owner de-box). Uses
119
+ * the SAME normalization + closed-set discipline as {@link sqlTypeToBcScalar} (unknown ⇒ throw),
120
+ * so a column that types for the bc scalar also types for materialization (and vice-versa). The
121
+ * `int` scalar splits int32/int64 by width; `date`/`bool` get their own class; everything else is
122
+ * `passthrough`.
123
+ */
124
+ function arrayElementType(sqlType) {
125
+ const m = /^(.+?)\s*\[\s*\]$/.exec(normalizeSqlTypeToken(sqlType));
126
+ return m === null ? null : m[1].trim();
127
+ }
128
+ function sqlTypeToMaterializeClass(sqlType) {
129
+ const t = normalizeSqlTypeToken(sqlType);
130
+ // An ARRAY column (`TEXT[]` / `INT[]` / `NUMERIC[]` / `BOOLEAN[]` / `TIMESTAMP[]` / …) de-boxes as
131
+ // `passthrough`: the driver's own array typeCast already parses the wire form into a JS array whose
132
+ // ELEMENTS match the declared element outType, so the read path leaves the value unchanged (no
133
+ // per-cell coercion — a scalar materialize class does not apply to a whole list). The element base
134
+ // type is still validated (an unknown element type on a DECLARED array column is a hard error too).
135
+ const element = arrayElementType(t);
136
+ if (element !== null) {
137
+ sqlTypeToMaterializeClass(element); // validate the element base type (throws if unknown)
138
+ return 'passthrough';
139
+ }
140
+ switch (t) {
141
+ // 32-bit int family: JS number holds the full range exactly. The PostgreSQL SERIAL family maps to
142
+ // its underlying int width (SERIAL/SERIAL4=int4, SMALLSERIAL/SERIAL2=int2).
143
+ case 'INTEGER':
144
+ case 'INT':
145
+ case 'SMALLINT':
146
+ case 'TINYINT':
147
+ case 'MEDIUMINT':
148
+ case 'INT2':
149
+ case 'INT4':
150
+ case 'SERIAL':
151
+ case 'SERIAL4':
152
+ case 'SMALLSERIAL':
153
+ case 'SERIAL2':
154
+ return 'int32';
155
+ // 64-bit int: needs JS bigint for exactness.
156
+ case 'BIGINT':
157
+ case 'INT8':
158
+ case 'BIGSERIAL':
159
+ case 'SERIAL8':
160
+ return 'int64';
161
+ case 'BOOLEAN':
162
+ case 'BOOL':
163
+ return 'bool';
164
+ case 'DATE':
165
+ case 'TIMESTAMP':
166
+ case 'TIMESTAMPTZ':
167
+ case 'DATETIME':
168
+ case 'TIME':
169
+ return 'date';
170
+ // float / decimal(→string) / text / json / uuid — driver value already matches the outType.
171
+ case 'REAL':
172
+ case 'FLOAT':
173
+ case 'DOUBLE':
174
+ case 'FLOAT4':
175
+ case 'FLOAT8':
176
+ case 'DECIMAL':
177
+ case 'NUMERIC':
178
+ case 'MONEY':
179
+ case 'TEXT':
180
+ case 'VARCHAR':
181
+ case 'CHAR':
182
+ case 'CHARACTER':
183
+ case 'CHARACTER VARYING':
184
+ case 'CLOB':
185
+ case 'UUID':
186
+ case 'JSON':
187
+ case 'JSONB':
188
+ return 'passthrough';
189
+ default:
190
+ throw new Error(`litedbmodel type system (spec §4.1): no materialization class for SQL type '${sqlType}' ` +
191
+ `(normalized '${t}'). Add it to the §4.1 table or fix the column — ambiguous/unknown types ` +
192
+ `are a hard error (no-assume, no-fallback), never defaulted.`);
193
+ }
194
+ }
195
+ /**
196
+ * The bc scalar of a de-boxed READ KEY value — the element type a relation key-array (`pluck` → `.as`)
197
+ * carries when it is bound to `= ANY($1)` / `json_each(?)` (#141, spec §4.1). A key array is an opaque
198
+ * transport value list, so its bc element tag is the JS type of the READ-materialized key cell, NOT the
199
+ * column's `sqlTypeToBcScalar` outType: an `int32` column materializes to a JS `number` (bc `float`),
200
+ * a `BIGINT`/`int64` to a decimal STRING (bc `string`), a `date` to a string, a `bool` to a boolean.
201
+ * Derived by composing {@link sqlTypeToMaterializeClass} (the read de-box class) with the base scalar,
202
+ * so it stays the SINGLE type-system SoT — no hand-rolled type table at the relation call site.
203
+ */
204
+ function keyArrayElemScalar(sqlType) {
205
+ switch (sqlTypeToMaterializeClass(sqlType)) {
206
+ case 'int32':
207
+ return 'float'; // materializes to a JS number → bc float
208
+ case 'int64':
209
+ case 'date':
210
+ return 'string'; // materializes to a decimal / TZ string → bc string
211
+ case 'bool':
212
+ return 'bool';
213
+ case 'passthrough':
214
+ // float stays a JS number (bc float); text / uuid / decimal-as-string / json are all bc string.
215
+ return sqlTypeToBcScalar(sqlType) === 'float' ? 'float' : 'string';
216
+ }
217
+ }
218
+ /**
219
+ * Coerce ONE raw driver cell to the JS form its {@link MaterializeClass} declares (issue #59 TS
220
+ * read-path de-box). NULL passes through (nullable columns). This is driver-agnostic: it accepts
221
+ * whatever form each driver returned for the class and normalizes it —
222
+ * - `int64`: a string (pg int8 / mysql2 bigNumberStrings), a bigint (better-sqlite3 safeIntegers),
223
+ * or a safe JS number → an EXACT decimal STRING (JSON-safe, value-preserving). An
224
+ * already-rounded unsafe JS number is a hard error (precision was lost upstream).
225
+ * - `int32`: a bigint (a driver in safe-integer mode) or string → `number`; a number stays.
226
+ * - `date` : a JS Date → its textual form; a string stays (already the textual form).
227
+ * - `bool` : `0`/`1`/`0n`/`1n` → boolean; a boolean stays.
228
+ * - `passthrough`: unchanged.
229
+ */
230
+ function materializeCell(value, klass) {
231
+ if (value === null || value === undefined)
232
+ return value;
233
+ switch (klass) {
234
+ case 'int64': {
235
+ // BIGINT → a value-preserving decimal STRING (exact + JSON-safe; a JS bigint throws in
236
+ // JSON.stringify, a JS number rounds past 2^53). Accept each driver's exact form.
237
+ if (typeof value === 'bigint')
238
+ return value.toString();
239
+ if (typeof value === 'string') {
240
+ if (!/^-?\d+$/.test(value))
241
+ throw new Error(`materialize int64: driver returned a non-integer string '${value}'`);
242
+ return value; // already the exact decimal string (pg int8 / mysql2 bigNumberStrings)
243
+ }
244
+ if (typeof value === 'number') {
245
+ if (!Number.isInteger(value))
246
+ throw new Error(`materialize int64: driver returned a non-integer number ${value} for a 64-bit int column`);
247
+ // A JS number past 2^53 already lost precision at the driver boundary; that is exactly the
248
+ // hole this de-box closes, so a number here means the driver was NOT put in exact mode.
249
+ if (!Number.isSafeInteger(value)) {
250
+ throw new Error(`materialize int64: driver returned an UNSAFE JS number ${value} for a 64-bit int column — ` +
251
+ `precision was already lost before materialization (the driver must return int8 as string/bigint, ` +
252
+ `not a rounded double). Configure the driver (better-sqlite3 safeIntegers / mysql2 supportBigNumbers+bigNumberStrings / pg int8-as-string).`);
253
+ }
254
+ return value.toString(); // a small BIGINT value that fit safely — stringify for a uniform exact string
255
+ }
256
+ throw new Error(`materialize int64: unexpected driver JS type ${typeof value}`);
257
+ }
258
+ case 'int32': {
259
+ if (typeof value === 'number')
260
+ return value;
261
+ if (typeof value === 'bigint')
262
+ return Number(value);
263
+ if (typeof value === 'string' && /^-?\d+$/.test(value))
264
+ return Number(value);
265
+ throw new Error(`materialize int32: unexpected driver JS type ${typeof value} (${String(value)})`);
266
+ }
267
+ case 'date': {
268
+ if (typeof value === 'string')
269
+ return value;
270
+ if (value instanceof Date)
271
+ return dateToTzString(value);
272
+ throw new Error(`materialize date: unexpected driver JS type ${typeof value}`);
273
+ }
274
+ case 'bool': {
275
+ if (typeof value === 'boolean')
276
+ return value;
277
+ if (typeof value === 'number')
278
+ return value !== 0;
279
+ if (typeof value === 'bigint')
280
+ return value !== 0n;
281
+ // A driver in TEXT mode (or the legacy v1 DBModel read path, issue #9) may hand a BOOLEAN over as
282
+ // its textual form: pg's `t`/`f`, or `true`/`false`/`1`/`0`. Normalize those to a JS boolean too,
283
+ // so a single coercion path serves both the v2 native-driver read and the v1 text-mode read.
284
+ if (typeof value === 'string') {
285
+ const s = value.trim().toLowerCase();
286
+ if (s === 't' || s === 'true' || s === '1')
287
+ return true;
288
+ if (s === 'f' || s === 'false' || s === '0')
289
+ return false;
290
+ }
291
+ throw new Error(`materialize bool: unexpected driver JS type ${typeof value} (${String(value)})`);
292
+ }
293
+ case 'passthrough':
294
+ return value;
295
+ }
296
+ }
297
+ /**
298
+ * Render a JS `Date` (a driver that was NOT configured for date-as-string) to a TZ-attached
299
+ * string. A `Date` has no calendar-vs-timestamp distinction, so we emit the full ISO-8601 instant
300
+ * (UTC, `Z`-suffixed) — a lossless, TZ-carrying textual form. The PREFERRED path is to configure
301
+ * the driver to return the native textual form directly (pg `setTypeParser`, mysql2 `dateStrings`);
302
+ * this fallback guarantees a STRING is returned even if a driver slips a Date through.
303
+ */
304
+ function dateToTzString(d) {
305
+ return d.toISOString();
306
+ }
307
+ /**
308
+ * A `table → (column → SQL type)` map → a TOLERANT {@link MaterializeResolver}: an unknown
309
+ * `(table, column)` or an un-mappable SQL type resolves to `undefined` (the raw driver value is
310
+ * kept). Retained for callers that WANT tolerance (e.g. optional/introspection contexts). The
311
+ * ALWAYS-ON registration path uses the FAIL-CLOSED variant below instead.
312
+ */
313
+ function materializeResolverFromColumnMap(columnTypes) {
314
+ return (table, column) => {
315
+ const sqlType = columnTypes.get(table)?.get(column);
316
+ return sqlType === undefined ? undefined : materializeClassOrUndefined(sqlType);
317
+ };
318
+ }
319
+ /**
320
+ * A `table → (column → SQL type)` map → a FAIL-CLOSED {@link MaterializeResolver} (issue #59 audit):
321
+ * an undeclared `(table, column)` THROWS (naming the model/table/column) — reconciled with the
322
+ * codegen resolver so the TS read path can NEVER silently skip de-box for an undeclared projected
323
+ * column (which would leak a rounded i64). A DECLARED column returns its materialize class (incl.
324
+ * `passthrough` for float/text/decimal/json — a no-op coercion, but it WAS type-checked). This is the
325
+ * resolver the registration precomputes ONCE from the model's INLINE `columns` declaration and
326
+ * carries on the contract — pure in-memory lookups, ZERO per-read DB introspection.
327
+ */
328
+ function failClosedMaterializeResolverFromColumnMap(columnTypes) {
329
+ const resolveSqlType = columnTypeResolverFromColumnMap(columnTypes); // throws on undeclared
330
+ return (table, column) => {
331
+ const sqlType = resolveSqlType(table, column); // fail-closed: throws for an undeclared column
332
+ // A declared column's SQL type must map to a known materialize class (the §4.1 closed set); an
333
+ // unknown token on a DECLARED column is a hard error too (never a silent skip).
334
+ return sqlTypeToMaterializeClass(sqlType);
335
+ };
336
+ }
337
+ /**
338
+ * A `table → (column → SQL type)` map → a fail-closed {@link ColumnTypeResolver} (the codegen
339
+ * `outType` SoT). THROWS for an unknown `table`/`column` (no-assume, no-fallback — a typed-native
340
+ * read must not silently box an untyped column). Built from the model's INLINE `columns` declaration
341
+ * at registration, it replaces the external `schemaColumnTypeResolver(ddl)` as the codegen type
342
+ * source, so `deriveReadRow` (the read de-box SSoT) reads the declared types.
343
+ */
344
+ function columnTypeResolverFromColumnMap(columnTypes) {
345
+ return (table, column) => {
346
+ const cols = columnTypes.get(table);
347
+ if (cols === undefined) {
348
+ throw new Error(`litedbmodel type system (spec §4.1): table '${table}' has no inline column-type declaration ` +
349
+ `(the model's \`columns\` map). Declare it (\`static columns = { ${table}: { … } }\`) so its ` +
350
+ `SELECT projection can be typed. Known tables: ${[...columnTypes.keys()].join(', ') || '<none>'}. No-assume, no-fallback.`);
351
+ }
352
+ const sqlType = cols.get(column);
353
+ if (sqlType === undefined) {
354
+ throw new Error(`litedbmodel type system (spec §4.1): column '${column}' not declared on table '${table}' ` +
355
+ `(declared: ${[...cols.keys()].join(', ')}). Add it to the model's inline \`columns\`. No-assume, no-fallback.`);
356
+ }
357
+ return sqlType;
358
+ };
359
+ }
360
+ /** {@link sqlTypeToMaterializeClass} but TOLERANT: returns `undefined` for an unknown SQL type. */
361
+ function materializeClassOrUndefined(sqlType) {
362
+ try {
363
+ return sqlTypeToMaterializeClass(sqlType);
364
+ }
365
+ catch {
366
+ return undefined;
367
+ }
368
+ }
82
369
  /**
83
370
  * Parse a list of `CREATE TABLE` DDL statements into a `table → (column → SQL type)` map. This is
84
371
  * the spec §4.1 SoT: the physical SQL type of each column, from which `sqlTypeToBcScalar` derives
@@ -1 +1 @@
1
- {"version":3,"file":"coltype.js","sourceRoot":"","sources":["../../src/scp/coltype.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coltype.js","sourceRoot":"","sources":["../../src/scp/coltype.ts"],"names":[],"mappings":"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"}