@cicctencent/json-orm 0.1.1

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 (116) hide show
  1. package/README.md +154 -0
  2. package/dist/cjs/index.d.ts +25 -0
  3. package/dist/cjs/index.d.ts.map +1 -0
  4. package/dist/cjs/index.js +66 -0
  5. package/dist/cjs/index.js.map +1 -0
  6. package/dist/cjs/json-backend-fs.d.ts +26 -0
  7. package/dist/cjs/json-backend-fs.d.ts.map +1 -0
  8. package/dist/cjs/json-backend-fs.js +278 -0
  9. package/dist/cjs/json-backend-fs.js.map +1 -0
  10. package/dist/cjs/json-collection.d.ts +70 -0
  11. package/dist/cjs/json-collection.d.ts.map +1 -0
  12. package/dist/cjs/json-collection.js +385 -0
  13. package/dist/cjs/json-collection.js.map +1 -0
  14. package/dist/cjs/json-config.d.ts +87 -0
  15. package/dist/cjs/json-config.d.ts.map +1 -0
  16. package/dist/cjs/json-config.js +77 -0
  17. package/dist/cjs/json-config.js.map +1 -0
  18. package/dist/cjs/json-datasource.d.ts +35 -0
  19. package/dist/cjs/json-datasource.d.ts.map +1 -0
  20. package/dist/cjs/json-datasource.js +131 -0
  21. package/dist/cjs/json-datasource.js.map +1 -0
  22. package/dist/cjs/json-entity-meta.d.ts +42 -0
  23. package/dist/cjs/json-entity-meta.d.ts.map +1 -0
  24. package/dist/cjs/json-entity-meta.js +128 -0
  25. package/dist/cjs/json-entity-meta.js.map +1 -0
  26. package/dist/cjs/json-query-builder.d.ts +83 -0
  27. package/dist/cjs/json-query-builder.d.ts.map +1 -0
  28. package/dist/cjs/json-query-builder.js +477 -0
  29. package/dist/cjs/json-query-builder.js.map +1 -0
  30. package/dist/cjs/json-repository.d.ts +59 -0
  31. package/dist/cjs/json-repository.d.ts.map +1 -0
  32. package/dist/cjs/json-repository.js +309 -0
  33. package/dist/cjs/json-repository.js.map +1 -0
  34. package/dist/cjs/json-sql-expr.d.ts +107 -0
  35. package/dist/cjs/json-sql-expr.d.ts.map +1 -0
  36. package/dist/cjs/json-sql-expr.js +857 -0
  37. package/dist/cjs/json-sql-expr.js.map +1 -0
  38. package/dist/cjs/json-sql-select.d.ts +9 -0
  39. package/dist/cjs/json-sql-select.d.ts.map +1 -0
  40. package/dist/cjs/json-sql-select.js +434 -0
  41. package/dist/cjs/json-sql-select.js.map +1 -0
  42. package/dist/cjs/json-sql-shared.d.ts +16 -0
  43. package/dist/cjs/json-sql-shared.d.ts.map +1 -0
  44. package/dist/cjs/json-sql-shared.js +12 -0
  45. package/dist/cjs/json-sql-shared.js.map +1 -0
  46. package/dist/cjs/json-sql.d.ts +8 -0
  47. package/dist/cjs/json-sql.d.ts.map +1 -0
  48. package/dist/cjs/json-sql.js +322 -0
  49. package/dist/cjs/json-sql.js.map +1 -0
  50. package/dist/cjs/json-where.d.ts +54 -0
  51. package/dist/cjs/json-where.d.ts.map +1 -0
  52. package/dist/cjs/json-where.js +352 -0
  53. package/dist/cjs/json-where.js.map +1 -0
  54. package/dist/cjs/package.json +3 -0
  55. package/dist/esm/index.d.ts +25 -0
  56. package/dist/esm/index.d.ts.map +1 -0
  57. package/dist/esm/index.js +26 -0
  58. package/dist/esm/index.js.map +1 -0
  59. package/dist/esm/json-backend-fs.d.ts +26 -0
  60. package/dist/esm/json-backend-fs.d.ts.map +1 -0
  61. package/dist/esm/json-backend-fs.js +241 -0
  62. package/dist/esm/json-backend-fs.js.map +1 -0
  63. package/dist/esm/json-collection.d.ts +70 -0
  64. package/dist/esm/json-collection.d.ts.map +1 -0
  65. package/dist/esm/json-collection.js +346 -0
  66. package/dist/esm/json-collection.js.map +1 -0
  67. package/dist/esm/json-config.d.ts +87 -0
  68. package/dist/esm/json-config.d.ts.map +1 -0
  69. package/dist/esm/json-config.js +69 -0
  70. package/dist/esm/json-config.js.map +1 -0
  71. package/dist/esm/json-datasource.d.ts +35 -0
  72. package/dist/esm/json-datasource.d.ts.map +1 -0
  73. package/dist/esm/json-datasource.js +123 -0
  74. package/dist/esm/json-datasource.js.map +1 -0
  75. package/dist/esm/json-entity-meta.d.ts +42 -0
  76. package/dist/esm/json-entity-meta.d.ts.map +1 -0
  77. package/dist/esm/json-entity-meta.js +120 -0
  78. package/dist/esm/json-entity-meta.js.map +1 -0
  79. package/dist/esm/json-query-builder.d.ts +83 -0
  80. package/dist/esm/json-query-builder.d.ts.map +1 -0
  81. package/dist/esm/json-query-builder.js +473 -0
  82. package/dist/esm/json-query-builder.js.map +1 -0
  83. package/dist/esm/json-repository.d.ts +59 -0
  84. package/dist/esm/json-repository.d.ts.map +1 -0
  85. package/dist/esm/json-repository.js +304 -0
  86. package/dist/esm/json-repository.js.map +1 -0
  87. package/dist/esm/json-sql-expr.d.ts +107 -0
  88. package/dist/esm/json-sql-expr.d.ts.map +1 -0
  89. package/dist/esm/json-sql-expr.js +847 -0
  90. package/dist/esm/json-sql-expr.js.map +1 -0
  91. package/dist/esm/json-sql-select.d.ts +9 -0
  92. package/dist/esm/json-sql-select.d.ts.map +1 -0
  93. package/dist/esm/json-sql-select.js +429 -0
  94. package/dist/esm/json-sql-select.js.map +1 -0
  95. package/dist/esm/json-sql-shared.d.ts +16 -0
  96. package/dist/esm/json-sql-shared.d.ts.map +1 -0
  97. package/dist/esm/json-sql-shared.js +9 -0
  98. package/dist/esm/json-sql-shared.js.map +1 -0
  99. package/dist/esm/json-sql.d.ts +8 -0
  100. package/dist/esm/json-sql.d.ts.map +1 -0
  101. package/dist/esm/json-sql.js +319 -0
  102. package/dist/esm/json-sql.js.map +1 -0
  103. package/dist/esm/json-where.d.ts +54 -0
  104. package/dist/esm/json-where.d.ts.map +1 -0
  105. package/dist/esm/json-where.js +342 -0
  106. package/dist/esm/json-where.js.map +1 -0
  107. package/dist/esm/package.json +3 -0
  108. package/examples/01-basic-entity.ts +89 -0
  109. package/examples/02-query-builder.ts +114 -0
  110. package/examples/03-raw-sql.ts +105 -0
  111. package/examples/04-non-entity-table.ts +70 -0
  112. package/examples/05-custom-backend.ts +145 -0
  113. package/examples/06-find-operators.ts +75 -0
  114. package/examples/README.md +73 -0
  115. package/examples/tsconfig.json +20 -0
  116. package/package.json +53 -0
@@ -0,0 +1,473 @@
1
+ import { executeRawQuery } from "./json-sql.js";
2
+ import { resolveEntityMeta } from "./json-entity-meta.js";
3
+ import { isFindOperator } from "./json-where.js";
4
+ export class JsonQueryBuilder {
5
+ getSqlTable;
6
+ mode = 'select';
7
+ table;
8
+ meta = null;
9
+ alias;
10
+ selects = [];
11
+ distinctFlag = false;
12
+ conds = [];
13
+ orders = [];
14
+ groups = [];
15
+ joinsDef = [];
16
+ skipCount;
17
+ takeCount;
18
+ limitCount;
19
+ offsetCount;
20
+ named = {};
21
+ updateSet;
22
+ insertRows = [];
23
+ findOptionsWhere;
24
+ findOptionsOrder;
25
+ findOptionsSelect;
26
+ paramSeed = 0;
27
+ constructor(table, alias, getSqlTable) {
28
+ this.getSqlTable = getSqlTable;
29
+ this.alias = alias;
30
+ if (table)
31
+ this.setTable(table);
32
+ }
33
+ setTable(table) {
34
+ this.table = table;
35
+ const t = this.getSqlTable(table);
36
+ this.meta = t?.meta ?? null;
37
+ }
38
+ entityTable(entity) {
39
+ const meta = resolveEntityMeta(entity);
40
+ if (!meta) {
41
+ throw new Error(`[json-storage] QueryBuilder 实体未注册 @Entity:${entity.name}`);
42
+ }
43
+ return meta.tableName;
44
+ }
45
+ // ---------------- 链式 API ----------------
46
+ select(selection, selectionAlias) {
47
+ this.selects = this.composeSelect(selection, selectionAlias);
48
+ return this;
49
+ }
50
+ addSelect(selection, selectionAlias) {
51
+ this.selects.push(...this.composeSelect(selection, selectionAlias));
52
+ return this;
53
+ }
54
+ composeSelect(selection, selectionAlias) {
55
+ if (Array.isArray(selection))
56
+ return [...selection];
57
+ return selectionAlias ? [`${selection} AS ${selectionAlias}`] : [selection];
58
+ }
59
+ distinct(flag = true) {
60
+ this.distinctFlag = flag;
61
+ return this;
62
+ }
63
+ from(entity, alias) {
64
+ this.alias = alias;
65
+ this.setTable(this.entityTable(entity));
66
+ return this;
67
+ }
68
+ leftJoin(entity, alias, on) {
69
+ this.joinsDef.push({ table: this.entityTable(entity), alias, on, type: 'LEFT' });
70
+ return this;
71
+ }
72
+ innerJoin(entity, alias, on) {
73
+ this.joinsDef.push({ table: this.entityTable(entity), alias, on, type: 'INNER' });
74
+ return this;
75
+ }
76
+ where(where, params) {
77
+ return this.pushCond(where, params, 'AND');
78
+ }
79
+ andWhere(where, params) {
80
+ return this.pushCond(where, params, 'AND');
81
+ }
82
+ orWhere(where, params) {
83
+ return this.pushCond(where, params, 'OR');
84
+ }
85
+ pushCond(where, params, joiner) {
86
+ if (typeof where === 'string') {
87
+ this.conds.push({ sql: where, params, joiner });
88
+ }
89
+ else {
90
+ this.conds.push({ object: where, joiner });
91
+ }
92
+ return this;
93
+ }
94
+ setFindOptions(options) {
95
+ if (options.where)
96
+ this.findOptionsWhere = options.where;
97
+ if (options.order)
98
+ this.findOptionsOrder = options.order;
99
+ if (options.skip !== undefined)
100
+ this.skipCount = options.skip;
101
+ if (options.take !== undefined)
102
+ this.takeCount = options.take;
103
+ if (options.select)
104
+ this.findOptionsSelect = options.select;
105
+ return this;
106
+ }
107
+ orderBy(sort, order = 'ASC') {
108
+ this.orders.push({ col: sort, dir: order });
109
+ return this;
110
+ }
111
+ addOrderBy(sort, order = 'ASC') {
112
+ this.orders.push({ col: sort, dir: order });
113
+ return this;
114
+ }
115
+ groupBy(groupBy) {
116
+ this.groups.push(groupBy);
117
+ return this;
118
+ }
119
+ addGroupBy(groupBy) {
120
+ this.groups.push(groupBy);
121
+ return this;
122
+ }
123
+ skip(skip) {
124
+ this.skipCount = skip;
125
+ return this;
126
+ }
127
+ take(take) {
128
+ this.takeCount = take;
129
+ return this;
130
+ }
131
+ limit(limit) {
132
+ this.limitCount = limit;
133
+ return this;
134
+ }
135
+ offset(offset) {
136
+ this.offsetCount = offset;
137
+ return this;
138
+ }
139
+ setParameter(key, value) {
140
+ this.named[key] = value;
141
+ return this;
142
+ }
143
+ setParameters(parameters) {
144
+ this.named = { ...this.named, ...parameters };
145
+ return this;
146
+ }
147
+ update(entity) {
148
+ // entity 参数可省略(repo 级 QB 已知表);显式传入时校验并切换表
149
+ if (entity) {
150
+ this.setTable(this.entityTable(entity));
151
+ }
152
+ this.mode = 'update';
153
+ return this;
154
+ }
155
+ delete() {
156
+ this.mode = 'delete';
157
+ return this;
158
+ }
159
+ insert() {
160
+ this.mode = 'insert';
161
+ return this;
162
+ }
163
+ set(values) {
164
+ this.updateSet = values;
165
+ return this;
166
+ }
167
+ into(entity) {
168
+ this.setTable(this.entityTable(entity));
169
+ return this;
170
+ }
171
+ values(values) {
172
+ this.insertRows = Array.isArray(values) ? values : [values];
173
+ return this;
174
+ }
175
+ // ---------------- SQL 组装 ----------------
176
+ buildWhereClause() {
177
+ const params = { ...this.named };
178
+ // 按链式调用顺序分段:连续 AND 归入同一段,遇 OR 开启新段
179
+ // (此前把所有 AND / OR 分桶重组,会丢弃调用顺序:
180
+ // where(A).andWhere(B).orWhere(C).andWhere(D) 被拼成 (A AND B AND D) OR C)
181
+ const groups = [];
182
+ for (const cond of this.conds) {
183
+ const piece = this.condToSql(cond, params);
184
+ if (!piece)
185
+ continue;
186
+ if (cond.joiner === 'OR' || groups.length === 0)
187
+ groups.push([piece]);
188
+ else
189
+ groups[groups.length - 1].push(piece);
190
+ }
191
+ if (this.findOptionsWhere) {
192
+ const piece = this.objectWhereToSql(this.findOptionsWhere, params);
193
+ if (piece) {
194
+ // FindOptions 条件固定以 AND 追加在链式条件之后
195
+ if (groups.length === 0)
196
+ groups.push([piece]);
197
+ else
198
+ groups[groups.length - 1].push(piece);
199
+ }
200
+ }
201
+ const sql = groups.map(g => (g.length > 1 ? `(${g.join(' AND ')})` : g[0])).join(' OR ');
202
+ return { sql, params };
203
+ }
204
+ condToSql(cond, params) {
205
+ if (cond.sql !== undefined) {
206
+ if (cond.params)
207
+ Object.assign(params, cond.params);
208
+ return cond.sql;
209
+ }
210
+ if (cond.object) {
211
+ return this.objectWhereToSql(cond.object, params);
212
+ }
213
+ return '';
214
+ }
215
+ /** FindOptionsWhere 对象 → SQL(属性名 → `alias.列`,FindOperator 展开) */
216
+ objectWhereToSql(where, params) {
217
+ const list = Array.isArray(where) ? where : [where];
218
+ const ors = list.map(w => {
219
+ const ands = [];
220
+ for (const [prop, value] of Object.entries(w)) {
221
+ ands.push(this.predicateToSql(prop, value, params));
222
+ }
223
+ return ands.length > 0 ? (ands.length > 1 ? `(${ands.join(' AND ')})` : ands[0]) : '';
224
+ });
225
+ const sql = ors.filter(Boolean).join(' OR ');
226
+ return ors.length > 1 && sql ? `(${sql})` : sql;
227
+ }
228
+ predicateToSql(prop, value, params) {
229
+ const col = this.columnRef(prop);
230
+ if (isFindOperator(value)) {
231
+ return this.findOperatorToSql(col, value, params);
232
+ }
233
+ if (value === null) {
234
+ return `${col} IS NULL`;
235
+ }
236
+ const name = this.nextParam(params, value);
237
+ return `${col} = :${name}`;
238
+ }
239
+ findOperatorToSql(col, op, params) {
240
+ const type = op.type;
241
+ const value = op.value;
242
+ switch (type) {
243
+ case 'equal': {
244
+ if (value === null || value === undefined)
245
+ return `${col} IS NULL`;
246
+ return `${col} = :${this.nextParam(params, value)}`;
247
+ }
248
+ case 'not': {
249
+ // TypeORM FindOperator.value 是解包后的最终值;内层操作数须取 op.child
250
+ const child = op.child;
251
+ if (child)
252
+ return `NOT (${this.findOperatorToSql(col, child, params)})`;
253
+ const name = this.nextParam(params, op.value);
254
+ return `NOT (${col} = :${name})`;
255
+ }
256
+ case 'like':
257
+ return `${col} LIKE :${this.nextParam(params, value)}`;
258
+ case 'ilike':
259
+ return `LOWER(${col}) LIKE :${this.nextParam(params, String(value).toLowerCase())}`;
260
+ case 'in': {
261
+ const arr = Array.isArray(value) ? value : [value];
262
+ const name = this.nextParam(params, arr);
263
+ return `${col} IN (:...${name})`;
264
+ }
265
+ case 'any': {
266
+ const arr = Array.isArray(value) ? value : [value];
267
+ const name = this.nextParam(params, arr);
268
+ return `${col} IN (:...${name})`;
269
+ }
270
+ case 'between': {
271
+ const pair = value;
272
+ const n1 = this.nextParam(params, pair[0]);
273
+ const n2 = this.nextParam(params, pair[1]);
274
+ return `${col} BETWEEN :${n1} AND :${n2}`;
275
+ }
276
+ case 'lessThan':
277
+ return `${col} < :${this.nextParam(params, value)}`;
278
+ case 'lessThanOrEqual':
279
+ return `${col} <= :${this.nextParam(params, value)}`;
280
+ case 'moreThan':
281
+ return `${col} > :${this.nextParam(params, value)}`;
282
+ case 'moreThanOrEqual':
283
+ return `${col} >= :${this.nextParam(params, value)}`;
284
+ case 'isNull':
285
+ return `${col} IS NULL`;
286
+ case 'raw':
287
+ throw new Error('[json-storage] QueryBuilder 对象条件不支持 FindOperator.raw,请改用 SQL 字符串条件');
288
+ default:
289
+ throw new Error(`[json-storage] QueryBuilder 不支持的 FindOperator 类型:${type}`);
290
+ }
291
+ }
292
+ nextParam(params, value) {
293
+ this.paramSeed += 1;
294
+ const name = `qb_p${this.paramSeed}`;
295
+ params[name] = value;
296
+ return name;
297
+ }
298
+ /** 属性名或 DB 列名 → `alias.引用`(列名原样保留,由求值器经元数据映射) */
299
+ columnRef(prop) {
300
+ if (prop.includes('.'))
301
+ return prop;
302
+ return `${this.alias}.${prop}`;
303
+ }
304
+ buildSelectSql(count = false) {
305
+ if (!this.table) {
306
+ throw new Error('[json-storage] QueryBuilder 缺少 FROM 表(from()/createQueryBuilder(alias))');
307
+ }
308
+ const { sql: whereSql, params } = this.buildWhereClause();
309
+ let selectItems;
310
+ if (count) {
311
+ selectItems = ['COUNT(*) AS cnt'];
312
+ }
313
+ else if (this.selects.length > 0) {
314
+ selectItems = this.selects;
315
+ }
316
+ else if (this.findOptionsSelect && this.findOptionsSelect.length > 0) {
317
+ selectItems = this.findOptionsSelect.map(s => this.columnRef(s));
318
+ }
319
+ else {
320
+ selectItems = [`${this.alias}.*`];
321
+ }
322
+ let sql = `SELECT ${this.distinctFlag && !count ? 'DISTINCT ' : ''}${selectItems.join(', ')}`;
323
+ sql += ` FROM ${this.table} ${this.alias}`;
324
+ for (const j of this.joinsDef) {
325
+ sql += ` ${j.type} JOIN ${j.table} ${j.alias} ON ${j.on}`;
326
+ }
327
+ if (whereSql)
328
+ sql += ` WHERE ${whereSql}`;
329
+ if (!count) {
330
+ if (this.groups.length > 0)
331
+ sql += ` GROUP BY ${this.groups.join(', ')}`;
332
+ const orders = [...this.orders];
333
+ if (this.findOptionsOrder) {
334
+ for (const [col, dir] of Object.entries(this.findOptionsOrder)) {
335
+ orders.push({ col: this.columnRef(col), dir });
336
+ }
337
+ }
338
+ if (orders.length > 0) {
339
+ sql += ` ORDER BY ${orders.map(o => `${o.col} ${o.dir}`).join(', ')}`;
340
+ }
341
+ const offset = this.skipCount ?? this.offsetCount;
342
+ const limit = this.takeCount ?? this.limitCount;
343
+ if (limit !== undefined || offset !== undefined) {
344
+ sql += ` LIMIT ${offset ?? 0}, ${limit !== undefined ? limit : 18446744073709551615}`;
345
+ }
346
+ }
347
+ return { sql, params };
348
+ }
349
+ // ---------------- 执行 ----------------
350
+ async getRawMany() {
351
+ const { sql, params } = this.buildSelectSql();
352
+ return executeRawQuery(sql, params, this.getSqlTable);
353
+ }
354
+ async getRawOne() {
355
+ const rows = await this.getRawMany();
356
+ return rows[0] ?? undefined;
357
+ }
358
+ async getMany() {
359
+ // 未显式 select 时投影主表全部列(或 findOptions.select 列),再映射回属性名
360
+ const explicit = this.selects.length > 0;
361
+ const rows = await this.getRawMany();
362
+ if (explicit)
363
+ return rows;
364
+ return rows.map(r => this.mapColumnsToProperties(r));
365
+ }
366
+ async getOne() {
367
+ const rows = await this.getMany();
368
+ return rows[0] ?? null;
369
+ }
370
+ async getCount() {
371
+ const { sql, params } = this.buildSelectSql(true);
372
+ const rows = await executeRawQuery(sql, params, this.getSqlTable);
373
+ return Number(rows[0]?.cnt ?? 0);
374
+ }
375
+ async getManyAndCount() {
376
+ const [many, count] = await Promise.all([this.getMany(), this.getCount()]);
377
+ return [many, count];
378
+ }
379
+ async execute() {
380
+ if (this.mode === 'update') {
381
+ if (!this.table || !this.updateSet) {
382
+ throw new Error('[json-storage] update 查询缺少 set()/表定义');
383
+ }
384
+ const { sql: whereSql, params } = this.buildWhereClause();
385
+ const sets = [];
386
+ let seed = 0;
387
+ const now = new Date();
388
+ const setEntries = { ...this.updateSet };
389
+ if (this.meta?.updatedAtProperty && !(this.meta.updatedAtProperty in setEntries)) {
390
+ setEntries[this.meta.updatedAtProperty] = now;
391
+ }
392
+ for (const [prop, value] of Object.entries(setEntries)) {
393
+ const col = this.meta?.columnByProperty.get(prop) ?? prop;
394
+ if (typeof value === 'function') {
395
+ // 函数值:返回原始 SQL 表达式(如 () => 'Fview_count + 1')
396
+ const raw = value();
397
+ sets.push(`${col} = ${raw}`);
398
+ continue;
399
+ }
400
+ seed += 1;
401
+ const name = `qb_s${seed}`;
402
+ params[name] = value;
403
+ sets.push(`${col} = :${name}`);
404
+ }
405
+ let sql = `UPDATE ${this.table} SET ${sets.join(', ')}`;
406
+ if (whereSql)
407
+ sql += ` WHERE ${whereSql}`;
408
+ const result = await executeRawQuery(sql, params, this.getSqlTable);
409
+ return { affected: result?.affectedRows ?? 0, raw: [] };
410
+ }
411
+ if (this.mode === 'delete') {
412
+ if (!this.table) {
413
+ throw new Error('[json-storage] delete 查询缺少表定义');
414
+ }
415
+ const { sql: whereSql, params } = this.buildWhereClause();
416
+ let sql = `DELETE FROM ${this.table}`;
417
+ if (whereSql)
418
+ sql += ` WHERE ${whereSql}`;
419
+ const result = await executeRawQuery(sql, params, this.getSqlTable);
420
+ return { affected: result?.affectedRows ?? 0, raw: [] };
421
+ }
422
+ if (this.mode === 'insert') {
423
+ if (!this.table || this.insertRows.length === 0) {
424
+ throw new Error('[json-storage] insert 查询缺少 into()/values()');
425
+ }
426
+ const now = new Date();
427
+ const rows = this.insertRows.map(r => {
428
+ const row = { ...r };
429
+ if (this.meta?.createdAtProperty && row[this.meta.createdAtProperty] === undefined) {
430
+ row[this.meta.createdAtProperty] = now;
431
+ }
432
+ if (this.meta?.updatedAtProperty && row[this.meta.updatedAtProperty] === undefined) {
433
+ row[this.meta.updatedAtProperty] = now;
434
+ }
435
+ return row;
436
+ });
437
+ // 列清单:以首行列并集为准
438
+ const propSet = [];
439
+ for (const row of rows) {
440
+ for (const k of Object.keys(row)) {
441
+ if (!propSet.includes(k))
442
+ propSet.push(k);
443
+ }
444
+ }
445
+ const columns = propSet.map(p => this.meta?.columnByProperty.get(p) ?? p);
446
+ const params = { ...this.named };
447
+ const tuples = rows.map((row, ri) => {
448
+ const placeholders = propSet.map((p, ci) => {
449
+ const name = `qb_i${ri}_${ci}`;
450
+ params[name] = row[p] ?? null;
451
+ return `:${name}`;
452
+ });
453
+ return `(${placeholders.join(', ')})`;
454
+ });
455
+ const sql = `INSERT INTO ${this.table} (${columns.join(', ')}) VALUES ${tuples.join(', ')}`;
456
+ const result = await executeRawQuery(sql, params, this.getSqlTable);
457
+ return { identifiers: [], generatedMaps: [], raw: result };
458
+ }
459
+ throw new Error('[json-storage] execute() 仅支持 update/delete/insert 模式');
460
+ }
461
+ /** DB 列名键 → 实体属性名键(getMany 结果形态) */
462
+ mapColumnsToProperties(row) {
463
+ if (!this.meta)
464
+ return row;
465
+ const out = {};
466
+ for (const [k, v] of Object.entries(row)) {
467
+ const prop = this.meta?.columnByDbName.get(k);
468
+ out[prop ?? k] = v;
469
+ }
470
+ return out;
471
+ }
472
+ }
473
+ //# sourceMappingURL=json-query-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-query-builder.js","sourceRoot":"","sources":["../../src/json-query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import type { GetSqlTable } from './json-sql-shared.js';
2
+ import type { JsonEntityMeta } from './json-entity-meta.js';
3
+ import type { JsonCollection, JsonRow } from './json-collection.js';
4
+ /** FindOptionsWhere(宽松类型:属性 → 值或 FindOperator) */
5
+ type LooseWhere = Record<string, unknown>;
6
+ type LooseCriteria = unknown;
7
+ export interface FindOptionsLoose {
8
+ where?: LooseWhere | LooseWhere[];
9
+ order?: Record<string, 'ASC' | 'DESC'>;
10
+ skip?: number;
11
+ take?: number;
12
+ select?: string[];
13
+ }
14
+ export declare class JsonRepository<Entity extends object = any> {
15
+ readonly meta: JsonEntityMeta | null;
16
+ readonly collection: JsonCollection;
17
+ private getSqlTable;
18
+ constructor(meta: JsonEntityMeta | null, collection: JsonCollection, getSqlTable: GetSqlTable);
19
+ find(options?: FindOptionsLoose): Promise<Entity[]>;
20
+ findBy(where: LooseWhere | LooseWhere[]): Promise<Entity[]>;
21
+ findOne(options?: FindOptionsLoose): Promise<Entity | null>;
22
+ findOneBy(where: LooseWhere): Promise<Entity | null>;
23
+ findAndCount(options?: FindOptionsLoose): Promise<[Entity[], number]>;
24
+ findAndCountBy(where: LooseWhere | LooseWhere[], options?: Omit<FindOptionsLoose, 'where'>): Promise<[Entity[], number]>;
25
+ count(options?: FindOptionsLoose): Promise<number>;
26
+ countBy(where: LooseWhere | LooseWhere[]): Promise<number>;
27
+ save<T extends JsonRow>(entity: T): Promise<T>;
28
+ save<T extends JsonRow>(entities: T[]): Promise<T[]>;
29
+ private saveOne;
30
+ update(criteria: LooseCriteria, partial: JsonRow): Promise<{
31
+ affected: number | null;
32
+ raw: unknown[];
33
+ generatedMaps: unknown[];
34
+ }>;
35
+ delete(criteria: LooseCriteria): Promise<{
36
+ affected: number | null;
37
+ raw: unknown[];
38
+ }>;
39
+ upsert(entities: JsonRow | JsonRow[], options?: {
40
+ conflictPaths?: string[];
41
+ }): Promise<{
42
+ identifiers: unknown[];
43
+ generatedMaps: unknown[];
44
+ raw: unknown[];
45
+ }>;
46
+ /** TypeORM create():仅构造实体实例,这里原样返回浅拷贝 */
47
+ create(entityLike?: JsonRow): any;
48
+ query(sql: string, params?: unknown[] | Record<string, unknown>): Promise<any>;
49
+ createQueryBuilder(alias?: string): any;
50
+ private selectRows;
51
+ private applyOrder;
52
+ private applyWindow;
53
+ private applySelect;
54
+ private selectByCriteria;
55
+ }
56
+ /** 为 DataSource 垫片构造 Repository(表名解析 + 集合单例) */
57
+ export declare function createJsonRepository(targetOrTable: Function | string, getSqlTable: GetSqlTable): JsonRepository;
58
+ export {};
59
+ //# sourceMappingURL=json-repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"json-repository.d.ts","sourceRoot":"","sources":["../../src/json-repository.ts"],"names":[],"mappings":"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"}