@farming-labs/orm-prisma 0.0.3

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/dist/index.cjs ADDED
@@ -0,0 +1,538 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/index.ts
21
+ var index_exports = {};
22
+ __export(index_exports, {
23
+ createPrismaDriver: () => createPrismaDriver
24
+ });
25
+ module.exports = __toCommonJS(index_exports);
26
+ var import_node_crypto = require("crypto");
27
+ var import_orm = require("@farming-labs/orm");
28
+ var manifestCache = /* @__PURE__ */ new WeakMap();
29
+ function getManifest(schema) {
30
+ const cached = manifestCache.get(schema);
31
+ if (cached) return cached;
32
+ const next = (0, import_orm.createManifest)(schema);
33
+ manifestCache.set(schema, next);
34
+ return next;
35
+ }
36
+ function identityField(model) {
37
+ if (model.fields.id) return model.fields.id;
38
+ const uniqueField = Object.values(model.fields).find((field) => field.unique);
39
+ if (uniqueField) return uniqueField;
40
+ throw new Error(
41
+ `Model "${model.name}" requires an "id" field or a unique field for the Prisma runtime.`
42
+ );
43
+ }
44
+ function applyDefault(value, field) {
45
+ if (value !== void 0) return value;
46
+ if (field.generated === "id") return (0, import_node_crypto.randomUUID)();
47
+ if (field.generated === "now") return /* @__PURE__ */ new Date();
48
+ if (typeof field.defaultValue === "function") {
49
+ return field.defaultValue();
50
+ }
51
+ return field.defaultValue;
52
+ }
53
+ function parseReference(reference) {
54
+ if (!reference) return null;
55
+ const [model, field] = reference.split(".");
56
+ if (!model || !field) return null;
57
+ return { model, field };
58
+ }
59
+ function isFilterObject(value) {
60
+ return !!value && typeof value === "object" && !(value instanceof Date) && !Array.isArray(value);
61
+ }
62
+ function mergeWhere(...clauses) {
63
+ const defined = clauses.filter(Boolean);
64
+ if (!defined.length) return void 0;
65
+ if (defined.length === 1) return defined[0];
66
+ return {
67
+ AND: defined
68
+ };
69
+ }
70
+ function extractEqualityValue(filter) {
71
+ if (!isFilterObject(filter)) {
72
+ return {
73
+ supported: true,
74
+ value: filter
75
+ };
76
+ }
77
+ const keys = Object.keys(filter);
78
+ if (keys.length === 1 && "eq" in filter) {
79
+ return {
80
+ supported: true,
81
+ value: filter.eq
82
+ };
83
+ }
84
+ return {
85
+ supported: false,
86
+ value: void 0
87
+ };
88
+ }
89
+ function extractUpsertConflict(model, where) {
90
+ const keys = Object.keys(where).filter((key) => key !== "AND" && key !== "OR" && key !== "NOT");
91
+ if ("AND" in where || "OR" in where || "NOT" in where || keys.length !== 1) {
92
+ throw new Error(
93
+ `Upsert on model "${model.name}" requires a single unique equality filter in "where".`
94
+ );
95
+ }
96
+ const fieldName = keys[0];
97
+ const field = model.fields[fieldName];
98
+ if (!field) {
99
+ throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
100
+ }
101
+ if (!(field.kind === "id" || field.unique)) {
102
+ throw new Error(
103
+ `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to be unique or an id field.`
104
+ );
105
+ }
106
+ const { supported, value } = extractEqualityValue(where[fieldName]);
107
+ if (!supported || value === void 0 || value === null) {
108
+ throw new Error(
109
+ `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to use a single non-null equality value.`
110
+ );
111
+ }
112
+ return {
113
+ field,
114
+ value
115
+ };
116
+ }
117
+ function mergeUpsertCreateData(model, createData, conflict) {
118
+ const currentValue = createData[conflict.field.name];
119
+ if (currentValue !== void 0 && currentValue !== conflict.value) {
120
+ throw new Error(
121
+ `Upsert on model "${model.name}" requires create.${conflict.field.name} to match where.${conflict.field.name}.`
122
+ );
123
+ }
124
+ return {
125
+ ...createData,
126
+ [conflict.field.name]: currentValue ?? conflict.value
127
+ };
128
+ }
129
+ function validateUpsertUpdateData(model, updateData, conflict) {
130
+ const nextValue = updateData[conflict.field.name];
131
+ if (nextValue !== void 0 && nextValue !== conflict.value) {
132
+ throw new Error(
133
+ `Upsert on model "${model.name}" cannot change the conflict field "${conflict.field.name}".`
134
+ );
135
+ }
136
+ }
137
+ function buildCreateData(model, input) {
138
+ const output = {};
139
+ for (const field of Object.values(model.fields)) {
140
+ const value = applyDefault(input[field.name], field);
141
+ if (value !== void 0) {
142
+ output[field.name] = value;
143
+ }
144
+ }
145
+ return output;
146
+ }
147
+ function buildUpdateData(input) {
148
+ return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
149
+ }
150
+ function compileFilter(filter) {
151
+ if (!isFilterObject(filter)) return filter;
152
+ const output = {};
153
+ if ("eq" in filter) output.equals = filter.eq;
154
+ if ("contains" in filter) output.contains = filter.contains;
155
+ if ("in" in filter) output.in = filter.in;
156
+ if ("not" in filter) output.not = filter.not;
157
+ if ("gt" in filter) output.gt = filter.gt;
158
+ if ("gte" in filter) output.gte = filter.gte;
159
+ if ("lt" in filter) output.lt = filter.lt;
160
+ if ("lte" in filter) output.lte = filter.lte;
161
+ return output;
162
+ }
163
+ function compileWhere(model, where) {
164
+ if (!where) return void 0;
165
+ const output = {};
166
+ for (const [key, value] of Object.entries(where)) {
167
+ if (key === "AND" && Array.isArray(value)) {
168
+ output.AND = value.map((entry) => compileWhere(model, entry)).filter(Boolean);
169
+ continue;
170
+ }
171
+ if (key === "OR" && Array.isArray(value)) {
172
+ output.OR = value.map((entry) => compileWhere(model, entry)).filter(Boolean);
173
+ continue;
174
+ }
175
+ if (key === "NOT" && value) {
176
+ const compiled = compileWhere(model, value);
177
+ if (compiled) output.NOT = compiled;
178
+ continue;
179
+ }
180
+ if (!(key in model.fields)) continue;
181
+ output[key] = compileFilter(value);
182
+ }
183
+ return output;
184
+ }
185
+ function compileOrderBy(orderBy) {
186
+ if (!orderBy) return void 0;
187
+ const entries = Object.entries(orderBy).filter(([, value]) => value);
188
+ if (!entries.length) return void 0;
189
+ return entries.map(([key, value]) => ({
190
+ [key]: value
191
+ }));
192
+ }
193
+ function buildIdentityWhere(model, row) {
194
+ const field = identityField(model);
195
+ const value = row[field.name];
196
+ if (value == null) {
197
+ throw new Error(
198
+ `Model "${model.name}" requires a non-null identity value for field "${field.name}".`
199
+ );
200
+ }
201
+ return {
202
+ [field.name]: value
203
+ };
204
+ }
205
+ function createPrismaDriverInternal(config, state = {}) {
206
+ function getDelegate(modelName) {
207
+ const key = config.models?.[modelName] ?? modelName;
208
+ const delegate = config.client[key];
209
+ if (!delegate) {
210
+ throw new Error(
211
+ `Prisma delegate "${String(key)}" for model "${String(modelName)}" is missing.`
212
+ );
213
+ }
214
+ return delegate;
215
+ }
216
+ async function loadRows(schema, modelName, args) {
217
+ const manifest = getManifest(schema);
218
+ const model = manifest.models[modelName];
219
+ const rows = await getDelegate(modelName).findMany({
220
+ where: compileWhere(model, args.where),
221
+ orderBy: compileOrderBy(args.orderBy),
222
+ take: args.take,
223
+ skip: args.skip
224
+ });
225
+ return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));
226
+ }
227
+ async function loadRawOneRow(schema, modelName, args) {
228
+ const manifest = getManifest(schema);
229
+ const model = manifest.models[modelName];
230
+ const delegate = getDelegate(modelName);
231
+ if (delegate.findFirst) {
232
+ return delegate.findFirst({
233
+ where: compileWhere(model, args.where),
234
+ orderBy: compileOrderBy(args.orderBy)
235
+ });
236
+ }
237
+ const rows = await delegate.findMany({
238
+ where: compileWhere(model, args.where),
239
+ orderBy: compileOrderBy(args.orderBy),
240
+ take: 1
241
+ });
242
+ return rows[0] ?? null;
243
+ }
244
+ async function loadOneRow(schema, modelName, args) {
245
+ const row = await loadRawOneRow(schema, modelName, args);
246
+ return row ? projectRow(schema, modelName, row, args.select) : null;
247
+ }
248
+ async function projectRow(schema, modelName, row, select) {
249
+ const manifest = getManifest(schema);
250
+ const model = manifest.models[modelName];
251
+ const output = {};
252
+ if (!select) {
253
+ for (const fieldName of Object.keys(model.fields)) {
254
+ output[fieldName] = row[fieldName];
255
+ }
256
+ return output;
257
+ }
258
+ for (const [key, value] of Object.entries(select)) {
259
+ if (value === void 0) continue;
260
+ if (key in model.fields && value === true) {
261
+ output[key] = row[key];
262
+ continue;
263
+ }
264
+ if (key in schema.models[modelName].relations) {
265
+ output[key] = await resolveRelation(
266
+ schema,
267
+ modelName,
268
+ key,
269
+ row,
270
+ value
271
+ );
272
+ }
273
+ }
274
+ return output;
275
+ }
276
+ async function resolveRelation(schema, modelName, relationName, row, value) {
277
+ const manifest = getManifest(schema);
278
+ const relation = schema.models[modelName].relations[relationName];
279
+ const relationArgs = value === true ? {} : value;
280
+ if (relation.kind === "belongsTo") {
281
+ const foreignField = manifest.models[modelName].fields[relation.foreignKey];
282
+ const targetReference = parseReference(foreignField?.references);
283
+ const targetField2 = targetReference?.field ?? identityField(manifest.models[relation.target]).name;
284
+ const foreignValue = row[relation.foreignKey];
285
+ if (foreignValue == null) return null;
286
+ return loadOneRow(schema, relation.target, {
287
+ where: mergeWhere(
288
+ relationArgs.where,
289
+ {
290
+ [targetField2]: foreignValue
291
+ }
292
+ ),
293
+ orderBy: relationArgs.orderBy,
294
+ select: relationArgs.select
295
+ });
296
+ }
297
+ if (relation.kind === "hasOne") {
298
+ const targetModel = manifest.models[relation.target];
299
+ const foreignField = targetModel.fields[relation.foreignKey];
300
+ const sourceReference = parseReference(foreignField?.references);
301
+ const sourceField2 = sourceReference?.field ?? identityField(manifest.models[modelName]).name;
302
+ const sourceValue2 = row[sourceField2];
303
+ if (sourceValue2 == null) return null;
304
+ return loadOneRow(schema, relation.target, {
305
+ where: mergeWhere(
306
+ relationArgs.where,
307
+ {
308
+ [relation.foreignKey]: sourceValue2
309
+ }
310
+ ),
311
+ orderBy: relationArgs.orderBy,
312
+ select: relationArgs.select
313
+ });
314
+ }
315
+ if (relation.kind === "hasMany") {
316
+ const targetModel = manifest.models[relation.target];
317
+ const foreignField = targetModel.fields[relation.foreignKey];
318
+ const sourceReference = parseReference(foreignField?.references);
319
+ const sourceField2 = sourceReference?.field ?? identityField(manifest.models[modelName]).name;
320
+ const sourceValue2 = row[sourceField2];
321
+ if (sourceValue2 == null) return [];
322
+ return loadRows(schema, relation.target, {
323
+ where: mergeWhere(
324
+ relationArgs.where,
325
+ {
326
+ [relation.foreignKey]: sourceValue2
327
+ }
328
+ ),
329
+ orderBy: relationArgs.orderBy,
330
+ take: relationArgs.take,
331
+ skip: relationArgs.skip,
332
+ select: relationArgs.select
333
+ });
334
+ }
335
+ const throughModel = manifest.models[relation.through];
336
+ const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);
337
+ const throughToReference = parseReference(throughModel.fields[relation.to]?.references);
338
+ const sourceField = throughFromReference?.field ?? identityField(manifest.models[modelName]).name;
339
+ const targetField = throughToReference?.field ?? identityField(manifest.models[relation.target]).name;
340
+ const sourceValue = row[sourceField];
341
+ if (sourceValue == null) return [];
342
+ const throughRows = await loadRows(schema, relation.through, {
343
+ where: {
344
+ [relation.from]: sourceValue
345
+ }
346
+ });
347
+ const targetIds = throughRows.map((item) => item[relation.to]).filter((item) => item != null);
348
+ if (!targetIds.length) return [];
349
+ return loadRows(schema, relation.target, {
350
+ where: mergeWhere(
351
+ relationArgs.where,
352
+ {
353
+ [targetField]: {
354
+ in: targetIds
355
+ }
356
+ }
357
+ ),
358
+ orderBy: relationArgs.orderBy,
359
+ take: relationArgs.take,
360
+ skip: relationArgs.skip,
361
+ select: relationArgs.select
362
+ });
363
+ }
364
+ async function runTransaction(run) {
365
+ if (state.inTransaction || !config.client.$transaction) {
366
+ return run(createPrismaDriverInternal(config, { inTransaction: true }));
367
+ }
368
+ return config.client.$transaction(
369
+ async (tx) => run(
370
+ createPrismaDriverInternal(
371
+ {
372
+ ...config,
373
+ client: tx
374
+ },
375
+ {
376
+ inTransaction: true
377
+ }
378
+ )
379
+ )
380
+ );
381
+ }
382
+ const driver = {
383
+ async findMany(schema, model, args) {
384
+ return loadRows(schema, model, args);
385
+ },
386
+ async findFirst(schema, model, args) {
387
+ return loadOneRow(schema, model, args);
388
+ },
389
+ async findUnique(schema, model, args) {
390
+ return loadOneRow(schema, model, args);
391
+ },
392
+ async count(schema, model, args) {
393
+ const manifest = getManifest(schema);
394
+ return getDelegate(model).count({
395
+ where: compileWhere(manifest.models[model], args?.where)
396
+ });
397
+ },
398
+ async create(schema, model, args) {
399
+ const manifest = getManifest(schema);
400
+ const delegate = getDelegate(model);
401
+ const row = await delegate.create({
402
+ data: buildCreateData(
403
+ manifest.models[model],
404
+ args.data
405
+ )
406
+ });
407
+ return projectRow(schema, model, row, args.select);
408
+ },
409
+ async createMany(schema, model, args) {
410
+ const results = [];
411
+ for (const entry of args.data) {
412
+ results.push(
413
+ await driver.create(schema, model, {
414
+ data: entry,
415
+ select: args.select
416
+ })
417
+ );
418
+ }
419
+ return results;
420
+ },
421
+ async update(schema, model, args) {
422
+ const manifest = getManifest(schema);
423
+ const current = await loadRawOneRow(schema, model, {
424
+ where: args.where
425
+ });
426
+ if (!current) return null;
427
+ const delegate = getDelegate(model);
428
+ const identityWhere = buildIdentityWhere(manifest.models[model], current);
429
+ const updateData = buildUpdateData(args.data);
430
+ const updated = delegate.update?.({
431
+ where: identityWhere,
432
+ data: updateData
433
+ }) ?? (async () => {
434
+ await delegate.updateMany({
435
+ where: identityWhere,
436
+ data: updateData
437
+ });
438
+ return null;
439
+ })();
440
+ const row = await updated;
441
+ const nextRow = row ?? await loadRawOneRow(schema, model, {
442
+ where: identityWhere
443
+ });
444
+ if (!nextRow) return null;
445
+ return projectRow(schema, model, nextRow, args.select);
446
+ },
447
+ async updateMany(schema, model, args) {
448
+ const manifest = getManifest(schema);
449
+ const result = await getDelegate(model).updateMany({
450
+ where: compileWhere(manifest.models[model], args.where),
451
+ data: buildUpdateData(args.data)
452
+ });
453
+ return Number(result.count ?? 0);
454
+ },
455
+ async upsert(schema, model, args) {
456
+ const manifest = getManifest(schema);
457
+ const conflict = extractUpsertConflict(manifest.models[model], args.where);
458
+ const delegate = getDelegate(model);
459
+ const createData = buildCreateData(
460
+ manifest.models[model],
461
+ mergeUpsertCreateData(
462
+ manifest.models[model],
463
+ args.create,
464
+ conflict
465
+ )
466
+ );
467
+ const updateData = buildUpdateData(args.update);
468
+ validateUpsertUpdateData(
469
+ manifest.models[model],
470
+ args.update,
471
+ conflict
472
+ );
473
+ const row = await (delegate.upsert?.({
474
+ where: {
475
+ [conflict.field.name]: conflict.value
476
+ },
477
+ create: createData,
478
+ update: updateData
479
+ }) ?? runTransaction(async (txDriver) => {
480
+ const existing = await txDriver.findUnique(schema, model, {
481
+ where: args.where
482
+ });
483
+ if (existing) {
484
+ const updated = await txDriver.update(schema, model, {
485
+ where: args.where,
486
+ data: args.update
487
+ });
488
+ if (!updated) {
489
+ throw new Error(`Upsert on model "${String(model)}" failed during update.`);
490
+ }
491
+ return updated;
492
+ }
493
+ return txDriver.create(schema, model, {
494
+ data: createData
495
+ });
496
+ }));
497
+ return projectRow(schema, model, row, args.select);
498
+ },
499
+ async delete(schema, model, args) {
500
+ const manifest = getManifest(schema);
501
+ const current = await loadRawOneRow(schema, model, {
502
+ where: args.where
503
+ });
504
+ if (!current) return 0;
505
+ const identityWhere = buildIdentityWhere(manifest.models[model], current);
506
+ const delegate = getDelegate(model);
507
+ if (delegate.delete) {
508
+ await delegate.delete({
509
+ where: identityWhere
510
+ });
511
+ return 1;
512
+ }
513
+ const result = await delegate.deleteMany({
514
+ where: identityWhere
515
+ });
516
+ return Number(result.count ?? 0);
517
+ },
518
+ async deleteMany(schema, model, args) {
519
+ const manifest = getManifest(schema);
520
+ const result = await getDelegate(model).deleteMany({
521
+ where: compileWhere(manifest.models[model], args.where)
522
+ });
523
+ return Number(result.count ?? 0);
524
+ },
525
+ async transaction(_schema, run) {
526
+ return runTransaction(run);
527
+ }
528
+ };
529
+ return driver;
530
+ }
531
+ function createPrismaDriver(config) {
532
+ return createPrismaDriverInternal(config);
533
+ }
534
+ // Annotate the CommonJS export names for ESM import in node:
535
+ 0 && (module.exports = {
536
+ createPrismaDriver
537
+ });
538
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type FindUniqueArgs,\n type ManifestField,\n type ManifestModel,\n type OrmDriver,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype PrismaRow = Record<string, unknown>;\ntype PrismaFilterRecord = Record<string, string | number | boolean | Date | null>;\ntype PrismaWhere = Where<PrismaFilterRecord>;\n\ntype PrismaWhereInput = Record<string, unknown>;\n\ntype PrismaDelegateLike = {\n findMany(args?: Record<string, unknown>): Promise<PrismaRow[]>;\n findFirst?(args?: Record<string, unknown>): Promise<PrismaRow | null>;\n count(args?: Record<string, unknown>): Promise<number>;\n create(args: { data: PrismaRow }): Promise<PrismaRow>;\n update?(args: { where: PrismaRow; data: PrismaRow }): Promise<PrismaRow>;\n updateMany(args: { where?: PrismaWhereInput; data: PrismaRow }): Promise<{ count?: number }>;\n upsert?(args: { where: PrismaRow; create: PrismaRow; update: PrismaRow }): Promise<PrismaRow>;\n delete?(args: { where: PrismaRow }): Promise<PrismaRow>;\n deleteMany(args: { where?: PrismaWhereInput }): Promise<{ count?: number }>;\n};\n\nexport type PrismaClientLike = Record<string, PrismaDelegateLike> & {\n $transaction?<TResult>(run: (tx: PrismaClientLike) => Promise<TResult>): Promise<TResult>;\n};\n\nexport type PrismaDriverConfig<TSchema extends SchemaDefinition<any>> = {\n client: PrismaClientLike;\n models?: Partial<Record<ModelName<TSchema>, string>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Prisma runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction isFilterObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !(value instanceof Date) && !Array.isArray(value);\n}\n\nfunction mergeWhere(...clauses: Array<PrismaWhere | undefined>) {\n const defined = clauses.filter(Boolean) as PrismaWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as PrismaWhere;\n}\n\nfunction extractEqualityValue(filter: unknown) {\n if (!isFilterObject(filter)) {\n return {\n supported: true,\n value: filter,\n };\n }\n\n const keys = Object.keys(filter);\n if (keys.length === 1 && \"eq\" in filter) {\n return {\n supported: true,\n value: filter.eq,\n };\n }\n\n return {\n supported: false,\n value: undefined,\n };\n}\n\nfunction extractUpsertConflict(model: ManifestModel, where: PrismaWhere) {\n const keys = Object.keys(where).filter((key) => key !== \"AND\" && key !== \"OR\" && key !== \"NOT\");\n\n if (\"AND\" in where || \"OR\" in where || \"NOT\" in where || keys.length !== 1) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires a single unique equality filter in \"where\".`,\n );\n }\n\n const fieldName = keys[0]!;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!(field.kind === \"id\" || field.unique)) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to be unique or an id field.`,\n );\n }\n\n const { supported, value } = extractEqualityValue(where[fieldName]);\n if (!supported || value === undefined || value === null) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to use a single non-null equality value.`,\n );\n }\n\n return {\n field,\n value,\n };\n}\n\nfunction mergeUpsertCreateData(\n model: ManifestModel,\n createData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const currentValue = createData[conflict.field.name];\n if (currentValue !== undefined && currentValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires create.${conflict.field.name} to match where.${conflict.field.name}.`,\n );\n }\n\n return {\n ...createData,\n [conflict.field.name]: currentValue ?? conflict.value,\n };\n}\n\nfunction validateUpsertUpdateData(\n model: ManifestModel,\n updateData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const nextValue = updateData[conflict.field.name];\n if (nextValue !== undefined && nextValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" cannot change the conflict field \"${conflict.field.name}\".`,\n );\n }\n}\n\nfunction buildCreateData(model: ManifestModel, input: Partial<Record<string, unknown>>) {\n const output: PrismaRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(input[field.name], field);\n if (value !== undefined) {\n output[field.name] = value;\n }\n }\n\n return output;\n}\n\nfunction buildUpdateData(input: Partial<Record<string, unknown>>) {\n return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined));\n}\n\nfunction compileFilter(filter: unknown) {\n if (!isFilterObject(filter)) return filter;\n\n const output: Record<string, unknown> = {};\n if (\"eq\" in filter) output.equals = filter.eq;\n if (\"contains\" in filter) output.contains = filter.contains;\n if (\"in\" in filter) output.in = filter.in;\n if (\"not\" in filter) output.not = filter.not;\n if (\"gt\" in filter) output.gt = filter.gt;\n if (\"gte\" in filter) output.gte = filter.gte;\n if (\"lt\" in filter) output.lt = filter.lt;\n if (\"lte\" in filter) output.lte = filter.lte;\n return output;\n}\n\nfunction compileWhere(model: ManifestModel, where?: PrismaWhere): PrismaWhereInput | undefined {\n if (!where) return undefined;\n\n const output: PrismaWhereInput = {};\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\" && Array.isArray(value)) {\n output.AND = value\n .map((entry) => compileWhere(model, entry))\n .filter(Boolean) as PrismaWhereInput[];\n continue;\n }\n\n if (key === \"OR\" && Array.isArray(value)) {\n output.OR = value\n .map((entry) => compileWhere(model, entry))\n .filter(Boolean) as PrismaWhereInput[];\n continue;\n }\n\n if (key === \"NOT\" && value) {\n const compiled = compileWhere(model, value as PrismaWhere);\n if (compiled) output.NOT = compiled;\n continue;\n }\n\n if (!(key in model.fields)) continue;\n output[key] = compileFilter(value);\n }\n\n return output;\n}\n\nfunction compileOrderBy(orderBy?: Partial<Record<string, \"asc\" | \"desc\">>) {\n if (!orderBy) return undefined;\n const entries = Object.entries(orderBy).filter(([, value]) => value);\n if (!entries.length) return undefined;\n return entries.map(([key, value]) => ({\n [key]: value,\n }));\n}\n\nfunction buildIdentityWhere(model: ManifestModel, row: PrismaRow) {\n const field = identityField(model);\n const value = row[field.name];\n if (value == null) {\n throw new Error(\n `Model \"${model.name}\" requires a non-null identity value for field \"${field.name}\".`,\n );\n }\n return {\n [field.name]: value,\n };\n}\n\nfunction createPrismaDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: PrismaDriverConfig<TSchema>,\n state: {\n inTransaction?: boolean;\n } = {},\n) {\n function getDelegate(modelName: ModelName<TSchema>) {\n const key = config.models?.[modelName] ?? modelName;\n const delegate = config.client[key];\n if (!delegate) {\n throw new Error(\n `Prisma delegate \"${String(key)}\" for model \"${String(modelName)}\" is missing.`,\n );\n }\n return delegate;\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(schema: TSchema, modelName: TModelName, args: FindManyArgs<TSchema, TModelName, TSelect>) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const rows = await getDelegate(modelName).findMany({\n where: compileWhere(model, args.where as PrismaWhere | undefined),\n orderBy: compileOrderBy(args.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined),\n take: args.take,\n skip: args.skip,\n });\n\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: PrismaWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const delegate = getDelegate(modelName);\n\n if (delegate.findFirst) {\n return delegate.findFirst({\n where: compileWhere(model, args.where),\n orderBy: compileOrderBy(args.orderBy),\n });\n }\n\n const rows = await delegate.findMany({\n where: compileWhere(model, args.where),\n orderBy: compileOrderBy(args.orderBy),\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: PrismaWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const row = await loadRawOneRow(schema, modelName, args);\n return row ? projectRow(schema, modelName, row, args.select) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: PrismaRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: PrismaRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: PrismaRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [targetField]: foreignValue,\n } as PrismaWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as PrismaWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as PrismaWhere,\n ) as any,\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as any,\n });\n\n const targetIds = throughRows\n .map((item: PrismaRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as PrismaWhere,\n ) as any,\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.inTransaction || !config.client.$transaction) {\n return run(createPrismaDriverInternal(config, { inTransaction: true }));\n }\n\n return config.client.$transaction(async (tx) =>\n run(\n createPrismaDriverInternal(\n {\n ...config,\n client: tx,\n },\n {\n inTransaction: true,\n },\n ),\n ),\n );\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args: FindUniqueArgs<TSchema, ModelName<TSchema>, any>) {\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n return getDelegate(model).count({\n where: compileWhere(manifest.models[model], args?.where as PrismaWhere | undefined),\n });\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const delegate = getDelegate(model);\n const row = await delegate.create({\n data: buildCreateData(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n });\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const current = await loadRawOneRow(schema, model, {\n where: args.where as PrismaWhere,\n });\n\n if (!current) return null;\n\n const delegate = getDelegate(model);\n const identityWhere = buildIdentityWhere(manifest.models[model], current);\n const updateData = buildUpdateData(args.data as Partial<Record<string, unknown>>);\n const updated =\n delegate.update?.({\n where: identityWhere,\n data: updateData,\n }) ??\n (async () => {\n await delegate.updateMany({\n where: identityWhere,\n data: updateData,\n });\n return null;\n })();\n\n const row = await updated;\n const nextRow =\n row ??\n (await loadRawOneRow(schema, model, {\n where: identityWhere as PrismaWhere,\n }));\n if (!nextRow) return null;\n\n return projectRow(schema, model, nextRow, args.select) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await getDelegate(model).updateMany({\n where: compileWhere(manifest.models[model], args.where as PrismaWhere),\n data: buildUpdateData(args.data as Partial<Record<string, unknown>>),\n });\n return Number(result.count ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const conflict = extractUpsertConflict(manifest.models[model], args.where as PrismaWhere);\n const delegate = getDelegate(model);\n const createData = buildCreateData(\n manifest.models[model],\n mergeUpsertCreateData(\n manifest.models[model],\n args.create as Partial<Record<string, unknown>>,\n conflict,\n ),\n );\n const updateData = buildUpdateData(args.update as Partial<Record<string, unknown>>);\n validateUpsertUpdateData(\n manifest.models[model],\n args.update as Partial<Record<string, unknown>>,\n conflict,\n );\n\n const row = await (delegate.upsert?.({\n where: {\n [conflict.field.name]: conflict.value,\n },\n create: createData,\n update: updateData,\n }) ??\n runTransaction(async (txDriver) => {\n const existing = await txDriver.findUnique(schema, model, {\n where: args.where as any,\n } as FindUniqueArgs<TSchema, ModelName<TSchema>, undefined>);\n\n if (existing) {\n const updated = await txDriver.update(schema, model, {\n where: args.where as any,\n data: args.update as any,\n } as UpdateArgs<TSchema, ModelName<TSchema>, undefined>);\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" failed during update.`);\n }\n return updated as PrismaRow;\n }\n\n return txDriver.create(schema, model, {\n data: createData as any,\n } as CreateArgs<TSchema, ModelName<TSchema>, undefined>) as Promise<PrismaRow>;\n }));\n\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const current = await loadRawOneRow(schema, model, {\n where: args.where as PrismaWhere,\n });\n if (!current) return 0;\n\n const identityWhere = buildIdentityWhere(manifest.models[model], current);\n const delegate = getDelegate(model);\n\n if (delegate.delete) {\n await delegate.delete({\n where: identityWhere,\n });\n return 1;\n }\n\n const result = await delegate.deleteMany({\n where: identityWhere,\n });\n return Number(result.count ?? 0);\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await getDelegate(model).deleteMany({\n where: compileWhere(manifest.models[model], args.where as PrismaWhere),\n });\n return Number(result.count ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createPrismaDriver<TSchema extends SchemaDefinition<any>>(\n config: PrismaDriverConfig<TSchema>,\n) {\n return createPrismaDriverInternal(config);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yBAA2B;AAC3B,iBAoBO;AA8BP,IAAM,gBAAgB,oBAAI,QAAgC;AAE1D,SAAS,YAAY,QAA+B;AAClD,QAAM,SAAS,cAAc,IAAI,MAAM;AACvC,MAAI,OAAQ,QAAO;AACnB,QAAM,WAAO,2BAAe,MAAM;AAClC,gBAAc,IAAI,QAAQ,IAAI;AAC9B,SAAO;AACT;AAEA,SAAS,cAAc,OAAsB;AAC3C,MAAI,MAAM,OAAO,GAAI,QAAO,MAAM,OAAO;AACzC,QAAM,cAAc,OAAO,OAAO,MAAM,MAAM,EAAE,KAAK,CAAC,UAAU,MAAM,MAAM;AAC5E,MAAI,YAAa,QAAO;AACxB,QAAM,IAAI;AAAA,IACR,UAAU,MAAM,IAAI;AAAA,EACtB;AACF;AAEA,SAAS,aAAa,OAAgB,OAAsB;AAC1D,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,MAAM,cAAc,KAAM,YAAO,+BAAW;AAChD,MAAI,MAAM,cAAc,MAAO,QAAO,oBAAI,KAAK;AAC/C,MAAI,OAAO,MAAM,iBAAiB,YAAY;AAC5C,WAAQ,MAAM,aAA+B;AAAA,EAC/C;AACA,SAAO,MAAM;AACf;AAEA,SAAS,eAAe,WAAoB;AAC1C,MAAI,CAAC,UAAW,QAAO;AACvB,QAAM,CAAC,OAAO,KAAK,IAAI,UAAU,MAAM,GAAG;AAC1C,MAAI,CAAC,SAAS,CAAC,MAAO,QAAO;AAC7B,SAAO,EAAE,OAAO,MAAM;AACxB;AAEA,SAAS,eAAe,OAAkD;AACxE,SAAO,CAAC,CAAC,SAAS,OAAO,UAAU,YAAY,EAAE,iBAAiB,SAAS,CAAC,MAAM,QAAQ,KAAK;AACjG;AAEA,SAAS,cAAc,SAAyC;AAC9D,QAAM,UAAU,QAAQ,OAAO,OAAO;AACtC,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,MAAI,QAAQ,WAAW,EAAG,QAAO,QAAQ,CAAC;AAC1C,SAAO;AAAA,IACL,KAAK;AAAA,EACP;AACF;AAEA,SAAS,qBAAqB,QAAiB;AAC7C,MAAI,CAAC,eAAe,MAAM,GAAG;AAC3B,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO;AAAA,IACT;AAAA,EACF;AAEA,QAAM,OAAO,OAAO,KAAK,MAAM;AAC/B,MAAI,KAAK,WAAW,KAAK,QAAQ,QAAQ;AACvC,WAAO;AAAA,MACL,WAAW;AAAA,MACX,OAAO,OAAO;AAAA,IAChB;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW;AAAA,IACX,OAAO;AAAA,EACT;AACF;AAEA,SAAS,sBAAsB,OAAsB,OAAoB;AACvE,QAAM,OAAO,OAAO,KAAK,KAAK,EAAE,OAAO,CAAC,QAAQ,QAAQ,SAAS,QAAQ,QAAQ,QAAQ,KAAK;AAE9F,MAAI,SAAS,SAAS,QAAQ,SAAS,SAAS,SAAS,KAAK,WAAW,GAAG;AAC1E,UAAM,IAAI;AAAA,MACR,oBAAoB,MAAM,IAAI;AAAA,IAChC;AAAA,EACF;AAEA,QAAM,YAAY,KAAK,CAAC;AACxB,QAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,MAAI,CAAC,OAAO;AACV,UAAM,IAAI,MAAM,kBAAkB,SAAS,eAAe,MAAM,IAAI,IAAI;AAAA,EAC1E;AAEA,MAAI,EAAE,MAAM,SAAS,QAAQ,MAAM,SAAS;AAC1C,UAAM,IAAI;AAAA,MACR,oBAAoB,MAAM,IAAI,iCAAiC,SAAS;AAAA,IAC1E;AAAA,EACF;AAEA,QAAM,EAAE,WAAW,MAAM,IAAI,qBAAqB,MAAM,SAAS,CAAC;AAClE,MAAI,CAAC,aAAa,UAAU,UAAa,UAAU,MAAM;AACvD,UAAM,IAAI;AAAA,MACR,oBAAoB,MAAM,IAAI,iCAAiC,SAAS;AAAA,IAC1E;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,sBACP,OACA,YACA,UACA;AACA,QAAM,eAAe,WAAW,SAAS,MAAM,IAAI;AACnD,MAAI,iBAAiB,UAAa,iBAAiB,SAAS,OAAO;AACjE,UAAM,IAAI;AAAA,MACR,oBAAoB,MAAM,IAAI,qBAAqB,SAAS,MAAM,IAAI,mBAAmB,SAAS,MAAM,IAAI;AAAA,IAC9G;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,CAAC,SAAS,MAAM,IAAI,GAAG,gBAAgB,SAAS;AAAA,EAClD;AACF;AAEA,SAAS,yBACP,OACA,YACA,UACA;AACA,QAAM,YAAY,WAAW,SAAS,MAAM,IAAI;AAChD,MAAI,cAAc,UAAa,cAAc,SAAS,OAAO;AAC3D,UAAM,IAAI;AAAA,MACR,oBAAoB,MAAM,IAAI,uCAAuC,SAAS,MAAM,IAAI;AAAA,IAC1F;AAAA,EACF;AACF;AAEA,SAAS,gBAAgB,OAAsB,OAAyC;AACtF,QAAM,SAAoB,CAAC;AAE3B,aAAW,SAAS,OAAO,OAAO,MAAM,MAAM,GAAG;AAC/C,UAAM,QAAQ,aAAa,MAAM,MAAM,IAAI,GAAG,KAAK;AACnD,QAAI,UAAU,QAAW;AACvB,aAAO,MAAM,IAAI,IAAI;AAAA,IACvB;AAAA,EACF;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAyC;AAChE,SAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,CAAC;AAC5F;AAEA,SAAS,cAAc,QAAiB;AACtC,MAAI,CAAC,eAAe,MAAM,EAAG,QAAO;AAEpC,QAAM,SAAkC,CAAC;AACzC,MAAI,QAAQ,OAAQ,QAAO,SAAS,OAAO;AAC3C,MAAI,cAAc,OAAQ,QAAO,WAAW,OAAO;AACnD,MAAI,QAAQ,OAAQ,QAAO,KAAK,OAAO;AACvC,MAAI,SAAS,OAAQ,QAAO,MAAM,OAAO;AACzC,MAAI,QAAQ,OAAQ,QAAO,KAAK,OAAO;AACvC,MAAI,SAAS,OAAQ,QAAO,MAAM,OAAO;AACzC,MAAI,QAAQ,OAAQ,QAAO,KAAK,OAAO;AACvC,MAAI,SAAS,OAAQ,QAAO,MAAM,OAAO;AACzC,SAAO;AACT;AAEA,SAAS,aAAa,OAAsB,OAAmD;AAC7F,MAAI,CAAC,MAAO,QAAO;AAEnB,QAAM,SAA2B,CAAC;AAElC,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AAChD,QAAI,QAAQ,SAAS,MAAM,QAAQ,KAAK,GAAG;AACzC,aAAO,MAAM,MACV,IAAI,CAAC,UAAU,aAAa,OAAO,KAAK,CAAC,EACzC,OAAO,OAAO;AACjB;AAAA,IACF;AAEA,QAAI,QAAQ,QAAQ,MAAM,QAAQ,KAAK,GAAG;AACxC,aAAO,KAAK,MACT,IAAI,CAAC,UAAU,aAAa,OAAO,KAAK,CAAC,EACzC,OAAO,OAAO;AACjB;AAAA,IACF;AAEA,QAAI,QAAQ,SAAS,OAAO;AAC1B,YAAM,WAAW,aAAa,OAAO,KAAoB;AACzD,UAAI,SAAU,QAAO,MAAM;AAC3B;AAAA,IACF;AAEA,QAAI,EAAE,OAAO,MAAM,QAAS;AAC5B,WAAO,GAAG,IAAI,cAAc,KAAK;AAAA,EACnC;AAEA,SAAO;AACT;AAEA,SAAS,eAAe,SAAmD;AACzE,MAAI,CAAC,QAAS,QAAO;AACrB,QAAM,UAAU,OAAO,QAAQ,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,KAAK;AACnE,MAAI,CAAC,QAAQ,OAAQ,QAAO;AAC5B,SAAO,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO;AAAA,IACpC,CAAC,GAAG,GAAG;AAAA,EACT,EAAE;AACJ;AAEA,SAAS,mBAAmB,OAAsB,KAAgB;AAChE,QAAM,QAAQ,cAAc,KAAK;AACjC,QAAM,QAAQ,IAAI,MAAM,IAAI;AAC5B,MAAI,SAAS,MAAM;AACjB,UAAM,IAAI;AAAA,MACR,UAAU,MAAM,IAAI,mDAAmD,MAAM,IAAI;AAAA,IACnF;AAAA,EACF;AACA,SAAO;AAAA,IACL,CAAC,MAAM,IAAI,GAAG;AAAA,EAChB;AACF;AAEA,SAAS,2BACP,QACA,QAEI,CAAC,GACL;AACA,WAAS,YAAY,WAA+B;AAClD,UAAM,MAAM,OAAO,SAAS,SAAS,KAAK;AAC1C,UAAM,WAAW,OAAO,OAAO,GAAG;AAClC,QAAI,CAAC,UAAU;AACb,YAAM,IAAI;AAAA,QACR,oBAAoB,OAAO,GAAG,CAAC,gBAAgB,OAAO,SAAS,CAAC;AAAA,MAClE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEA,iBAAe,SAGb,QAAiB,WAAuB,MAAkD;AAC1F,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,QAAQ,SAAS,OAAO,SAAS;AACvC,UAAM,OAAO,MAAM,YAAY,SAAS,EAAE,SAAS;AAAA,MACjD,OAAO,aAAa,OAAO,KAAK,KAAgC;AAAA,MAChE,SAAS,eAAe,KAAK,OAA8D;AAAA,MAC3F,MAAM,KAAK;AAAA,MACX,MAAM,KAAK;AAAA,IACb,CAAC;AAED,WAAO,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,WAAW,QAAQ,WAAW,KAAK,KAAK,MAAM,CAAC,CAAC;AAAA,EACvF;AAEA,iBAAe,cACb,QACA,WACA,MAIA;AACA,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,QAAQ,SAAS,OAAO,SAAS;AACvC,UAAM,WAAW,YAAY,SAAS;AAEtC,QAAI,SAAS,WAAW;AACtB,aAAO,SAAS,UAAU;AAAA,QACxB,OAAO,aAAa,OAAO,KAAK,KAAK;AAAA,QACrC,SAAS,eAAe,KAAK,OAAO;AAAA,MACtC,CAAC;AAAA,IACH;AAEA,UAAM,OAAO,MAAM,SAAS,SAAS;AAAA,MACnC,OAAO,aAAa,OAAO,KAAK,KAAK;AAAA,MACrC,SAAS,eAAe,KAAK,OAAO;AAAA,MACpC,MAAM;AAAA,IACR,CAAC;AACD,WAAO,KAAK,CAAC,KAAK;AAAA,EACpB;AAEA,iBAAe,WAIb,QACA,WACA,MAKA;AACA,UAAM,MAAM,MAAM,cAAc,QAAQ,WAAW,IAAI;AACvD,WAAO,MAAM,WAAW,QAAQ,WAAW,KAAK,KAAK,MAAM,IAAI;AAAA,EACjE;AAEA,iBAAe,WAIb,QACA,WACA,KACA,QACuD;AACvD,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,QAAQ,SAAS,OAAO,SAAS;AACvC,UAAM,SAAoB,CAAC;AAE3B,QAAI,CAAC,QAAQ;AACX,iBAAW,aAAa,OAAO,KAAK,MAAM,MAAM,GAAG;AACjD,eAAO,SAAS,IAAI,IAAI,SAAS;AAAA,MACnC;AACA,aAAO;AAAA,IACT;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,UAAI,UAAU,OAAW;AAEzB,UAAI,OAAO,MAAM,UAAU,UAAU,MAAM;AACzC,eAAO,GAAG,IAAI,IAAI,GAAG;AACrB;AAAA,MACF;AAEA,UAAI,OAAO,OAAO,OAAO,SAAS,EAAE,WAAW;AAC7C,eAAO,GAAG,IAAI,MAAM;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAEA,iBAAe,gBAIb,QACA,WACA,cACA,KACA,OACA;AACA,UAAM,WAAW,YAAY,MAAM;AACnC,UAAM,WAAW,OAAO,OAAO,SAAS,EAAE,UAAU,YAAY;AAChE,UAAM,eAAe,UAAU,OAAO,CAAC,IAAI;AAE3C,QAAI,SAAS,SAAS,aAAa;AACjC,YAAM,eAAe,SAAS,OAAO,SAAS,EAAE,OAAO,SAAS,UAAU;AAC1E,YAAM,kBAAkB,eAAe,cAAc,UAAU;AAC/D,YAAMA,eACJ,iBAAiB,SAAS,cAAc,SAAS,OAAO,SAAS,MAAM,CAAC,EAAE;AAC5E,YAAM,eAAe,IAAI,SAAS,UAAU;AAE5C,UAAI,gBAAgB,KAAM,QAAO;AAEjC,aAAO,WAAW,QAAQ,SAAS,QAA8B;AAAA,QAC/D,OAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,YACE,CAACA,YAAW,GAAG;AAAA,UACjB;AAAA,QACF;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,QAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,SAAS,UAAU;AAC9B,YAAM,cAAc,SAAS,OAAO,SAAS,MAAM;AACnD,YAAM,eAAe,YAAY,OAAO,SAAS,UAAU;AAC3D,YAAM,kBAAkB,eAAe,cAAc,UAAU;AAC/D,YAAMC,eAAc,iBAAiB,SAAS,cAAc,SAAS,OAAO,SAAS,CAAC,EAAE;AACxF,YAAMC,eAAc,IAAID,YAAW;AAEnC,UAAIC,gBAAe,KAAM,QAAO;AAEhC,aAAO,WAAW,QAAQ,SAAS,QAA8B;AAAA,QAC/D,OAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,YACE,CAAC,SAAS,UAAU,GAAGA;AAAA,UACzB;AAAA,QACF;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,QAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,SAAS,WAAW;AAC/B,YAAM,cAAc,SAAS,OAAO,SAAS,MAAM;AACnD,YAAM,eAAe,YAAY,OAAO,SAAS,UAAU;AAC3D,YAAM,kBAAkB,eAAe,cAAc,UAAU;AAC/D,YAAMD,eAAc,iBAAiB,SAAS,cAAc,SAAS,OAAO,SAAS,CAAC,EAAE;AACxF,YAAMC,eAAc,IAAID,YAAW;AAEnC,UAAIC,gBAAe,KAAM,QAAO,CAAC;AAEjC,aAAO,SAAS,QAAQ,SAAS,QAA8B;AAAA,QAC7D,OAAO;AAAA,UACL,aAAa;AAAA,UACb;AAAA,YACE,CAAC,SAAS,UAAU,GAAGA;AAAA,UACzB;AAAA,QACF;AAAA,QACA,SAAS,aAAa;AAAA,QACtB,MAAM,aAAa;AAAA,QACnB,MAAM,aAAa;AAAA,QACnB,QAAQ,aAAa;AAAA,MACvB,CAAC;AAAA,IACH;AAEA,UAAM,eAAe,SAAS,OAAO,SAAS,OAAO;AACrD,UAAM,uBAAuB,eAAe,aAAa,OAAO,SAAS,IAAI,GAAG,UAAU;AAC1F,UAAM,qBAAqB,eAAe,aAAa,OAAO,SAAS,EAAE,GAAG,UAAU;AACtF,UAAM,cACJ,sBAAsB,SAAS,cAAc,SAAS,OAAO,SAAS,CAAC,EAAE;AAC3E,UAAM,cACJ,oBAAoB,SAAS,cAAc,SAAS,OAAO,SAAS,MAAM,CAAC,EAAE;AAC/E,UAAM,cAAc,IAAI,WAAW;AAEnC,QAAI,eAAe,KAAM,QAAO,CAAC;AAEjC,UAAM,cAAc,MAAM,SAAS,QAAQ,SAAS,SAA+B;AAAA,MACjF,OAAO;AAAA,QACL,CAAC,SAAS,IAAI,GAAG;AAAA,MACnB;AAAA,IACF,CAAC;AAED,UAAM,YAAY,YACf,IAAI,CAAC,SAAoB,KAAK,SAAS,EAAE,CAAC,EAC1C,OAAO,CAAC,SAAS,QAAQ,IAAI;AAChC,QAAI,CAAC,UAAU,OAAQ,QAAO,CAAC;AAE/B,WAAO,SAAS,QAAQ,SAAS,QAA8B;AAAA,MAC7D,OAAO;AAAA,QACL,aAAa;AAAA,QACb;AAAA,UACE,CAAC,WAAW,GAAG;AAAA,YACb,IAAI;AAAA,UACN;AAAA,QACF;AAAA,MACF;AAAA,MACA,SAAS,aAAa;AAAA,MACtB,MAAM,aAAa;AAAA,MACnB,MAAM,aAAa;AAAA,MACnB,QAAQ,aAAa;AAAA,IACvB,CAAC;AAAA,EACH;AAEA,iBAAe,eAAwB,KAAuD;AAC5F,QAAI,MAAM,iBAAiB,CAAC,OAAO,OAAO,cAAc;AACtD,aAAO,IAAI,2BAA2B,QAAQ,EAAE,eAAe,KAAK,CAAC,CAAC;AAAA,IACxE;AAEA,WAAO,OAAO,OAAO;AAAA,MAAa,OAAO,OACvC;AAAA,QACE;AAAA,UACE;AAAA,YACE,GAAG;AAAA,YACH,QAAQ;AAAA,UACV;AAAA,UACA;AAAA,YACE,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,QAAM,SAA6B;AAAA,IACjC,MAAM,SAAS,QAAQ,OAAO,MAAM;AAClC,aAAO,SAAS,QAAQ,OAAO,IAAI;AAAA,IACrC;AAAA,IACA,MAAM,UAAU,QAAQ,OAAO,MAAM;AACnC,aAAO,WAAW,QAAQ,OAAO,IAAI;AAAA,IACvC;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAwD;AACtF,aAAO,WAAW,QAAQ,OAAO,IAAI;AAAA,IACvC;AAAA,IACA,MAAM,MAAM,QAAQ,OAAO,MAA+C;AACxE,YAAM,WAAW,YAAY,MAAM;AACnC,aAAO,YAAY,KAAK,EAAE,MAAM;AAAA,QAC9B,OAAO,aAAa,SAAS,OAAO,KAAK,GAAG,MAAM,KAAgC;AAAA,MACpF,CAAC;AAAA,IACH;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,WAAW,YAAY,KAAK;AAClC,YAAM,MAAM,MAAM,SAAS,OAAO;AAAA,QAChC,MAAM;AAAA,UACJ,SAAS,OAAO,KAAK;AAAA,UACrB,KAAK;AAAA,QACP;AAAA,MACF,CAAC;AACD,aAAO,WAAW,QAAQ,OAAO,KAAK,KAAK,MAAM;AAAA,IACnD;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,UAAqB,CAAC;AAC5B,iBAAW,SAAS,KAAK,MAAM;AAC7B,gBAAQ;AAAA,UACN,MAAM,OAAO,OAAO,QAAQ,OAAO;AAAA,YACjC,MAAM;AAAA,YACN,QAAQ,KAAK;AAAA,UACf,CAAiD;AAAA,QACnD;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,UAAU,MAAM,cAAc,QAAQ,OAAO;AAAA,QACjD,OAAO,KAAK;AAAA,MACd,CAAC;AAED,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,WAAW,YAAY,KAAK;AAClC,YAAM,gBAAgB,mBAAmB,SAAS,OAAO,KAAK,GAAG,OAAO;AACxE,YAAM,aAAa,gBAAgB,KAAK,IAAwC;AAChF,YAAM,UACJ,SAAS,SAAS;AAAA,QAChB,OAAO;AAAA,QACP,MAAM;AAAA,MACR,CAAC,MACA,YAAY;AACX,cAAM,SAAS,WAAW;AAAA,UACxB,OAAO;AAAA,UACP,MAAM;AAAA,QACR,CAAC;AACD,eAAO;AAAA,MACT,GAAG;AAEL,YAAM,MAAM,MAAM;AAClB,YAAM,UACJ,OACC,MAAM,cAAc,QAAQ,OAAO;AAAA,QAClC,OAAO;AAAA,MACT,CAAC;AACH,UAAI,CAAC,QAAS,QAAO;AAErB,aAAO,WAAW,QAAQ,OAAO,SAAS,KAAK,MAAM;AAAA,IACvD;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,SAAS,MAAM,YAAY,KAAK,EAAE,WAAW;AAAA,QACjD,OAAO,aAAa,SAAS,OAAO,KAAK,GAAG,KAAK,KAAoB;AAAA,QACrE,MAAM,gBAAgB,KAAK,IAAwC;AAAA,MACrE,CAAC;AACD,aAAO,OAAO,OAAO,SAAS,CAAC;AAAA,IACjC;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,WAAW,sBAAsB,SAAS,OAAO,KAAK,GAAG,KAAK,KAAoB;AACxF,YAAM,WAAW,YAAY,KAAK;AAClC,YAAM,aAAa;AAAA,QACjB,SAAS,OAAO,KAAK;AAAA,QACrB;AAAA,UACE,SAAS,OAAO,KAAK;AAAA,UACrB,KAAK;AAAA,UACL;AAAA,QACF;AAAA,MACF;AACA,YAAM,aAAa,gBAAgB,KAAK,MAA0C;AAClF;AAAA,QACE,SAAS,OAAO,KAAK;AAAA,QACrB,KAAK;AAAA,QACL;AAAA,MACF;AAEA,YAAM,MAAM,OAAO,SAAS,SAAS;AAAA,QACnC,OAAO;AAAA,UACL,CAAC,SAAS,MAAM,IAAI,GAAG,SAAS;AAAA,QAClC;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV,CAAC,KACC,eAAe,OAAO,aAAa;AACjC,cAAM,WAAW,MAAM,SAAS,WAAW,QAAQ,OAAO;AAAA,UACxD,OAAO,KAAK;AAAA,QACd,CAA2D;AAE3D,YAAI,UAAU;AACZ,gBAAM,UAAU,MAAM,SAAS,OAAO,QAAQ,OAAO;AAAA,YACnD,OAAO,KAAK;AAAA,YACZ,MAAM,KAAK;AAAA,UACb,CAAuD;AACvD,cAAI,CAAC,SAAS;AACZ,kBAAM,IAAI,MAAM,oBAAoB,OAAO,KAAK,CAAC,yBAAyB;AAAA,UAC5E;AACA,iBAAO;AAAA,QACT;AAEA,eAAO,SAAS,OAAO,QAAQ,OAAO;AAAA,UACpC,MAAM;AAAA,QACR,CAAuD;AAAA,MACzD,CAAC;AAEH,aAAO,WAAW,QAAQ,OAAO,KAAK,KAAK,MAAM;AAAA,IACnD;AAAA,IACA,MAAM,OAAO,QAAQ,OAAO,MAAM;AAChC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,UAAU,MAAM,cAAc,QAAQ,OAAO;AAAA,QACjD,OAAO,KAAK;AAAA,MACd,CAAC;AACD,UAAI,CAAC,QAAS,QAAO;AAErB,YAAM,gBAAgB,mBAAmB,SAAS,OAAO,KAAK,GAAG,OAAO;AACxE,YAAM,WAAW,YAAY,KAAK;AAElC,UAAI,SAAS,QAAQ;AACnB,cAAM,SAAS,OAAO;AAAA,UACpB,OAAO;AAAA,QACT,CAAC;AACD,eAAO;AAAA,MACT;AAEA,YAAM,SAAS,MAAM,SAAS,WAAW;AAAA,QACvC,OAAO;AAAA,MACT,CAAC;AACD,aAAO,OAAO,OAAO,SAAS,CAAC;AAAA,IACjC;AAAA,IACA,MAAM,WAAW,QAAQ,OAAO,MAAM;AACpC,YAAM,WAAW,YAAY,MAAM;AACnC,YAAM,SAAS,MAAM,YAAY,KAAK,EAAE,WAAW;AAAA,QACjD,OAAO,aAAa,SAAS,OAAO,KAAK,GAAG,KAAK,KAAoB;AAAA,MACvE,CAAC;AACD,aAAO,OAAO,OAAO,SAAS,CAAC;AAAA,IACjC;AAAA,IACA,MAAM,YAAY,SAAS,KAAK;AAC9B,aAAO,eAAe,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,mBACd,QACA;AACA,SAAO,2BAA2B,MAAM;AAC1C;","names":["targetField","sourceField","sourceValue"]}
@@ -0,0 +1,45 @@
1
+ import { SchemaDefinition, ModelName, OrmDriver } from '@farming-labs/orm';
2
+
3
+ type PrismaRow = Record<string, unknown>;
4
+ type PrismaWhereInput = Record<string, unknown>;
5
+ type PrismaDelegateLike = {
6
+ findMany(args?: Record<string, unknown>): Promise<PrismaRow[]>;
7
+ findFirst?(args?: Record<string, unknown>): Promise<PrismaRow | null>;
8
+ count(args?: Record<string, unknown>): Promise<number>;
9
+ create(args: {
10
+ data: PrismaRow;
11
+ }): Promise<PrismaRow>;
12
+ update?(args: {
13
+ where: PrismaRow;
14
+ data: PrismaRow;
15
+ }): Promise<PrismaRow>;
16
+ updateMany(args: {
17
+ where?: PrismaWhereInput;
18
+ data: PrismaRow;
19
+ }): Promise<{
20
+ count?: number;
21
+ }>;
22
+ upsert?(args: {
23
+ where: PrismaRow;
24
+ create: PrismaRow;
25
+ update: PrismaRow;
26
+ }): Promise<PrismaRow>;
27
+ delete?(args: {
28
+ where: PrismaRow;
29
+ }): Promise<PrismaRow>;
30
+ deleteMany(args: {
31
+ where?: PrismaWhereInput;
32
+ }): Promise<{
33
+ count?: number;
34
+ }>;
35
+ };
36
+ type PrismaClientLike = Record<string, PrismaDelegateLike> & {
37
+ $transaction?<TResult>(run: (tx: PrismaClientLike) => Promise<TResult>): Promise<TResult>;
38
+ };
39
+ type PrismaDriverConfig<TSchema extends SchemaDefinition<any>> = {
40
+ client: PrismaClientLike;
41
+ models?: Partial<Record<ModelName<TSchema>, string>>;
42
+ };
43
+ declare function createPrismaDriver<TSchema extends SchemaDefinition<any>>(config: PrismaDriverConfig<TSchema>): OrmDriver<TSchema>;
44
+
45
+ export { type PrismaClientLike, type PrismaDriverConfig, createPrismaDriver };
@@ -0,0 +1,45 @@
1
+ import { SchemaDefinition, ModelName, OrmDriver } from '@farming-labs/orm';
2
+
3
+ type PrismaRow = Record<string, unknown>;
4
+ type PrismaWhereInput = Record<string, unknown>;
5
+ type PrismaDelegateLike = {
6
+ findMany(args?: Record<string, unknown>): Promise<PrismaRow[]>;
7
+ findFirst?(args?: Record<string, unknown>): Promise<PrismaRow | null>;
8
+ count(args?: Record<string, unknown>): Promise<number>;
9
+ create(args: {
10
+ data: PrismaRow;
11
+ }): Promise<PrismaRow>;
12
+ update?(args: {
13
+ where: PrismaRow;
14
+ data: PrismaRow;
15
+ }): Promise<PrismaRow>;
16
+ updateMany(args: {
17
+ where?: PrismaWhereInput;
18
+ data: PrismaRow;
19
+ }): Promise<{
20
+ count?: number;
21
+ }>;
22
+ upsert?(args: {
23
+ where: PrismaRow;
24
+ create: PrismaRow;
25
+ update: PrismaRow;
26
+ }): Promise<PrismaRow>;
27
+ delete?(args: {
28
+ where: PrismaRow;
29
+ }): Promise<PrismaRow>;
30
+ deleteMany(args: {
31
+ where?: PrismaWhereInput;
32
+ }): Promise<{
33
+ count?: number;
34
+ }>;
35
+ };
36
+ type PrismaClientLike = Record<string, PrismaDelegateLike> & {
37
+ $transaction?<TResult>(run: (tx: PrismaClientLike) => Promise<TResult>): Promise<TResult>;
38
+ };
39
+ type PrismaDriverConfig<TSchema extends SchemaDefinition<any>> = {
40
+ client: PrismaClientLike;
41
+ models?: Partial<Record<ModelName<TSchema>, string>>;
42
+ };
43
+ declare function createPrismaDriver<TSchema extends SchemaDefinition<any>>(config: PrismaDriverConfig<TSchema>): OrmDriver<TSchema>;
44
+
45
+ export { type PrismaClientLike, type PrismaDriverConfig, createPrismaDriver };
package/dist/index.js ADDED
@@ -0,0 +1,515 @@
1
+ // src/index.ts
2
+ import { randomUUID } from "crypto";
3
+ import {
4
+ createManifest
5
+ } from "@farming-labs/orm";
6
+ var manifestCache = /* @__PURE__ */ new WeakMap();
7
+ function getManifest(schema) {
8
+ const cached = manifestCache.get(schema);
9
+ if (cached) return cached;
10
+ const next = createManifest(schema);
11
+ manifestCache.set(schema, next);
12
+ return next;
13
+ }
14
+ function identityField(model) {
15
+ if (model.fields.id) return model.fields.id;
16
+ const uniqueField = Object.values(model.fields).find((field) => field.unique);
17
+ if (uniqueField) return uniqueField;
18
+ throw new Error(
19
+ `Model "${model.name}" requires an "id" field or a unique field for the Prisma runtime.`
20
+ );
21
+ }
22
+ function applyDefault(value, field) {
23
+ if (value !== void 0) return value;
24
+ if (field.generated === "id") return randomUUID();
25
+ if (field.generated === "now") return /* @__PURE__ */ new Date();
26
+ if (typeof field.defaultValue === "function") {
27
+ return field.defaultValue();
28
+ }
29
+ return field.defaultValue;
30
+ }
31
+ function parseReference(reference) {
32
+ if (!reference) return null;
33
+ const [model, field] = reference.split(".");
34
+ if (!model || !field) return null;
35
+ return { model, field };
36
+ }
37
+ function isFilterObject(value) {
38
+ return !!value && typeof value === "object" && !(value instanceof Date) && !Array.isArray(value);
39
+ }
40
+ function mergeWhere(...clauses) {
41
+ const defined = clauses.filter(Boolean);
42
+ if (!defined.length) return void 0;
43
+ if (defined.length === 1) return defined[0];
44
+ return {
45
+ AND: defined
46
+ };
47
+ }
48
+ function extractEqualityValue(filter) {
49
+ if (!isFilterObject(filter)) {
50
+ return {
51
+ supported: true,
52
+ value: filter
53
+ };
54
+ }
55
+ const keys = Object.keys(filter);
56
+ if (keys.length === 1 && "eq" in filter) {
57
+ return {
58
+ supported: true,
59
+ value: filter.eq
60
+ };
61
+ }
62
+ return {
63
+ supported: false,
64
+ value: void 0
65
+ };
66
+ }
67
+ function extractUpsertConflict(model, where) {
68
+ const keys = Object.keys(where).filter((key) => key !== "AND" && key !== "OR" && key !== "NOT");
69
+ if ("AND" in where || "OR" in where || "NOT" in where || keys.length !== 1) {
70
+ throw new Error(
71
+ `Upsert on model "${model.name}" requires a single unique equality filter in "where".`
72
+ );
73
+ }
74
+ const fieldName = keys[0];
75
+ const field = model.fields[fieldName];
76
+ if (!field) {
77
+ throw new Error(`Unknown field "${fieldName}" on model "${model.name}".`);
78
+ }
79
+ if (!(field.kind === "id" || field.unique)) {
80
+ throw new Error(
81
+ `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to be unique or an id field.`
82
+ );
83
+ }
84
+ const { supported, value } = extractEqualityValue(where[fieldName]);
85
+ if (!supported || value === void 0 || value === null) {
86
+ throw new Error(
87
+ `Upsert on model "${model.name}" requires the "where" field "${fieldName}" to use a single non-null equality value.`
88
+ );
89
+ }
90
+ return {
91
+ field,
92
+ value
93
+ };
94
+ }
95
+ function mergeUpsertCreateData(model, createData, conflict) {
96
+ const currentValue = createData[conflict.field.name];
97
+ if (currentValue !== void 0 && currentValue !== conflict.value) {
98
+ throw new Error(
99
+ `Upsert on model "${model.name}" requires create.${conflict.field.name} to match where.${conflict.field.name}.`
100
+ );
101
+ }
102
+ return {
103
+ ...createData,
104
+ [conflict.field.name]: currentValue ?? conflict.value
105
+ };
106
+ }
107
+ function validateUpsertUpdateData(model, updateData, conflict) {
108
+ const nextValue = updateData[conflict.field.name];
109
+ if (nextValue !== void 0 && nextValue !== conflict.value) {
110
+ throw new Error(
111
+ `Upsert on model "${model.name}" cannot change the conflict field "${conflict.field.name}".`
112
+ );
113
+ }
114
+ }
115
+ function buildCreateData(model, input) {
116
+ const output = {};
117
+ for (const field of Object.values(model.fields)) {
118
+ const value = applyDefault(input[field.name], field);
119
+ if (value !== void 0) {
120
+ output[field.name] = value;
121
+ }
122
+ }
123
+ return output;
124
+ }
125
+ function buildUpdateData(input) {
126
+ return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== void 0));
127
+ }
128
+ function compileFilter(filter) {
129
+ if (!isFilterObject(filter)) return filter;
130
+ const output = {};
131
+ if ("eq" in filter) output.equals = filter.eq;
132
+ if ("contains" in filter) output.contains = filter.contains;
133
+ if ("in" in filter) output.in = filter.in;
134
+ if ("not" in filter) output.not = filter.not;
135
+ if ("gt" in filter) output.gt = filter.gt;
136
+ if ("gte" in filter) output.gte = filter.gte;
137
+ if ("lt" in filter) output.lt = filter.lt;
138
+ if ("lte" in filter) output.lte = filter.lte;
139
+ return output;
140
+ }
141
+ function compileWhere(model, where) {
142
+ if (!where) return void 0;
143
+ const output = {};
144
+ for (const [key, value] of Object.entries(where)) {
145
+ if (key === "AND" && Array.isArray(value)) {
146
+ output.AND = value.map((entry) => compileWhere(model, entry)).filter(Boolean);
147
+ continue;
148
+ }
149
+ if (key === "OR" && Array.isArray(value)) {
150
+ output.OR = value.map((entry) => compileWhere(model, entry)).filter(Boolean);
151
+ continue;
152
+ }
153
+ if (key === "NOT" && value) {
154
+ const compiled = compileWhere(model, value);
155
+ if (compiled) output.NOT = compiled;
156
+ continue;
157
+ }
158
+ if (!(key in model.fields)) continue;
159
+ output[key] = compileFilter(value);
160
+ }
161
+ return output;
162
+ }
163
+ function compileOrderBy(orderBy) {
164
+ if (!orderBy) return void 0;
165
+ const entries = Object.entries(orderBy).filter(([, value]) => value);
166
+ if (!entries.length) return void 0;
167
+ return entries.map(([key, value]) => ({
168
+ [key]: value
169
+ }));
170
+ }
171
+ function buildIdentityWhere(model, row) {
172
+ const field = identityField(model);
173
+ const value = row[field.name];
174
+ if (value == null) {
175
+ throw new Error(
176
+ `Model "${model.name}" requires a non-null identity value for field "${field.name}".`
177
+ );
178
+ }
179
+ return {
180
+ [field.name]: value
181
+ };
182
+ }
183
+ function createPrismaDriverInternal(config, state = {}) {
184
+ function getDelegate(modelName) {
185
+ const key = config.models?.[modelName] ?? modelName;
186
+ const delegate = config.client[key];
187
+ if (!delegate) {
188
+ throw new Error(
189
+ `Prisma delegate "${String(key)}" for model "${String(modelName)}" is missing.`
190
+ );
191
+ }
192
+ return delegate;
193
+ }
194
+ async function loadRows(schema, modelName, args) {
195
+ const manifest = getManifest(schema);
196
+ const model = manifest.models[modelName];
197
+ const rows = await getDelegate(modelName).findMany({
198
+ where: compileWhere(model, args.where),
199
+ orderBy: compileOrderBy(args.orderBy),
200
+ take: args.take,
201
+ skip: args.skip
202
+ });
203
+ return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));
204
+ }
205
+ async function loadRawOneRow(schema, modelName, args) {
206
+ const manifest = getManifest(schema);
207
+ const model = manifest.models[modelName];
208
+ const delegate = getDelegate(modelName);
209
+ if (delegate.findFirst) {
210
+ return delegate.findFirst({
211
+ where: compileWhere(model, args.where),
212
+ orderBy: compileOrderBy(args.orderBy)
213
+ });
214
+ }
215
+ const rows = await delegate.findMany({
216
+ where: compileWhere(model, args.where),
217
+ orderBy: compileOrderBy(args.orderBy),
218
+ take: 1
219
+ });
220
+ return rows[0] ?? null;
221
+ }
222
+ async function loadOneRow(schema, modelName, args) {
223
+ const row = await loadRawOneRow(schema, modelName, args);
224
+ return row ? projectRow(schema, modelName, row, args.select) : null;
225
+ }
226
+ async function projectRow(schema, modelName, row, select) {
227
+ const manifest = getManifest(schema);
228
+ const model = manifest.models[modelName];
229
+ const output = {};
230
+ if (!select) {
231
+ for (const fieldName of Object.keys(model.fields)) {
232
+ output[fieldName] = row[fieldName];
233
+ }
234
+ return output;
235
+ }
236
+ for (const [key, value] of Object.entries(select)) {
237
+ if (value === void 0) continue;
238
+ if (key in model.fields && value === true) {
239
+ output[key] = row[key];
240
+ continue;
241
+ }
242
+ if (key in schema.models[modelName].relations) {
243
+ output[key] = await resolveRelation(
244
+ schema,
245
+ modelName,
246
+ key,
247
+ row,
248
+ value
249
+ );
250
+ }
251
+ }
252
+ return output;
253
+ }
254
+ async function resolveRelation(schema, modelName, relationName, row, value) {
255
+ const manifest = getManifest(schema);
256
+ const relation = schema.models[modelName].relations[relationName];
257
+ const relationArgs = value === true ? {} : value;
258
+ if (relation.kind === "belongsTo") {
259
+ const foreignField = manifest.models[modelName].fields[relation.foreignKey];
260
+ const targetReference = parseReference(foreignField?.references);
261
+ const targetField2 = targetReference?.field ?? identityField(manifest.models[relation.target]).name;
262
+ const foreignValue = row[relation.foreignKey];
263
+ if (foreignValue == null) return null;
264
+ return loadOneRow(schema, relation.target, {
265
+ where: mergeWhere(
266
+ relationArgs.where,
267
+ {
268
+ [targetField2]: foreignValue
269
+ }
270
+ ),
271
+ orderBy: relationArgs.orderBy,
272
+ select: relationArgs.select
273
+ });
274
+ }
275
+ if (relation.kind === "hasOne") {
276
+ const targetModel = manifest.models[relation.target];
277
+ const foreignField = targetModel.fields[relation.foreignKey];
278
+ const sourceReference = parseReference(foreignField?.references);
279
+ const sourceField2 = sourceReference?.field ?? identityField(manifest.models[modelName]).name;
280
+ const sourceValue2 = row[sourceField2];
281
+ if (sourceValue2 == null) return null;
282
+ return loadOneRow(schema, relation.target, {
283
+ where: mergeWhere(
284
+ relationArgs.where,
285
+ {
286
+ [relation.foreignKey]: sourceValue2
287
+ }
288
+ ),
289
+ orderBy: relationArgs.orderBy,
290
+ select: relationArgs.select
291
+ });
292
+ }
293
+ if (relation.kind === "hasMany") {
294
+ const targetModel = manifest.models[relation.target];
295
+ const foreignField = targetModel.fields[relation.foreignKey];
296
+ const sourceReference = parseReference(foreignField?.references);
297
+ const sourceField2 = sourceReference?.field ?? identityField(manifest.models[modelName]).name;
298
+ const sourceValue2 = row[sourceField2];
299
+ if (sourceValue2 == null) return [];
300
+ return loadRows(schema, relation.target, {
301
+ where: mergeWhere(
302
+ relationArgs.where,
303
+ {
304
+ [relation.foreignKey]: sourceValue2
305
+ }
306
+ ),
307
+ orderBy: relationArgs.orderBy,
308
+ take: relationArgs.take,
309
+ skip: relationArgs.skip,
310
+ select: relationArgs.select
311
+ });
312
+ }
313
+ const throughModel = manifest.models[relation.through];
314
+ const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);
315
+ const throughToReference = parseReference(throughModel.fields[relation.to]?.references);
316
+ const sourceField = throughFromReference?.field ?? identityField(manifest.models[modelName]).name;
317
+ const targetField = throughToReference?.field ?? identityField(manifest.models[relation.target]).name;
318
+ const sourceValue = row[sourceField];
319
+ if (sourceValue == null) return [];
320
+ const throughRows = await loadRows(schema, relation.through, {
321
+ where: {
322
+ [relation.from]: sourceValue
323
+ }
324
+ });
325
+ const targetIds = throughRows.map((item) => item[relation.to]).filter((item) => item != null);
326
+ if (!targetIds.length) return [];
327
+ return loadRows(schema, relation.target, {
328
+ where: mergeWhere(
329
+ relationArgs.where,
330
+ {
331
+ [targetField]: {
332
+ in: targetIds
333
+ }
334
+ }
335
+ ),
336
+ orderBy: relationArgs.orderBy,
337
+ take: relationArgs.take,
338
+ skip: relationArgs.skip,
339
+ select: relationArgs.select
340
+ });
341
+ }
342
+ async function runTransaction(run) {
343
+ if (state.inTransaction || !config.client.$transaction) {
344
+ return run(createPrismaDriverInternal(config, { inTransaction: true }));
345
+ }
346
+ return config.client.$transaction(
347
+ async (tx) => run(
348
+ createPrismaDriverInternal(
349
+ {
350
+ ...config,
351
+ client: tx
352
+ },
353
+ {
354
+ inTransaction: true
355
+ }
356
+ )
357
+ )
358
+ );
359
+ }
360
+ const driver = {
361
+ async findMany(schema, model, args) {
362
+ return loadRows(schema, model, args);
363
+ },
364
+ async findFirst(schema, model, args) {
365
+ return loadOneRow(schema, model, args);
366
+ },
367
+ async findUnique(schema, model, args) {
368
+ return loadOneRow(schema, model, args);
369
+ },
370
+ async count(schema, model, args) {
371
+ const manifest = getManifest(schema);
372
+ return getDelegate(model).count({
373
+ where: compileWhere(manifest.models[model], args?.where)
374
+ });
375
+ },
376
+ async create(schema, model, args) {
377
+ const manifest = getManifest(schema);
378
+ const delegate = getDelegate(model);
379
+ const row = await delegate.create({
380
+ data: buildCreateData(
381
+ manifest.models[model],
382
+ args.data
383
+ )
384
+ });
385
+ return projectRow(schema, model, row, args.select);
386
+ },
387
+ async createMany(schema, model, args) {
388
+ const results = [];
389
+ for (const entry of args.data) {
390
+ results.push(
391
+ await driver.create(schema, model, {
392
+ data: entry,
393
+ select: args.select
394
+ })
395
+ );
396
+ }
397
+ return results;
398
+ },
399
+ async update(schema, model, args) {
400
+ const manifest = getManifest(schema);
401
+ const current = await loadRawOneRow(schema, model, {
402
+ where: args.where
403
+ });
404
+ if (!current) return null;
405
+ const delegate = getDelegate(model);
406
+ const identityWhere = buildIdentityWhere(manifest.models[model], current);
407
+ const updateData = buildUpdateData(args.data);
408
+ const updated = delegate.update?.({
409
+ where: identityWhere,
410
+ data: updateData
411
+ }) ?? (async () => {
412
+ await delegate.updateMany({
413
+ where: identityWhere,
414
+ data: updateData
415
+ });
416
+ return null;
417
+ })();
418
+ const row = await updated;
419
+ const nextRow = row ?? await loadRawOneRow(schema, model, {
420
+ where: identityWhere
421
+ });
422
+ if (!nextRow) return null;
423
+ return projectRow(schema, model, nextRow, args.select);
424
+ },
425
+ async updateMany(schema, model, args) {
426
+ const manifest = getManifest(schema);
427
+ const result = await getDelegate(model).updateMany({
428
+ where: compileWhere(manifest.models[model], args.where),
429
+ data: buildUpdateData(args.data)
430
+ });
431
+ return Number(result.count ?? 0);
432
+ },
433
+ async upsert(schema, model, args) {
434
+ const manifest = getManifest(schema);
435
+ const conflict = extractUpsertConflict(manifest.models[model], args.where);
436
+ const delegate = getDelegate(model);
437
+ const createData = buildCreateData(
438
+ manifest.models[model],
439
+ mergeUpsertCreateData(
440
+ manifest.models[model],
441
+ args.create,
442
+ conflict
443
+ )
444
+ );
445
+ const updateData = buildUpdateData(args.update);
446
+ validateUpsertUpdateData(
447
+ manifest.models[model],
448
+ args.update,
449
+ conflict
450
+ );
451
+ const row = await (delegate.upsert?.({
452
+ where: {
453
+ [conflict.field.name]: conflict.value
454
+ },
455
+ create: createData,
456
+ update: updateData
457
+ }) ?? runTransaction(async (txDriver) => {
458
+ const existing = await txDriver.findUnique(schema, model, {
459
+ where: args.where
460
+ });
461
+ if (existing) {
462
+ const updated = await txDriver.update(schema, model, {
463
+ where: args.where,
464
+ data: args.update
465
+ });
466
+ if (!updated) {
467
+ throw new Error(`Upsert on model "${String(model)}" failed during update.`);
468
+ }
469
+ return updated;
470
+ }
471
+ return txDriver.create(schema, model, {
472
+ data: createData
473
+ });
474
+ }));
475
+ return projectRow(schema, model, row, args.select);
476
+ },
477
+ async delete(schema, model, args) {
478
+ const manifest = getManifest(schema);
479
+ const current = await loadRawOneRow(schema, model, {
480
+ where: args.where
481
+ });
482
+ if (!current) return 0;
483
+ const identityWhere = buildIdentityWhere(manifest.models[model], current);
484
+ const delegate = getDelegate(model);
485
+ if (delegate.delete) {
486
+ await delegate.delete({
487
+ where: identityWhere
488
+ });
489
+ return 1;
490
+ }
491
+ const result = await delegate.deleteMany({
492
+ where: identityWhere
493
+ });
494
+ return Number(result.count ?? 0);
495
+ },
496
+ async deleteMany(schema, model, args) {
497
+ const manifest = getManifest(schema);
498
+ const result = await getDelegate(model).deleteMany({
499
+ where: compileWhere(manifest.models[model], args.where)
500
+ });
501
+ return Number(result.count ?? 0);
502
+ },
503
+ async transaction(_schema, run) {
504
+ return runTransaction(run);
505
+ }
506
+ };
507
+ return driver;
508
+ }
509
+ function createPrismaDriver(config) {
510
+ return createPrismaDriverInternal(config);
511
+ }
512
+ export {
513
+ createPrismaDriver
514
+ };
515
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport {\n createManifest,\n type CountArgs,\n type CreateArgs,\n type CreateManyArgs,\n type DeleteArgs,\n type DeleteManyArgs,\n type FindManyArgs,\n type FindUniqueArgs,\n type ManifestField,\n type ManifestModel,\n type OrmDriver,\n type SchemaManifest,\n type SchemaDefinition,\n type SelectShape,\n type SelectedRecord,\n type UpdateArgs,\n type UpdateManyArgs,\n type UpsertArgs,\n type Where,\n} from \"@farming-labs/orm\";\nimport type { ModelName, RelationName } from \"@farming-labs/orm\";\n\ntype PrismaRow = Record<string, unknown>;\ntype PrismaFilterRecord = Record<string, string | number | boolean | Date | null>;\ntype PrismaWhere = Where<PrismaFilterRecord>;\n\ntype PrismaWhereInput = Record<string, unknown>;\n\ntype PrismaDelegateLike = {\n findMany(args?: Record<string, unknown>): Promise<PrismaRow[]>;\n findFirst?(args?: Record<string, unknown>): Promise<PrismaRow | null>;\n count(args?: Record<string, unknown>): Promise<number>;\n create(args: { data: PrismaRow }): Promise<PrismaRow>;\n update?(args: { where: PrismaRow; data: PrismaRow }): Promise<PrismaRow>;\n updateMany(args: { where?: PrismaWhereInput; data: PrismaRow }): Promise<{ count?: number }>;\n upsert?(args: { where: PrismaRow; create: PrismaRow; update: PrismaRow }): Promise<PrismaRow>;\n delete?(args: { where: PrismaRow }): Promise<PrismaRow>;\n deleteMany(args: { where?: PrismaWhereInput }): Promise<{ count?: number }>;\n};\n\nexport type PrismaClientLike = Record<string, PrismaDelegateLike> & {\n $transaction?<TResult>(run: (tx: PrismaClientLike) => Promise<TResult>): Promise<TResult>;\n};\n\nexport type PrismaDriverConfig<TSchema extends SchemaDefinition<any>> = {\n client: PrismaClientLike;\n models?: Partial<Record<ModelName<TSchema>, string>>;\n};\n\nconst manifestCache = new WeakMap<object, SchemaManifest>();\n\nfunction getManifest(schema: SchemaDefinition<any>) {\n const cached = manifestCache.get(schema);\n if (cached) return cached;\n const next = createManifest(schema);\n manifestCache.set(schema, next);\n return next;\n}\n\nfunction identityField(model: ManifestModel) {\n if (model.fields.id) return model.fields.id;\n const uniqueField = Object.values(model.fields).find((field) => field.unique);\n if (uniqueField) return uniqueField;\n throw new Error(\n `Model \"${model.name}\" requires an \"id\" field or a unique field for the Prisma runtime.`,\n );\n}\n\nfunction applyDefault(value: unknown, field: ManifestField) {\n if (value !== undefined) return value;\n if (field.generated === \"id\") return randomUUID();\n if (field.generated === \"now\") return new Date();\n if (typeof field.defaultValue === \"function\") {\n return (field.defaultValue as () => unknown)();\n }\n return field.defaultValue;\n}\n\nfunction parseReference(reference?: string) {\n if (!reference) return null;\n const [model, field] = reference.split(\".\");\n if (!model || !field) return null;\n return { model, field };\n}\n\nfunction isFilterObject(value: unknown): value is Record<string, unknown> {\n return !!value && typeof value === \"object\" && !(value instanceof Date) && !Array.isArray(value);\n}\n\nfunction mergeWhere(...clauses: Array<PrismaWhere | undefined>) {\n const defined = clauses.filter(Boolean) as PrismaWhere[];\n if (!defined.length) return undefined;\n if (defined.length === 1) return defined[0];\n return {\n AND: defined,\n } as PrismaWhere;\n}\n\nfunction extractEqualityValue(filter: unknown) {\n if (!isFilterObject(filter)) {\n return {\n supported: true,\n value: filter,\n };\n }\n\n const keys = Object.keys(filter);\n if (keys.length === 1 && \"eq\" in filter) {\n return {\n supported: true,\n value: filter.eq,\n };\n }\n\n return {\n supported: false,\n value: undefined,\n };\n}\n\nfunction extractUpsertConflict(model: ManifestModel, where: PrismaWhere) {\n const keys = Object.keys(where).filter((key) => key !== \"AND\" && key !== \"OR\" && key !== \"NOT\");\n\n if (\"AND\" in where || \"OR\" in where || \"NOT\" in where || keys.length !== 1) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires a single unique equality filter in \"where\".`,\n );\n }\n\n const fieldName = keys[0]!;\n const field = model.fields[fieldName];\n if (!field) {\n throw new Error(`Unknown field \"${fieldName}\" on model \"${model.name}\".`);\n }\n\n if (!(field.kind === \"id\" || field.unique)) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to be unique or an id field.`,\n );\n }\n\n const { supported, value } = extractEqualityValue(where[fieldName]);\n if (!supported || value === undefined || value === null) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires the \"where\" field \"${fieldName}\" to use a single non-null equality value.`,\n );\n }\n\n return {\n field,\n value,\n };\n}\n\nfunction mergeUpsertCreateData(\n model: ManifestModel,\n createData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const currentValue = createData[conflict.field.name];\n if (currentValue !== undefined && currentValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" requires create.${conflict.field.name} to match where.${conflict.field.name}.`,\n );\n }\n\n return {\n ...createData,\n [conflict.field.name]: currentValue ?? conflict.value,\n };\n}\n\nfunction validateUpsertUpdateData(\n model: ManifestModel,\n updateData: Partial<Record<string, unknown>>,\n conflict: { field: ManifestField; value: unknown },\n) {\n const nextValue = updateData[conflict.field.name];\n if (nextValue !== undefined && nextValue !== conflict.value) {\n throw new Error(\n `Upsert on model \"${model.name}\" cannot change the conflict field \"${conflict.field.name}\".`,\n );\n }\n}\n\nfunction buildCreateData(model: ManifestModel, input: Partial<Record<string, unknown>>) {\n const output: PrismaRow = {};\n\n for (const field of Object.values(model.fields)) {\n const value = applyDefault(input[field.name], field);\n if (value !== undefined) {\n output[field.name] = value;\n }\n }\n\n return output;\n}\n\nfunction buildUpdateData(input: Partial<Record<string, unknown>>) {\n return Object.fromEntries(Object.entries(input).filter(([, value]) => value !== undefined));\n}\n\nfunction compileFilter(filter: unknown) {\n if (!isFilterObject(filter)) return filter;\n\n const output: Record<string, unknown> = {};\n if (\"eq\" in filter) output.equals = filter.eq;\n if (\"contains\" in filter) output.contains = filter.contains;\n if (\"in\" in filter) output.in = filter.in;\n if (\"not\" in filter) output.not = filter.not;\n if (\"gt\" in filter) output.gt = filter.gt;\n if (\"gte\" in filter) output.gte = filter.gte;\n if (\"lt\" in filter) output.lt = filter.lt;\n if (\"lte\" in filter) output.lte = filter.lte;\n return output;\n}\n\nfunction compileWhere(model: ManifestModel, where?: PrismaWhere): PrismaWhereInput | undefined {\n if (!where) return undefined;\n\n const output: PrismaWhereInput = {};\n\n for (const [key, value] of Object.entries(where)) {\n if (key === \"AND\" && Array.isArray(value)) {\n output.AND = value\n .map((entry) => compileWhere(model, entry))\n .filter(Boolean) as PrismaWhereInput[];\n continue;\n }\n\n if (key === \"OR\" && Array.isArray(value)) {\n output.OR = value\n .map((entry) => compileWhere(model, entry))\n .filter(Boolean) as PrismaWhereInput[];\n continue;\n }\n\n if (key === \"NOT\" && value) {\n const compiled = compileWhere(model, value as PrismaWhere);\n if (compiled) output.NOT = compiled;\n continue;\n }\n\n if (!(key in model.fields)) continue;\n output[key] = compileFilter(value);\n }\n\n return output;\n}\n\nfunction compileOrderBy(orderBy?: Partial<Record<string, \"asc\" | \"desc\">>) {\n if (!orderBy) return undefined;\n const entries = Object.entries(orderBy).filter(([, value]) => value);\n if (!entries.length) return undefined;\n return entries.map(([key, value]) => ({\n [key]: value,\n }));\n}\n\nfunction buildIdentityWhere(model: ManifestModel, row: PrismaRow) {\n const field = identityField(model);\n const value = row[field.name];\n if (value == null) {\n throw new Error(\n `Model \"${model.name}\" requires a non-null identity value for field \"${field.name}\".`,\n );\n }\n return {\n [field.name]: value,\n };\n}\n\nfunction createPrismaDriverInternal<TSchema extends SchemaDefinition<any>>(\n config: PrismaDriverConfig<TSchema>,\n state: {\n inTransaction?: boolean;\n } = {},\n) {\n function getDelegate(modelName: ModelName<TSchema>) {\n const key = config.models?.[modelName] ?? modelName;\n const delegate = config.client[key];\n if (!delegate) {\n throw new Error(\n `Prisma delegate \"${String(key)}\" for model \"${String(modelName)}\" is missing.`,\n );\n }\n return delegate;\n }\n\n async function loadRows<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(schema: TSchema, modelName: TModelName, args: FindManyArgs<TSchema, TModelName, TSelect>) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const rows = await getDelegate(modelName).findMany({\n where: compileWhere(model, args.where as PrismaWhere | undefined),\n orderBy: compileOrderBy(args.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined),\n take: args.take,\n skip: args.skip,\n });\n\n return Promise.all(rows.map((row) => projectRow(schema, modelName, row, args.select)));\n }\n\n async function loadRawOneRow<TModelName extends ModelName<TSchema>>(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: PrismaWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n },\n ) {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const delegate = getDelegate(modelName);\n\n if (delegate.findFirst) {\n return delegate.findFirst({\n where: compileWhere(model, args.where),\n orderBy: compileOrderBy(args.orderBy),\n });\n }\n\n const rows = await delegate.findMany({\n where: compileWhere(model, args.where),\n orderBy: compileOrderBy(args.orderBy),\n take: 1,\n });\n return rows[0] ?? null;\n }\n\n async function loadOneRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n args: {\n where?: PrismaWhere;\n orderBy?: Partial<Record<string, \"asc\" | \"desc\">>;\n select?: TSelect;\n },\n ) {\n const row = await loadRawOneRow(schema, modelName, args);\n return row ? projectRow(schema, modelName, row, args.select) : null;\n }\n\n async function projectRow<\n TModelName extends ModelName<TSchema>,\n TSelect extends SelectShape<TSchema, TModelName> | undefined,\n >(\n schema: TSchema,\n modelName: TModelName,\n row: PrismaRow,\n select?: TSelect,\n ): Promise<SelectedRecord<TSchema, TModelName, TSelect>> {\n const manifest = getManifest(schema);\n const model = manifest.models[modelName];\n const output: PrismaRow = {};\n\n if (!select) {\n for (const fieldName of Object.keys(model.fields)) {\n output[fieldName] = row[fieldName];\n }\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n for (const [key, value] of Object.entries(select)) {\n if (value === undefined) continue;\n\n if (key in model.fields && value === true) {\n output[key] = row[key];\n continue;\n }\n\n if (key in schema.models[modelName].relations) {\n output[key] = await resolveRelation(\n schema,\n modelName,\n key as RelationName<TSchema, TModelName>,\n row,\n value as true | FindManyArgs<TSchema, any, any>,\n );\n }\n }\n\n return output as SelectedRecord<TSchema, TModelName, TSelect>;\n }\n\n async function resolveRelation<\n TModelName extends ModelName<TSchema>,\n TRelationName extends RelationName<TSchema, TModelName>,\n >(\n schema: TSchema,\n modelName: TModelName,\n relationName: TRelationName,\n row: PrismaRow,\n value: true | FindManyArgs<TSchema, any, any>,\n ) {\n const manifest = getManifest(schema);\n const relation = schema.models[modelName].relations[relationName];\n const relationArgs = value === true ? {} : value;\n\n if (relation.kind === \"belongsTo\") {\n const foreignField = manifest.models[modelName].fields[relation.foreignKey];\n const targetReference = parseReference(foreignField?.references);\n const targetField =\n targetReference?.field ?? identityField(manifest.models[relation.target]).name;\n const foreignValue = row[relation.foreignKey];\n\n if (foreignValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [targetField]: foreignValue,\n } as PrismaWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasOne\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return null;\n\n return loadOneRow(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as PrismaWhere,\n ),\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n select: relationArgs.select,\n });\n }\n\n if (relation.kind === \"hasMany\") {\n const targetModel = manifest.models[relation.target];\n const foreignField = targetModel.fields[relation.foreignKey];\n const sourceReference = parseReference(foreignField?.references);\n const sourceField = sourceReference?.field ?? identityField(manifest.models[modelName]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [relation.foreignKey]: sourceValue,\n } as PrismaWhere,\n ) as any,\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n const throughModel = manifest.models[relation.through];\n const throughFromReference = parseReference(throughModel.fields[relation.from]?.references);\n const throughToReference = parseReference(throughModel.fields[relation.to]?.references);\n const sourceField =\n throughFromReference?.field ?? identityField(manifest.models[modelName]).name;\n const targetField =\n throughToReference?.field ?? identityField(manifest.models[relation.target]).name;\n const sourceValue = row[sourceField];\n\n if (sourceValue == null) return [];\n\n const throughRows = await loadRows(schema, relation.through as ModelName<TSchema>, {\n where: {\n [relation.from]: sourceValue,\n } as any,\n });\n\n const targetIds = throughRows\n .map((item: PrismaRow) => item[relation.to])\n .filter((item) => item != null);\n if (!targetIds.length) return [];\n\n return loadRows(schema, relation.target as ModelName<TSchema>, {\n where: mergeWhere(\n relationArgs.where as PrismaWhere | undefined,\n {\n [targetField]: {\n in: targetIds,\n },\n } as PrismaWhere,\n ) as any,\n orderBy: relationArgs.orderBy as Partial<Record<string, \"asc\" | \"desc\">> | undefined,\n take: relationArgs.take,\n skip: relationArgs.skip,\n select: relationArgs.select,\n });\n }\n\n async function runTransaction<TResult>(run: (driver: OrmDriver<TSchema>) => Promise<TResult>) {\n if (state.inTransaction || !config.client.$transaction) {\n return run(createPrismaDriverInternal(config, { inTransaction: true }));\n }\n\n return config.client.$transaction(async (tx) =>\n run(\n createPrismaDriverInternal(\n {\n ...config,\n client: tx,\n },\n {\n inTransaction: true,\n },\n ),\n ),\n );\n }\n\n const driver: OrmDriver<TSchema> = {\n async findMany(schema, model, args) {\n return loadRows(schema, model, args);\n },\n async findFirst(schema, model, args) {\n return loadOneRow(schema, model, args);\n },\n async findUnique(schema, model, args: FindUniqueArgs<TSchema, ModelName<TSchema>, any>) {\n return loadOneRow(schema, model, args);\n },\n async count(schema, model, args?: CountArgs<TSchema, ModelName<TSchema>>) {\n const manifest = getManifest(schema);\n return getDelegate(model).count({\n where: compileWhere(manifest.models[model], args?.where as PrismaWhere | undefined),\n });\n },\n async create(schema, model, args) {\n const manifest = getManifest(schema);\n const delegate = getDelegate(model);\n const row = await delegate.create({\n data: buildCreateData(\n manifest.models[model],\n args.data as Partial<Record<string, unknown>>,\n ),\n });\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async createMany(schema, model, args) {\n const results: unknown[] = [];\n for (const entry of args.data) {\n results.push(\n await driver.create(schema, model, {\n data: entry,\n select: args.select,\n } as CreateArgs<TSchema, ModelName<TSchema>, any>),\n );\n }\n return results as any;\n },\n async update(schema, model, args) {\n const manifest = getManifest(schema);\n const current = await loadRawOneRow(schema, model, {\n where: args.where as PrismaWhere,\n });\n\n if (!current) return null;\n\n const delegate = getDelegate(model);\n const identityWhere = buildIdentityWhere(manifest.models[model], current);\n const updateData = buildUpdateData(args.data as Partial<Record<string, unknown>>);\n const updated =\n delegate.update?.({\n where: identityWhere,\n data: updateData,\n }) ??\n (async () => {\n await delegate.updateMany({\n where: identityWhere,\n data: updateData,\n });\n return null;\n })();\n\n const row = await updated;\n const nextRow =\n row ??\n (await loadRawOneRow(schema, model, {\n where: identityWhere as PrismaWhere,\n }));\n if (!nextRow) return null;\n\n return projectRow(schema, model, nextRow, args.select) as Promise<any>;\n },\n async updateMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await getDelegate(model).updateMany({\n where: compileWhere(manifest.models[model], args.where as PrismaWhere),\n data: buildUpdateData(args.data as Partial<Record<string, unknown>>),\n });\n return Number(result.count ?? 0);\n },\n async upsert(schema, model, args) {\n const manifest = getManifest(schema);\n const conflict = extractUpsertConflict(manifest.models[model], args.where as PrismaWhere);\n const delegate = getDelegate(model);\n const createData = buildCreateData(\n manifest.models[model],\n mergeUpsertCreateData(\n manifest.models[model],\n args.create as Partial<Record<string, unknown>>,\n conflict,\n ),\n );\n const updateData = buildUpdateData(args.update as Partial<Record<string, unknown>>);\n validateUpsertUpdateData(\n manifest.models[model],\n args.update as Partial<Record<string, unknown>>,\n conflict,\n );\n\n const row = await (delegate.upsert?.({\n where: {\n [conflict.field.name]: conflict.value,\n },\n create: createData,\n update: updateData,\n }) ??\n runTransaction(async (txDriver) => {\n const existing = await txDriver.findUnique(schema, model, {\n where: args.where as any,\n } as FindUniqueArgs<TSchema, ModelName<TSchema>, undefined>);\n\n if (existing) {\n const updated = await txDriver.update(schema, model, {\n where: args.where as any,\n data: args.update as any,\n } as UpdateArgs<TSchema, ModelName<TSchema>, undefined>);\n if (!updated) {\n throw new Error(`Upsert on model \"${String(model)}\" failed during update.`);\n }\n return updated as PrismaRow;\n }\n\n return txDriver.create(schema, model, {\n data: createData as any,\n } as CreateArgs<TSchema, ModelName<TSchema>, undefined>) as Promise<PrismaRow>;\n }));\n\n return projectRow(schema, model, row, args.select) as Promise<any>;\n },\n async delete(schema, model, args) {\n const manifest = getManifest(schema);\n const current = await loadRawOneRow(schema, model, {\n where: args.where as PrismaWhere,\n });\n if (!current) return 0;\n\n const identityWhere = buildIdentityWhere(manifest.models[model], current);\n const delegate = getDelegate(model);\n\n if (delegate.delete) {\n await delegate.delete({\n where: identityWhere,\n });\n return 1;\n }\n\n const result = await delegate.deleteMany({\n where: identityWhere,\n });\n return Number(result.count ?? 0);\n },\n async deleteMany(schema, model, args) {\n const manifest = getManifest(schema);\n const result = await getDelegate(model).deleteMany({\n where: compileWhere(manifest.models[model], args.where as PrismaWhere),\n });\n return Number(result.count ?? 0);\n },\n async transaction(_schema, run) {\n return runTransaction(run);\n },\n };\n\n return driver;\n}\n\nexport function createPrismaDriver<TSchema extends SchemaDefinition<any>>(\n config: PrismaDriverConfig<TSchema>,\n) {\n return createPrismaDriverInternal(config);\n}\n"],"mappings":"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","names":["targetField","sourceField","sourceValue"]}
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@farming-labs/orm-prisma",
3
+ "version": "0.0.3",
4
+ "files": [
5
+ "dist"
6
+ ],
7
+ "type": "module",
8
+ "main": "./dist/index.cjs",
9
+ "module": "./dist/index.js",
10
+ "types": "./dist/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.cjs"
16
+ }
17
+ },
18
+ "publishConfig": {
19
+ "access": "public"
20
+ },
21
+ "dependencies": {
22
+ "@farming-labs/orm": "0.0.3"
23
+ },
24
+ "devDependencies": {
25
+ "@prisma/client": "^6.5.0",
26
+ "@types/pg": "^8.15.6",
27
+ "mysql2": "^3.15.2",
28
+ "pg": "^8.16.3",
29
+ "prisma": "^6.5.0",
30
+ "tsup": "^8.4.0"
31
+ },
32
+ "peerDependencies": {
33
+ "@prisma/client": "^6.0.0"
34
+ },
35
+ "scripts": {
36
+ "build": "tsx ./scripts/build.ts",
37
+ "test": "pnpm run prisma:prepare && vitest run --config vitest.local.config.ts",
38
+ "prisma:prepare": "tsx ./test/fixtures/prepare.ts",
39
+ "typecheck": "tsc --noEmit"
40
+ }
41
+ }