@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.
Files changed (66) hide show
  1. package/README.md +341 -0
  2. package/dist/adapter/capabilities.d.ts +51 -0
  3. package/dist/adapter/capabilities.d.ts.map +1 -0
  4. package/dist/adapter/capabilities.js +56 -0
  5. package/dist/adapter/capabilities.js.map +1 -0
  6. package/dist/adapter/errors.d.ts +111 -0
  7. package/dist/adapter/errors.d.ts.map +1 -0
  8. package/dist/adapter/errors.js +172 -0
  9. package/dist/adapter/errors.js.map +1 -0
  10. package/dist/adapter/factory.d.ts +10 -0
  11. package/dist/adapter/factory.d.ts.map +1 -0
  12. package/dist/adapter/factory.js +232 -0
  13. package/dist/adapter/factory.js.map +1 -0
  14. package/dist/adapter/types.d.ts +255 -0
  15. package/dist/adapter/types.d.ts.map +1 -0
  16. package/dist/adapter/types.js +5 -0
  17. package/dist/adapter/types.js.map +1 -0
  18. package/dist/adapters/drizzle/index.d.ts +20 -0
  19. package/dist/adapters/drizzle/index.d.ts.map +1 -0
  20. package/dist/adapters/drizzle/index.js +346 -0
  21. package/dist/adapters/drizzle/index.js.map +1 -0
  22. package/dist/adapters/index.d.ts +12 -0
  23. package/dist/adapters/index.d.ts.map +1 -0
  24. package/dist/adapters/index.js +12 -0
  25. package/dist/adapters/index.js.map +1 -0
  26. package/dist/adapters/kysely/index.d.ts +18 -0
  27. package/dist/adapters/kysely/index.d.ts.map +1 -0
  28. package/dist/adapters/kysely/index.js +305 -0
  29. package/dist/adapters/kysely/index.js.map +1 -0
  30. package/dist/adapters/memory/index.d.ts +17 -0
  31. package/dist/adapters/memory/index.d.ts.map +1 -0
  32. package/dist/adapters/memory/index.js +362 -0
  33. package/dist/adapters/memory/index.js.map +1 -0
  34. package/dist/adapters/prisma/index.d.ts +16 -0
  35. package/dist/adapters/prisma/index.d.ts.map +1 -0
  36. package/dist/adapters/prisma/index.js +247 -0
  37. package/dist/adapters/prisma/index.js.map +1 -0
  38. package/dist/index.d.ts +15 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/index.js +15 -0
  41. package/dist/index.js.map +1 -0
  42. package/dist/migrations/runtime-validation.d.ts +7 -0
  43. package/dist/migrations/runtime-validation.d.ts.map +1 -0
  44. package/dist/migrations/runtime-validation.js +40 -0
  45. package/dist/migrations/runtime-validation.js.map +1 -0
  46. package/dist/migrations/schema-tracker.d.ts +56 -0
  47. package/dist/migrations/schema-tracker.d.ts.map +1 -0
  48. package/dist/migrations/schema-tracker.js +121 -0
  49. package/dist/migrations/schema-tracker.js.map +1 -0
  50. package/dist/testing/contract-tests.d.ts +64 -0
  51. package/dist/testing/contract-tests.d.ts.map +1 -0
  52. package/dist/testing/contract-tests.js +391 -0
  53. package/dist/testing/contract-tests.js.map +1 -0
  54. package/dist/testing/index.d.ts +10 -0
  55. package/dist/testing/index.d.ts.map +1 -0
  56. package/dist/testing/index.js +10 -0
  57. package/dist/testing/index.js.map +1 -0
  58. package/dist/testing/mocks.d.ts +92 -0
  59. package/dist/testing/mocks.d.ts.map +1 -0
  60. package/dist/testing/mocks.js +197 -0
  61. package/dist/testing/mocks.js.map +1 -0
  62. package/dist/utils/namespace.d.ts +49 -0
  63. package/dist/utils/namespace.d.ts.map +1 -0
  64. package/dist/utils/namespace.js +85 -0
  65. package/dist/utils/namespace.js.map +1 -0
  66. 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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"}