@justwant/db 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -0
- package/dist/adapter.d.ts +11 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +2 -0
- package/dist/adapter.js.map +1 -0
- package/dist/base/adapter.d.ts +11 -0
- package/dist/base/adapter.d.ts.map +1 -0
- package/dist/base/adapter.js +2 -0
- package/dist/base/adapter.js.map +1 -0
- package/dist/base/conforms.d.ts +12 -0
- package/dist/base/conforms.d.ts.map +1 -0
- package/dist/base/conforms.js +13 -0
- package/dist/base/conforms.js.map +1 -0
- package/dist/base/contract.d.ts +6 -0
- package/dist/base/contract.d.ts.map +1 -0
- package/dist/base/contract.js +6 -0
- package/dist/base/contract.js.map +1 -0
- package/dist/base/errors.d.ts +75 -0
- package/dist/base/errors.d.ts.map +1 -0
- package/dist/base/errors.js +100 -0
- package/dist/base/errors.js.map +1 -0
- package/dist/base/fields.d.ts +5 -0
- package/dist/base/fields.d.ts.map +1 -0
- package/dist/base/fields.js +5 -0
- package/dist/base/fields.js.map +1 -0
- package/dist/base/index.d.ts +5 -0
- package/dist/base/index.d.ts.map +1 -0
- package/dist/base/index.js +3 -0
- package/dist/base/index.js.map +1 -0
- package/dist/base/table.d.ts +61 -0
- package/dist/base/table.d.ts.map +1 -0
- package/dist/base/table.js +2 -0
- package/dist/base/table.js.map +1 -0
- package/dist/base/validate.d.ts +5 -0
- package/dist/base/validate.d.ts.map +1 -0
- package/dist/base/validate.js +5 -0
- package/dist/base/validate.js.map +1 -0
- package/dist/contract.d.ts +27 -0
- package/dist/contract.d.ts.map +1 -0
- package/dist/contract.js +14 -0
- package/dist/contract.js.map +1 -0
- package/dist/contract.type-test.d.ts +2 -0
- package/dist/contract.type-test.d.ts.map +1 -0
- package/dist/contract.type-test.js +34 -0
- package/dist/contract.type-test.js.map +1 -0
- package/dist/ddl/drop.d.ts +6 -0
- package/dist/ddl/drop.d.ts.map +1 -0
- package/dist/ddl/drop.js +14 -0
- package/dist/ddl/drop.js.map +1 -0
- package/dist/ddl/exist.d.ts +6 -0
- package/dist/ddl/exist.d.ts.map +1 -0
- package/dist/ddl/exist.js +24 -0
- package/dist/ddl/exist.js.map +1 -0
- package/dist/ddl/index.d.ts +17 -0
- package/dist/ddl/index.d.ts.map +1 -0
- package/dist/ddl/index.js +58 -0
- package/dist/ddl/index.js.map +1 -0
- package/dist/drizzle/buildOrderBy.d.ts +11 -0
- package/dist/drizzle/buildOrderBy.d.ts.map +1 -0
- package/dist/drizzle/buildOrderBy.js +19 -0
- package/dist/drizzle/buildOrderBy.js.map +1 -0
- package/dist/drizzle/buildPagination.d.ts +15 -0
- package/dist/drizzle/buildPagination.d.ts.map +1 -0
- package/dist/drizzle/buildPagination.js +13 -0
- package/dist/drizzle/buildPagination.js.map +1 -0
- package/dist/drizzle/buildWhere.d.ts +11 -0
- package/dist/drizzle/buildWhere.d.ts.map +1 -0
- package/dist/drizzle/buildWhere.js +21 -0
- package/dist/drizzle/buildWhere.js.map +1 -0
- package/dist/drizzle/bulkInsert.d.ts +9 -0
- package/dist/drizzle/bulkInsert.d.ts.map +1 -0
- package/dist/drizzle/bulkInsert.js +16 -0
- package/dist/drizzle/bulkInsert.js.map +1 -0
- package/dist/drizzle/collectSchemas.d.ts +11 -0
- package/dist/drizzle/collectSchemas.d.ts.map +1 -0
- package/dist/drizzle/collectSchemas.js +12 -0
- package/dist/drizzle/collectSchemas.js.map +1 -0
- package/dist/drizzle/createAdapter.d.ts +15 -0
- package/dist/drizzle/createAdapter.d.ts.map +1 -0
- package/dist/drizzle/createAdapter.js +163 -0
- package/dist/drizzle/createAdapter.js.map +1 -0
- package/dist/drizzle/defineMappedTable.d.ts +19 -0
- package/dist/drizzle/defineMappedTable.d.ts.map +1 -0
- package/dist/drizzle/defineMappedTable.js +66 -0
- package/dist/drizzle/defineMappedTable.js.map +1 -0
- package/dist/drizzle/drizzle-types.d.ts +16 -0
- package/dist/drizzle/drizzle-types.d.ts.map +1 -0
- package/dist/drizzle/drizzle-types.js +11 -0
- package/dist/drizzle/drizzle-types.js.map +1 -0
- package/dist/drizzle/errors.d.ts +10 -0
- package/dist/drizzle/errors.d.ts.map +1 -0
- package/dist/drizzle/errors.js +61 -0
- package/dist/drizzle/errors.js.map +1 -0
- package/dist/drizzle/index.d.ts +14 -0
- package/dist/drizzle/index.d.ts.map +1 -0
- package/dist/drizzle/index.js +12 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/drizzle/mapping.d.ts +34 -0
- package/dist/drizzle/mapping.d.ts.map +1 -0
- package/dist/drizzle/mapping.js +24 -0
- package/dist/drizzle/mapping.js.map +1 -0
- package/dist/drizzle/types.d.ts +38 -0
- package/dist/drizzle/types.d.ts.map +1 -0
- package/dist/drizzle/types.js +6 -0
- package/dist/drizzle/types.js.map +1 -0
- package/dist/drizzle/upsert.d.ts +11 -0
- package/dist/drizzle/upsert.d.ts.map +1 -0
- package/dist/drizzle/upsert.js +28 -0
- package/dist/drizzle/upsert.js.map +1 -0
- package/dist/errors.d.ts +75 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +100 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/prisma/buildWhere.d.ts +18 -0
- package/dist/prisma/buildWhere.d.ts.map +1 -0
- package/dist/prisma/buildWhere.js +27 -0
- package/dist/prisma/buildWhere.js.map +1 -0
- package/dist/prisma/bulkInsert.d.ts +19 -0
- package/dist/prisma/bulkInsert.d.ts.map +1 -0
- package/dist/prisma/bulkInsert.js +13 -0
- package/dist/prisma/bulkInsert.js.map +1 -0
- package/dist/prisma/createAdapter.d.ts +13 -0
- package/dist/prisma/createAdapter.d.ts.map +1 -0
- package/dist/prisma/createAdapter.js +154 -0
- package/dist/prisma/createAdapter.js.map +1 -0
- package/dist/prisma/errors.d.ts +12 -0
- package/dist/prisma/errors.d.ts.map +1 -0
- package/dist/prisma/errors.js +133 -0
- package/dist/prisma/errors.js.map +1 -0
- package/dist/prisma/index.d.ts +9 -0
- package/dist/prisma/index.d.ts.map +1 -0
- package/dist/prisma/index.js +7 -0
- package/dist/prisma/index.js.map +1 -0
- package/dist/prisma/mapping.d.ts +15 -0
- package/dist/prisma/mapping.d.ts.map +1 -0
- package/dist/prisma/mapping.js +23 -0
- package/dist/prisma/mapping.js.map +1 -0
- package/dist/prisma/types.d.ts +61 -0
- package/dist/prisma/types.d.ts.map +1 -0
- package/dist/prisma/types.js +6 -0
- package/dist/prisma/types.js.map +1 -0
- package/dist/prisma/upsert.d.ts +17 -0
- package/dist/prisma/upsert.d.ts.map +1 -0
- package/dist/prisma/upsert.js +11 -0
- package/dist/prisma/upsert.js.map +1 -0
- package/dist/table.d.ts +36 -0
- package/dist/table.d.ts.map +1 -0
- package/dist/table.js +2 -0
- package/dist/table.js.map +1 -0
- package/dist/waddler/better-sqlite3/index.d.ts +17 -0
- package/dist/waddler/better-sqlite3/index.d.ts.map +1 -0
- package/dist/waddler/better-sqlite3/index.js +20 -0
- package/dist/waddler/better-sqlite3/index.js.map +1 -0
- package/dist/waddler/buildOrderBy.d.ts +10 -0
- package/dist/waddler/buildOrderBy.d.ts.map +1 -0
- package/dist/waddler/buildOrderBy.js +22 -0
- package/dist/waddler/buildOrderBy.js.map +1 -0
- package/dist/waddler/buildWhere.d.ts +13 -0
- package/dist/waddler/buildWhere.d.ts.map +1 -0
- package/dist/waddler/buildWhere.js +26 -0
- package/dist/waddler/buildWhere.js.map +1 -0
- package/dist/waddler/bun-sql/index.d.ts +17 -0
- package/dist/waddler/bun-sql/index.d.ts.map +1 -0
- package/dist/waddler/bun-sql/index.js +25 -0
- package/dist/waddler/bun-sql/index.js.map +1 -0
- package/dist/waddler/bun-sqlite/index.d.ts +17 -0
- package/dist/waddler/bun-sqlite/index.d.ts.map +1 -0
- package/dist/waddler/bun-sqlite/index.js +20 -0
- package/dist/waddler/bun-sqlite/index.js.map +1 -0
- package/dist/waddler/core.d.ts +14 -0
- package/dist/waddler/core.d.ts.map +1 -0
- package/dist/waddler/core.js +340 -0
- package/dist/waddler/core.js.map +1 -0
- package/dist/waddler/d1/index.d.ts +16 -0
- package/dist/waddler/d1/index.d.ts.map +1 -0
- package/dist/waddler/d1/index.js +18 -0
- package/dist/waddler/d1/index.js.map +1 -0
- package/dist/waddler/durable-objects/index.d.ts +16 -0
- package/dist/waddler/durable-objects/index.d.ts.map +1 -0
- package/dist/waddler/durable-objects/index.js +18 -0
- package/dist/waddler/durable-objects/index.js.map +1 -0
- package/dist/waddler/errors.d.ts +10 -0
- package/dist/waddler/errors.d.ts.map +1 -0
- package/dist/waddler/errors.js +65 -0
- package/dist/waddler/errors.js.map +1 -0
- package/dist/waddler/index.d.ts +10 -0
- package/dist/waddler/index.d.ts.map +1 -0
- package/dist/waddler/index.js +6 -0
- package/dist/waddler/index.js.map +1 -0
- package/dist/waddler/mapping.d.ts +14 -0
- package/dist/waddler/mapping.d.ts.map +1 -0
- package/dist/waddler/mapping.js +23 -0
- package/dist/waddler/mapping.js.map +1 -0
- package/dist/waddler/mysql/index.d.ts +17 -0
- package/dist/waddler/mysql/index.d.ts.map +1 -0
- package/dist/waddler/mysql/index.js +29 -0
- package/dist/waddler/mysql/index.js.map +1 -0
- package/dist/waddler/neon/index.d.ts +17 -0
- package/dist/waddler/neon/index.d.ts.map +1 -0
- package/dist/waddler/neon/index.js +25 -0
- package/dist/waddler/neon/index.js.map +1 -0
- package/dist/waddler/pg/index.d.ts +17 -0
- package/dist/waddler/pg/index.d.ts.map +1 -0
- package/dist/waddler/pg/index.js +25 -0
- package/dist/waddler/pg/index.js.map +1 -0
- package/dist/waddler/pglite/index.d.ts +17 -0
- package/dist/waddler/pglite/index.d.ts.map +1 -0
- package/dist/waddler/pglite/index.js +25 -0
- package/dist/waddler/pglite/index.js.map +1 -0
- package/dist/waddler/planetscale/index.d.ts +17 -0
- package/dist/waddler/planetscale/index.d.ts.map +1 -0
- package/dist/waddler/planetscale/index.js +29 -0
- package/dist/waddler/planetscale/index.js.map +1 -0
- package/dist/waddler/postgres-js/index.d.ts +17 -0
- package/dist/waddler/postgres-js/index.d.ts.map +1 -0
- package/dist/waddler/postgres-js/index.js +25 -0
- package/dist/waddler/postgres-js/index.js.map +1 -0
- package/dist/waddler/tidb/index.d.ts +17 -0
- package/dist/waddler/tidb/index.d.ts.map +1 -0
- package/dist/waddler/tidb/index.js +29 -0
- package/dist/waddler/tidb/index.js.map +1 -0
- package/dist/waddler/turso/index.d.ts +17 -0
- package/dist/waddler/turso/index.d.ts.map +1 -0
- package/dist/waddler/turso/index.js +29 -0
- package/dist/waddler/turso/index.js.map +1 -0
- package/dist/waddler/types.d.ts +91 -0
- package/dist/waddler/types.d.ts.map +1 -0
- package/dist/waddler/types.js +6 -0
- package/dist/waddler/types.js.map +1 -0
- package/dist/waddler/vercel-postgres/index.d.ts +17 -0
- package/dist/waddler/vercel-postgres/index.d.ts.map +1 -0
- package/dist/waddler/vercel-postgres/index.js +25 -0
- package/dist/waddler/vercel-postgres/index.js.map +1 -0
- package/dist/waddler/xata/index.d.ts +17 -0
- package/dist/waddler/xata/index.d.ts.map +1 -0
- package/dist/waddler/xata/index.js +25 -0
- package/dist/waddler/xata/index.js.map +1 -0
- package/docs/CONTRACT.md +36 -0
- package/docs/COVERAGE.md +59 -0
- package/docs/DRIVERS.md +62 -0
- package/docs/drizzle/DIALECTS.md +62 -0
- package/docs/drizzle/LIMITS.md +39 -0
- package/package.json +232 -0
- package/prisma/schema.prisma +15 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildWhere.d.ts","sourceRoot":"","sources":["../../src/prisma/buildWhere.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,EACzC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build Prisma where clause from Partial<InferContract>.
|
|
3
|
+
* Supports both primitive values and Prisma filter objects.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Builds a Prisma where object from a partial contract.
|
|
7
|
+
* Each key-value pair becomes { [fieldName]: value }.
|
|
8
|
+
*
|
|
9
|
+
* Supports Prisma filter objects for advanced queries:
|
|
10
|
+
* - { email: { contains: "x" } }
|
|
11
|
+
* - { id: { in: ["a", "b"] } }
|
|
12
|
+
* - { name: { startsWith: "A" } }
|
|
13
|
+
* - { age: { gte: 18, lt: 65 } }
|
|
14
|
+
*/
|
|
15
|
+
export function buildPrismaWhere(mapping, where) {
|
|
16
|
+
const result = {};
|
|
17
|
+
for (const [contractKey, value] of Object.entries(where)) {
|
|
18
|
+
if (value === undefined)
|
|
19
|
+
continue;
|
|
20
|
+
const col = mapping[contractKey];
|
|
21
|
+
if (!col)
|
|
22
|
+
continue;
|
|
23
|
+
result[col.name] = value;
|
|
24
|
+
}
|
|
25
|
+
return result;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=buildWhere.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildWhere.js","sourceRoot":"","sources":["../../src/prisma/buildWhere.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAyC,EACzC,KAA8B;IAE9B,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzD,IAAI,KAAK,KAAK,SAAS;YAAE,SAAS;QAClC,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;QACjC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk insert via Prisma delegate.createMany.
|
|
3
|
+
*/
|
|
4
|
+
type PrismaCreateManyDelegate = {
|
|
5
|
+
createMany: (args: {
|
|
6
|
+
data: Record<string, unknown>[];
|
|
7
|
+
}) => Promise<{
|
|
8
|
+
count: number;
|
|
9
|
+
}>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Insert multiple rows in a single query.
|
|
13
|
+
* Note: createMany does not return the created rows, only the count.
|
|
14
|
+
*/
|
|
15
|
+
export declare function bulkInsertPrisma(delegate: PrismaCreateManyDelegate, rows: Record<string, unknown>[]): Promise<{
|
|
16
|
+
count: number;
|
|
17
|
+
}>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=bulkInsert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkInsert.d.ts","sourceRoot":"","sources":["../../src/prisma/bulkInsert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK,wBAAwB,GAAG;IAC9B,UAAU,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvF,CAAC;AAEF;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,wBAAwB,EAClC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAC9B,OAAO,CAAC;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAG5B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk insert via Prisma delegate.createMany.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Insert multiple rows in a single query.
|
|
6
|
+
* Note: createMany does not return the created rows, only the count.
|
|
7
|
+
*/
|
|
8
|
+
export async function bulkInsertPrisma(delegate, rows) {
|
|
9
|
+
if (rows.length === 0)
|
|
10
|
+
return { count: 0 };
|
|
11
|
+
return delegate.createMany({ data: rows });
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=bulkInsert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkInsert.js","sourceRoot":"","sources":["../../src/prisma/bulkInsert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAkC,EAClC,IAA+B;IAE/B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAC3C,OAAO,QAAQ,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC7C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a Prisma adapter with full CRUD implementation.
|
|
3
|
+
*/
|
|
4
|
+
import type { PrismaAdapter, PrismaClient } from "./types.js";
|
|
5
|
+
export interface CreatePrismaAdapterOptions {
|
|
6
|
+
/** Override dialect when auto-detection fails. Pass according to schema.prisma provider. */
|
|
7
|
+
dialect?: "pg" | "mysql" | "sqlite";
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Creates a Prisma adapter for the given PrismaClient.
|
|
11
|
+
*/
|
|
12
|
+
export declare function createPrismaAdapter(prisma: PrismaClient, options?: CreatePrismaAdapterOptions): PrismaAdapter;
|
|
13
|
+
//# sourceMappingURL=createAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdapter.d.ts","sourceRoot":"","sources":["../../src/prisma/createAdapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EAIb,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,0BAA0B;IACzC,4FAA4F;IAC5F,OAAO,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAwBD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,YAAY,EACpB,OAAO,CAAC,EAAE,0BAA0B,GACnC,aAAa,CAuLf"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a Prisma adapter with full CRUD implementation.
|
|
3
|
+
*/
|
|
4
|
+
import { AdapterMappingError } from "@justwant/db/errors";
|
|
5
|
+
import { buildPrismaWhere } from "./buildWhere.js";
|
|
6
|
+
import { parsePrismaError } from "./errors.js";
|
|
7
|
+
import { mapRowToContract } from "./mapping.js";
|
|
8
|
+
/**
|
|
9
|
+
* Creates a Prisma adapter for the given PrismaClient.
|
|
10
|
+
*/
|
|
11
|
+
export function createPrismaAdapter(prisma, options) {
|
|
12
|
+
const dialect = options?.dialect ?? "pg";
|
|
13
|
+
const adapter = {
|
|
14
|
+
dialect,
|
|
15
|
+
client: prisma,
|
|
16
|
+
defineTable(modelName, contract, mapping, defineOptions) {
|
|
17
|
+
const softDeleteCol = defineOptions && "softDeleteColumn" in defineOptions
|
|
18
|
+
? defineOptions.softDeleteColumn
|
|
19
|
+
: "deletedAt";
|
|
20
|
+
const mappingRecord = mapping;
|
|
21
|
+
if (!mappingRecord.id?.name) {
|
|
22
|
+
throw new AdapterMappingError("Mapping must include 'id' field. Example: { id: { name: 'id' }, ... }", { field: "id" });
|
|
23
|
+
}
|
|
24
|
+
const idField = mappingRecord.id.name;
|
|
25
|
+
const softDeleteField = softDeleteCol ?? null;
|
|
26
|
+
const delegate = prisma[modelName];
|
|
27
|
+
if (!delegate || typeof delegate.findUnique !== "function") {
|
|
28
|
+
throw new AdapterMappingError(`Model "${modelName}" not found on PrismaClient`, {
|
|
29
|
+
field: modelName,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const createBoundQuery = (fn) => ({
|
|
33
|
+
get _result() {
|
|
34
|
+
return undefined;
|
|
35
|
+
},
|
|
36
|
+
async execute() {
|
|
37
|
+
try {
|
|
38
|
+
return await fn();
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
throw parsePrismaError(err);
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
const toDbValues = (data) => {
|
|
46
|
+
const values = {};
|
|
47
|
+
for (const [contractKey, col] of Object.entries(mappingRecord)) {
|
|
48
|
+
if (contractKey in data) {
|
|
49
|
+
values[col.name] = data[contractKey];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return values;
|
|
53
|
+
};
|
|
54
|
+
const fromDbRow = (row) => mapRowToContract(row, mappingRecord, contract);
|
|
55
|
+
const baseWhere = softDeleteField
|
|
56
|
+
? { [softDeleteField]: null }
|
|
57
|
+
: undefined;
|
|
58
|
+
const mergeWhere = (userWhere) => {
|
|
59
|
+
if (!baseWhere && !userWhere)
|
|
60
|
+
return undefined;
|
|
61
|
+
if (!baseWhere)
|
|
62
|
+
return userWhere;
|
|
63
|
+
if (!userWhere || Object.keys(userWhere).length === 0)
|
|
64
|
+
return baseWhere;
|
|
65
|
+
return { ...baseWhere, ...userWhere };
|
|
66
|
+
};
|
|
67
|
+
const sql = {
|
|
68
|
+
findById: (id) => createBoundQuery(async () => {
|
|
69
|
+
const where = mergeWhere({ [idField]: id });
|
|
70
|
+
const finalWhere = where ?? { [idField]: id };
|
|
71
|
+
// findUnique only accepts unique fields; with soft delete we need findFirst
|
|
72
|
+
const row = softDeleteField
|
|
73
|
+
? await delegate.findFirst({ where: finalWhere })
|
|
74
|
+
: await delegate.findUnique({ where: finalWhere });
|
|
75
|
+
return row ? fromDbRow(row) : null;
|
|
76
|
+
}),
|
|
77
|
+
findOne: (where) => createBoundQuery(async () => {
|
|
78
|
+
const prismaWhere = buildPrismaWhere(mappingRecord, where);
|
|
79
|
+
const fullWhere = mergeWhere(Object.keys(prismaWhere).length > 0 ? prismaWhere : undefined);
|
|
80
|
+
const row = await delegate.findFirst({ where: fullWhere });
|
|
81
|
+
return row ? fromDbRow(row) : null;
|
|
82
|
+
}),
|
|
83
|
+
findMany: (where, options) => createBoundQuery(async () => {
|
|
84
|
+
const prismaWhere = buildPrismaWhere(mappingRecord, where);
|
|
85
|
+
const fullWhere = mergeWhere(Object.keys(prismaWhere).length > 0 ? prismaWhere : undefined);
|
|
86
|
+
const rows = await delegate.findMany({
|
|
87
|
+
where: fullWhere,
|
|
88
|
+
orderBy: options?.orderBy,
|
|
89
|
+
take: options?.take,
|
|
90
|
+
skip: options?.skip,
|
|
91
|
+
});
|
|
92
|
+
return rows.map((r) => fromDbRow(r));
|
|
93
|
+
}),
|
|
94
|
+
create: (data) => createBoundQuery(async () => {
|
|
95
|
+
const values = toDbValues(data);
|
|
96
|
+
const row = await delegate.create({ data: values });
|
|
97
|
+
return fromDbRow(row);
|
|
98
|
+
}),
|
|
99
|
+
update: (id, data) => createBoundQuery(async () => {
|
|
100
|
+
const values = toDbValues(data);
|
|
101
|
+
const row = await delegate.update({
|
|
102
|
+
where: { [idField]: id },
|
|
103
|
+
data: values,
|
|
104
|
+
});
|
|
105
|
+
return fromDbRow(row);
|
|
106
|
+
}),
|
|
107
|
+
delete: (id) => createBoundQuery(async () => {
|
|
108
|
+
if (softDeleteField) {
|
|
109
|
+
await delegate.update({
|
|
110
|
+
where: { [idField]: id },
|
|
111
|
+
data: { [softDeleteField]: new Date() },
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
await delegate.delete({ where: { [idField]: id } });
|
|
116
|
+
}
|
|
117
|
+
}),
|
|
118
|
+
hardDelete: (id) => createBoundQuery(async () => {
|
|
119
|
+
await delegate.delete({ where: { [idField]: id } });
|
|
120
|
+
}),
|
|
121
|
+
};
|
|
122
|
+
const internal = {
|
|
123
|
+
contract,
|
|
124
|
+
modelName,
|
|
125
|
+
mapping: mappingRecord,
|
|
126
|
+
client: prisma,
|
|
127
|
+
sql,
|
|
128
|
+
};
|
|
129
|
+
return {
|
|
130
|
+
get infer() {
|
|
131
|
+
return undefined;
|
|
132
|
+
},
|
|
133
|
+
contract,
|
|
134
|
+
_internal: internal,
|
|
135
|
+
create: (data) => sql.create(data).execute(),
|
|
136
|
+
findById: (id) => sql.findById(id).execute(),
|
|
137
|
+
findOne: (where) => sql.findOne(where).execute(),
|
|
138
|
+
findMany: (where) => sql.findMany(where).execute(),
|
|
139
|
+
update: (id, data) => sql.update(id, data).execute(),
|
|
140
|
+
delete: (id) => sql.delete(id).execute(),
|
|
141
|
+
hardDelete: (id) => sql.hardDelete(id).execute(),
|
|
142
|
+
};
|
|
143
|
+
},
|
|
144
|
+
async transaction(fn) {
|
|
145
|
+
const result = await prisma.$transaction(async (tx) => {
|
|
146
|
+
const txAdapter = createPrismaAdapter(tx, options);
|
|
147
|
+
return fn(txAdapter);
|
|
148
|
+
});
|
|
149
|
+
return result;
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
return adapter;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=createAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdapter.js","sourceRoot":"","sources":["../../src/prisma/createAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse Prisma errors into normalized adapter errors.
|
|
3
|
+
* Covers PrismaClientKnownRequestError, PrismaClientValidationError,
|
|
4
|
+
* PrismaClientInitializationError, and PrismaClientRustPanicError.
|
|
5
|
+
*/
|
|
6
|
+
import { AdapterError } from "@justwant/db/errors";
|
|
7
|
+
/**
|
|
8
|
+
* Maps Prisma errors to normalized AdapterError subclasses.
|
|
9
|
+
* Supports all PrismaClientKnownRequestError codes and other Prisma error types.
|
|
10
|
+
*/
|
|
11
|
+
export declare function parsePrismaError(raw: unknown): AdapterError;
|
|
12
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/prisma/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,YAAY,EASb,MAAM,qBAAqB,CAAC;AAwB7B;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,YAAY,CA6G3D"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Parse Prisma errors into normalized adapter errors.
|
|
3
|
+
* Covers PrismaClientKnownRequestError, PrismaClientValidationError,
|
|
4
|
+
* PrismaClientInitializationError, and PrismaClientRustPanicError.
|
|
5
|
+
*/
|
|
6
|
+
import { AdapterCheckViolationError, AdapterConnectionError, AdapterError, AdapterForeignKeyViolationError, AdapterMappingError, AdapterNotFoundError, AdapterNotNullViolationError, AdapterTimeoutError, AdapterTransactionError, AdapterUniqueViolationError, AdapterUnsupportedError, } from "@justwant/db/errors";
|
|
7
|
+
function getMessage(err) {
|
|
8
|
+
const e = err;
|
|
9
|
+
return typeof e?.message === "string" ? e.message : String(err ?? "Unknown error");
|
|
10
|
+
}
|
|
11
|
+
function getCode(err) {
|
|
12
|
+
return err?.code;
|
|
13
|
+
}
|
|
14
|
+
function getMeta(err) {
|
|
15
|
+
return err?.meta;
|
|
16
|
+
}
|
|
17
|
+
function getErrorCode(err) {
|
|
18
|
+
return err?.errorCode;
|
|
19
|
+
}
|
|
20
|
+
function isPrismaError(err, name) {
|
|
21
|
+
const e = err;
|
|
22
|
+
return e?.name === name || e?.constructor?.name === name;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Maps Prisma errors to normalized AdapterError subclasses.
|
|
26
|
+
* Supports all PrismaClientKnownRequestError codes and other Prisma error types.
|
|
27
|
+
*/
|
|
28
|
+
export function parsePrismaError(raw) {
|
|
29
|
+
const message = getMessage(raw);
|
|
30
|
+
const code = getCode(raw);
|
|
31
|
+
const meta = getMeta(raw);
|
|
32
|
+
const errorCode = getErrorCode(raw);
|
|
33
|
+
// PrismaClientValidationError — incorrect types, missing fields
|
|
34
|
+
if (isPrismaError(raw, "PrismaClientValidationError")) {
|
|
35
|
+
return new AdapterMappingError(message, { field: "validation" });
|
|
36
|
+
}
|
|
37
|
+
// PrismaClientInitializationError — connection, engine startup
|
|
38
|
+
if (isPrismaError(raw, "PrismaClientInitializationError")) {
|
|
39
|
+
return new AdapterConnectionError(message, { code: errorCode ?? "INIT", original: raw });
|
|
40
|
+
}
|
|
41
|
+
// PrismaClientRustPanicError — engine crash
|
|
42
|
+
if (isPrismaError(raw, "PrismaClientRustPanicError")) {
|
|
43
|
+
return new AdapterError(message, "ENGINE_PANIC", { original: raw });
|
|
44
|
+
}
|
|
45
|
+
if (typeof code === "string") {
|
|
46
|
+
switch (code) {
|
|
47
|
+
case "P2002": {
|
|
48
|
+
const target = meta?.target;
|
|
49
|
+
const column = Array.isArray(target) ? target[0] : undefined;
|
|
50
|
+
return new AdapterUniqueViolationError(message, {
|
|
51
|
+
column: typeof column === "string" ? column : undefined,
|
|
52
|
+
constraint: String(meta?.target ?? ""),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
case "P2003":
|
|
56
|
+
return new AdapterForeignKeyViolationError(message, {
|
|
57
|
+
column: String(meta?.field_name ?? ""),
|
|
58
|
+
});
|
|
59
|
+
case "P2011":
|
|
60
|
+
return new AdapterNotNullViolationError(message, {
|
|
61
|
+
column: String(meta?.column ?? meta?.constraint ?? ""),
|
|
62
|
+
});
|
|
63
|
+
case "P2014":
|
|
64
|
+
return new AdapterForeignKeyViolationError(message, {
|
|
65
|
+
column: String(meta?.relation_name ?? ""),
|
|
66
|
+
});
|
|
67
|
+
case "P2025":
|
|
68
|
+
return new AdapterNotFoundError(message, {
|
|
69
|
+
table: String(meta?.modelName ?? ""),
|
|
70
|
+
});
|
|
71
|
+
case "P1000":
|
|
72
|
+
case "P1001":
|
|
73
|
+
case "P1002":
|
|
74
|
+
case "P1003":
|
|
75
|
+
case "P1009":
|
|
76
|
+
case "P1010":
|
|
77
|
+
case "P1011":
|
|
78
|
+
case "P1017":
|
|
79
|
+
case "P2037":
|
|
80
|
+
return new AdapterConnectionError(message, { code });
|
|
81
|
+
case "P1008":
|
|
82
|
+
case "P2024":
|
|
83
|
+
return new AdapterTimeoutError(message, { code });
|
|
84
|
+
case "P2000":
|
|
85
|
+
return new AdapterMappingError(message, {
|
|
86
|
+
column: String(meta?.column_name ?? ""),
|
|
87
|
+
});
|
|
88
|
+
case "P2001":
|
|
89
|
+
return new AdapterNotFoundError(message, {
|
|
90
|
+
table: String(meta?.model_name ?? ""),
|
|
91
|
+
});
|
|
92
|
+
case "P2004":
|
|
93
|
+
case "P2035":
|
|
94
|
+
return new AdapterCheckViolationError(message, {
|
|
95
|
+
constraint: String(meta?.database_error ?? ""),
|
|
96
|
+
});
|
|
97
|
+
case "P2005":
|
|
98
|
+
case "P2006":
|
|
99
|
+
case "P2007":
|
|
100
|
+
case "P2012":
|
|
101
|
+
case "P2013":
|
|
102
|
+
case "P2019":
|
|
103
|
+
case "P2020":
|
|
104
|
+
case "P2021":
|
|
105
|
+
case "P2022":
|
|
106
|
+
case "P2023":
|
|
107
|
+
case "P2033":
|
|
108
|
+
return new AdapterMappingError(message, {
|
|
109
|
+
column: String(meta?.field_name ?? meta?.column ?? meta?.table ?? ""),
|
|
110
|
+
});
|
|
111
|
+
case "P2015":
|
|
112
|
+
case "P2018":
|
|
113
|
+
return new AdapterNotFoundError(message, {
|
|
114
|
+
table: String(meta?.modelName ?? meta?.model_name ?? ""),
|
|
115
|
+
});
|
|
116
|
+
case "P2017":
|
|
117
|
+
return new AdapterForeignKeyViolationError(message, {
|
|
118
|
+
column: String(meta?.relation_name ?? ""),
|
|
119
|
+
});
|
|
120
|
+
case "P2026":
|
|
121
|
+
return new AdapterUnsupportedError(message, {
|
|
122
|
+
operation: String(meta?.feature ?? ""),
|
|
123
|
+
});
|
|
124
|
+
case "P2028":
|
|
125
|
+
case "P2034":
|
|
126
|
+
return new AdapterTransactionError(message, { code });
|
|
127
|
+
case "P2030":
|
|
128
|
+
return new AdapterUnsupportedError(message, { operation: "fulltext" });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return new AdapterError(message, "UNKNOWN", { original: raw });
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/prisma/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createPrismaAdapter } from "./createAdapter.js";
|
|
2
|
+
export { buildPrismaWhere } from "./buildWhere.js";
|
|
3
|
+
export { parsePrismaError } from "./errors.js";
|
|
4
|
+
export { mapRowToContract } from "./mapping.js";
|
|
5
|
+
export { upsertPrisma } from "./upsert.js";
|
|
6
|
+
export { bulkInsertPrisma } from "./bulkInsert.js";
|
|
7
|
+
export type { PrismaClient, PrismaAdapter, PrismaMappedTable, PrismaMappedTableInternal, PrismaMapping, PrismaFindManyOptions, PrismaWhereValue, PrismaId, DefinePrismaTableOptions, } from "./types.js";
|
|
8
|
+
export type { CreatePrismaAdapterOptions } from "./createAdapter.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prisma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,YAAY,EACV,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,yBAAyB,EACzB,aAAa,EACb,qBAAqB,EACrB,gBAAgB,EAChB,QAAQ,EACR,wBAAwB,GACzB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createPrismaAdapter } from "./createAdapter.js";
|
|
2
|
+
export { buildPrismaWhere } from "./buildWhere.js";
|
|
3
|
+
export { parsePrismaError } from "./errors.js";
|
|
4
|
+
export { mapRowToContract } from "./mapping.js";
|
|
5
|
+
export { upsertPrisma } from "./upsert.js";
|
|
6
|
+
export { bulkInsertPrisma } from "./bulkInsert.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prisma/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mapping between Prisma model fields and adapter contract.
|
|
3
|
+
* Contract key → Prisma field name.
|
|
4
|
+
*/
|
|
5
|
+
import type { AnyContract } from "@justwant/contract";
|
|
6
|
+
/** Column-like with a name for row lookup. */
|
|
7
|
+
interface ColumnLike {
|
|
8
|
+
name: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Maps a DB row to contract shape. Converts null to undefined for optional fields.
|
|
12
|
+
*/
|
|
13
|
+
export declare function mapRowToContract<T>(row: Record<string, unknown>, mapping: Record<string, ColumnLike>, contract: AnyContract): T;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/prisma/mapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtD,8CAA8C;AAC9C,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EACnC,QAAQ,EAAE,WAAW,GACpB,CAAC,CAaH"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mapping between Prisma model fields and adapter contract.
|
|
3
|
+
* Contract key → Prisma field name.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Maps a DB row to contract shape. Converts null to undefined for optional fields.
|
|
7
|
+
*/
|
|
8
|
+
export function mapRowToContract(row, mapping, contract) {
|
|
9
|
+
const result = {};
|
|
10
|
+
for (const [contractKey, col] of Object.entries(mapping)) {
|
|
11
|
+
const colName = col.name;
|
|
12
|
+
const value = row[colName];
|
|
13
|
+
const fieldDef = contract[contractKey];
|
|
14
|
+
if (fieldDef && !fieldDef._required && value === null) {
|
|
15
|
+
result[contractKey] = undefined;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
result[contractKey] = value;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return result;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=mapping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapping.js","sourceRoot":"","sources":["../../src/prisma/mapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,GAA4B,EAC5B,OAAmC,EACnC,QAAqB;IAErB,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC;QACzB,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAoC,CAAC,CAAC;QAChE,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACtD,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,WAAW,CAAC,GAAG,KAAK,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,MAAW,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prisma adapter types.
|
|
3
|
+
* Supports pg, mysql, sqlite via PrismaClient.
|
|
4
|
+
*/
|
|
5
|
+
import type { AnyContract } from "@justwant/contract";
|
|
6
|
+
import type { MappedTable, MappedTableInternal } from "@justwant/db";
|
|
7
|
+
/** Prisma mapping: contract key → Prisma field name. */
|
|
8
|
+
export type PrismaMapping = Record<string, {
|
|
9
|
+
name: string;
|
|
10
|
+
}>;
|
|
11
|
+
/**
|
|
12
|
+
* Any PrismaClient instance. Prisma generates types per project,
|
|
13
|
+
* so we use a generic type for reusability.
|
|
14
|
+
*/
|
|
15
|
+
export type PrismaClient = any;
|
|
16
|
+
export interface PrismaMappedTableInternal<TContract extends AnyContract> extends MappedTableInternal<TContract> {
|
|
17
|
+
readonly modelName: string;
|
|
18
|
+
readonly mapping: PrismaMapping;
|
|
19
|
+
readonly client: PrismaClient;
|
|
20
|
+
}
|
|
21
|
+
export interface PrismaMappedTable<TContract extends AnyContract> extends MappedTable<TContract> {
|
|
22
|
+
readonly _internal: PrismaMappedTableInternal<TContract>;
|
|
23
|
+
}
|
|
24
|
+
export interface PrismaAdapter {
|
|
25
|
+
readonly dialect: "pg" | "mysql" | "sqlite";
|
|
26
|
+
readonly client: PrismaClient;
|
|
27
|
+
defineTable<TContract extends AnyContract>(modelName: string, contract: TContract, mapping: PrismaMapping, options?: DefinePrismaTableOptions): PrismaMappedTable<TContract>;
|
|
28
|
+
transaction<T>(fn: (tx: PrismaAdapter) => Promise<T>): Promise<T>;
|
|
29
|
+
}
|
|
30
|
+
export interface DefinePrismaTableOptions {
|
|
31
|
+
/** Column name for soft delete. Default 'deletedAt'. Set to null to disable. */
|
|
32
|
+
softDeleteColumn?: string | null;
|
|
33
|
+
}
|
|
34
|
+
/** Options for findMany: orderBy, pagination. */
|
|
35
|
+
export interface PrismaFindManyOptions {
|
|
36
|
+
orderBy?: Record<string, "asc" | "desc">;
|
|
37
|
+
take?: number;
|
|
38
|
+
skip?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Prisma where value: primitive or filter object (in, contains, startsWith, etc.).
|
|
42
|
+
* Use for advanced filtering in findOne/findMany.
|
|
43
|
+
*/
|
|
44
|
+
export type PrismaWhereValue = string | number | boolean | null | Date | {
|
|
45
|
+
in?: unknown[];
|
|
46
|
+
not?: unknown;
|
|
47
|
+
equals?: unknown;
|
|
48
|
+
} | {
|
|
49
|
+
contains?: string;
|
|
50
|
+
startsWith?: string;
|
|
51
|
+
endsWith?: string;
|
|
52
|
+
mode?: "insensitive";
|
|
53
|
+
} | {
|
|
54
|
+
gt?: string | number | Date;
|
|
55
|
+
gte?: string | number | Date;
|
|
56
|
+
lt?: string | number | Date;
|
|
57
|
+
lte?: string | number | Date;
|
|
58
|
+
};
|
|
59
|
+
/** ID type for findById, update, delete. Prisma supports string (uuid) and number (int). */
|
|
60
|
+
export type PrismaId = string | number;
|
|
61
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/prisma/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAErE,wDAAwD;AACxD,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7D;;;GAGG;AAEH,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC;AAE/B,MAAM,WAAW,yBAAyB,CAAC,SAAS,SAAS,WAAW,CACtE,SAAQ,mBAAmB,CAAC,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB,CAAC,SAAS,SAAS,WAAW,CAAE,SAAQ,WAAW,CAAC,SAAS,CAAC;IAC9F,QAAQ,CAAC,SAAS,EAAE,yBAAyB,CAAC,SAAS,CAAC,CAAC;CAC1D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;IAC5C,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAE9B,WAAW,CAAC,SAAS,SAAS,WAAW,EACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,wBAAwB,GACjC,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEhC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,aAAa,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CACnE;AAED,MAAM,WAAW,wBAAwB;IACvC,gFAAgF;IAChF,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,iDAAiD;AACjD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,IAAI,GACJ;IAAE,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GACnD;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,aAAa,CAAA;CAAE,GACnF;IACE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC7B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEN,4FAA4F;AAC5F,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/prisma/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upsert via Prisma delegate.upsert.
|
|
3
|
+
*/
|
|
4
|
+
type PrismaUpsertDelegate = {
|
|
5
|
+
upsert: (args: {
|
|
6
|
+
where: Record<string, unknown>;
|
|
7
|
+
create: Record<string, unknown>;
|
|
8
|
+
update: Record<string, unknown>;
|
|
9
|
+
}) => Promise<Record<string, unknown>>;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Upsert a row using Prisma's native upsert.
|
|
13
|
+
* Requires a unique constraint on the where fields.
|
|
14
|
+
*/
|
|
15
|
+
export declare function upsertPrisma(delegate: PrismaUpsertDelegate, where: Record<string, unknown>, create: Record<string, unknown>, update: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=upsert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsert.d.ts","sourceRoot":"","sources":["../../src/prisma/upsert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,KAAK,oBAAoB,GAAG;IAC1B,MAAM,EAAE,CAAC,IAAI,EAAE;QACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAChC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CACxC,CAAC;AAEF;;;GAGG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,oBAAoB,EAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAElC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Upsert via Prisma delegate.upsert.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Upsert a row using Prisma's native upsert.
|
|
6
|
+
* Requires a unique constraint on the where fields.
|
|
7
|
+
*/
|
|
8
|
+
export async function upsertPrisma(delegate, where, create, update) {
|
|
9
|
+
return delegate.upsert({ where, create, update });
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=upsert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upsert.js","sourceRoot":"","sources":["../../src/prisma/upsert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAA8B,EAC9B,KAA8B,EAC9B,MAA+B,EAC/B,MAA+B;IAE/B,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC"}
|