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.
- package/README.md +89 -79
- package/dist/Column.d.ts +17 -9
- package/dist/Column.d.ts.map +1 -1
- package/dist/Column.js +39 -4
- package/dist/Column.js.map +1 -1
- package/dist/DBModel.d.ts +39 -16
- package/dist/DBModel.d.ts.map +1 -1
- package/dist/DBModel.js +69 -41
- package/dist/DBModel.js.map +1 -1
- package/dist/SqlFragment.d.ts +118 -0
- package/dist/SqlFragment.d.ts.map +1 -0
- package/dist/SqlFragment.js +237 -0
- package/dist/SqlFragment.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/docs/COMPARISON.md +25 -20
- package/docs/sql-tagged-template.md +259 -0
- package/package.json +1 -1
|
@@ -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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,EACL,OAAO,EACP,qBAAqB,EACrB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,SAAS,EACT,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,2BAA2B,EAC3B,uBAAuB,EAAE,gDAAgD;AACzE,KAAK,QAAQ,EACb,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,EAAE,EAAE,IAAI,SAAS,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAMpJ,OAAO,EACL,OAAO,EACP,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,WAAW,EACX,YAAY,EACZ,cAAc,EACd,UAAU,EACV,SAAS,EAET,MAAM,EACN,WAAW,EAEX,UAAU,EACV,QAAQ,EACR,WAAW,EACX,KAAK,iBAAiB,EAEtB,MAAM,EACN,SAAS,EACT,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,SAAS,EACT,KAAK,EACL,WAAW,EACX,SAAS,EACT,SAAS,EAET,MAAM,EACN,MAAM,EACN,QAAQ,EACR,QAAQ,GACT,MAAM,YAAY,CAAC;AAMpB,OAAO,EACL,KAAK,MAAM,EACX,YAAY,EACZ,QAAQ,EACR,KAAK,SAAS,EACd,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,MAAM,EACN,UAAU,EACV,WAAW,EACX,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,SAAS,EACd,aAAa,EACb,cAAc,EAEd,KAAK,EAAE,EACP,KAAK,GAAG,EACR,aAAa,EAEb,IAAI,EACJ,KAAK,QAAQ,EAEb,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,QAAQ,EACR,aAAa,GACd,MAAM,UAAU,CAAC;
|
|
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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"}
|
package/docs/COMPARISON.md
CHANGED
|
@@ -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 |
|
|
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
|
-
-
|
|
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** |
|
|
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],
|
|
387
|
-
[`${User.age} > ?`, 18],
|
|
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
|
|
481
|
+
| **Condition Check** | ✅ Full | ✅ Full | ⚠️ Partial | ✅ Full | ✅ Full |
|
|
479
482
|
| **Result Types** | ✅ Model types | ✅ Generated | ✅ Entity types | ✅ Inferred | ✅ Inferred |
|
|
480
|
-
| **Compile-Time** |
|
|
483
|
+
| **Compile-Time** | ✅ Full† | ✅ | ⚠️ | ✅ | ✅ |
|
|
481
484
|
|
|
482
|
-
*† litedbmodel's type safety
|
|
485
|
+
*† litedbmodel's compile-time type safety covers both patterns:*
|
|
483
486
|
- *`[Column, value]` tuples: Compile-time type checking via Column symbols*
|
|
484
|
-
-
|
|
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.
|
|
1156
|
-
3. **
|
|
1157
|
-
4. **
|
|
1158
|
-
5. **
|
|
1159
|
-
6. **
|
|
1160
|
-
7. **
|
|
1161
|
-
8. **
|
|
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
|
|