@superfunctions/db 0.1.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 +341 -0
- package/dist/adapter/capabilities.d.ts +51 -0
- package/dist/adapter/capabilities.d.ts.map +1 -0
- package/dist/adapter/capabilities.js +56 -0
- package/dist/adapter/capabilities.js.map +1 -0
- package/dist/adapter/errors.d.ts +111 -0
- package/dist/adapter/errors.d.ts.map +1 -0
- package/dist/adapter/errors.js +172 -0
- package/dist/adapter/errors.js.map +1 -0
- package/dist/adapter/factory.d.ts +10 -0
- package/dist/adapter/factory.d.ts.map +1 -0
- package/dist/adapter/factory.js +232 -0
- package/dist/adapter/factory.js.map +1 -0
- package/dist/adapter/types.d.ts +255 -0
- package/dist/adapter/types.d.ts.map +1 -0
- package/dist/adapter/types.js +5 -0
- package/dist/adapter/types.js.map +1 -0
- package/dist/adapters/drizzle/index.d.ts +20 -0
- package/dist/adapters/drizzle/index.d.ts.map +1 -0
- package/dist/adapters/drizzle/index.js +346 -0
- package/dist/adapters/drizzle/index.js.map +1 -0
- package/dist/adapters/index.d.ts +12 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +12 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/kysely/index.d.ts +18 -0
- package/dist/adapters/kysely/index.d.ts.map +1 -0
- package/dist/adapters/kysely/index.js +305 -0
- package/dist/adapters/kysely/index.js.map +1 -0
- package/dist/adapters/memory/index.d.ts +17 -0
- package/dist/adapters/memory/index.d.ts.map +1 -0
- package/dist/adapters/memory/index.js +362 -0
- package/dist/adapters/memory/index.js.map +1 -0
- package/dist/adapters/prisma/index.d.ts +16 -0
- package/dist/adapters/prisma/index.d.ts.map +1 -0
- package/dist/adapters/prisma/index.js +247 -0
- package/dist/adapters/prisma/index.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/migrations/runtime-validation.d.ts +7 -0
- package/dist/migrations/runtime-validation.d.ts.map +1 -0
- package/dist/migrations/runtime-validation.js +40 -0
- package/dist/migrations/runtime-validation.js.map +1 -0
- package/dist/migrations/schema-tracker.d.ts +56 -0
- package/dist/migrations/schema-tracker.d.ts.map +1 -0
- package/dist/migrations/schema-tracker.js +121 -0
- package/dist/migrations/schema-tracker.js.map +1 -0
- package/dist/testing/contract-tests.d.ts +64 -0
- package/dist/testing/contract-tests.d.ts.map +1 -0
- package/dist/testing/contract-tests.js +391 -0
- package/dist/testing/contract-tests.js.map +1 -0
- package/dist/testing/index.d.ts +10 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +10 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/mocks.d.ts +92 -0
- package/dist/testing/mocks.d.ts.map +1 -0
- package/dist/testing/mocks.js +197 -0
- package/dist/testing/mocks.js.map +1 -0
- package/dist/utils/namespace.d.ts +49 -0
- package/dist/utils/namespace.d.ts.map +1 -0
- package/dist/utils/namespace.js +85 -0
- package/dist/utils/namespace.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* In-memory adapter for testing
|
|
3
|
+
*/
|
|
4
|
+
import { createAdapterFactory } from '../../adapter/factory.js';
|
|
5
|
+
import { NotFoundError, OperationNotSupportedError } from '../../adapter/errors.js';
|
|
6
|
+
/**
|
|
7
|
+
* In-memory adapter for testing
|
|
8
|
+
*/
|
|
9
|
+
export function memoryAdapter(config) {
|
|
10
|
+
const factory = createAdapterFactory({
|
|
11
|
+
config: {
|
|
12
|
+
adapterId: 'memory',
|
|
13
|
+
adapterName: 'Memory Adapter',
|
|
14
|
+
capabilities: {
|
|
15
|
+
types: {
|
|
16
|
+
json: true,
|
|
17
|
+
dates: true,
|
|
18
|
+
booleans: true,
|
|
19
|
+
bigint: true,
|
|
20
|
+
uuid: true,
|
|
21
|
+
enum: true,
|
|
22
|
+
},
|
|
23
|
+
operations: {
|
|
24
|
+
batch: true,
|
|
25
|
+
upsert: true,
|
|
26
|
+
streaming: false,
|
|
27
|
+
fulltext: false,
|
|
28
|
+
returning: true,
|
|
29
|
+
},
|
|
30
|
+
transactions: {
|
|
31
|
+
supported: false, // Simple in-memory, no real transactions
|
|
32
|
+
nested: false,
|
|
33
|
+
},
|
|
34
|
+
performance: {
|
|
35
|
+
supportsJoins: false,
|
|
36
|
+
supportsPreparedStatements: false,
|
|
37
|
+
},
|
|
38
|
+
schema: {
|
|
39
|
+
migrations: false,
|
|
40
|
+
constraints: false,
|
|
41
|
+
indexes: false,
|
|
42
|
+
},
|
|
43
|
+
advanced: {
|
|
44
|
+
customIdGeneration: true,
|
|
45
|
+
numericIds: true,
|
|
46
|
+
schemaNamespaces: false,
|
|
47
|
+
customTypes: false,
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
customIdGenerator: () => Math.random().toString(36).substr(2, 9),
|
|
51
|
+
namespace: config?.namespace,
|
|
52
|
+
debug: config?.debug,
|
|
53
|
+
},
|
|
54
|
+
adapter: (context) => {
|
|
55
|
+
// In-memory storage
|
|
56
|
+
const store = new Map();
|
|
57
|
+
const schemaVersions = new Map();
|
|
58
|
+
const startTime = Date.now();
|
|
59
|
+
return {
|
|
60
|
+
async create(params) {
|
|
61
|
+
const tableName = context.getModelName(params.model);
|
|
62
|
+
if (!store.has(tableName)) {
|
|
63
|
+
store.set(tableName, new Map());
|
|
64
|
+
}
|
|
65
|
+
const table = store.get(tableName);
|
|
66
|
+
const id = params.data.id || Math.random().toString(36).substr(2, 9);
|
|
67
|
+
const record = { ...params.data, id };
|
|
68
|
+
table.set(id, record);
|
|
69
|
+
if (params.select) {
|
|
70
|
+
const selected = {};
|
|
71
|
+
for (const field of params.select) {
|
|
72
|
+
selected[field] = record[field];
|
|
73
|
+
}
|
|
74
|
+
return selected;
|
|
75
|
+
}
|
|
76
|
+
return record;
|
|
77
|
+
},
|
|
78
|
+
async findOne(params) {
|
|
79
|
+
const tableName = context.getModelName(params.model);
|
|
80
|
+
const table = store.get(tableName);
|
|
81
|
+
if (!table) {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
for (const record of table.values()) {
|
|
85
|
+
if (matchesWhere(record, params.where)) {
|
|
86
|
+
if (params.select) {
|
|
87
|
+
const selected = {};
|
|
88
|
+
for (const field of params.select) {
|
|
89
|
+
selected[field] = record[field];
|
|
90
|
+
}
|
|
91
|
+
return selected;
|
|
92
|
+
}
|
|
93
|
+
return record;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return null;
|
|
97
|
+
},
|
|
98
|
+
async findMany(params) {
|
|
99
|
+
const tableName = context.getModelName(params.model);
|
|
100
|
+
const table = store.get(tableName);
|
|
101
|
+
if (!table) {
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
let results = Array.from(table.values()).filter((record) => matchesWhere(record, params.where));
|
|
105
|
+
// Apply ordering
|
|
106
|
+
if (params.orderBy) {
|
|
107
|
+
results = applyOrdering(results, params.orderBy);
|
|
108
|
+
}
|
|
109
|
+
// Apply pagination
|
|
110
|
+
if (params.offset) {
|
|
111
|
+
results = results.slice(params.offset);
|
|
112
|
+
}
|
|
113
|
+
if (params.limit) {
|
|
114
|
+
results = results.slice(0, params.limit);
|
|
115
|
+
}
|
|
116
|
+
// Apply selection
|
|
117
|
+
if (params.select) {
|
|
118
|
+
results = results.map((record) => {
|
|
119
|
+
const selected = {};
|
|
120
|
+
for (const field of params.select) {
|
|
121
|
+
selected[field] = record[field];
|
|
122
|
+
}
|
|
123
|
+
return selected;
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return results;
|
|
127
|
+
},
|
|
128
|
+
async update(params) {
|
|
129
|
+
const tableName = context.getModelName(params.model);
|
|
130
|
+
const table = store.get(tableName);
|
|
131
|
+
if (!table) {
|
|
132
|
+
throw new NotFoundError(params.model, params.where);
|
|
133
|
+
}
|
|
134
|
+
for (const [id, record] of table.entries()) {
|
|
135
|
+
if (matchesWhere(record, params.where)) {
|
|
136
|
+
const updated = { ...record, ...params.data };
|
|
137
|
+
table.set(id, updated);
|
|
138
|
+
if (params.select) {
|
|
139
|
+
const selected = {};
|
|
140
|
+
for (const field of params.select) {
|
|
141
|
+
selected[field] = updated[field];
|
|
142
|
+
}
|
|
143
|
+
return selected;
|
|
144
|
+
}
|
|
145
|
+
return updated;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
throw new NotFoundError(params.model, params.where);
|
|
149
|
+
},
|
|
150
|
+
async delete(params) {
|
|
151
|
+
const tableName = context.getModelName(params.model);
|
|
152
|
+
const table = store.get(tableName);
|
|
153
|
+
if (!table) {
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
for (const [id, record] of table.entries()) {
|
|
157
|
+
if (matchesWhere(record, params.where)) {
|
|
158
|
+
table.delete(id);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
async createMany(params) {
|
|
164
|
+
const results = [];
|
|
165
|
+
for (const data of params.data) {
|
|
166
|
+
const result = await this.create({
|
|
167
|
+
model: params.model,
|
|
168
|
+
data,
|
|
169
|
+
select: params.select,
|
|
170
|
+
namespace: params.namespace,
|
|
171
|
+
});
|
|
172
|
+
results.push(result);
|
|
173
|
+
}
|
|
174
|
+
return results;
|
|
175
|
+
},
|
|
176
|
+
async updateMany(params) {
|
|
177
|
+
const tableName = context.getModelName(params.model);
|
|
178
|
+
const table = store.get(tableName);
|
|
179
|
+
if (!table) {
|
|
180
|
+
return 0;
|
|
181
|
+
}
|
|
182
|
+
let count = 0;
|
|
183
|
+
for (const [id, record] of table.entries()) {
|
|
184
|
+
if (matchesWhere(record, params.where)) {
|
|
185
|
+
const updated = { ...record, ...params.data };
|
|
186
|
+
table.set(id, updated);
|
|
187
|
+
count++;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
return count;
|
|
191
|
+
},
|
|
192
|
+
async deleteMany(params) {
|
|
193
|
+
const tableName = context.getModelName(params.model);
|
|
194
|
+
const table = store.get(tableName);
|
|
195
|
+
if (!table) {
|
|
196
|
+
return 0;
|
|
197
|
+
}
|
|
198
|
+
let count = 0;
|
|
199
|
+
for (const [id, record] of table.entries()) {
|
|
200
|
+
if (matchesWhere(record, params.where)) {
|
|
201
|
+
table.delete(id);
|
|
202
|
+
count++;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return count;
|
|
206
|
+
},
|
|
207
|
+
async upsert(params) {
|
|
208
|
+
try {
|
|
209
|
+
const existing = await this.findOne({
|
|
210
|
+
model: params.model,
|
|
211
|
+
where: params.where,
|
|
212
|
+
namespace: params.namespace,
|
|
213
|
+
});
|
|
214
|
+
if (existing) {
|
|
215
|
+
return await this.update({
|
|
216
|
+
model: params.model,
|
|
217
|
+
where: params.where,
|
|
218
|
+
data: params.update,
|
|
219
|
+
select: params.select,
|
|
220
|
+
namespace: params.namespace,
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
return await this.create({
|
|
225
|
+
model: params.model,
|
|
226
|
+
data: params.create,
|
|
227
|
+
select: params.select,
|
|
228
|
+
namespace: params.namespace,
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
catch (error) {
|
|
233
|
+
throw error;
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
async count(params) {
|
|
237
|
+
const tableName = context.getModelName(params.model);
|
|
238
|
+
const table = store.get(tableName);
|
|
239
|
+
if (!table) {
|
|
240
|
+
return 0;
|
|
241
|
+
}
|
|
242
|
+
if (!params.where) {
|
|
243
|
+
return table.size;
|
|
244
|
+
}
|
|
245
|
+
let count = 0;
|
|
246
|
+
for (const record of table.values()) {
|
|
247
|
+
if (matchesWhere(record, params.where)) {
|
|
248
|
+
count++;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
return count;
|
|
252
|
+
},
|
|
253
|
+
async transaction(_callback) {
|
|
254
|
+
throw new OperationNotSupportedError('transaction', 'Memory Adapter');
|
|
255
|
+
},
|
|
256
|
+
async initialize() {
|
|
257
|
+
// Nothing to initialize for in-memory adapter
|
|
258
|
+
},
|
|
259
|
+
async isHealthy() {
|
|
260
|
+
return {
|
|
261
|
+
healthy: true,
|
|
262
|
+
uptime: Date.now() - startTime,
|
|
263
|
+
};
|
|
264
|
+
},
|
|
265
|
+
async close() {
|
|
266
|
+
// Clear storage on close
|
|
267
|
+
store.clear();
|
|
268
|
+
schemaVersions.clear();
|
|
269
|
+
},
|
|
270
|
+
async getSchemaVersion(namespace) {
|
|
271
|
+
return schemaVersions.get(namespace) ?? 0;
|
|
272
|
+
},
|
|
273
|
+
async setSchemaVersion(namespace, version) {
|
|
274
|
+
schemaVersions.set(namespace, version);
|
|
275
|
+
},
|
|
276
|
+
async validateSchema(_schema) {
|
|
277
|
+
// Simple validation for memory adapter
|
|
278
|
+
return { valid: true };
|
|
279
|
+
},
|
|
280
|
+
};
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
return factory({});
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Check if a record matches where clauses
|
|
287
|
+
*/
|
|
288
|
+
function matchesWhere(record, where) {
|
|
289
|
+
if (!where || where.length === 0) {
|
|
290
|
+
return true;
|
|
291
|
+
}
|
|
292
|
+
for (const clause of where) {
|
|
293
|
+
const value = record[clause.field];
|
|
294
|
+
const matches = matchesClause(value, clause);
|
|
295
|
+
if (clause.connector === 'OR') {
|
|
296
|
+
if (matches)
|
|
297
|
+
return true;
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
// Default AND
|
|
301
|
+
if (!matches)
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
return true;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Check if a value matches a single where clause
|
|
309
|
+
*/
|
|
310
|
+
function matchesClause(value, clause) {
|
|
311
|
+
switch (clause.operator) {
|
|
312
|
+
case 'eq':
|
|
313
|
+
return value === clause.value;
|
|
314
|
+
case 'ne':
|
|
315
|
+
return value !== clause.value;
|
|
316
|
+
case 'gt':
|
|
317
|
+
return value > clause.value;
|
|
318
|
+
case 'gte':
|
|
319
|
+
return value >= clause.value;
|
|
320
|
+
case 'lt':
|
|
321
|
+
return value < clause.value;
|
|
322
|
+
case 'lte':
|
|
323
|
+
return value <= clause.value;
|
|
324
|
+
case 'in':
|
|
325
|
+
return Array.isArray(clause.value) && clause.value.includes(value);
|
|
326
|
+
case 'not_in':
|
|
327
|
+
return Array.isArray(clause.value) && !clause.value.includes(value);
|
|
328
|
+
case 'contains':
|
|
329
|
+
return (typeof value === 'string' &&
|
|
330
|
+
typeof clause.value === 'string' &&
|
|
331
|
+
value.includes(clause.value));
|
|
332
|
+
case 'starts_with':
|
|
333
|
+
return (typeof value === 'string' &&
|
|
334
|
+
typeof clause.value === 'string' &&
|
|
335
|
+
value.startsWith(clause.value));
|
|
336
|
+
case 'ends_with':
|
|
337
|
+
return (typeof value === 'string' &&
|
|
338
|
+
typeof clause.value === 'string' &&
|
|
339
|
+
value.endsWith(clause.value));
|
|
340
|
+
default:
|
|
341
|
+
return false;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Apply ordering to results
|
|
346
|
+
*/
|
|
347
|
+
function applyOrdering(results, orderBy) {
|
|
348
|
+
return results.sort((a, b) => {
|
|
349
|
+
for (const order of orderBy) {
|
|
350
|
+
const aVal = a[order.field];
|
|
351
|
+
const bVal = b[order.field];
|
|
352
|
+
if (aVal < bVal) {
|
|
353
|
+
return order.direction === 'asc' ? -1 : 1;
|
|
354
|
+
}
|
|
355
|
+
if (aVal > bVal) {
|
|
356
|
+
return order.direction === 'asc' ? 1 : -1;
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
return 0;
|
|
360
|
+
});
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/memory/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma adapter (minimal stub implementation)
|
|
3
|
+
*
|
|
4
|
+
* This is a placeholder demonstrating the adapter pattern for Prisma.
|
|
5
|
+
* A full implementation would map Prisma client methods to the Adapter interface.
|
|
6
|
+
*/
|
|
7
|
+
import type { Adapter } from '../../adapter/types.js';
|
|
8
|
+
export interface PrismaAdapterConfig {
|
|
9
|
+
prisma: any;
|
|
10
|
+
modelMap: Record<string, string>;
|
|
11
|
+
schemaVersionsTable?: string;
|
|
12
|
+
namespace?: any;
|
|
13
|
+
debug?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function prismaAdapter(config: PrismaAdapterConfig): Adapter;
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,OAAO,EAcR,MAAM,wBAAwB,CAAC;AAIhC,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,GAAG,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AA4FD,wBAAgB,aAAa,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAqKlE"}
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma adapter (minimal stub implementation)
|
|
3
|
+
*
|
|
4
|
+
* This is a placeholder demonstrating the adapter pattern for Prisma.
|
|
5
|
+
* A full implementation would map Prisma client methods to the Adapter interface.
|
|
6
|
+
*/
|
|
7
|
+
import { createAdapterFactory } from '../../adapter/factory.js';
|
|
8
|
+
import { OperationNotSupportedError } from '../../adapter/errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Build Prisma where clause from generic WhereClause array
|
|
11
|
+
*/
|
|
12
|
+
function buildPrismaWhere(where) {
|
|
13
|
+
if (!where || where.length === 0)
|
|
14
|
+
return {};
|
|
15
|
+
const conditions = where.map((clause) => {
|
|
16
|
+
const { field, operator, value } = clause;
|
|
17
|
+
switch (operator) {
|
|
18
|
+
case 'eq':
|
|
19
|
+
return { [field]: value };
|
|
20
|
+
case 'ne':
|
|
21
|
+
return { [field]: { not: value } };
|
|
22
|
+
case 'gt':
|
|
23
|
+
return { [field]: { gt: value } };
|
|
24
|
+
case 'gte':
|
|
25
|
+
return { [field]: { gte: value } };
|
|
26
|
+
case 'lt':
|
|
27
|
+
return { [field]: { lt: value } };
|
|
28
|
+
case 'lte':
|
|
29
|
+
return { [field]: { lte: value } };
|
|
30
|
+
case 'in':
|
|
31
|
+
return { [field]: { in: Array.isArray(value) ? value : [value] } };
|
|
32
|
+
case 'not_in':
|
|
33
|
+
return { [field]: { notIn: Array.isArray(value) ? value : [value] } };
|
|
34
|
+
case 'contains':
|
|
35
|
+
return { [field]: { contains: value } };
|
|
36
|
+
case 'starts_with':
|
|
37
|
+
return { [field]: { startsWith: value } };
|
|
38
|
+
case 'ends_with':
|
|
39
|
+
return { [field]: { endsWith: value } };
|
|
40
|
+
default:
|
|
41
|
+
throw new Error(`Unsupported operator: ${operator}`);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
// Combine with AND/OR based on connector
|
|
45
|
+
if (conditions.length === 1)
|
|
46
|
+
return conditions[0];
|
|
47
|
+
// Check if any conditions use OR connector
|
|
48
|
+
const hasOr = where.some((c, i) => i > 0 && c.connector === 'OR');
|
|
49
|
+
if (hasOr) {
|
|
50
|
+
// Mixed AND/OR: group by connector
|
|
51
|
+
const result = { AND: [] };
|
|
52
|
+
let currentGroup = [conditions[0]];
|
|
53
|
+
for (let i = 1; i < conditions.length; i++) {
|
|
54
|
+
if (where[i].connector === 'OR') {
|
|
55
|
+
if (currentGroup.length > 0) {
|
|
56
|
+
result.AND.push(currentGroup.length === 1 ? currentGroup[0] : { OR: currentGroup });
|
|
57
|
+
currentGroup = [];
|
|
58
|
+
}
|
|
59
|
+
currentGroup.push(conditions[i]);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
currentGroup.push(conditions[i]);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (currentGroup.length > 0) {
|
|
66
|
+
result.AND.push(currentGroup.length === 1 ? currentGroup[0] : { AND: currentGroup });
|
|
67
|
+
}
|
|
68
|
+
return result.AND.length === 1 ? result.AND[0] : result;
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
// All AND
|
|
72
|
+
return { AND: conditions };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Build Prisma orderBy from generic OrderBy array
|
|
77
|
+
*/
|
|
78
|
+
function buildPrismaOrderBy(orderBy) {
|
|
79
|
+
if (!orderBy || orderBy.length === 0)
|
|
80
|
+
return undefined;
|
|
81
|
+
if (orderBy.length === 1) {
|
|
82
|
+
return { [orderBy[0].field]: orderBy[0].direction };
|
|
83
|
+
}
|
|
84
|
+
return orderBy.map((o) => ({ [o.field]: o.direction }));
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Build Prisma select from field list
|
|
88
|
+
*/
|
|
89
|
+
function buildPrismaSelect(select) {
|
|
90
|
+
if (!select || select.length === 0)
|
|
91
|
+
return undefined;
|
|
92
|
+
return Object.fromEntries(select.map((f) => [f, true]));
|
|
93
|
+
}
|
|
94
|
+
export function prismaAdapter(config) {
|
|
95
|
+
if (!config?.prisma)
|
|
96
|
+
throw new Error('prismaAdapter: config.prisma is required');
|
|
97
|
+
if (!config?.modelMap)
|
|
98
|
+
throw new Error('prismaAdapter: config.modelMap is required');
|
|
99
|
+
const createImpl = (_ctx) => {
|
|
100
|
+
const { prisma, modelMap, schemaVersionsTable } = config;
|
|
101
|
+
const resolveModel = (model) => {
|
|
102
|
+
const prismaModel = modelMap[model];
|
|
103
|
+
if (!prismaModel)
|
|
104
|
+
throw new Error(`Prisma adapter: no model mapping for "${model}"`);
|
|
105
|
+
return prisma[prismaModel];
|
|
106
|
+
};
|
|
107
|
+
return {
|
|
108
|
+
async create({ model, data, select }) {
|
|
109
|
+
const m = resolveModel(model);
|
|
110
|
+
const prismaSelect = buildPrismaSelect(select);
|
|
111
|
+
return await m.create({ data, select: prismaSelect });
|
|
112
|
+
},
|
|
113
|
+
async findOne({ model, where, select }) {
|
|
114
|
+
const m = resolveModel(model);
|
|
115
|
+
const prismaWhere = buildPrismaWhere(where);
|
|
116
|
+
const prismaSelect = buildPrismaSelect(select);
|
|
117
|
+
return await m.findFirst({ where: prismaWhere, select: prismaSelect });
|
|
118
|
+
},
|
|
119
|
+
async findMany({ model, where, select, orderBy, limit, offset }) {
|
|
120
|
+
const m = resolveModel(model);
|
|
121
|
+
const prismaWhere = buildPrismaWhere(where ?? []);
|
|
122
|
+
const prismaSelect = buildPrismaSelect(select);
|
|
123
|
+
const prismaOrderBy = buildPrismaOrderBy(orderBy);
|
|
124
|
+
return await m.findMany({
|
|
125
|
+
where: prismaWhere,
|
|
126
|
+
select: prismaSelect,
|
|
127
|
+
orderBy: prismaOrderBy,
|
|
128
|
+
take: limit,
|
|
129
|
+
skip: offset,
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
async update({ model, where, data, select }) {
|
|
133
|
+
const m = resolveModel(model);
|
|
134
|
+
// Prisma update requires unique where; use first clause
|
|
135
|
+
const prismaWhere = where.length > 0 ? { [where[0].field]: where[0].value } : {};
|
|
136
|
+
const prismaSelect = buildPrismaSelect(select);
|
|
137
|
+
return await m.update({ where: prismaWhere, data, select: prismaSelect });
|
|
138
|
+
},
|
|
139
|
+
async delete({ model, where }) {
|
|
140
|
+
const m = resolveModel(model);
|
|
141
|
+
// Prisma delete requires unique where; use first clause
|
|
142
|
+
const prismaWhere = where.length > 0 ? { [where[0].field]: where[0].value } : {};
|
|
143
|
+
await m.delete({ where: prismaWhere });
|
|
144
|
+
},
|
|
145
|
+
async createMany({ model, data }) {
|
|
146
|
+
const m = resolveModel(model);
|
|
147
|
+
await m.createMany({ data });
|
|
148
|
+
// Prisma createMany doesn't return records; fallback
|
|
149
|
+
return data;
|
|
150
|
+
},
|
|
151
|
+
async updateMany({ model, where, data }) {
|
|
152
|
+
const m = resolveModel(model);
|
|
153
|
+
const prismaWhere = buildPrismaWhere(where ?? []);
|
|
154
|
+
const result = await m.updateMany({ where: prismaWhere, data });
|
|
155
|
+
return result.count ?? 0;
|
|
156
|
+
},
|
|
157
|
+
async deleteMany({ model, where }) {
|
|
158
|
+
const m = resolveModel(model);
|
|
159
|
+
const prismaWhere = buildPrismaWhere(where ?? []);
|
|
160
|
+
const result = await m.deleteMany({ where: prismaWhere });
|
|
161
|
+
return result.count ?? 0;
|
|
162
|
+
},
|
|
163
|
+
async upsert({ model, where, create, update, select }) {
|
|
164
|
+
const m = resolveModel(model);
|
|
165
|
+
// Prisma upsert requires unique where; use first clause
|
|
166
|
+
const prismaWhere = where.length > 0 ? { [where[0].field]: where[0].value } : {};
|
|
167
|
+
const prismaSelect = buildPrismaSelect(select);
|
|
168
|
+
return await m.upsert({ where: prismaWhere, create, update, select: prismaSelect });
|
|
169
|
+
},
|
|
170
|
+
async count({ model, where }) {
|
|
171
|
+
const m = resolveModel(model);
|
|
172
|
+
const prismaWhere = buildPrismaWhere(where ?? []);
|
|
173
|
+
return await m.count({ where: prismaWhere });
|
|
174
|
+
},
|
|
175
|
+
async transaction(fn) {
|
|
176
|
+
return await prisma.$transaction(async (tx) => {
|
|
177
|
+
const child = prismaAdapter({ ...config, prisma: tx });
|
|
178
|
+
return await fn(child);
|
|
179
|
+
});
|
|
180
|
+
},
|
|
181
|
+
async initialize() {
|
|
182
|
+
await prisma.$connect();
|
|
183
|
+
},
|
|
184
|
+
async isHealthy() {
|
|
185
|
+
try {
|
|
186
|
+
await prisma.$queryRaw `SELECT 1`;
|
|
187
|
+
return { healthy: true, uptime: 0 };
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
return { healthy: false, uptime: 0 };
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
async close() {
|
|
194
|
+
await prisma.$disconnect();
|
|
195
|
+
},
|
|
196
|
+
async getSchemaVersion(namespace) {
|
|
197
|
+
if (!schemaVersionsTable)
|
|
198
|
+
return 0;
|
|
199
|
+
const m = prisma[schemaVersionsTable];
|
|
200
|
+
if (!m)
|
|
201
|
+
return 0;
|
|
202
|
+
try {
|
|
203
|
+
const record = await m.findFirst({ where: { namespace } });
|
|
204
|
+
return record?.version ?? 0;
|
|
205
|
+
}
|
|
206
|
+
catch {
|
|
207
|
+
return 0;
|
|
208
|
+
}
|
|
209
|
+
},
|
|
210
|
+
async setSchemaVersion(namespace, version) {
|
|
211
|
+
if (!schemaVersionsTable) {
|
|
212
|
+
throw new OperationNotSupportedError('setSchemaVersion', 'PrismaAdapter (schemaVersionsTable not configured)');
|
|
213
|
+
}
|
|
214
|
+
const m = prisma[schemaVersionsTable];
|
|
215
|
+
if (!m)
|
|
216
|
+
throw new Error('Schema versions table model not found');
|
|
217
|
+
await m.upsert({
|
|
218
|
+
where: { namespace },
|
|
219
|
+
create: { namespace, version, appliedAt: new Date() },
|
|
220
|
+
update: { version, appliedAt: new Date() },
|
|
221
|
+
});
|
|
222
|
+
},
|
|
223
|
+
async validateSchema() {
|
|
224
|
+
return { valid: true };
|
|
225
|
+
},
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
const factory = createAdapterFactory({
|
|
229
|
+
config: {
|
|
230
|
+
adapterId: 'prisma',
|
|
231
|
+
adapterName: 'Prisma Adapter',
|
|
232
|
+
debug: config.debug ?? false,
|
|
233
|
+
namespace: config.namespace,
|
|
234
|
+
capabilities: {
|
|
235
|
+
types: { json: true, dates: true, booleans: true, bigint: true, uuid: true, enum: true },
|
|
236
|
+
operations: { batch: true, upsert: true, streaming: false, fulltext: false, returning: false },
|
|
237
|
+
transactions: { supported: true, nested: false, isolation: undefined },
|
|
238
|
+
performance: { supportsJoins: true, supportsPreparedStatements: true },
|
|
239
|
+
schema: { migrations: true, constraints: true, indexes: true },
|
|
240
|
+
advanced: { customIdGeneration: false, numericIds: true, schemaNamespaces: false, customTypes: true },
|
|
241
|
+
},
|
|
242
|
+
},
|
|
243
|
+
adapter: createImpl,
|
|
244
|
+
});
|
|
245
|
+
return factory({});
|
|
246
|
+
}
|
|
247
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/prisma/index.ts"],"names":[],"mappings":"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"}
|