litedbmodel 0.22.3 → 1.0.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.
@@ -0,0 +1,237 @@
1
+ "use strict";
2
+ /**
3
+ * litedbmodel - SQL Tagged Template Literal
4
+ *
5
+ * Provides a `sql` tagged template function for type-safe SQL fragments.
6
+ * Supports condition tuples (Pattern A/B), withQuery, QUERY, and execute.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.SqlRef = exports.SqlRaw = void 0;
12
+ exports.isSqlFragment = isSqlFragment;
13
+ exports.isSqlTypedFragment = isSqlTypedFragment;
14
+ exports.isSqlCondition = isSqlCondition;
15
+ exports.isAnySqlFragment = isAnySqlFragment;
16
+ exports.isSqlRaw = isSqlRaw;
17
+ exports.isSqlRef = isSqlRef;
18
+ exports.sql = sql;
19
+ const Column_1 = require("./Column");
20
+ const DBValues_1 = require("./DBValues");
21
+ /**
22
+ * Raw SQL string that bypasses parameterization.
23
+ * Created via `sql.raw()`. Only usable inside `sql` tagged templates.
24
+ */
25
+ class SqlRaw {
26
+ value;
27
+ _tag = 'SqlRaw';
28
+ constructor(value) {
29
+ this.value = value;
30
+ }
31
+ toString() {
32
+ return this.value;
33
+ }
34
+ }
35
+ exports.SqlRaw = SqlRaw;
36
+ /**
37
+ * Table-qualified column reference (e.g., `users.id`).
38
+ * Created via `sql.ref()`. Only usable inside `sql` tagged templates.
39
+ */
40
+ class SqlRef {
41
+ _tag = 'SqlRef';
42
+ tableName;
43
+ columnName;
44
+ constructor(column) {
45
+ this.tableName = column.tableName;
46
+ this.columnName = column.columnName;
47
+ }
48
+ toString() {
49
+ return `${this.tableName}.${this.columnName}`;
50
+ }
51
+ }
52
+ exports.SqlRef = SqlRef;
53
+ // ============================================
54
+ // Type Guards
55
+ // ============================================
56
+ function isSqlFragment(value) {
57
+ return (typeof value === 'object' &&
58
+ value !== null &&
59
+ '_tag' in value &&
60
+ value._tag === 'SqlFragment');
61
+ }
62
+ function isSqlTypedFragment(value) {
63
+ return (typeof value === 'object' &&
64
+ value !== null &&
65
+ '_tag' in value &&
66
+ value._tag === 'SqlTypedFragment');
67
+ }
68
+ function isSqlCondition(value) {
69
+ return (typeof value === 'object' &&
70
+ value !== null &&
71
+ '_tag' in value &&
72
+ value._tag === 'SqlCondition');
73
+ }
74
+ /**
75
+ * Matches any of SqlFragment, SqlTypedFragment, or SqlCondition.
76
+ */
77
+ function isAnySqlFragment(value) {
78
+ return isSqlFragment(value) || isSqlTypedFragment(value) || isSqlCondition(value);
79
+ }
80
+ function isSqlRaw(value) {
81
+ return value instanceof SqlRaw;
82
+ }
83
+ function isSqlRef(value) {
84
+ return value instanceof SqlRef;
85
+ }
86
+ // ============================================
87
+ // Internal helpers
88
+ // ============================================
89
+ function hasTableName(value) {
90
+ return (typeof value === 'object' &&
91
+ value !== null &&
92
+ 'TABLE_NAME' in value &&
93
+ typeof value.TABLE_NAME === 'string' &&
94
+ !(0, Column_1.isColumn)(value));
95
+ }
96
+ function isIdentifierLike(val) {
97
+ return ((0, Column_1.isColumn)(val) ||
98
+ hasTableName(val) ||
99
+ isSqlRaw(val) ||
100
+ isSqlRef(val) ||
101
+ val instanceof DBValues_1.DBParentRef);
102
+ }
103
+ /**
104
+ * Process a single interpolation value: append SQL part and collect params.
105
+ */
106
+ function processInterpolation(val, sqlParts, params) {
107
+ if ((0, Column_1.isColumn)(val)) {
108
+ sqlParts.push(val.columnName);
109
+ }
110
+ else if (hasTableName(val)) {
111
+ sqlParts.push(val.TABLE_NAME);
112
+ }
113
+ else if (isSqlRaw(val)) {
114
+ sqlParts.push(val.value);
115
+ }
116
+ else if (isSqlRef(val)) {
117
+ sqlParts.push(`${val.tableName}.${val.columnName}`);
118
+ }
119
+ else if (val instanceof DBValues_1.DBParentRef) {
120
+ sqlParts.push(`${val.tableName}.${val.columnName}`);
121
+ }
122
+ else if (isAnySqlFragment(val)) {
123
+ sqlParts.push(val.sql);
124
+ if ('params' in val && Array.isArray(val.params)) {
125
+ params.push(...val.params);
126
+ }
127
+ }
128
+ else if (Array.isArray(val)) {
129
+ if (val.length === 0) {
130
+ sqlParts.push('NULL');
131
+ }
132
+ else {
133
+ const placeholders = val.map(() => '?');
134
+ for (const v of val) {
135
+ params.push(v);
136
+ }
137
+ sqlParts.push(placeholders.join(', '));
138
+ }
139
+ }
140
+ else if (val === null || val === undefined) {
141
+ sqlParts.push('NULL');
142
+ }
143
+ else {
144
+ params.push(val);
145
+ sqlParts.push('?');
146
+ }
147
+ }
148
+ // Implementation
149
+ function sql(strings, ...values) {
150
+ // Analyze interpolated values
151
+ let firstColumn = null;
152
+ let columnCount = 0;
153
+ let valueCount = 0;
154
+ let otherIdentifierCount = 0;
155
+ for (const val of values) {
156
+ if ((0, Column_1.isColumn)(val)) {
157
+ columnCount++;
158
+ if (!firstColumn)
159
+ firstColumn = val;
160
+ }
161
+ else if (isIdentifierLike(val)) {
162
+ otherIdentifierCount++;
163
+ }
164
+ else if (isAnySqlFragment(val)) {
165
+ otherIdentifierCount++;
166
+ }
167
+ else {
168
+ valueCount++;
169
+ }
170
+ }
171
+ // Condition patterns: exactly 1 Column, no other identifiers, first interpolation is the Column
172
+ const isConditionPattern = columnCount === 1 && otherIdentifierCount === 0 && (0, Column_1.isColumn)(values[0]);
173
+ // Single Column, no values → SqlTypedFragment (Pattern A / IS NULL)
174
+ if (isConditionPattern && valueCount === 0 && values.length === 1) {
175
+ const col = values[0];
176
+ const sqlStr = strings[0] + col.columnName + strings[1];
177
+ return {
178
+ _tag: 'SqlTypedFragment',
179
+ sql: sqlStr,
180
+ params: [],
181
+ };
182
+ }
183
+ // Build SQL and params
184
+ const sqlParts = [];
185
+ const params = [];
186
+ for (let i = 0; i < strings.length; i++) {
187
+ sqlParts.push(strings[i]);
188
+ if (i < values.length) {
189
+ processInterpolation(values[i], sqlParts, params);
190
+ }
191
+ }
192
+ const sqlString = sqlParts.join('');
193
+ // Single Column + value(s) only → SqlCondition (Pattern B)
194
+ if (isConditionPattern && valueCount > 0) {
195
+ return {
196
+ _tag: 'SqlCondition',
197
+ sql: sqlString,
198
+ params,
199
+ };
200
+ }
201
+ // Default: SqlFragment
202
+ return {
203
+ _tag: 'SqlFragment',
204
+ sql: sqlString,
205
+ params,
206
+ };
207
+ }
208
+ // ============================================
209
+ // Helper methods on sql
210
+ // ============================================
211
+ /**
212
+ * Create a raw SQL string that is embedded directly (not parameterized).
213
+ * Use for dynamic SQL keywords like ORDER direction, DISTINCT, etc.
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * const direction = sql.raw(isAsc ? 'ASC' : 'DESC');
218
+ * sql`SELECT * FROM users ORDER BY name ${direction}`
219
+ * ```
220
+ */
221
+ sql.raw = function (value) {
222
+ return new SqlRaw(value);
223
+ };
224
+ /**
225
+ * Create a table-qualified column reference (e.g., `users.id`).
226
+ * Use for JOINs where table disambiguation is needed.
227
+ *
228
+ * @example
229
+ * ```typescript
230
+ * sql`SELECT ${sql.ref(User.id)}, ${sql.ref(Post.title)}
231
+ * FROM users JOIN posts ON ${sql.ref(User.id)} = ${sql.ref(Post.user_id)}`
232
+ * ```
233
+ */
234
+ sql.ref = function (column) {
235
+ return new SqlRef(column);
236
+ };
237
+ //# sourceMappingURL=SqlFragment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SqlFragment.js","sourceRoot":"","sources":["../src/SqlFragment.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -11,6 +11,7 @@ type DBConfig, type DBConnection, } from './DBHandler';
11
11
  export { DBConditions, DBOrConditions, and, or as _legacyOr, normalizeConditions, type ConditionObject, type ConditionValue } from './DBConditions';
12
12
  export { DBToken, DBImmediateValue, DBNullValue, DBNotNullValue, DBBoolValue, DBArrayValue, DBDynamicValue, DBRawValue, DBTupleIn, DBCast, DBCastArray, DBSubquery, DBExists, DBParentRef, type SubqueryCondition, dbNull, dbNotNull, dbTrue, dbFalse, dbNow, dbIn, dbDynamic, dbRaw, dbImmediate, dbTupleIn, parentRef, dbCast, dbUuid, dbCastIn, dbUuidIn, } from './DBValues';
13
13
  export { type Column, createColumn, isColumn, type ColumnsOf, type ColumnOf, type ModelOfColumn, Values, Conditions, OrderColumn, isOrderColumn, type OrderColumnOf, type OrderSpec, orderToString, columnsToNames, type CV, type CVs, pairsToRecord, SKIP, type SkipType, type Cond, type CondOf, type CondElement, type CondElementOf, type Conds, type CondsOf, type OrCond, type OrCondOf, isOrCond, condsToRecord, } from './Column';
14
+ export { sql, type SqlFragment, type SqlTypedFragment, type SqlCondition, type SqlInterpolation, SqlRaw, SqlRef, isSqlFragment, isSqlTypedFragment, isSqlCondition, isAnySqlFragment, isSqlRaw, isSqlRef, } from './SqlFragment';
14
15
  export { model, column, hasMany, belongsTo, hasOne, getColumnMeta, getRelationMeta, getModelColumnNames, getModelPropertyNames, type ColumnOptions, type ColumnMeta, type RelationMeta, type RelationType, type KeyPair, type CompositeKeyPairs, type KeysFactory, type RelationDecoratorOptions, } from './decorators';
15
16
  export { castToDatetime, castToBoolean, castToIntegerArray, castToNumericArray, castToStringArray, castToBooleanArray, castToDatetimeArray, castToJson, getTypeCast, setTypeCastImpl, resetTypeCastImpl, type TypeCastFunctions, } from './TypeCast';
16
17
  export { LazyRelationContext, createRelationContext, preloadRelations, type RelationConfig, } from './LazyRelation';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -8,7 +8,7 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.OrderColumn = exports.Conditions = exports.Values = exports.isColumn = exports.createColumn = exports.dbUuidIn = exports.dbCastIn = exports.dbUuid = exports.dbCast = exports.parentRef = exports.dbTupleIn = exports.dbImmediate = exports.dbRaw = exports.dbDynamic = exports.dbIn = exports.dbNow = exports.dbFalse = exports.dbTrue = exports.dbNotNull = exports.dbNull = exports.DBParentRef = exports.DBExists = exports.DBSubquery = exports.DBCastArray = exports.DBCast = exports.DBTupleIn = exports.DBRawValue = exports.DBDynamicValue = exports.DBArrayValue = exports.DBBoolValue = exports.DBNotNullValue = exports.DBNullValue = exports.DBImmediateValue = exports.DBToken = exports.normalizeConditions = exports._legacyOr = exports.and = exports.DBOrConditions = exports.DBConditions = exports.createHandlerWithClient = exports.createHandlerWithConnection = exports.getDBConfig = exports.getDBHandler = exports.initDBHandler = exports.closeAllPools = exports.DBHandler = exports.getTransactionClient = exports.getTransactionConnection = exports.getTransactionContext = exports.DBModel = void 0;
11
- exports.createSqliteDriver = exports.SqliteDriver = exports.createPostgresDriver = exports.PostgresDriver = exports.WriteInReadOnlyContextError = exports.WriteOutsideTransactionError = exports.LimitExceededError = exports.StatisticsMiddleware = exports.createMiddleware = exports.Middleware = exports.LazyLoadingDBModel = exports.preloadRelations = exports.createRelationContext = exports.LazyRelationContext = exports.resetTypeCastImpl = exports.setTypeCastImpl = exports.getTypeCast = exports.castToJson = exports.castToDatetimeArray = exports.castToBooleanArray = exports.castToStringArray = exports.castToNumericArray = exports.castToIntegerArray = exports.castToBoolean = exports.castToDatetime = exports.getModelPropertyNames = exports.getModelColumnNames = exports.getRelationMeta = exports.getColumnMeta = exports.hasOne = exports.belongsTo = exports.hasMany = exports.column = exports.model = exports.condsToRecord = exports.isOrCond = exports.SKIP = exports.pairsToRecord = exports.columnsToNames = exports.orderToString = exports.isOrderColumn = void 0;
11
+ exports.createSqliteDriver = exports.SqliteDriver = exports.createPostgresDriver = exports.PostgresDriver = exports.WriteInReadOnlyContextError = exports.WriteOutsideTransactionError = exports.LimitExceededError = exports.StatisticsMiddleware = exports.createMiddleware = exports.Middleware = exports.LazyLoadingDBModel = exports.preloadRelations = exports.createRelationContext = exports.LazyRelationContext = exports.resetTypeCastImpl = exports.setTypeCastImpl = exports.getTypeCast = exports.castToJson = exports.castToDatetimeArray = exports.castToBooleanArray = exports.castToStringArray = exports.castToNumericArray = exports.castToIntegerArray = exports.castToBoolean = exports.castToDatetime = exports.getModelPropertyNames = exports.getModelColumnNames = exports.getRelationMeta = exports.getColumnMeta = exports.hasOne = exports.belongsTo = exports.hasMany = exports.column = exports.model = exports.isSqlRef = exports.isSqlRaw = exports.isAnySqlFragment = exports.isSqlCondition = exports.isSqlTypedFragment = exports.isSqlFragment = exports.SqlRef = exports.SqlRaw = exports.sql = exports.condsToRecord = exports.isOrCond = exports.SKIP = exports.pairsToRecord = exports.columnsToNames = exports.orderToString = exports.isOrderColumn = void 0;
12
12
  // ============================================
13
13
  // Core Classes
14
14
  // ============================================
@@ -85,6 +85,19 @@ Object.defineProperty(exports, "pairsToRecord", { enumerable: true, get: functio
85
85
  Object.defineProperty(exports, "SKIP", { enumerable: true, get: function () { return Column_1.SKIP; } });
86
86
  Object.defineProperty(exports, "isOrCond", { enumerable: true, get: function () { return Column_1.isOrCond; } });
87
87
  Object.defineProperty(exports, "condsToRecord", { enumerable: true, get: function () { return Column_1.condsToRecord; } });
88
+ // ============================================
89
+ // SQL Tagged Template Literal
90
+ // ============================================
91
+ var SqlFragment_1 = require("./SqlFragment");
92
+ Object.defineProperty(exports, "sql", { enumerable: true, get: function () { return SqlFragment_1.sql; } });
93
+ Object.defineProperty(exports, "SqlRaw", { enumerable: true, get: function () { return SqlFragment_1.SqlRaw; } });
94
+ Object.defineProperty(exports, "SqlRef", { enumerable: true, get: function () { return SqlFragment_1.SqlRef; } });
95
+ Object.defineProperty(exports, "isSqlFragment", { enumerable: true, get: function () { return SqlFragment_1.isSqlFragment; } });
96
+ Object.defineProperty(exports, "isSqlTypedFragment", { enumerable: true, get: function () { return SqlFragment_1.isSqlTypedFragment; } });
97
+ Object.defineProperty(exports, "isSqlCondition", { enumerable: true, get: function () { return SqlFragment_1.isSqlCondition; } });
98
+ Object.defineProperty(exports, "isAnySqlFragment", { enumerable: true, get: function () { return SqlFragment_1.isAnySqlFragment; } });
99
+ Object.defineProperty(exports, "isSqlRaw", { enumerable: true, get: function () { return SqlFragment_1.isSqlRaw; } });
100
+ Object.defineProperty(exports, "isSqlRef", { enumerable: true, get: function () { return SqlFragment_1.isSqlRef; } });
88
101
  var decorators_1 = require("./decorators");
89
102
  Object.defineProperty(exports, "model", { enumerable: true, get: function () { return decorators_1.model; } });
90
103
  Object.defineProperty(exports, "column", { enumerable: true, get: function () { return decorators_1.column; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -12,7 +12,7 @@ A detailed comparison of litedbmodel with popular TypeScript/JavaScript ORMs.
12
12
  | | Migrations | Manual | Manual | Kit (optional) | Built-in | Built-in | Built-in | Built-in | Knex |
13
13
  | **Query API** | Primary query style | Tuple array | Fluent QB | Fluent QB | QB / Find | Fluent client | QB / EM | Fluent | Fluent |
14
14
  | | Raw SQL escape hatch† | ✅ `query()` | ⚠️ `sql` | ⚠️ `sql` | ⚠️ `query()` | ⚠️ `$queryRaw` | ⚠️ `execute()` | ⚠️ `query()` | ⚠️ `raw()` |
15
- | **Type Safety**†† | Compile-time type safety | ⚠️ partial | ✅ | ✅ | ⚠️ partial | ✅ | ⚠️ partial | ❌ runtime-heavy | ⚠️ partial |
15
+ | **Type Safety**†† | Compile-time type safety | ✅ | ✅ | ✅ | ⚠️ partial | ✅ | ⚠️ partial | ❌ runtime-heavy | ⚠️ partial |
16
16
  | **Column Refs**‡ | How columns are referenced | **Symbols** | String literals | Column objects | Strings/decorators | Object keys | Strings | Strings | Strings |
17
17
  | **IDE Support**§ | Refactoring safety (IDE) | ✅ Full | ❌ | ⚠️ Partial | ❌ | ❌ | ❌ | ❌ | ❌ |
18
18
  | **Updates** | Declarative partial update | ✅ **SKIP** | ❌ manual | ❌ manual | ❌ manual | ⚠️ `undefined` | ❌ manual | ❌ manual | ❌ manual |
@@ -52,7 +52,8 @@ Whether the *tool's standard relation API* fetches nested relations in a single
52
52
 
53
53
  **†† Type safety (litedbmodel):**
54
54
  - `[Column, value]` tuples: **Compile-time** type checking via Column symbols
55
- - Operator expressions (`` [`${Model.col} > ?`, val] ``): **ESLint plugin** checks column references (not compile-time)
55
+ - ``sql`` tagged template conditions (``[sql`${Col} > ?`, val]``): **Compile-time** type checking — the ``sql`` tag preserves the Column's value type
56
+ - ESLint plugin provides additional SQL syntax and cross-model validation
56
57
 
57
58
  **\*\* DB portability:**
58
59
  - **Multi-DB** = databases the tool can talk to
@@ -106,6 +107,7 @@ class UserModel extends DBModel {
106
107
  }
107
108
 
108
109
  // Migrations: Manual SQL files
110
+ // Code generation: litedbmodel-gen generates @column() from schema.sql (optional)
109
111
  ```
110
112
 
111
113
  ### Prisma
@@ -156,7 +158,7 @@ drizzle-kit generate:pg
156
158
  |---------|-------------|--------|---------|---------|--------|
157
159
  | **Schema Format** | TS Decorators | Prisma DSL | TS Decorators | TS Schema | TS Interface |
158
160
  | **Migration Tool** | Manual | Built-in | Built-in | drizzle-kit | Manual |
159
- | **Auto-Generate** | ❌ | ✅ | ✅ | ✅ | ❌ |
161
+ | **Auto-Generate** | ⚠️ [litedbmodel-gen](https://www.npmjs.com/package/litedbmodel-gen) | ✅ | ✅ | ✅ | ❌ |
160
162
  | **Reversible** | Manual | ✅ | ✅ | ⚠️ | Manual |
161
163
 
162
164
  ---
@@ -175,7 +177,7 @@ const users = await User.find([
175
177
  [User.is_active, true],
176
178
  User.or(
177
179
  [[User.role, 'admin']],
178
- [[User.role, 'moderator'], [`${User.level} >= ?`, 5]],
180
+ [[User.role, 'moderator'], [sql`${User.level} >= ?`, 5]],
179
181
  ),
180
182
  ]);
181
183
 
@@ -352,7 +354,7 @@ const users = await User.query(`
352
354
  | Scenario | litedbmodel | Query Builder ORMs |
353
355
  |----------|-------------|-------------------|
354
356
  | **Simple CRUD** | Tuple API: `[[User.name, 'John']]` | Object: `{ name: 'John' }` |
355
- | **Complex WHERE** | SQL operators: `` [`${User.age} > ?`, 18] `` | DSL methods: `.where('age', '>', 18)` |
357
+ | **Complex WHERE** | `sql` tag: `` [sql`${User.age} > ?`, 18] `` | DSL methods: `.where('age', '>', 18)` |
356
358
  | **JOINs, CTEs** | Real SQL via `query()` or Query-Based Models | Limited DSL or raw escape |
357
359
  | **Debugging** | See actual SQL | Translate DSL → SQL mentally |
358
360
  | **Learning** | Know SQL = Ready | Learn DSL + SQL |
@@ -369,9 +371,9 @@ const users = await User.query(`
369
371
 
370
372
  ## 5. Type Safety
371
373
 
372
- ### litedbmodel - Compile-time (Column Symbols)
374
+ ### litedbmodel - Compile-time (Column Symbols + `sql` Tag)
373
375
 
374
- Type derived from decorators, checked via Column symbol references.
376
+ Type derived from decorators, checked via Column symbol references and `sql` tagged template.
375
377
 
376
378
  ```typescript
377
379
  // Compile-time validation via Column symbols
@@ -383,8 +385,9 @@ await User.create([
383
385
 
384
386
  // Conditions also type-checked
385
387
  await User.find([
386
- [User.id, 1], // ✅ Compile-time (Column symbol)
387
- [`${User.age} > ?`, 18], // ✅ ESLint checks column reference
388
+ [User.id, 1], // ✅ Compile-time (Column symbol)
389
+ [sql`${User.age} > ?`, 18], // ✅ Compile-time (sql tag preserves Column value type)
390
+ // [sql`${User.age} > ?`, 'x'], // ❌ Compile error (string not assignable to number)
388
391
  ]);
389
392
  ```
390
393
 
@@ -475,13 +478,14 @@ const users = await db
475
478
  | Feature | litedbmodel | Prisma | TypeORM | Drizzle | Kysely |
476
479
  |---------|-------------|--------|---------|---------|--------|
477
480
  | **Type Source** | Decorators → Symbols | .prisma → Generated | Decorators | TS Schema | TS Interface |
478
- | **Condition Check** | ✅ Full† | ✅ Full | ⚠️ Partial | ✅ Full | ✅ Full |
481
+ | **Condition Check** | ✅ Full | ✅ Full | ⚠️ Partial | ✅ Full | ✅ Full |
479
482
  | **Result Types** | ✅ Model types | ✅ Generated | ✅ Entity types | ✅ Inferred | ✅ Inferred |
480
- | **Compile-Time** | ⚠️ Partial† | ✅ | ⚠️ | ✅ | ✅ |
483
+ | **Compile-Time** | ✅ Full† | ✅ | ⚠️ | ✅ | ✅ |
481
484
 
482
- *† litedbmodel's type safety is split between compile-time and ESLint:*
485
+ *† litedbmodel's compile-time type safety covers both patterns:*
483
486
  - *`[Column, value]` tuples: Compile-time type checking via Column symbols*
484
- - *Operator expressions (`` [`${Model.col} > ?`, val] ``): ESLint plugin checks column references (not compile-time)*
487
+ - *`[sql\`${Col} > ?\`, val]` tuples: Compile-time type checking — the `sql` tag preserves the Column's value type*
488
+ - *ESLint plugin provides additional SQL syntax validation and cross-model column checking*
485
489
 
486
490
  ---
487
491
 
@@ -1152,13 +1156,14 @@ For detailed benchmark results comparing litedbmodel with Prisma, Kysely, Drizzl
1152
1156
  ### litedbmodel's Characteristics
1153
1157
 
1154
1158
  1. **Symbol-Based Columns**: IDE "Find References" and "Rename Symbol" work
1155
- 2. **SKIP Sentinel**: Declarative conditional fields without if-statements
1156
- 3. **Minimal Footprint**: 60KB minified, no binary dependencies
1157
- 4. **Middleware**: Cross-cutting concern support (logging, auth, metrics)
1158
- 5. **Auto N+1 Prevention**: Batch loading enabled automatically for multiple records
1159
- 6. **Composite Key Support**: Full support for composite keys in relations
1160
- 7. **Fixed SQL Parameters**: `ANY()` and `unnest()` keep parameter count constant
1161
- 8. **Readable SQL**: Simple, debuggable queries (no hash aliases or deep nesting)
1159
+ 2. **`sql` Tagged Template**: Type-safe operator conditions and parameterized queries
1160
+ 3. **SKIP Sentinel**: Declarative conditional fields without if-statements
1161
+ 4. **Minimal Footprint**: 60KB minified, no binary dependencies
1162
+ 5. **Middleware**: Cross-cutting concern support (logging, auth, metrics)
1163
+ 6. **Auto N+1 Prevention**: Batch loading enabled automatically for multiple records
1164
+ 7. **Composite Key Support**: Full support for composite keys in relations
1165
+ 8. **Fixed SQL Parameters**: `ANY()` and `unnest()` keep parameter count constant
1166
+ 9. **Readable SQL**: Simple, debuggable queries (no hash aliases or deep nesting)
1162
1167
 
1163
1168
  ### Trade-offs
1164
1169