@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,34 @@
|
|
|
1
|
+
import { defineContract, field } from "./contract.js";
|
|
2
|
+
const UserContract = defineContract({
|
|
3
|
+
id: field().required(),
|
|
4
|
+
email: field().required(),
|
|
5
|
+
name: field().optional(),
|
|
6
|
+
createdAt: field().required(),
|
|
7
|
+
});
|
|
8
|
+
// Required fields must be present
|
|
9
|
+
const _user = {
|
|
10
|
+
id: "1",
|
|
11
|
+
email: "a@b.com",
|
|
12
|
+
createdAt: new Date(),
|
|
13
|
+
};
|
|
14
|
+
// Optional field can be omitted
|
|
15
|
+
const _userNoName = {
|
|
16
|
+
id: "2",
|
|
17
|
+
email: "b@c.com",
|
|
18
|
+
createdAt: new Date(),
|
|
19
|
+
};
|
|
20
|
+
// @ts-expect-error - missing required id
|
|
21
|
+
const _bad1 = {
|
|
22
|
+
email: "x@y.com",
|
|
23
|
+
createdAt: new Date(),
|
|
24
|
+
};
|
|
25
|
+
// @ts-expect-error - wrong type for email
|
|
26
|
+
const _bad2 = {
|
|
27
|
+
id: "1",
|
|
28
|
+
email: 123,
|
|
29
|
+
createdAt: new Date(),
|
|
30
|
+
};
|
|
31
|
+
// Empty contract
|
|
32
|
+
const EmptyContract = defineContract({});
|
|
33
|
+
const _empty = {};
|
|
34
|
+
//# sourceMappingURL=contract.type-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract.type-test.js","sourceRoot":"","sources":["../src/contract.type-test.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtD,MAAM,YAAY,GAAG,cAAc,CAAC;IACnC,EAAE,EAAE,KAAK,EAAU,CAAC,QAAQ,EAAE;IAC9B,KAAK,EAAE,KAAK,EAAU,CAAC,QAAQ,EAAE;IACjC,IAAI,EAAE,KAAK,EAAU,CAAC,QAAQ,EAAE;IAChC,SAAS,EAAE,KAAK,EAAQ,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAIH,kCAAkC;AAClC,MAAM,KAAK,GAAS;IACnB,EAAE,EAAE,GAAG;IACP,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,IAAI,IAAI,EAAE;CACrB,CAAC;AAEF,gCAAgC;AAChC,MAAM,WAAW,GAAS;IACzB,EAAE,EAAE,GAAG;IACP,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,IAAI,IAAI,EAAE;CACrB,CAAC;AAEF,yCAAyC;AACzC,MAAM,KAAK,GAAS;IACnB,KAAK,EAAE,SAAS;IAChB,SAAS,EAAE,IAAI,IAAI,EAAE;CACrB,CAAC;AAEF,0CAA0C;AAC1C,MAAM,KAAK,GAAS;IACnB,EAAE,EAAE,GAAG;IACP,KAAK,EAAE,GAAG;IACV,SAAS,EAAE,IAAI,IAAI,EAAE;CACrB,CAAC;AAEF,iBAAiB;AACjB,MAAM,aAAa,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC;AAEzC,MAAM,MAAM,GAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop.d.ts","sourceRoot":"","sources":["../../src/ddl/drop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO7C,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/F"}
|
package/dist/ddl/drop.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL to drop a table.
|
|
3
|
+
*/
|
|
4
|
+
function escapeIdentifier(name, dialect) {
|
|
5
|
+
const q = dialect === "mysql" ? "`" : '"';
|
|
6
|
+
return `${q}${String(name).replace(dialect === "mysql" ? /`/g : /"/g, dialect === "mysql" ? "``" : '""')}${q}`;
|
|
7
|
+
}
|
|
8
|
+
export function getDropTableSQL(tableName, dialect, schema) {
|
|
9
|
+
const tableId = dialect === "pg" && schema
|
|
10
|
+
? `${escapeIdentifier(schema, dialect)}.${escapeIdentifier(tableName, dialect)}`
|
|
11
|
+
: escapeIdentifier(tableName, dialect);
|
|
12
|
+
return `DROP TABLE IF EXISTS ${tableId}`;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=drop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drop.js","sourceRoot":"","sources":["../../src/ddl/drop.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAAmB;IACzD,MAAM,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACjH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAAiB,EAAE,OAAmB,EAAE,MAAe;IACrF,MAAM,OAAO,GACX,OAAO,KAAK,IAAI,IAAI,MAAM;QACxB,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE;QAChF,CAAC,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,wBAAwB,OAAO,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exist.d.ts","sourceRoot":"","sources":["../../src/ddl/exist.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAW7C,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAYhG"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQL to check if a table exists.
|
|
3
|
+
*/
|
|
4
|
+
function escapeIdentifier(name, dialect) {
|
|
5
|
+
const q = dialect === "mysql" ? "`" : '"';
|
|
6
|
+
return `${q}${String(name).replace(dialect === "mysql" ? /`/g : /"/g, dialect === "mysql" ? "``" : '""')}${q}`;
|
|
7
|
+
}
|
|
8
|
+
function escapeStringLiteral(value) {
|
|
9
|
+
return `'${String(value).replace(/'/g, "''")}'`;
|
|
10
|
+
}
|
|
11
|
+
export function getExistTableSQL(tableName, dialect, schema) {
|
|
12
|
+
if (dialect === "sqlite") {
|
|
13
|
+
return `SELECT EXISTS (SELECT 1 FROM sqlite_schema WHERE type='table' AND name=${escapeStringLiteral(tableName)})`;
|
|
14
|
+
}
|
|
15
|
+
if (dialect === "pg") {
|
|
16
|
+
const schemaVal = schema ?? "public";
|
|
17
|
+
return `SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = ${escapeStringLiteral(schemaVal)} AND table_name = ${escapeStringLiteral(tableName)})`;
|
|
18
|
+
}
|
|
19
|
+
if (dialect === "mysql") {
|
|
20
|
+
return `SELECT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_schema = DATABASE() AND table_name = ${escapeStringLiteral(tableName)})`;
|
|
21
|
+
}
|
|
22
|
+
throw new Error(`Unsupported dialect: ${dialect}`);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=exist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exist.js","sourceRoot":"","sources":["../../src/ddl/exist.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,SAAS,gBAAgB,CAAC,IAAY,EAAE,OAAmB;IACzD,MAAM,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,OAAO,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;AACjH,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,SAAiB,EAAE,OAAmB,EAAE,MAAe;IACtF,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,0EAA0E,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC;IACrH,CAAC;IACD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,SAAS,GAAG,MAAM,IAAI,QAAQ,CAAC;QACrC,OAAO,+EAA+E,mBAAmB,CAAC,SAAS,CAAC,qBAAqB,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC;IAC7K,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,2GAA2G,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC;IACtJ,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DDL generation for TableContract.
|
|
3
|
+
* Extracted from tableContract - adapter-specific SQL generation.
|
|
4
|
+
*/
|
|
5
|
+
import type { FieldDef } from "@justwant/contract";
|
|
6
|
+
import type { TableContract } from "@justwant/contract";
|
|
7
|
+
export type SqlDialect = "sqlite" | "pg" | "mysql";
|
|
8
|
+
export { getExistTableSQL } from "./exist.js";
|
|
9
|
+
export { getDropTableSQL } from "./drop.js";
|
|
10
|
+
/**
|
|
11
|
+
* Generates CREATE TABLE SQL for a TableContract.
|
|
12
|
+
*/
|
|
13
|
+
export declare function getCreateTableSQL(contract: TableContract<Record<string, FieldDef<unknown, boolean>>>, dialect?: SqlDialect, options?: {
|
|
14
|
+
schema?: string;
|
|
15
|
+
ifNotExists?: boolean;
|
|
16
|
+
}): string;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ddl/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,OAAO,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AA+B5C;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnE,OAAO,GAAE,UAAqB,EAC9B,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GACnD,MAAM,CAsBR"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DDL generation for TableContract.
|
|
3
|
+
* Extracted from tableContract - adapter-specific SQL generation.
|
|
4
|
+
*/
|
|
5
|
+
export { getExistTableSQL } from "./exist.js";
|
|
6
|
+
export { getDropTableSQL } from "./drop.js";
|
|
7
|
+
function escapeIdentifier(name, dialect) {
|
|
8
|
+
const q = dialect === "mysql" ? "`" : '"';
|
|
9
|
+
return `${q}${String(name).replace(dialect === "mysql" ? /`/g : /"/g, dialect === "mysql" ? "``" : '""')}${q}`;
|
|
10
|
+
}
|
|
11
|
+
function columnTypeForDialect(field, dialect) {
|
|
12
|
+
const ct = field._columnType ?? "TEXT";
|
|
13
|
+
if (dialect === "sqlite") {
|
|
14
|
+
return ct;
|
|
15
|
+
}
|
|
16
|
+
if (dialect === "pg") {
|
|
17
|
+
const map = {
|
|
18
|
+
TEXT: "TEXT",
|
|
19
|
+
INTEGER: "INTEGER",
|
|
20
|
+
REAL: "REAL",
|
|
21
|
+
};
|
|
22
|
+
return map[ct] ?? ct;
|
|
23
|
+
}
|
|
24
|
+
if (dialect === "mysql") {
|
|
25
|
+
const map = {
|
|
26
|
+
TEXT: "VARCHAR(255)",
|
|
27
|
+
INTEGER: "INTEGER",
|
|
28
|
+
REAL: "DOUBLE",
|
|
29
|
+
};
|
|
30
|
+
return map[ct] ?? ct;
|
|
31
|
+
}
|
|
32
|
+
return ct;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generates CREATE TABLE SQL for a TableContract.
|
|
36
|
+
*/
|
|
37
|
+
export function getCreateTableSQL(contract, dialect = "sqlite", options) {
|
|
38
|
+
const { tableName, fields, mapping } = contract;
|
|
39
|
+
const parts = [];
|
|
40
|
+
for (const [key, col] of Object.entries(mapping)) {
|
|
41
|
+
const field = fields[key];
|
|
42
|
+
if (!field)
|
|
43
|
+
continue;
|
|
44
|
+
const colName = col.name;
|
|
45
|
+
const type = columnTypeForDialect(field, dialect);
|
|
46
|
+
const notNull = field._required ? " NOT NULL" : "";
|
|
47
|
+
const primaryKey = field._primaryKey ? " PRIMARY KEY" : "";
|
|
48
|
+
const unique = field._unique ? " UNIQUE" : "";
|
|
49
|
+
const def = field._default ? ` DEFAULT ${field._default}` : "";
|
|
50
|
+
parts.push(`${escapeIdentifier(colName, dialect)} ${type}${notNull}${primaryKey}${unique}${def}`);
|
|
51
|
+
}
|
|
52
|
+
const tableId = dialect === "pg" && options?.schema
|
|
53
|
+
? `${escapeIdentifier(options.schema, dialect)}.${escapeIdentifier(tableName, dialect)}`
|
|
54
|
+
: escapeIdentifier(tableName, dialect);
|
|
55
|
+
const ifNotExists = options?.ifNotExists ? " IF NOT EXISTS" : "";
|
|
56
|
+
return `CREATE TABLE${ifNotExists} ${tableId} (${parts.join(", ")})`;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ddl/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build ORDER BY clause.
|
|
3
|
+
*/
|
|
4
|
+
import type { SQL } from "drizzle-orm";
|
|
5
|
+
import type { Column } from "drizzle-orm";
|
|
6
|
+
export type OrderDirection = "asc" | "desc";
|
|
7
|
+
/**
|
|
8
|
+
* Builds ORDER BY from a mapping of field names to direction.
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildOrderBy(mapping: Record<string, Column>, orderBy: Record<string, OrderDirection>): SQL[];
|
|
11
|
+
//# sourceMappingURL=buildOrderBy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildOrderBy.d.ts","sourceRoot":"","sources":["../../src/drizzle/buildOrderBy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,MAAM,CAAC;AAE5C;;GAEG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GACtC,GAAG,EAAE,CASP"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build ORDER BY clause.
|
|
3
|
+
*/
|
|
4
|
+
import { asc, desc } from "drizzle-orm";
|
|
5
|
+
/**
|
|
6
|
+
* Builds ORDER BY from a mapping of field names to direction.
|
|
7
|
+
*/
|
|
8
|
+
export function buildOrderBy(mapping, orderBy) {
|
|
9
|
+
return Object.entries(orderBy)
|
|
10
|
+
.filter(([key]) => mapping[key])
|
|
11
|
+
.map(([key, dir]) => {
|
|
12
|
+
const col = mapping[key];
|
|
13
|
+
if (!col)
|
|
14
|
+
return null;
|
|
15
|
+
return dir === "desc" ? desc(col) : asc(col);
|
|
16
|
+
})
|
|
17
|
+
.filter((c) => c !== null);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=buildOrderBy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildOrderBy.js","sourceRoot":"","sources":["../../src/drizzle/buildOrderBy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAMxC;;GAEG;AACH,MAAM,UAAU,YAAY,CAC1B,OAA+B,EAC/B,OAAuC;IAEvC,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;QAClB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,OAAO,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAY,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build LIMIT and OFFSET for pagination.
|
|
3
|
+
*/
|
|
4
|
+
export interface PaginationOptions {
|
|
5
|
+
limit?: number;
|
|
6
|
+
offset?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Returns limit and offset for use with Drizzle's .limit() and .offset().
|
|
10
|
+
*/
|
|
11
|
+
export declare function buildPagination(options?: PaginationOptions): {
|
|
12
|
+
limit?: number;
|
|
13
|
+
offset?: number;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=buildPagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPagination.d.ts","sourceRoot":"","sources":["../../src/drizzle/buildPagination.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG;IAC5D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAIA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build LIMIT and OFFSET for pagination.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Returns limit and offset for use with Drizzle's .limit() and .offset().
|
|
6
|
+
*/
|
|
7
|
+
export function buildPagination(options) {
|
|
8
|
+
if (!options)
|
|
9
|
+
return {};
|
|
10
|
+
const { limit, offset } = options;
|
|
11
|
+
return { limit, offset };
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=buildPagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildPagination.js","sourceRoot":"","sources":["../../src/drizzle/buildPagination.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,OAA2B;IAIzD,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,CAAC;IACxB,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAClC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build WHERE clause from Partial<InferContract>.
|
|
3
|
+
*/
|
|
4
|
+
import type { SQL } from "drizzle-orm";
|
|
5
|
+
import type { Column } from "drizzle-orm";
|
|
6
|
+
/**
|
|
7
|
+
* Builds a WHERE condition from a partial object.
|
|
8
|
+
* Each key-value pair becomes eq(column, value).
|
|
9
|
+
*/
|
|
10
|
+
export declare function buildWhere(mapping: Record<string, Column>, where: Record<string, unknown>): SQL | undefined;
|
|
11
|
+
//# sourceMappingURL=buildWhere.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildWhere.d.ts","sourceRoot":"","sources":["../../src/drizzle/buildWhere.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;GAGG;AACH,wBAAgB,UAAU,CACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,GAAG,GAAG,SAAS,CAUjB"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build WHERE clause from Partial<InferContract>.
|
|
3
|
+
*/
|
|
4
|
+
import { and, eq } from "drizzle-orm";
|
|
5
|
+
/**
|
|
6
|
+
* Builds a WHERE condition from a partial object.
|
|
7
|
+
* Each key-value pair becomes eq(column, value).
|
|
8
|
+
*/
|
|
9
|
+
export function buildWhere(mapping, where) {
|
|
10
|
+
const conditions = Object.entries(where)
|
|
11
|
+
.filter(([, v]) => v !== undefined)
|
|
12
|
+
.map(([key, value]) => {
|
|
13
|
+
const col = mapping[key];
|
|
14
|
+
if (!col)
|
|
15
|
+
return undefined;
|
|
16
|
+
return eq(col, value);
|
|
17
|
+
})
|
|
18
|
+
.filter((c) => c !== undefined);
|
|
19
|
+
return and(...conditions);
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=buildWhere.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildWhere.js","sourceRoot":"","sources":["../../src/drizzle/buildWhere.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAItC;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,OAA+B,EAC/B,KAA8B;IAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;SACrC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;QACpB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG;YAAE,OAAO,SAAS,CAAC;QAC3B,OAAO,EAAE,CAAC,GAAG,EAAE,KAAc,CAAC,CAAC;IACjC,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,CAAC,EAAY,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;IAC5C,OAAO,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk insert multiple rows.
|
|
3
|
+
*/
|
|
4
|
+
import type { DrizzleClient } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Insert multiple rows in a single query.
|
|
7
|
+
*/
|
|
8
|
+
export declare function bulkInsert<TTable, TData>(db: DrizzleClient, table: TTable, rows: TData[]): Promise<unknown[]>;
|
|
9
|
+
//# sourceMappingURL=bulkInsert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkInsert.d.ts","sourceRoot":"","sources":["../../src/drizzle/bulkInsert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,KAAK,EAC5C,EAAE,EAAE,aAAa,EACjB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,KAAK,EAAE,GACZ,OAAO,CAAC,OAAO,EAAE,CAAC,CAWpB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk insert multiple rows.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Insert multiple rows in a single query.
|
|
6
|
+
*/
|
|
7
|
+
export async function bulkInsert(db, table, rows) {
|
|
8
|
+
if (rows.length === 0)
|
|
9
|
+
return [];
|
|
10
|
+
const result = await db
|
|
11
|
+
.insert(table)
|
|
12
|
+
.values(rows)
|
|
13
|
+
.returning();
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=bulkInsert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulkInsert.js","sourceRoot":"","sources":["../../src/drizzle/bulkInsert.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,EAAiB,EACjB,KAAa,EACb,IAAa;IAEb,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,MACb,EAGD;SACE,MAAM,CAAC,KAAK,CAAC;SACb,MAAM,CAAC,IAAI,CAAC;SACZ,SAAS,EAAE,CAAC;IACf,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collect Drizzle schemas from tables.
|
|
3
|
+
* Use drizzle-kit for migration generation.
|
|
4
|
+
*/
|
|
5
|
+
import type { Table } from "drizzle-orm";
|
|
6
|
+
/**
|
|
7
|
+
* Collects table schemas. Returns the tables as-is.
|
|
8
|
+
* For migrations, use drizzle-kit: `drizzle-kit generate`
|
|
9
|
+
*/
|
|
10
|
+
export declare function collectSchemas(tables: Record<string, Table>): Record<string, Table>;
|
|
11
|
+
//# sourceMappingURL=collectSchemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectSchemas.d.ts","sourceRoot":"","sources":["../../src/drizzle/collectSchemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAEnF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Collect Drizzle schemas from tables.
|
|
3
|
+
* Use drizzle-kit for migration generation.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Collects table schemas. Returns the tables as-is.
|
|
7
|
+
* For migrations, use drizzle-kit: `drizzle-kit generate`
|
|
8
|
+
*/
|
|
9
|
+
export function collectSchemas(tables) {
|
|
10
|
+
return tables;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=collectSchemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collectSchemas.js","sourceRoot":"","sources":["../../src/drizzle/collectSchemas.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAA6B;IAC1D,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a Drizzle adapter with full CRUD implementation.
|
|
3
|
+
*/
|
|
4
|
+
import type { DrizzleAdapter, DrizzleClient } from "./types.js";
|
|
5
|
+
export interface CreateDrizzleAdapterOptions {
|
|
6
|
+
debug?: boolean;
|
|
7
|
+
onQuery?: (sql: string, params: unknown[]) => void;
|
|
8
|
+
/** Override dialect when auto-detection fails (e.g. bun-sqlite). */
|
|
9
|
+
dialect?: "pg" | "mysql" | "sqlite";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates a Drizzle adapter for the given database client.
|
|
13
|
+
*/
|
|
14
|
+
export declare function createDrizzleAdapter(db: DrizzleClient, options?: CreateDrizzleAdapterOptions): DrizzleAdapter;
|
|
15
|
+
//# sourceMappingURL=createAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdapter.d.ts","sourceRoot":"","sources":["../../src/drizzle/createAdapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAYH,OAAO,KAAK,EAEV,cAAc,EACd,aAAa,EAEd,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,2BAA2B;IAC1C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACnD,oEAAoE;IACpE,OAAO,CAAC,EAAE,IAAI,GAAG,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,aAAa,EACjB,OAAO,CAAC,EAAE,2BAA2B,GACpC,cAAc,CAuLhB"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a Drizzle adapter with full CRUD implementation.
|
|
3
|
+
*/
|
|
4
|
+
import { and, eq, isNull } from "drizzle-orm";
|
|
5
|
+
import { getTableName } from "drizzle-orm";
|
|
6
|
+
import { buildWhere } from "./buildWhere.js";
|
|
7
|
+
import { defineMappedTable } from "./defineMappedTable.js";
|
|
8
|
+
import { parseDbError } from "./errors.js";
|
|
9
|
+
import { mapRowToContract } from "./mapping.js";
|
|
10
|
+
/**
|
|
11
|
+
* Creates a Drizzle adapter for the given database client.
|
|
12
|
+
*/
|
|
13
|
+
export function createDrizzleAdapter(db, options) {
|
|
14
|
+
const dialect = options?.dialect ?? inferDialect(db);
|
|
15
|
+
const onQuery = options?.onQuery;
|
|
16
|
+
const adapter = {
|
|
17
|
+
dialect,
|
|
18
|
+
client: db,
|
|
19
|
+
defineTable(table, contract, mapping, defineOptions) {
|
|
20
|
+
const softDeleteCol = defineOptions && "softDeleteColumn" in defineOptions
|
|
21
|
+
? defineOptions.softDeleteColumn
|
|
22
|
+
: "deletedAt";
|
|
23
|
+
const tableName = getTableName(table);
|
|
24
|
+
const mapped = defineMappedTable(table, contract, mapping, defineOptions);
|
|
25
|
+
const mappingRecord = mapping;
|
|
26
|
+
const idCol = mappingRecord.id;
|
|
27
|
+
const softDeleteColumn = softDeleteCol
|
|
28
|
+
? table[softDeleteCol]
|
|
29
|
+
: null;
|
|
30
|
+
const createBoundQuery = (fn) => ({
|
|
31
|
+
get _result() {
|
|
32
|
+
return undefined;
|
|
33
|
+
},
|
|
34
|
+
async execute() {
|
|
35
|
+
try {
|
|
36
|
+
return await fn();
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
throw parseDbError(err);
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
const toDbValues = (data) => {
|
|
44
|
+
const values = {};
|
|
45
|
+
for (const [contractKey, col] of Object.entries(mappingRecord)) {
|
|
46
|
+
if (contractKey in data) {
|
|
47
|
+
values[col.name] = data[contractKey];
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return values;
|
|
51
|
+
};
|
|
52
|
+
const fromDbRow = (row) => mapRowToContract(row, mappingRecord, contract);
|
|
53
|
+
const softDeleteCondition = softDeleteColumn ? isNull(softDeleteColumn) : undefined;
|
|
54
|
+
const baseWhere = softDeleteCondition ? and(softDeleteCondition) : undefined;
|
|
55
|
+
const dbAny = db;
|
|
56
|
+
const select = () => dbAny.select.call(dbAny);
|
|
57
|
+
const insert = (t) => dbAny.insert.call(dbAny, t);
|
|
58
|
+
const update = (t) => dbAny.update.call(dbAny, t);
|
|
59
|
+
const del = (t) => dbAny.delete.call(dbAny, t);
|
|
60
|
+
const sql = {
|
|
61
|
+
findById: (id) => createBoundQuery(async () => {
|
|
62
|
+
const conditions = idCol
|
|
63
|
+
? baseWhere
|
|
64
|
+
? and(eq(idCol, id), baseWhere)
|
|
65
|
+
: eq(idCol, id)
|
|
66
|
+
: eq(table.id, id);
|
|
67
|
+
const rows = (await select().from(table).where(conditions).limit(1));
|
|
68
|
+
const row = rows[0];
|
|
69
|
+
return row ? fromDbRow(row) : null;
|
|
70
|
+
}),
|
|
71
|
+
findOne: (where) => createBoundQuery(async () => {
|
|
72
|
+
const whereCond = buildWhere(mappingRecord, where);
|
|
73
|
+
const fullCond = baseWhere && whereCond ? and(baseWhere, whereCond) : (whereCond ?? baseWhere);
|
|
74
|
+
const q = select().from(table);
|
|
75
|
+
const rows = fullCond
|
|
76
|
+
? (await q.where(fullCond).limit(1))
|
|
77
|
+
: (await q.limit(1));
|
|
78
|
+
const row = rows[0];
|
|
79
|
+
return row ? fromDbRow(row) : null;
|
|
80
|
+
}),
|
|
81
|
+
findMany: (where) => createBoundQuery(async () => {
|
|
82
|
+
const whereCond = buildWhere(mappingRecord, where);
|
|
83
|
+
const fullCond = baseWhere && whereCond ? and(baseWhere, whereCond) : (whereCond ?? baseWhere);
|
|
84
|
+
const q = select().from(table);
|
|
85
|
+
const rows = fullCond
|
|
86
|
+
? (await q.where(fullCond))
|
|
87
|
+
: (await q);
|
|
88
|
+
return rows.map((r) => fromDbRow(r));
|
|
89
|
+
}),
|
|
90
|
+
create: (data) => createBoundQuery(async () => {
|
|
91
|
+
const values = toDbValues(data);
|
|
92
|
+
const result = (await insert(table).values(values).returning());
|
|
93
|
+
const row = result[0];
|
|
94
|
+
if (!row)
|
|
95
|
+
throw new Error("Insert did not return row");
|
|
96
|
+
return fromDbRow(row);
|
|
97
|
+
}),
|
|
98
|
+
update: (id, data) => createBoundQuery(async () => {
|
|
99
|
+
const values = toDbValues(data);
|
|
100
|
+
const idColumn = idCol ?? table.id;
|
|
101
|
+
const result = (await update(table)
|
|
102
|
+
.set(values)
|
|
103
|
+
.where(eq(idColumn, id))
|
|
104
|
+
.returning());
|
|
105
|
+
const row = result[0];
|
|
106
|
+
if (!row)
|
|
107
|
+
throw new Error("Update did not return row");
|
|
108
|
+
return fromDbRow(row);
|
|
109
|
+
}),
|
|
110
|
+
delete: (id) => createBoundQuery(async () => {
|
|
111
|
+
if (softDeleteColumn && softDeleteCol) {
|
|
112
|
+
await update(table)
|
|
113
|
+
.set({
|
|
114
|
+
[softDeleteCol]: new Date().toISOString(),
|
|
115
|
+
})
|
|
116
|
+
.where(eq((idCol ?? table.id), id));
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
await del(table).where(eq((idCol ?? table.id), id));
|
|
120
|
+
}
|
|
121
|
+
}),
|
|
122
|
+
hardDelete: (id) => createBoundQuery(async () => {
|
|
123
|
+
await del(table).where(eq((idCol ?? table.id), id));
|
|
124
|
+
}),
|
|
125
|
+
};
|
|
126
|
+
mapped._internal.client = db;
|
|
127
|
+
mapped._internal.sql = sql;
|
|
128
|
+
return {
|
|
129
|
+
...mapped,
|
|
130
|
+
create: (data) => sql.create(data).execute(),
|
|
131
|
+
findById: (id) => sql.findById(id).execute(),
|
|
132
|
+
findOne: (where) => sql.findOne(where).execute(),
|
|
133
|
+
findMany: (where) => sql.findMany(where).execute(),
|
|
134
|
+
update: (id, data) => sql.update(id, data).execute(),
|
|
135
|
+
delete: (id) => sql.delete(id).execute(),
|
|
136
|
+
hardDelete: (id) => sql.hardDelete(id).execute(),
|
|
137
|
+
};
|
|
138
|
+
},
|
|
139
|
+
async transaction(fn) {
|
|
140
|
+
const result = await db.transaction(async (tx) => {
|
|
141
|
+
const txAdapter = createDrizzleAdapter(tx, options);
|
|
142
|
+
return fn(txAdapter);
|
|
143
|
+
});
|
|
144
|
+
return result;
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
return adapter;
|
|
148
|
+
}
|
|
149
|
+
function inferDialect(db) {
|
|
150
|
+
const d = db;
|
|
151
|
+
const dialect = d?.dialect;
|
|
152
|
+
const name = dialect?.name ?? "";
|
|
153
|
+
if (name === "sqlite" || name === "bun-sqlite" || name.includes("sqlite"))
|
|
154
|
+
return "sqlite";
|
|
155
|
+
if (name === "mysql")
|
|
156
|
+
return "mysql";
|
|
157
|
+
// Fallback: bun-sqlite and better-sqlite3 use a client with .exec/.run
|
|
158
|
+
const client = d?.client;
|
|
159
|
+
if (client && typeof client.exec === "function")
|
|
160
|
+
return "sqlite";
|
|
161
|
+
return "pg";
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=createAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createAdapter.js","sourceRoot":"","sources":["../../src/drizzle/createAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Define a mapped table: Drizzle table + contract + mapping.
|
|
3
|
+
* Returns a DrizzleMappedTable that needs client injection via createDrizzleAdapter.
|
|
4
|
+
*/
|
|
5
|
+
import type { AnyContract } from "@justwant/contract";
|
|
6
|
+
import type { Table } from "drizzle-orm";
|
|
7
|
+
import type { MappingFor } from "./mapping.js";
|
|
8
|
+
import type { DefineMappedTableOptions, DrizzleMappedTable } from "./types.js";
|
|
9
|
+
/**
|
|
10
|
+
* Defines a mapped table from a Drizzle table and a contract.
|
|
11
|
+
* The returned table must be used with createDrizzleAdapter to inject the client.
|
|
12
|
+
*
|
|
13
|
+
* @param table - Drizzle table
|
|
14
|
+
* @param contract - Adapter contract (from defineContract)
|
|
15
|
+
* @param mapping - Map contract keys to table columns
|
|
16
|
+
* @param options - softDeleteColumn (default 'deletedAt'), or null to disable
|
|
17
|
+
*/
|
|
18
|
+
export declare function defineMappedTable<TTable extends Table, TContract extends AnyContract>(table: TTable, contract: TContract, mapping: MappingFor<TTable, TContract>, options?: DefineMappedTableOptions): DrizzleMappedTable<TTable, TContract>;
|
|
19
|
+
//# sourceMappingURL=defineMappedTable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defineMappedTable.d.ts","sourceRoot":"","sources":["../../src/drizzle/defineMappedTable.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,oBAAoB,CAAC;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EACV,wBAAwB,EACxB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAQpB;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,SAAS,KAAK,EAAE,SAAS,SAAS,WAAW,EACnF,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,EACtC,OAAO,CAAC,EAAE,wBAAwB,GACjC,kBAAkB,CAAC,MAAM,EAAE,SAAS,CAAC,CA+DvC"}
|