@modern-admin/adapter-drizzle 0.2.1 → 0.3.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Modern Admin contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,4 +1,4 @@
1
- import type { Filter, FindOptions } from '@modern-admin/core';
1
+ import { type Filter, type FindOptions } from '@modern-admin/core';
2
2
  import type { DrizzleTable } from './types.js';
3
3
  /**
4
4
  * Convert a core Filter into a drizzle `where` SQL condition. Returns
@@ -1 +1 @@
1
- {"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAA8C,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEzG,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAA;AAgN7D;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,OAAO,YAAY,KAClB,OAUF,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,oBAAoB,GAC/B,SAAS,WAAW,EACpB,OAAO,YAAY,KAClB,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAYvD,CAAA"}
1
+ {"version":3,"file":"converters.d.ts","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":"AACA,OAAO,EAA4C,KAAK,MAAM,EAA6D,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAEvK,OAAO,KAAK,EAAiB,YAAY,EAAE,MAAM,YAAY,CAAA;AAyK7D;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,OAAO,YAAY,KAClB,OAUF,CAAA;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,eAAO,MAAM,oBAAoB,GAC/B,SAAS,WAAW,EACpB,OAAO,YAAY,KAClB,IAAI,CAAC,gBAAgB,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAYvD,CAAA"}
@@ -1,37 +1,5 @@
1
1
  import { and, arrayContains, arrayOverlaps, asc, desc, eq, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, ne, not, or } from 'drizzle-orm';
2
- const isRangeValue = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
3
- const coerceScalar = (value, property) => {
4
- if (value == null || typeof value === 'boolean')
5
- return value;
6
- if (Array.isArray(value))
7
- return value.map((v) => coerceScalar(v, property));
8
- if (typeof value === 'number')
9
- return value;
10
- if (typeof value !== 'string')
11
- return value;
12
- if (!property)
13
- return value;
14
- switch (property.type()) {
15
- case 'number':
16
- case 'currency': {
17
- const n = Number(value);
18
- return Number.isFinite(n) ? n : value;
19
- }
20
- case 'float': {
21
- const n = parseFloat(value);
22
- return Number.isFinite(n) ? n : value;
23
- }
24
- case 'boolean':
25
- return value === 'true' || value === '1';
26
- case 'date':
27
- case 'datetime': {
28
- const d = new Date(value);
29
- return Number.isNaN(d.getTime()) ? value : d;
30
- }
31
- default:
32
- return value;
33
- }
34
- };
2
+ import { coerceScalar, isRangeValue, parseBetween } from '@modern-admin/core';
35
3
  /** Return the case-insensitive `like` function appropriate for the dialect. */
36
4
  const ciLike = (column) => column.columnType?.startsWith('Pg') ? ilike : like;
37
5
  /**
@@ -171,10 +139,7 @@ const buildOperatorCondition = (operator, value, property, column) => {
171
139
  return lt(column, coerced);
172
140
  }
173
141
  case 'between': {
174
- const str = typeof value === 'string' ? value : '';
175
- const comma = str.indexOf(',');
176
- const fromStr = comma >= 0 ? str.slice(0, comma) : str;
177
- const toStr = comma >= 0 ? str.slice(comma + 1) : '';
142
+ const { fromStr, toStr } = parseBetween(value);
178
143
  const conds = [];
179
144
  if (fromStr)
180
145
  conds.push(gte(column, coerceScalar(fromStr, property)));
@@ -1 +1 @@
1
- {"version":3,"file":"converters.js","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"converters.js","sourceRoot":"","sources":["../src/converters.ts"],"names":[],"mappings":"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"}
@@ -16,6 +16,8 @@ export declare class DrizzleResource extends BaseResource {
16
16
  databaseType(): string;
17
17
  properties(): DrizzleProperty[];
18
18
  property(path: string): DrizzleProperty | null;
19
+ /** Active client: the ambient transaction client when inside `transaction(fn)`. */
20
+ private db;
19
21
  private castId;
20
22
  /** Drop unknown keys so we never write to columns that don't exist. */
21
23
  private writableData;
@@ -33,6 +35,7 @@ export declare class DrizzleResource extends BaseResource {
33
35
  create(params: ParamsType): Promise<ParamsType>;
34
36
  update(id: string, params: ParamsType): Promise<ParamsType>;
35
37
  delete(id: string): Promise<void>;
38
+ deleteMany(filter: Filter): Promise<number>;
36
39
  supportsTimeSeries(): boolean;
37
40
  aggregateTimeSeries(filter: Filter, query: TimeSeriesQuery): Promise<TimeSeriesResult>;
38
41
  private runTimeSeriesQuery;
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AACA,OAAO,EACL,UAAU,EACV,YAAY,EACZ,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAGtB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAyC,MAAM,eAAe,CAAA;AAEtF,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EAEd,YAAY,EACb,MAAM,YAAY,CAAA;AAgBnB,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,SAAgB,MAAM,EAAE,iBAAiB,CAAA;IACzC,SAAgB,KAAK,EAAE,YAAY,CAAA;IACnC,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC,SAAgB,OAAO,EAAE,cAAc,CAAA;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAE5B,GAAG,EAAE,OAAO;WA4BR,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI1C,EAAE,IAAI,MAAM;IAIZ,YAAY,IAAI,MAAM;IAItB,YAAY,IAAI,MAAM;IAItB,UAAU,IAAI,eAAe,EAAE;IAI/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvD,OAAO,CAAC,MAAM;IASd,uEAAuE;IACvE,OAAO,CAAC,YAAY;IASL,QAAQ,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,MAAM,EAAE,CAAC;IAgCL,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAStC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAYjE,MAAM,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC;IA2BT,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAU/C,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAU5D,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ/C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAS3D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMvC,kBAAkB,IAAI,OAAO;IAIvB,mBAAmB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC;YAkBd,kBAAkB;IAuGjB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAIhE"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,UAAU,EACV,YAAY,EAOZ,KAAK,MAAM,EACX,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,gBAAgB,EAGtB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EAAE,eAAe,EAAyC,MAAM,eAAe,CAAA;AAEtF,OAAO,KAAK,EACV,iBAAiB,EAEjB,cAAc,EAEd,YAAY,EACb,MAAM,YAAY,CAAA;AA4BnB,qBAAa,eAAgB,SAAQ,YAAY;IAC/C,SAAgB,MAAM,EAAE,iBAAiB,CAAA;IACzC,SAAgB,KAAK,EAAE,YAAY,CAAA;IACnC,SAAgB,QAAQ,EAAE,MAAM,CAAA;IAChC,SAAgB,OAAO,EAAE,cAAc,CAAA;IACvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmB;IAC/C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;gBAE5B,GAAG,EAAE,OAAO;WA4BR,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO;IAI1C,EAAE,IAAI,MAAM;IAIZ,YAAY,IAAI,MAAM;IAItB,YAAY,IAAI,MAAM;IAItB,UAAU,IAAI,eAAe,EAAE;IAI/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAIvD,mFAAmF;IACnF,OAAO,CAAC,EAAE;IAKV,OAAO,CAAC,MAAM;IAkBd,uEAAuE;IACvE,OAAO,CAAC,YAAY;IASL,QAAQ,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5C,OAAO,CAAC,MAAM,EAAE,CAAC;IAgCL,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAStC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAYjE,MAAM,CACnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC;IA2BT,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IAU/C,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAU5D,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ/C,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IAS3D,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAajD,kBAAkB,IAAI,OAAO;IAIvB,mBAAmB,CAChC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,gBAAgB,CAAC;YAkBd,kBAAkB;IAkHjB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAShE"}
package/dist/resource.js CHANGED
@@ -1,7 +1,19 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks';
1
2
  import { and, asc, count as countFn, eq, gte, ilike, inArray, isNotNull, like, lte, ne, or, sql } from 'drizzle-orm';
2
- import { BaseRecord, BaseResource, } from '@modern-admin/core';
3
+ import { BaseRecord, BaseResource, buildDisplaySql, isoDate, stringifyKey, sumValues, toDate, toNumber, } from '@modern-admin/core';
3
4
  import { DrizzleProperty, extractForeignKeys, findPrimaryColumn } from './property.js';
4
5
  import { filterToWhere, findOptionsToDrizzle } from './converters.js';
6
+ /**
7
+ * Ambient transaction context. Module-level (not per-resource) on purpose:
8
+ * inside `transaction(fn)` the callback often touches *other* resources
9
+ * backed by the same Drizzle client (e.g. the junction resource in an m2m
10
+ * diff, every record in a bulk delete) — they must all see the tx client,
11
+ * not the base one. `base` is stored alongside `tx` so a resource bound to
12
+ * a *different* Drizzle client never accidentally picks up a foreign
13
+ * transaction: cross-client atomicity is impossible, so it falls back to
14
+ * its own client.
15
+ */
16
+ const txStorage = new AsyncLocalStorage();
5
17
  const isInit = (raw) => typeof raw === 'object' &&
6
18
  raw !== null &&
7
19
  'client' in raw &&
@@ -53,10 +65,25 @@ export class DrizzleResource extends BaseResource {
53
65
  property(path) {
54
66
  return this._properties.find((p) => p.path() === path) ?? null;
55
67
  }
68
+ /** Active client: the ambient transaction client when inside `transaction(fn)`. */
69
+ db() {
70
+ const store = txStorage.getStore();
71
+ return store && store.base === this.client ? store.tx : this.client;
72
+ }
56
73
  castId(id) {
57
74
  if (typeof id === 'number')
58
75
  return id;
59
- if (this.idColumn.dataType === 'number' || this.idColumn.dataType === 'bigint') {
76
+ // BigInt ids must round-trip through BigInt — Number() silently loses
77
+ // precision above 2^53, so the lookup would target a neighbouring id.
78
+ if (this.idColumn.dataType === 'bigint') {
79
+ try {
80
+ return BigInt(id);
81
+ }
82
+ catch {
83
+ return id;
84
+ }
85
+ }
86
+ if (this.idColumn.dataType === 'number') {
60
87
  const n = Number(id);
61
88
  return Number.isFinite(n) ? n : id;
62
89
  }
@@ -91,7 +118,7 @@ export class DrizzleResource extends BaseResource {
91
118
  const where = and(...conds);
92
119
  // Use select + groupBy for DISTINCT — avoids requiring selectDistinct
93
120
  // on the client interface while producing the same SQL result.
94
- const rows = (await this.client
121
+ const rows = (await this.db()
95
122
  .select({ value: column })
96
123
  .from(this.table)
97
124
  .where(where)
@@ -104,7 +131,7 @@ export class DrizzleResource extends BaseResource {
104
131
  }
105
132
  async count(filter) {
106
133
  const where = filterToWhere(filter, this.table);
107
- let qb = this.client.select({ value: countFn() }).from(this.table);
134
+ let qb = this.db().select({ value: countFn() }).from(this.table);
108
135
  if (where !== undefined)
109
136
  qb = qb.where(where);
110
137
  const rows = (await qb);
@@ -114,7 +141,7 @@ export class DrizzleResource extends BaseResource {
114
141
  async find(filter, options) {
115
142
  const where = filterToWhere(filter, this.table);
116
143
  const { limit, offset, orderBy } = findOptionsToDrizzle(options, this.table);
117
- let qb = this.client.select().from(this.table);
144
+ let qb = this.db().select().from(this.table);
118
145
  if (where !== undefined)
119
146
  qb = qb.where(where);
120
147
  if (orderBy !== undefined)
@@ -148,7 +175,7 @@ export class DrizzleResource extends BaseResource {
148
175
  if (conds.length === 0)
149
176
  return [];
150
177
  const where = conds.length === 1 ? conds[0] : or(...conds);
151
- const rows = (await this.client
178
+ const rows = (await this.db()
152
179
  .select()
153
180
  .from(this.table)
154
181
  .where(where)
@@ -156,7 +183,7 @@ export class DrizzleResource extends BaseResource {
156
183
  return rows.map((row) => new BaseRecord(row, this));
157
184
  }
158
185
  async findOne(id) {
159
- const rows = (await this.client
186
+ const rows = (await this.db()
160
187
  .select()
161
188
  .from(this.table)
162
189
  .where(eq(this.idColumn, this.castId(id)))
@@ -168,21 +195,21 @@ export class DrizzleResource extends BaseResource {
168
195
  if (ids.length === 0)
169
196
  return [];
170
197
  const cast = ids.map((id) => this.castId(id));
171
- const rows = (await this.client
198
+ const rows = (await this.db()
172
199
  .select()
173
200
  .from(this.table)
174
201
  .where(inArray(this.idColumn, cast)));
175
202
  return rows.map((row) => new BaseRecord(row, this));
176
203
  }
177
204
  async create(params) {
178
- const rows = await this.client
205
+ const rows = await this.db()
179
206
  .insert(this.table)
180
207
  .values(this.writableData(params))
181
208
  .returning();
182
209
  return (rows[0] ?? {});
183
210
  }
184
211
  async update(id, params) {
185
- const rows = await this.client
212
+ const rows = await this.db()
186
213
  .update(this.table)
187
214
  .set(this.writableData(params))
188
215
  .where(eq(this.idColumn, this.castId(id)))
@@ -190,10 +217,21 @@ export class DrizzleResource extends BaseResource {
190
217
  return (rows[0] ?? {});
191
218
  }
192
219
  async delete(id) {
193
- await this.client
220
+ await this.db()
194
221
  .delete(this.table)
195
222
  .where(eq(this.idColumn, this.castId(id)));
196
223
  }
224
+ async deleteMany(filter) {
225
+ const where = filterToWhere(filter, this.table);
226
+ const builder = this.db().delete(this.table);
227
+ // `returning()` gives an accurate, driver-agnostic deleted-row count on
228
+ // the dialects this adapter targets (Postgres/SQLite), mirroring the
229
+ // `create`/`update` paths above.
230
+ const rows = where !== undefined
231
+ ? await builder.where(where).returning()
232
+ : await builder.returning();
233
+ return rows.length;
234
+ }
197
235
  supportsTimeSeries() {
198
236
  return true;
199
237
  }
@@ -250,7 +288,7 @@ export class DrizzleResource extends BaseResource {
250
288
  select.bucket = bucketSql;
251
289
  if (groupCol)
252
290
  select.series_key = groupCol;
253
- let qb = this.client.select(select).from(this.table).where(where);
291
+ let qb = this.db().select(select).from(this.table).where(where);
254
292
  const groupKeys = [];
255
293
  if (query.step !== 'all')
256
294
  groupKeys.push(bucketSql);
@@ -265,8 +303,23 @@ export class DrizzleResource extends BaseResource {
265
303
  const fromIso = isoDate(query.from);
266
304
  const seriesMap = new Map();
267
305
  for (const row of rows) {
306
+ // A bucket whose rows are all NULL aggregates to a NULL value (SUM/AVG/
307
+ // MIN/MAX). The Prisma adapter emits no point for such buckets — skip
308
+ // the row so both adapters agree. COUNT(*) is never NULL.
309
+ if (row.value == null)
310
+ continue;
268
311
  const seriesKey = groupCol ? stringifyKey(row.series_key) : '__total__';
269
- const bucketKey = query.step === 'all' ? fromIso : isoDate(toDate(row.bucket));
312
+ let bucketKey;
313
+ if (query.step === 'all') {
314
+ bucketKey = fromIso;
315
+ }
316
+ else {
317
+ const bucketDate = toDate(row.bucket);
318
+ // isoDate() throws on Invalid Date — drop the row instead of 500ing.
319
+ if (Number.isNaN(bucketDate.getTime()))
320
+ continue;
321
+ bucketKey = isoDate(bucketDate);
322
+ }
270
323
  const num = toNumber(row.value);
271
324
  let inner = seriesMap.get(seriesKey);
272
325
  if (!inner) {
@@ -305,9 +358,13 @@ export class DrizzleResource extends BaseResource {
305
358
  };
306
359
  }
307
360
  async transaction(fn) {
361
+ const active = txStorage.getStore();
362
+ // Already inside a transaction on this client — join it.
363
+ if (active && active.base === this.client)
364
+ return fn();
308
365
  if (typeof this.client.transaction !== 'function')
309
366
  return fn();
310
- return this.client.transaction(async () => fn());
367
+ return this.client.transaction((tx) => txStorage.run({ base: this.client, tx }, fn));
311
368
  }
312
369
  }
313
370
  // ─── Time-series helpers ─────────────────────────────────────────────────
@@ -317,24 +374,24 @@ const bucketExpr = (dialect, step, dateCol) => {
317
374
  if (dialect === 'pg') {
318
375
  return sql `DATE_TRUNC(${step}, ${dateCol})`;
319
376
  }
377
+ // Week buckets must land on the ISO Monday as a plain `YYYY-MM-DD` date —
378
+ // the canonical bucket-key format shared with pg DATE_TRUNC and the Prisma
379
+ // adapter's truncateDate(). Week-label formats ('%x-W%v', '%Y-W%W') are not
380
+ // parseable dates and would break the bucket-key mapping below.
320
381
  if (dialect === 'mysql') {
321
- const fmt = step === 'day'
322
- ? '%Y-%m-%d'
323
- : step === 'week'
324
- ? '%x-W%v'
325
- : step === 'month'
326
- ? '%Y-%m-01'
327
- : '%Y-01-01';
382
+ if (step === 'week') {
383
+ // WEEKDAY() is 0-based on Monday.
384
+ return sql `DATE(DATE_SUB(${dateCol}, INTERVAL WEEKDAY(${dateCol}) DAY))`;
385
+ }
386
+ const fmt = step === 'day' ? '%Y-%m-%d' : step === 'month' ? '%Y-%m-01' : '%Y-01-01';
328
387
  return sql `DATE_FORMAT(${dateCol}, ${fmt})`;
329
388
  }
330
389
  // sqlite
331
- const fmt = step === 'day'
332
- ? '%Y-%m-%d'
333
- : step === 'week'
334
- ? '%Y-W%W'
335
- : step === 'month'
336
- ? '%Y-%m-01'
337
- : '%Y-01-01';
390
+ if (step === 'week') {
391
+ // %w is 0-based on Sunday; shift back to the Monday of the ISO week.
392
+ return sql `DATE(${dateCol}, '-' || ((CAST(STRFTIME('%w', ${dateCol}) AS INTEGER) + 6) % 7) || ' days')`;
393
+ }
394
+ const fmt = step === 'day' ? '%Y-%m-%d' : step === 'month' ? '%Y-%m-01' : '%Y-01-01';
338
395
  return sql `STRFTIME(${fmt}, ${dateCol})`;
339
396
  };
340
397
  const metricExpr = (op, fieldCol) => {
@@ -354,91 +411,4 @@ const metricExpr = (op, fieldCol) => {
354
411
  return sql `MAX(${fieldCol})`;
355
412
  }
356
413
  };
357
- const isoDate = (d) => d.toISOString().slice(0, 10);
358
- const toDate = (v) => {
359
- if (v instanceof Date)
360
- return v;
361
- if (typeof v === 'string' || typeof v === 'number')
362
- return new Date(v);
363
- return new Date(String(v));
364
- };
365
- const toNumber = (v) => {
366
- if (typeof v === 'number')
367
- return v;
368
- if (v == null)
369
- return 0;
370
- const n = Number(v);
371
- return Number.isFinite(n) ? n : 0;
372
- };
373
- const stringifyKey = (v) => {
374
- if (v == null)
375
- return '__null__';
376
- if (typeof v === 'string')
377
- return v;
378
- return String(v);
379
- };
380
- const sumValues = (m) => {
381
- let s = 0;
382
- for (const v of m.values())
383
- s += v;
384
- return s;
385
- };
386
- const buildDisplaySql = (dialect, tableName, query, filter) => {
387
- const ident = (s) => (dialect === 'mysql' ? `\`${s}\`` : `"${s}"`);
388
- const t = ident(tableName);
389
- const dateCol = ident(query.dateField);
390
- const bucket = query.step === 'all'
391
- ? `MIN(${dateCol})`
392
- : dialect === 'pg'
393
- ? `DATE_TRUNC('${query.step}', ${dateCol})`
394
- : dialect === 'mysql'
395
- ? `DATE_FORMAT(${dateCol}, ${mysqlFmt(query.step)})`
396
- : `STRFTIME(${sqliteFmt(query.step)}, ${dateCol})`;
397
- const metric = query.metric === 'count'
398
- ? 'COUNT(*)'
399
- : `${query.metric.toUpperCase()}(${ident(query.field)})`;
400
- const cols = [];
401
- if (query.step !== 'all')
402
- cols.push(`${bucket} AS bucket`);
403
- cols.push(`${metric} AS value`);
404
- if (query.groupBy)
405
- cols.push(`${ident(query.groupBy)} AS series_key`);
406
- const where = [
407
- `${dateCol} >= '${query.from.toISOString()}'`,
408
- `${dateCol} <= '${query.to.toISOString()}'`,
409
- ];
410
- filter.reduce((_, el) => {
411
- where.push(`${ident(el.path)} = '${String(el.value)}'`);
412
- return null;
413
- }, null);
414
- const groupBy = [];
415
- if (query.step !== 'all')
416
- groupBy.push('bucket');
417
- if (query.groupBy)
418
- groupBy.push('series_key');
419
- const lines = [
420
- `SELECT ${cols.join(', ')}`,
421
- `FROM ${t}`,
422
- `WHERE ${where.join(' AND ')}`,
423
- ];
424
- if (groupBy.length)
425
- lines.push(`GROUP BY ${groupBy.join(', ')}`);
426
- if (query.step !== 'all')
427
- lines.push('ORDER BY bucket ASC');
428
- return lines.join('\n');
429
- };
430
- const mysqlFmt = (step) => step === 'day'
431
- ? "'%Y-%m-%d'"
432
- : step === 'week'
433
- ? "'%x-W%v'"
434
- : step === 'month'
435
- ? "'%Y-%m-01'"
436
- : "'%Y-01-01'";
437
- const sqliteFmt = (step) => step === 'day'
438
- ? "'%Y-%m-%d'"
439
- : step === 'week'
440
- ? "'%Y-W%W'"
441
- : step === 'month'
442
- ? "'%Y-%m-01'"
443
- : "'%Y-01-01'";
444
414
  //# sourceMappingURL=resource.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.js","sourceRoot":"","sources":["../src/resource.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -40,8 +40,13 @@ export interface DrizzleUpdateBuilder {
40
40
  };
41
41
  };
42
42
  }
43
+ /** Awaitable delete query that also supports `RETURNING` for a deleted count. */
44
+ export type DrizzleDeleteExecutable = Promise<unknown> & {
45
+ returning(): Promise<Array<Record<string, unknown>>>;
46
+ };
43
47
  export interface DrizzleDeleteBuilder {
44
- where(condition: unknown): Promise<unknown>;
48
+ where(condition: unknown): DrizzleDeleteExecutable;
49
+ returning(): Promise<Array<Record<string, unknown>>>;
45
50
  }
46
51
  export interface DrizzleClientLike {
47
52
  select(): DrizzleSelectBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,+GAA+G;IAC/G,QAAQ,EAAE,MAAM,CAAA;IAChB,sFAAsF;IACtF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IAC9B,gEAAgE;IAChE,UAAU,CAAC,EAAE,aAAa,CAAA;CAC3B;AAED,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,GAAG;IACzD,2CAA2C;IAC3C,CAAC,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACtB,CAAA;AAED,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IACjD,OAAO,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IACtD,OAAO,CAAC,GAAG,OAAO,EAAE,OAAO,EAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IACtD,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IACxC,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAA;IAEzC,IAAI,CAAC,CAAC,EAAE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACxE;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACtC,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KACrD,CAAA;CACF;AAED,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;QACpC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG;YACzB,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;SACrD,CAAA;KACF,CAAA;CACF;AAED,iFAAiF;AACjF,MAAM,MAAM,uBAAuB,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG;IACvD,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CACrD,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,SAAS,EAAE,OAAO,GAAG,uBAAuB,CAAA;IAClD,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,IAAI,oBAAoB,CAAA;IAC9B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,oBAAoB,CAAA;IAC7D,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAAA;IACjD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAAA;IACjD,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,oBAAoB,CAAA;IACjD,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,iBAAiB,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;CACvE;AAED,MAAM,WAAW,aAAa;IAC5B,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAAA;CAClC;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAA;AAEtD,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,qBAAqB;IACpC,wDAAwD;IACxD,MAAM,EAAE,iBAAiB,CAAA;IACzB,gDAAgD;IAChD,MAAM,EAAE,aAAa,CAAA;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,cAAc,CAAA;IACxB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CAClD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modern-admin/adapter-drizzle",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Drizzle ORM adapter for Modern Admin — implements BaseDatabase/BaseResource on Drizzle schemas.",
5
5
  "homepage": "https://github.com/modern-admin/modern-admin/tree/main/packages/adapter-drizzle#readme",
6
6
  "keywords": [
@@ -44,10 +44,10 @@
44
44
  }
45
45
  },
46
46
  "dependencies": {
47
- "@modern-admin/core": "^0.2.1"
47
+ "@modern-admin/core": "^0.3.0"
48
48
  },
49
49
  "devDependencies": {
50
- "@modern-admin/tsconfig": "0.2.1",
50
+ "@modern-admin/tsconfig": "0.3.0",
51
51
  "@types/bun": "^1.3.13",
52
52
  "drizzle-orm": "^0.45.2",
53
53
  "typescript": "^6.0.3"
package/src/converters.ts CHANGED
@@ -1,44 +1,8 @@
1
1
  import { and, arrayContains, arrayOverlaps, asc, desc, eq, gt, gte, ilike, inArray, isNotNull, isNull, like, lt, lte, ne, not, or } from 'drizzle-orm'
2
- import type { Filter, FilterElement, FilterOperator, FilterValue, FindOptions } from '@modern-admin/core'
2
+ import { coerceScalar, isRangeValue, parseBetween, type Filter, type FilterElement, type FilterOperator, type FilterValue, type FindOptions } from '@modern-admin/core'
3
3
  import type { DrizzleProperty } from './property.js'
4
4
  import type { DrizzleColumn, DrizzleTable } from './types.js'
5
5
 
6
- const isRangeValue = (
7
- value: FilterValue,
8
- ): value is { from?: string; to?: string } =>
9
- typeof value === 'object' && value !== null && !Array.isArray(value)
10
-
11
- const coerceScalar = (
12
- value: FilterValue,
13
- property: DrizzleProperty | null,
14
- ): unknown => {
15
- if (value == null || typeof value === 'boolean') return value
16
- if (Array.isArray(value)) return value.map((v) => coerceScalar(v as FilterValue, property))
17
- if (typeof value === 'number') return value
18
- if (typeof value !== 'string') return value
19
- if (!property) return value
20
- switch (property.type()) {
21
- case 'number':
22
- case 'currency': {
23
- const n = Number(value)
24
- return Number.isFinite(n) ? n : value
25
- }
26
- case 'float': {
27
- const n = parseFloat(value)
28
- return Number.isFinite(n) ? n : value
29
- }
30
- case 'boolean':
31
- return value === 'true' || value === '1'
32
- case 'date':
33
- case 'datetime': {
34
- const d = new Date(value)
35
- return Number.isNaN(d.getTime()) ? value : d
36
- }
37
- default:
38
- return value
39
- }
40
- }
41
-
42
6
  /** Return the case-insensitive `like` function appropriate for the dialect. */
43
7
  const ciLike = (column: DrizzleColumn) =>
44
8
  (column as DrizzleColumn).columnType?.startsWith('Pg') ? ilike : like
@@ -194,10 +158,7 @@ const buildOperatorCondition = (
194
158
  return lt(column as never, coerced as never)
195
159
  }
196
160
  case 'between': {
197
- const str = typeof value === 'string' ? value : ''
198
- const comma = str.indexOf(',')
199
- const fromStr = comma >= 0 ? str.slice(0, comma) : str
200
- const toStr = comma >= 0 ? str.slice(comma + 1) : ''
161
+ const { fromStr, toStr } = parseBetween(value)
201
162
  const conds: unknown[] = []
202
163
  if (fromStr) conds.push(gte(column as never, coerceScalar(fromStr, property) as never))
203
164
  if (toStr) conds.push(lte(column as never, coerceScalar(toStr, property) as never))
package/src/resource.ts CHANGED
@@ -1,7 +1,14 @@
1
+ import { AsyncLocalStorage } from 'node:async_hooks'
1
2
  import { and, asc, count as countFn, eq, gte, ilike, inArray, isNotNull, like, lte, ne, or, sql } from 'drizzle-orm'
2
3
  import {
3
4
  BaseRecord,
4
5
  BaseResource,
6
+ buildDisplaySql,
7
+ isoDate,
8
+ stringifyKey,
9
+ sumValues,
10
+ toDate,
11
+ toNumber,
5
12
  type Filter,
6
13
  type FindOptions,
7
14
  type ParamsType,
@@ -27,6 +34,18 @@ interface DrizzleResourceInit extends DrizzleResourceConfig {
27
34
  dialect: DrizzleDialect
28
35
  }
29
36
 
37
+ /**
38
+ * Ambient transaction context. Module-level (not per-resource) on purpose:
39
+ * inside `transaction(fn)` the callback often touches *other* resources
40
+ * backed by the same Drizzle client (e.g. the junction resource in an m2m
41
+ * diff, every record in a bulk delete) — they must all see the tx client,
42
+ * not the base one. `base` is stored alongside `tx` so a resource bound to
43
+ * a *different* Drizzle client never accidentally picks up a foreign
44
+ * transaction: cross-client atomicity is impossible, so it falls back to
45
+ * its own client.
46
+ */
47
+ const txStorage = new AsyncLocalStorage<{ base: DrizzleClientLike; tx: DrizzleClientLike }>()
48
+
30
49
  const isInit = (raw: unknown): raw is DrizzleResourceInit =>
31
50
  typeof raw === 'object' &&
32
51
  raw !== null &&
@@ -95,9 +114,24 @@ export class DrizzleResource extends BaseResource {
95
114
  return this._properties.find((p) => p.path() === path) ?? null
96
115
  }
97
116
 
117
+ /** Active client: the ambient transaction client when inside `transaction(fn)`. */
118
+ private db(): DrizzleClientLike {
119
+ const store = txStorage.getStore()
120
+ return store && store.base === this.client ? store.tx : this.client
121
+ }
122
+
98
123
  private castId(id: string | number): unknown {
99
124
  if (typeof id === 'number') return id
100
- if (this.idColumn.dataType === 'number' || this.idColumn.dataType === 'bigint') {
125
+ // BigInt ids must round-trip through BigInt — Number() silently loses
126
+ // precision above 2^53, so the lookup would target a neighbouring id.
127
+ if (this.idColumn.dataType === 'bigint') {
128
+ try {
129
+ return BigInt(id)
130
+ } catch {
131
+ return id
132
+ }
133
+ }
134
+ if (this.idColumn.dataType === 'number') {
101
135
  const n = Number(id)
102
136
  return Number.isFinite(n) ? n : id
103
137
  }
@@ -136,7 +170,7 @@ export class DrizzleResource extends BaseResource {
136
170
 
137
171
  // Use select + groupBy for DISTINCT — avoids requiring selectDistinct
138
172
  // on the client interface while producing the same SQL result.
139
- const rows = (await this.client
173
+ const rows = (await this.db()
140
174
  .select({ value: column })
141
175
  .from(this.table)
142
176
  .where(where as unknown)
@@ -151,7 +185,7 @@ export class DrizzleResource extends BaseResource {
151
185
 
152
186
  override async count(filter: Filter): Promise<number> {
153
187
  const where = filterToWhere(filter, this.table)
154
- let qb = this.client.select({ value: countFn() }).from(this.table)
188
+ let qb = this.db().select({ value: countFn() }).from(this.table)
155
189
  if (where !== undefined) qb = qb.where(where)
156
190
  const rows = (await qb) as Array<{ value: number | string }>
157
191
  const v = rows[0]?.value ?? 0
@@ -161,7 +195,7 @@ export class DrizzleResource extends BaseResource {
161
195
  override async find(filter: Filter, options: FindOptions): Promise<BaseRecord[]> {
162
196
  const where = filterToWhere(filter, this.table)
163
197
  const { limit, offset, orderBy } = findOptionsToDrizzle(options, this.table)
164
- let qb = this.client.select().from(this.table)
198
+ let qb = this.db().select().from(this.table)
165
199
  if (where !== undefined) qb = qb.where(where)
166
200
  if (orderBy !== undefined) qb = qb.orderBy(orderBy)
167
201
  if (limit !== undefined) qb = qb.limit(limit)
@@ -193,7 +227,7 @@ export class DrizzleResource extends BaseResource {
193
227
  if (conds.length === 0) return []
194
228
  const where =
195
229
  conds.length === 1 ? conds[0] : or(...(conds as never[]))
196
- const rows = (await this.client
230
+ const rows = (await this.db()
197
231
  .select()
198
232
  .from(this.table)
199
233
  .where(where as unknown)
@@ -202,7 +236,7 @@ export class DrizzleResource extends BaseResource {
202
236
  }
203
237
 
204
238
  override async findOne(id: string): Promise<BaseRecord | null> {
205
- const rows = (await this.client
239
+ const rows = (await this.db()
206
240
  .select()
207
241
  .from(this.table)
208
242
  .where(eq(this.idColumn as never, this.castId(id) as never))
@@ -214,7 +248,7 @@ export class DrizzleResource extends BaseResource {
214
248
  override async findMany(ids: Array<string | number>): Promise<BaseRecord[]> {
215
249
  if (ids.length === 0) return []
216
250
  const cast = ids.map((id) => this.castId(id))
217
- const rows = (await this.client
251
+ const rows = (await this.db()
218
252
  .select()
219
253
  .from(this.table)
220
254
  .where(inArray(this.idColumn as never, cast as never))) as ParamsType[]
@@ -222,7 +256,7 @@ export class DrizzleResource extends BaseResource {
222
256
  }
223
257
 
224
258
  override async create(params: ParamsType): Promise<ParamsType> {
225
- const rows = await this.client
259
+ const rows = await this.db()
226
260
  .insert(this.table)
227
261
  .values(this.writableData(params))
228
262
  .returning()
@@ -230,7 +264,7 @@ export class DrizzleResource extends BaseResource {
230
264
  }
231
265
 
232
266
  override async update(id: string, params: ParamsType): Promise<ParamsType> {
233
- const rows = await this.client
267
+ const rows = await this.db()
234
268
  .update(this.table)
235
269
  .set(this.writableData(params))
236
270
  .where(eq(this.idColumn as never, this.castId(id) as never))
@@ -239,11 +273,24 @@ export class DrizzleResource extends BaseResource {
239
273
  }
240
274
 
241
275
  override async delete(id: string): Promise<void> {
242
- await this.client
276
+ await this.db()
243
277
  .delete(this.table)
244
278
  .where(eq(this.idColumn as never, this.castId(id) as never))
245
279
  }
246
280
 
281
+ override async deleteMany(filter: Filter): Promise<number> {
282
+ const where = filterToWhere(filter, this.table)
283
+ const builder = this.db().delete(this.table)
284
+ // `returning()` gives an accurate, driver-agnostic deleted-row count on
285
+ // the dialects this adapter targets (Postgres/SQLite), mirroring the
286
+ // `create`/`update` paths above.
287
+ const rows =
288
+ where !== undefined
289
+ ? await builder.where(where).returning()
290
+ : await builder.returning()
291
+ return rows.length
292
+ }
293
+
247
294
  override supportsTimeSeries(): boolean {
248
295
  return true
249
296
  }
@@ -314,7 +361,7 @@ export class DrizzleResource extends BaseResource {
314
361
  if (query.step !== 'all') select.bucket = bucketSql
315
362
  if (groupCol) select.series_key = groupCol
316
363
 
317
- let qb = this.client.select(select).from(this.table).where(where as unknown)
364
+ let qb = this.db().select(select).from(this.table).where(where as unknown)
318
365
  const groupKeys: unknown[] = []
319
366
  if (query.step !== 'all') groupKeys.push(bucketSql)
320
367
  if (groupCol) groupKeys.push(groupCol)
@@ -327,9 +374,20 @@ export class DrizzleResource extends BaseResource {
327
374
  const fromIso = isoDate(query.from)
328
375
  const seriesMap = new Map<string, Map<string, number>>()
329
376
  for (const row of rows) {
377
+ // A bucket whose rows are all NULL aggregates to a NULL value (SUM/AVG/
378
+ // MIN/MAX). The Prisma adapter emits no point for such buckets — skip
379
+ // the row so both adapters agree. COUNT(*) is never NULL.
380
+ if (row.value == null) continue
330
381
  const seriesKey = groupCol ? stringifyKey(row.series_key) : '__total__'
331
- const bucketKey =
332
- query.step === 'all' ? fromIso : isoDate(toDate(row.bucket))
382
+ let bucketKey: string
383
+ if (query.step === 'all') {
384
+ bucketKey = fromIso
385
+ } else {
386
+ const bucketDate = toDate(row.bucket)
387
+ // isoDate() throws on Invalid Date — drop the row instead of 500ing.
388
+ if (Number.isNaN(bucketDate.getTime())) continue
389
+ bucketKey = isoDate(bucketDate)
390
+ }
333
391
  const num = toNumber(row.value)
334
392
  let inner = seriesMap.get(seriesKey)
335
393
  if (!inner) {
@@ -373,8 +431,13 @@ export class DrizzleResource extends BaseResource {
373
431
  }
374
432
 
375
433
  override async transaction<T>(fn: () => Promise<T>): Promise<T> {
434
+ const active = txStorage.getStore()
435
+ // Already inside a transaction on this client — join it.
436
+ if (active && active.base === this.client) return fn()
376
437
  if (typeof this.client.transaction !== 'function') return fn()
377
- return this.client.transaction(async () => fn())
438
+ return this.client.transaction((tx) =>
439
+ txStorage.run({ base: this.client, tx }, fn),
440
+ )
378
441
  }
379
442
  }
380
443
 
@@ -389,26 +452,24 @@ const bucketExpr = (
389
452
  if (dialect === 'pg') {
390
453
  return sql`DATE_TRUNC(${step}, ${dateCol})`
391
454
  }
455
+ // Week buckets must land on the ISO Monday as a plain `YYYY-MM-DD` date —
456
+ // the canonical bucket-key format shared with pg DATE_TRUNC and the Prisma
457
+ // adapter's truncateDate(). Week-label formats ('%x-W%v', '%Y-W%W') are not
458
+ // parseable dates and would break the bucket-key mapping below.
392
459
  if (dialect === 'mysql') {
393
- const fmt =
394
- step === 'day'
395
- ? '%Y-%m-%d'
396
- : step === 'week'
397
- ? '%x-W%v'
398
- : step === 'month'
399
- ? '%Y-%m-01'
400
- : '%Y-01-01'
460
+ if (step === 'week') {
461
+ // WEEKDAY() is 0-based on Monday.
462
+ return sql`DATE(DATE_SUB(${dateCol}, INTERVAL WEEKDAY(${dateCol}) DAY))`
463
+ }
464
+ const fmt = step === 'day' ? '%Y-%m-%d' : step === 'month' ? '%Y-%m-01' : '%Y-01-01'
401
465
  return sql`DATE_FORMAT(${dateCol}, ${fmt})`
402
466
  }
403
467
  // sqlite
404
- const fmt =
405
- step === 'day'
406
- ? '%Y-%m-%d'
407
- : step === 'week'
408
- ? '%Y-W%W'
409
- : step === 'month'
410
- ? '%Y-%m-01'
411
- : '%Y-01-01'
468
+ if (step === 'week') {
469
+ // %w is 0-based on Sunday; shift back to the Monday of the ISO week.
470
+ return sql`DATE(${dateCol}, '-' || ((CAST(STRFTIME('%w', ${dateCol}) AS INTEGER) + 6) % 7) || ' days')`
471
+ }
472
+ const fmt = step === 'day' ? '%Y-%m-%d' : step === 'month' ? '%Y-%m-01' : '%Y-01-01'
412
473
  return sql`STRFTIME(${fmt}, ${dateCol})`
413
474
  }
414
475
 
@@ -432,96 +493,3 @@ const metricExpr = (
432
493
  }
433
494
  }
434
495
 
435
- const isoDate = (d: Date): string => d.toISOString().slice(0, 10)
436
-
437
- const toDate = (v: unknown): Date => {
438
- if (v instanceof Date) return v
439
- if (typeof v === 'string' || typeof v === 'number') return new Date(v)
440
- return new Date(String(v))
441
- }
442
-
443
- const toNumber = (v: unknown): number => {
444
- if (typeof v === 'number') return v
445
- if (v == null) return 0
446
- const n = Number(v)
447
- return Number.isFinite(n) ? n : 0
448
- }
449
-
450
- const stringifyKey = (v: unknown): string => {
451
- if (v == null) return '__null__'
452
- if (typeof v === 'string') return v
453
- return String(v)
454
- }
455
-
456
- const sumValues = (m: Map<string, number>): number => {
457
- let s = 0
458
- for (const v of m.values()) s += v
459
- return s
460
- }
461
-
462
- const buildDisplaySql = (
463
- dialect: DrizzleDialect,
464
- tableName: string,
465
- query: TimeSeriesQuery,
466
- filter: Filter,
467
- ): string => {
468
- const ident = (s: string) => (dialect === 'mysql' ? `\`${s}\`` : `"${s}"`)
469
- const t = ident(tableName)
470
- const dateCol = ident(query.dateField)
471
- const bucket =
472
- query.step === 'all'
473
- ? `MIN(${dateCol})`
474
- : dialect === 'pg'
475
- ? `DATE_TRUNC('${query.step}', ${dateCol})`
476
- : dialect === 'mysql'
477
- ? `DATE_FORMAT(${dateCol}, ${mysqlFmt(query.step)})`
478
- : `STRFTIME(${sqliteFmt(query.step)}, ${dateCol})`
479
- const metric =
480
- query.metric === 'count'
481
- ? 'COUNT(*)'
482
- : `${query.metric.toUpperCase()}(${ident(query.field as string)})`
483
- const cols: string[] = []
484
- if (query.step !== 'all') cols.push(`${bucket} AS bucket`)
485
- cols.push(`${metric} AS value`)
486
- if (query.groupBy) cols.push(`${ident(query.groupBy)} AS series_key`)
487
-
488
- const where: string[] = [
489
- `${dateCol} >= '${query.from.toISOString()}'`,
490
- `${dateCol} <= '${query.to.toISOString()}'`,
491
- ]
492
- filter.reduce<null>((_, el) => {
493
- where.push(`${ident(el.path)} = '${String(el.value)}'`)
494
- return null
495
- }, null)
496
-
497
- const groupBy: string[] = []
498
- if (query.step !== 'all') groupBy.push('bucket')
499
- if (query.groupBy) groupBy.push('series_key')
500
-
501
- const lines = [
502
- `SELECT ${cols.join(', ')}`,
503
- `FROM ${t}`,
504
- `WHERE ${where.join(' AND ')}`,
505
- ]
506
- if (groupBy.length) lines.push(`GROUP BY ${groupBy.join(', ')}`)
507
- if (query.step !== 'all') lines.push('ORDER BY bucket ASC')
508
- return lines.join('\n')
509
- }
510
-
511
- const mysqlFmt = (step: TimeSeriesStep): string =>
512
- step === 'day'
513
- ? "'%Y-%m-%d'"
514
- : step === 'week'
515
- ? "'%x-W%v'"
516
- : step === 'month'
517
- ? "'%Y-%m-01'"
518
- : "'%Y-01-01'"
519
-
520
- const sqliteFmt = (step: TimeSeriesStep): string =>
521
- step === 'day'
522
- ? "'%Y-%m-%d'"
523
- : step === 'week'
524
- ? "'%Y-W%W'"
525
- : step === 'month'
526
- ? "'%Y-%m-01'"
527
- : "'%Y-01-01'"
package/src/types.ts CHANGED
@@ -50,8 +50,14 @@ export interface DrizzleUpdateBuilder {
50
50
  }
51
51
  }
52
52
 
53
+ /** Awaitable delete query that also supports `RETURNING` for a deleted count. */
54
+ export type DrizzleDeleteExecutable = Promise<unknown> & {
55
+ returning(): Promise<Array<Record<string, unknown>>>
56
+ }
57
+
53
58
  export interface DrizzleDeleteBuilder {
54
- where(condition: unknown): Promise<unknown>
59
+ where(condition: unknown): DrizzleDeleteExecutable
60
+ returning(): Promise<Array<Record<string, unknown>>>
55
61
  }
56
62
 
57
63
  export interface DrizzleClientLike {