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.
- package/README.md +7 -0
- package/dist/DBConditions.d.ts.map +1 -1
- package/dist/DBConditions.js +16 -1
- package/dist/DBConditions.js.map +1 -1
- package/dist/DBHandler.d.ts.map +1 -1
- package/dist/DBHandler.js +6 -0
- package/dist/DBHandler.js.map +1 -1
- package/dist/DBModel.d.ts +84 -2
- package/dist/DBModel.d.ts.map +1 -1
- package/dist/DBModel.js +312 -29
- package/dist/DBModel.js.map +1 -1
- package/dist/decorators.d.ts +52 -0
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +127 -24
- package/dist/decorators.js.map +1 -1
- package/dist/drivers/mysql.d.ts.map +1 -1
- package/dist/drivers/mysql.js +12 -2
- package/dist/drivers/mysql.js.map +1 -1
- package/dist/drivers/postgres.d.ts.map +1 -1
- package/dist/drivers/postgres.js +13 -2
- package/dist/drivers/postgres.js.map +1 -1
- package/dist/drivers/sqlite.d.ts +2 -0
- package/dist/drivers/sqlite.d.ts.map +1 -1
- package/dist/drivers/sqlite.js +49 -4
- package/dist/drivers/sqlite.js.map +1 -1
- package/dist/index.cjs +10741 -0
- package/dist/index.d.cts +1 -0
- package/dist/scp/coltype.d.ts +108 -0
- package/dist/scp/coltype.d.ts.map +1 -1
- package/dist/scp/coltype.js +293 -6
- package/dist/scp/coltype.js.map +1 -1
- package/dist/scp/connection-routing.d.ts +312 -0
- package/dist/scp/connection-routing.d.ts.map +1 -0
- package/dist/scp/connection-routing.js +394 -0
- package/dist/scp/connection-routing.js.map +1 -0
- package/dist/scp/dbmodel-runtime.d.ts +101 -0
- package/dist/scp/dbmodel-runtime.d.ts.map +1 -0
- package/dist/scp/dbmodel-runtime.js +174 -0
- package/dist/scp/dbmodel-runtime.js.map +1 -0
- package/dist/scp/decorator-adapter.d.ts +196 -0
- package/dist/scp/decorator-adapter.d.ts.map +1 -0
- package/dist/scp/decorator-adapter.js +286 -0
- package/dist/scp/decorator-adapter.js.map +1 -0
- package/dist/scp/emit/emitter.d.ts +108 -0
- package/dist/scp/emit/emitter.d.ts.map +1 -0
- package/dist/scp/emit/emitter.js +782 -0
- package/dist/scp/emit/emitter.js.map +1 -0
- package/dist/scp/emit/endpoint.d.ts +248 -0
- package/dist/scp/emit/endpoint.d.ts.map +1 -0
- package/dist/scp/emit/endpoint.js +20 -0
- package/dist/scp/emit/endpoint.js.map +1 -0
- package/dist/scp/emit/index.d.ts +11 -0
- package/dist/scp/emit/index.d.ts.map +1 -0
- package/dist/scp/emit/index.js +13 -0
- package/dist/scp/emit/index.js.map +1 -0
- package/dist/scp/errors.d.ts +45 -1
- package/dist/scp/errors.d.ts.map +1 -1
- package/dist/scp/errors.js +47 -1
- package/dist/scp/errors.js.map +1 -1
- package/dist/scp/exec-context.d.ts +390 -0
- package/dist/scp/exec-context.d.ts.map +1 -0
- package/dist/scp/exec-context.js +540 -0
- package/dist/scp/exec-context.js.map +1 -0
- package/dist/scp/grouping.d.ts +32 -0
- package/dist/scp/grouping.d.ts.map +1 -0
- package/dist/scp/grouping.js +0 -0
- package/dist/scp/grouping.js.map +1 -0
- package/dist/scp/index.cjs +6432 -17579
- package/dist/scp/index.d.cts +1 -0
- package/dist/scp/index.d.mts +1 -0
- package/dist/scp/index.d.ts +51 -52
- package/dist/scp/index.d.ts.map +1 -1
- package/dist/scp/index.js +189 -152
- package/dist/scp/index.js.map +1 -1
- package/dist/scp/index.mjs +6067 -3659
- package/dist/scp/leaf-transport.d.ts +50 -0
- package/dist/scp/leaf-transport.d.ts.map +1 -0
- package/dist/scp/leaf-transport.js +92 -0
- package/dist/scp/leaf-transport.js.map +1 -0
- package/dist/scp/leaves.d.ts +174 -0
- package/dist/scp/leaves.d.ts.map +1 -0
- package/dist/scp/leaves.js +287 -0
- package/dist/scp/leaves.js.map +1 -0
- package/dist/scp/limit-config.d.ts +118 -0
- package/dist/scp/limit-config.d.ts.map +1 -0
- package/dist/scp/limit-config.js +126 -0
- package/dist/scp/limit-config.js.map +1 -0
- package/dist/scp/makesql/compile-relation.d.ts +49 -23
- package/dist/scp/makesql/compile-relation.d.ts.map +1 -1
- package/dist/scp/makesql/compile-relation.js +101 -76
- package/dist/scp/makesql/compile-relation.js.map +1 -1
- package/dist/scp/makesql/compile-select.d.ts +45 -10
- package/dist/scp/makesql/compile-select.d.ts.map +1 -1
- package/dist/scp/makesql/compile-select.js +50 -10
- package/dist/scp/makesql/compile-select.js.map +1 -1
- package/dist/scp/makesql/handler.d.ts +1 -1
- package/dist/scp/makesql/handler.d.ts.map +1 -1
- package/dist/scp/makesql/index.d.ts +7 -10
- package/dist/scp/makesql/index.d.ts.map +1 -1
- package/dist/scp/makesql/index.js +19 -30
- package/dist/scp/makesql/index.js.map +1 -1
- package/dist/scp/makesql/json-array.d.ts +65 -0
- package/dist/scp/makesql/json-array.d.ts.map +1 -1
- package/dist/scp/makesql/json-array.js +99 -10
- package/dist/scp/makesql/json-array.js.map +1 -1
- package/dist/scp/makesql/json-batch.d.ts.map +1 -1
- package/dist/scp/makesql/json-batch.js +21 -19
- package/dist/scp/makesql/json-batch.js.map +1 -1
- package/dist/scp/makesql/makesql.d.ts +1 -1
- package/dist/scp/makesql/makesql.d.ts.map +1 -1
- package/dist/scp/makesql/mysql-returning.d.ts +93 -0
- package/dist/scp/makesql/mysql-returning.d.ts.map +1 -0
- package/dist/scp/makesql/mysql-returning.js +215 -0
- package/dist/scp/makesql/mysql-returning.js.map +1 -0
- package/dist/scp/makesql/outtype.d.ts +75 -34
- package/dist/scp/makesql/outtype.d.ts.map +1 -1
- package/dist/scp/makesql/outtype.js +91 -118
- package/dist/scp/makesql/outtype.js.map +1 -1
- package/dist/scp/makesql/pool-executor.d.ts +135 -13
- package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
- package/dist/scp/makesql/pool-executor.js +229 -21
- package/dist/scp/makesql/pool-executor.js.map +1 -1
- package/dist/scp/makesql/tx.d.ts +107 -22
- package/dist/scp/makesql/tx.d.ts.map +1 -1
- package/dist/scp/makesql/tx.js +451 -97
- package/dist/scp/makesql/tx.js.map +1 -1
- package/dist/scp/makesql/writeouttype.d.ts +7 -8
- package/dist/scp/makesql/writeouttype.d.ts.map +1 -1
- package/dist/scp/makesql/writeouttype.js +8 -7
- package/dist/scp/makesql/writeouttype.js.map +1 -1
- package/dist/scp/middleware.d.ts +287 -0
- package/dist/scp/middleware.d.ts.map +1 -0
- package/dist/scp/middleware.js +358 -0
- package/dist/scp/middleware.js.map +1 -0
- package/dist/scp/relation.d.ts +80 -9
- package/dist/scp/relation.d.ts.map +1 -1
- package/dist/scp/relation.js +198 -78
- package/dist/scp/relation.js.map +1 -1
- package/dist/scp/tx-options.d.ts +136 -0
- package/dist/scp/tx-options.d.ts.map +1 -0
- package/dist/scp/tx-options.js +184 -0
- package/dist/scp/tx-options.js.map +1 -0
- package/dist/scp/write-bundle.d.ts +131 -0
- package/dist/scp/write-bundle.d.ts.map +1 -0
- package/dist/scp/write-bundle.js +160 -0
- package/dist/scp/write-bundle.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/docs/BENCHMARK.md +58 -56
- package/docs/benchmark-chart.svg +166 -166
- package/docs/design/phase-a-execution-context.md +139 -0
- package/package.json +16 -9
- package/dist/scp/authoring-sql.d.ts +0 -134
- package/dist/scp/authoring-sql.d.ts.map +0 -1
- package/dist/scp/authoring-sql.js +0 -191
- package/dist/scp/authoring-sql.js.map +0 -1
- package/dist/scp/authoring.d.ts +0 -155
- package/dist/scp/authoring.d.ts.map +0 -1
- package/dist/scp/authoring.js +0 -162
- package/dist/scp/authoring.js.map +0 -1
- package/dist/scp/catalog.d.ts +0 -94
- package/dist/scp/catalog.d.ts.map +0 -1
- package/dist/scp/catalog.js +0 -234
- package/dist/scp/catalog.js.map +0 -1
- package/dist/scp/codegen.d.ts +0 -189
- package/dist/scp/codegen.d.ts.map +0 -1
- package/dist/scp/codegen.js +0 -421
- package/dist/scp/codegen.js.map +0 -1
- package/dist/scp/find-filter-guard.d.ts +0 -68
- package/dist/scp/find-filter-guard.d.ts.map +0 -1
- package/dist/scp/find-filter-guard.js +0 -88
- package/dist/scp/find-filter-guard.js.map +0 -1
- package/dist/scp/guard.d.ts +0 -43
- package/dist/scp/guard.d.ts.map +0 -1
- package/dist/scp/guard.js +0 -134
- package/dist/scp/guard.js.map +0 -1
- package/dist/scp/makesql/authoring-compile.d.ts +0 -90
- package/dist/scp/makesql/authoring-compile.d.ts.map +0 -1
- package/dist/scp/makesql/authoring-compile.js +0 -494
- package/dist/scp/makesql/authoring-compile.js.map +0 -1
- package/dist/scp/makesql/ir.d.ts +0 -42
- package/dist/scp/makesql/ir.d.ts.map +0 -1
- package/dist/scp/makesql/ir.js +0 -66
- package/dist/scp/makesql/ir.js.map +0 -1
- package/dist/scp/makesql/static-bundle.d.ts +0 -187
- package/dist/scp/makesql/static-bundle.d.ts.map +0 -1
- package/dist/scp/makesql/static-bundle.js +0 -1113
- package/dist/scp/makesql/static-bundle.js.map +0 -1
- package/dist/scp/runtime.d.ts +0 -242
- package/dist/scp/runtime.d.ts.map +0 -1
- package/dist/scp/runtime.js +0 -400
- package/dist/scp/runtime.js.map +0 -1
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './index.js';
|
package/dist/scp/coltype.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/scp/coltype.js
CHANGED
|
@@ -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
|
|
18
|
-
*
|
|
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
|
|
21
|
-
|
|
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
|
package/dist/scp/coltype.js.map
CHANGED
|
@@ -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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"}
|