@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,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for TiDB (MySQL-compatible).
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-tidb
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @tidbcloud/serverless
|
|
6
|
+
*/
|
|
7
|
+
import type { WaddlerConnectionConfig } from "../types.js";
|
|
8
|
+
export interface CreateTidbAdapterConfig {
|
|
9
|
+
connection?: string;
|
|
10
|
+
client?: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a TiDB (MySQL-compatible) connection config. Pass to createDb.
|
|
14
|
+
* Pass connection string or existing driver.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTidbAdapter(config: CreateTidbAdapterConfig): WaddlerConnectionConfig;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/waddler/tidb/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAc,MAAM,aAAa,CAAC;AAIvE,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,uBAAuB,CAgB1F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for TiDB (MySQL-compatible).
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-tidb
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @tidbcloud/serverless
|
|
6
|
+
*/
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
/**
|
|
10
|
+
* Creates a TiDB (MySQL-compatible) connection config. Pass to createDb.
|
|
11
|
+
* Pass connection string or existing driver.
|
|
12
|
+
*/
|
|
13
|
+
export function createTidbAdapter(config) {
|
|
14
|
+
if (!config.client && config.connection == null) {
|
|
15
|
+
throw new Error("createTidbAdapter: connection or client is required");
|
|
16
|
+
}
|
|
17
|
+
const { waddler } = require("waddler/tidb-serverless");
|
|
18
|
+
if (config.client) {
|
|
19
|
+
return { sql: waddler({ client: config.client }), dialect: "mysql", driver: config.client };
|
|
20
|
+
}
|
|
21
|
+
if (config.connection == null)
|
|
22
|
+
throw new Error("connection required");
|
|
23
|
+
return {
|
|
24
|
+
sql: waddler({ connection: config.connection }),
|
|
25
|
+
dialect: "mysql",
|
|
26
|
+
driver: config.client,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/waddler/tidb/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAO/C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAEpD,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtE,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,EAAE,OAAO;QAChB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for Turso (LibSQL).
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-turso
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @libsql/client
|
|
6
|
+
*/
|
|
7
|
+
import type { WaddlerConnectionConfig } from "../types.js";
|
|
8
|
+
export interface CreateTursoAdapterConfig {
|
|
9
|
+
connection?: string;
|
|
10
|
+
client?: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a Turso (LibSQL) connection config. Pass to createDb.
|
|
14
|
+
* Pass connection config or existing LibSQL client.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTursoAdapter(config: CreateTursoAdapterConfig): WaddlerConnectionConfig;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/waddler/turso/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAc,MAAM,aAAa,CAAC;AAIvE,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,wBAAwB,GAAG,uBAAuB,CAgB5F"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for Turso (LibSQL).
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-turso
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @libsql/client
|
|
6
|
+
*/
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
/**
|
|
10
|
+
* Creates a Turso (LibSQL) connection config. Pass to createDb.
|
|
11
|
+
* Pass connection config or existing LibSQL client.
|
|
12
|
+
*/
|
|
13
|
+
export function createTursoAdapter(config) {
|
|
14
|
+
if (!config.client && config.connection == null) {
|
|
15
|
+
throw new Error("createTursoAdapter: connection or client is required");
|
|
16
|
+
}
|
|
17
|
+
const { waddler } = require("waddler/libsql");
|
|
18
|
+
if (config.client) {
|
|
19
|
+
return { sql: waddler({ client: config.client }), dialect: "sqlite", driver: config.client };
|
|
20
|
+
}
|
|
21
|
+
if (config.connection == null)
|
|
22
|
+
throw new Error("connection required");
|
|
23
|
+
return {
|
|
24
|
+
sql: waddler({ connection: config.connection }),
|
|
25
|
+
dialect: "sqlite",
|
|
26
|
+
driver: config.client,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/waddler/turso/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAO/C;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAgC;IACjE,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAE3C,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC/F,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtE,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/C,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter types.
|
|
3
|
+
* Schema-less: table and column names are strings.
|
|
4
|
+
*/
|
|
5
|
+
import type { AnyContract, TableContract } from "@justwant/contract";
|
|
6
|
+
import type { MappedTable, MappedTableInternal } from "@justwant/db";
|
|
7
|
+
/** String-based mapping: contract key → column name. */
|
|
8
|
+
export type StringMapping<TContract extends AnyContract> = {
|
|
9
|
+
[K in keyof TContract]: {
|
|
10
|
+
name: string;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
/** Table source: table name or schema.table. */
|
|
14
|
+
export type TableSource = string | {
|
|
15
|
+
schema?: string;
|
|
16
|
+
table: string;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Waddler SQL client interface.
|
|
20
|
+
* Compatible with waddler/node-postgres, waddler/neon-http, etc.
|
|
21
|
+
*/
|
|
22
|
+
export interface WaddlerSql {
|
|
23
|
+
(strings: TemplateStringsArray, ...values: unknown[]): WaddlerQuery;
|
|
24
|
+
identifier: (name: string | {
|
|
25
|
+
schema?: string;
|
|
26
|
+
table: string;
|
|
27
|
+
column?: string;
|
|
28
|
+
as?: string;
|
|
29
|
+
}) => unknown;
|
|
30
|
+
raw: (sql: string) => unknown;
|
|
31
|
+
values: (tuples: unknown[][]) => unknown;
|
|
32
|
+
append?: (part: unknown) => WaddlerQuery;
|
|
33
|
+
}
|
|
34
|
+
/** Query result - thenable, may have append for building. */
|
|
35
|
+
export interface WaddlerQuery {
|
|
36
|
+
then<T>(onfulfilled?: (value: unknown) => T | PromiseLike<T>): Promise<T>;
|
|
37
|
+
catch<T>(onrejected?: (reason: unknown) => T | PromiseLike<T>): Promise<T>;
|
|
38
|
+
append?: (part: unknown) => WaddlerQuery;
|
|
39
|
+
}
|
|
40
|
+
export interface WaddlerMappedTableInternal<TContract extends AnyContract> extends MappedTableInternal<TContract> {
|
|
41
|
+
readonly tableName: string;
|
|
42
|
+
readonly mapping: StringMapping<TContract>;
|
|
43
|
+
readonly client: WaddlerSql;
|
|
44
|
+
}
|
|
45
|
+
export interface WaddlerMappedTable<TContract extends AnyContract> extends MappedTable<TContract> {
|
|
46
|
+
readonly _internal: WaddlerMappedTableInternal<TContract>;
|
|
47
|
+
}
|
|
48
|
+
export type WaddlerDialect = "pg" | "mysql" | "sqlite";
|
|
49
|
+
/** Connection config passed to createDb. Returned by driver factories (createBunSqliteAdapter, etc.). */
|
|
50
|
+
export interface WaddlerConnectionConfig {
|
|
51
|
+
sql: WaddlerSql;
|
|
52
|
+
dialect: WaddlerDialect;
|
|
53
|
+
driver?: unknown;
|
|
54
|
+
onValidationError?: "throw" | "return";
|
|
55
|
+
/** Release connection when done. Call db.close() or await on shutdown. */
|
|
56
|
+
close?: () => Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
export interface CreateWaddlerAdapterOptions {
|
|
59
|
+
dialect: WaddlerDialect;
|
|
60
|
+
/** Expose the native driver (pg Pool, neon client, etc.). */
|
|
61
|
+
driver?: unknown;
|
|
62
|
+
/** On validation error: "throw" (default) or "return" for createSafe/updateSafe. */
|
|
63
|
+
onValidationError?: "throw" | "return";
|
|
64
|
+
}
|
|
65
|
+
export interface TableOptions {
|
|
66
|
+
/** Override mapping for specific keys. Merged with contract.mapping. */
|
|
67
|
+
mapping?: Partial<Record<string, {
|
|
68
|
+
name: string;
|
|
69
|
+
}>>;
|
|
70
|
+
/** Column name for soft delete. Default 'deletedAt'. Set to null to disable. */
|
|
71
|
+
softDeleteColumn?: string | null;
|
|
72
|
+
}
|
|
73
|
+
export interface Db {
|
|
74
|
+
readonly sql: WaddlerSql;
|
|
75
|
+
readonly driver?: unknown;
|
|
76
|
+
readonly dialect: WaddlerDialect;
|
|
77
|
+
/** Execute getCreateTableSQL and run DDL. */
|
|
78
|
+
createTable<T extends TableContract<AnyContract>>(contract: T): Promise<void>;
|
|
79
|
+
/** Create table from TableContract (tableName + mapping from contract). */
|
|
80
|
+
table<T extends TableContract<AnyContract>>(contract: T, options?: TableOptions): WaddlerMappedTable<T["fields"]>;
|
|
81
|
+
/** Legacy: define table with explicit tableSource, contract, mapping. */
|
|
82
|
+
defineTable<TContract extends AnyContract>(tableName: TableSource, contract: TContract, mapping: StringMapping<TContract>, options?: DefineWaddlerTableOptions): WaddlerMappedTable<TContract>;
|
|
83
|
+
transaction?<T>(fn: (tx: Db) => Promise<T>): Promise<T>;
|
|
84
|
+
/** Release connection. No-op if config had no close. */
|
|
85
|
+
close?(): Promise<void>;
|
|
86
|
+
}
|
|
87
|
+
export interface DefineWaddlerTableOptions {
|
|
88
|
+
/** Column name for soft delete. Default 'deletedAt'. Set to null to disable. */
|
|
89
|
+
softDeleteColumn?: string | null;
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/waddler/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/waddler/types.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for Vercel Postgres.
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-vercel-postgres
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @vercel/postgres
|
|
6
|
+
*/
|
|
7
|
+
import type { WaddlerConnectionConfig } from "../types.js";
|
|
8
|
+
export interface CreateVercelPostgresAdapterConfig {
|
|
9
|
+
connection?: string;
|
|
10
|
+
client?: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates a Vercel Postgres connection config. Pass to createDb.
|
|
14
|
+
* Pass connection string or existing Pool client.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createVercelPostgresAdapter(config: CreateVercelPostgresAdapterConfig): WaddlerConnectionConfig;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/waddler/vercel-postgres/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAc,MAAM,aAAa,CAAC;AAIvE,MAAM,WAAW,iCAAiC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,iCAAiC,GACxC,uBAAuB,CAYzB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for Vercel Postgres.
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-vercel-postgres
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @vercel/postgres
|
|
6
|
+
*/
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
/**
|
|
10
|
+
* Creates a Vercel Postgres connection config. Pass to createDb.
|
|
11
|
+
* Pass connection string or existing Pool client.
|
|
12
|
+
*/
|
|
13
|
+
export function createVercelPostgresAdapter(config) {
|
|
14
|
+
if (!config.client && config.connection == null) {
|
|
15
|
+
throw new Error("createVercelPostgresAdapter: connection or client is required");
|
|
16
|
+
}
|
|
17
|
+
const { waddler } = require("waddler/vercel-postgres");
|
|
18
|
+
if (config.client) {
|
|
19
|
+
return { sql: waddler({ client: config.client }), dialect: "pg", driver: config.client };
|
|
20
|
+
}
|
|
21
|
+
if (config.connection == null)
|
|
22
|
+
throw new Error("connection required");
|
|
23
|
+
return { sql: waddler({ connection: config.connection }), dialect: "pg", driver: config.client };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/waddler/vercel-postgres/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAO/C;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CACzC,MAAyC;IAEzC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,yBAAyB,CAEpD,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACnG,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for Xata (PostgreSQL).
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-xata
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @xata.io/client
|
|
6
|
+
*/
|
|
7
|
+
import type { WaddlerConnectionConfig } from "../types.js";
|
|
8
|
+
export interface CreateXataAdapterConfig {
|
|
9
|
+
connection?: string;
|
|
10
|
+
client?: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Creates an Xata PostgreSQL connection config. Pass to createDb.
|
|
14
|
+
* Pass connection string or existing XataClient.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createXataAdapter(config: CreateXataAdapterConfig): WaddlerConnectionConfig;
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/waddler/xata/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAc,MAAM,aAAa,CAAC;AAIvE,MAAM,WAAW,uBAAuB;IACtC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,uBAAuB,GAAG,uBAAuB,CAY1F"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Waddler adapter for Xata (PostgreSQL).
|
|
3
|
+
* @see https://waddler.drizzle.team/docs/connect-xata
|
|
4
|
+
*
|
|
5
|
+
* Peer deps: waddler, @xata.io/client
|
|
6
|
+
*/
|
|
7
|
+
import { createRequire } from "node:module";
|
|
8
|
+
const require = createRequire(import.meta.url);
|
|
9
|
+
/**
|
|
10
|
+
* Creates an Xata PostgreSQL connection config. Pass to createDb.
|
|
11
|
+
* Pass connection string or existing XataClient.
|
|
12
|
+
*/
|
|
13
|
+
export function createXataAdapter(config) {
|
|
14
|
+
if (!config.client && config.connection == null) {
|
|
15
|
+
throw new Error("createXataAdapter: connection or client is required");
|
|
16
|
+
}
|
|
17
|
+
const { waddler } = require("waddler/xata-http");
|
|
18
|
+
if (config.client) {
|
|
19
|
+
return { sql: waddler({ client: config.client }), dialect: "pg", driver: config.client };
|
|
20
|
+
}
|
|
21
|
+
if (config.connection == null)
|
|
22
|
+
throw new Error("connection required");
|
|
23
|
+
return { sql: waddler({ connection: config.connection }), dialect: "pg", driver: config.client };
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/waddler/xata/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAO/C;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA+B;IAC/D,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;IACzE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,mBAAmB,CAE9C,CAAC;IACF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;IAC3F,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,IAAI,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACnG,CAAC"}
|
package/docs/CONTRACT.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Contract invariants
|
|
2
|
+
|
|
3
|
+
## FieldDef
|
|
4
|
+
|
|
5
|
+
- **`_required: true`** — Field is required in create/update. Must be present.
|
|
6
|
+
- **`_required: false`** — Field is optional. Can be omitted.
|
|
7
|
+
- **`_nullable: true`** — Optional fields. At read time, DB `null` → JS `undefined`.
|
|
8
|
+
- **`_nullable: false`** — Required fields. Never null.
|
|
9
|
+
|
|
10
|
+
## BoundQuery
|
|
11
|
+
|
|
12
|
+
- **Lazy execution** — Queries are not run until `execute()` is called.
|
|
13
|
+
- **Transaction context** — When inside `adapter.transaction(fn)`, `execute()` uses the transaction context. Implementations must propagate this.
|
|
14
|
+
- **No factory** — This package does not provide `createBoundQuery()`. Implementations (e.g. `@justwant/db/drizzle`) construct `BoundQuery` objects. Example:
|
|
15
|
+
|
|
16
|
+
```ts
|
|
17
|
+
const q: BoundQuery<T> = {
|
|
18
|
+
get _result() { return undefined as T },
|
|
19
|
+
async execute() { return /* run query */ }
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## MappedTableInternal.sql
|
|
24
|
+
|
|
25
|
+
- **delete(id)** — Soft delete. Marks row as deleted, preserves data. Typically sets `deleted_at` or similar.
|
|
26
|
+
- **hardDelete(id)** — Hard delete. Removes row permanently.
|
|
27
|
+
|
|
28
|
+
## CreateInput
|
|
29
|
+
|
|
30
|
+
- Excludes `id`, `createdAt`, `updatedAt` by default. Override if your schema uses different column names.
|
|
31
|
+
|
|
32
|
+
## AnyContract
|
|
33
|
+
|
|
34
|
+
- Must be `Record<string, FieldDef<unknown, boolean>>`.
|
|
35
|
+
- Empty contract `{}` is valid.
|
|
36
|
+
- Index signatures are not supported.
|
package/docs/COVERAGE.md
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
# Couverture des tests — @justwant/db
|
|
2
|
+
|
|
3
|
+
## Résumé
|
|
4
|
+
|
|
5
|
+
| Module | Spec | Couverture estimée | Lacunes |
|
|
6
|
+
|--------|------|-------------------|---------|
|
|
7
|
+
| **base/** | | | |
|
|
8
|
+
| contract.ts | contract.spec.ts | ✓ | — |
|
|
9
|
+
| tableContract.ts | tableContract.spec.ts | ✓ | — |
|
|
10
|
+
| table.ts | table.spec.ts | ✓ | — |
|
|
11
|
+
| conforms.ts | conforms.spec.ts | ✓ | — |
|
|
12
|
+
| validate.ts | validate.spec.ts | ✓ | — |
|
|
13
|
+
| schemas.ts | schemas.spec.ts | ✓ | — |
|
|
14
|
+
| fieldBuilder.ts | via tableContract, validate | ✓ | — |
|
|
15
|
+
| fields.ts | réexport | ✓ | — |
|
|
16
|
+
| errors.ts | adapter.spec.ts | ✓ | — |
|
|
17
|
+
| adapter.ts | adapter.spec.ts | ✓ | — |
|
|
18
|
+
| **waddler/** | | | |
|
|
19
|
+
| core.ts | createAdapter.spec.ts, integration.spec.ts | ✓ | buildWhere, buildOrderBy (indirect) |
|
|
20
|
+
| errors.ts | errors.spec.ts | ✓ | — |
|
|
21
|
+
| buildWhere.ts | via createAdapter | ✓ | — |
|
|
22
|
+
| mapping.ts | via drizzle/mapping.spec | ✓ | — |
|
|
23
|
+
| **drizzle/** | | | |
|
|
24
|
+
| createAdapter.ts | createAdapter.spec.ts | ✓ | — |
|
|
25
|
+
| buildWhere, buildOrderBy, buildPagination | *.spec.ts | ✓ | — |
|
|
26
|
+
| mapping, upsert, bulkInsert, collectSchemas | *.spec.ts | ✓ | — |
|
|
27
|
+
| errors.ts | errors.spec.ts | ✓ | — |
|
|
28
|
+
| **prisma/** | | | |
|
|
29
|
+
| createAdapter.ts | createAdapter.spec.ts | ✓ | — |
|
|
30
|
+
| buildWhere, mapping, upsert, bulkInsert | *.spec.ts | ✓ | — |
|
|
31
|
+
| errors.ts | errors.spec.ts | ✓ | — |
|
|
32
|
+
|
|
33
|
+
## Fichiers sans spec dédié
|
|
34
|
+
|
|
35
|
+
- **Entry points** (bun-sqlite, pg, neon, etc.) : wrappers minces autour de `createWaddlerAdapter`, couverts par les tests d’intégration.
|
|
36
|
+
- **fieldBuilder.ts** : couvert via tableContract (defineContract avec field builders) et validate (email, uuid).
|
|
37
|
+
- **waddler/buildOrderBy.ts** : non utilisé par le core waddler actuel ; couvert si utilisé via drizzle.
|
|
38
|
+
|
|
39
|
+
## Tests E2E / intégration
|
|
40
|
+
|
|
41
|
+
- `waddler/integration.spec.ts` : CRUD complet avec bun-sqlite.
|
|
42
|
+
- `prisma/integration.spec.ts` : CRUD avec Prisma.
|
|
43
|
+
- `drizzle/createAdapter.spec.ts` : CRUD avec Drizzle + SQLite.
|
|
44
|
+
|
|
45
|
+
## Verdict
|
|
46
|
+
|
|
47
|
+
**Couverture suffisante** pour un package DAL :
|
|
48
|
+
|
|
49
|
+
1. **API publique** : create, findById, findOne, findMany, update, delete, createSafe, updateSafe, table(), createTable() sont testés.
|
|
50
|
+
2. **Validation** : validateContractData, ContractValidationError, createSafe couverts.
|
|
51
|
+
3. **Conformité** : assertTableConforms, conformsTo, tableConforms couverts.
|
|
52
|
+
4. **Erreurs** : hiérarchie AdapterError et parseWaddlerError/parseDbError couvertes.
|
|
53
|
+
5. **Schémas** : uuid, email, url, ipv4, slug validés.
|
|
54
|
+
|
|
55
|
+
## Recommandations
|
|
56
|
+
|
|
57
|
+
1. **Coverage threshold** : ajouter `coverageThreshold = 0.8` dans `bunfig.toml` pour bloquer les merges si la couverture baisse.
|
|
58
|
+
2. **Tests manquants** : `updateSafe` avec validation échouée (retourne `{ ok: false }`).
|
|
59
|
+
3. **E2E multi-dialecte** : un test pg ou mysql en CI si possible.
|
package/docs/DRIVERS.md
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# DB Drivers (Waddler)
|
|
2
|
+
|
|
3
|
+
Pass the driver config to `createDb` for tree-shaking. Import only the driver you need. Connection must be passed explicitly (no `process.env` fallback in drivers).
|
|
4
|
+
|
|
5
|
+
## Bun SQLite
|
|
6
|
+
|
|
7
|
+
**Package:** `@justwant/db/bun-sqlite`
|
|
8
|
+
**Peer deps:** waddler (Bun runtime)
|
|
9
|
+
|
|
10
|
+
```ts
|
|
11
|
+
import { createDb } from "@justwant/db/waddler";
|
|
12
|
+
import { createBunSqliteAdapter } from "@justwant/db/bun-sqlite";
|
|
13
|
+
|
|
14
|
+
const db = createDb(createBunSqliteAdapter({ connection: ":memory:" }));
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
| Option | Type | Description |
|
|
18
|
+
|--------|------|-------------|
|
|
19
|
+
| `connection` | `string` | Path or `:memory:`. Default: `:memory:` |
|
|
20
|
+
| `client` | `unknown` | Existing Database |
|
|
21
|
+
|
|
22
|
+
## PostgreSQL (node-postgres)
|
|
23
|
+
|
|
24
|
+
**Package:** `@justwant/db/pg`
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
const db = createDb(createPgAdapter({ connection: "postgresql://user:pass@localhost/db" }));
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
| Option | Type | Description |
|
|
31
|
+
|--------|------|-------------|
|
|
32
|
+
| `connection` | `string` | Connection string (required if no client) |
|
|
33
|
+
| `client` | `unknown` | Existing pg Pool/Client |
|
|
34
|
+
|
|
35
|
+
## Neon
|
|
36
|
+
|
|
37
|
+
**Package:** `@justwant/db/neon`
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
const db = createDb(createNeonAdapter({ connection: "postgresql://..." }));
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Vercel Postgres, Xata, PGLite, Bun SQL, postgres.js
|
|
44
|
+
|
|
45
|
+
Same pattern: `{ connection: string }` or `{ client: unknown }`.
|
|
46
|
+
|
|
47
|
+
## MySQL, PlanetScale, TiDB
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
const db = createDb(createMysqlAdapter({ connection: "mysql://..." }));
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Turso, D1, Durable Objects, better-sqlite3
|
|
54
|
+
|
|
55
|
+
- **Turso:** `{ connection: string }` or `{ client: unknown }`
|
|
56
|
+
- **D1:** `{ client: unknown }` (required)
|
|
57
|
+
- **Durable Objects:** `{ client: unknown }` (required)
|
|
58
|
+
- **better-sqlite3:** `{ connection: ":memory:" }` or `{ client: unknown }`
|
|
59
|
+
|
|
60
|
+
## Mapping
|
|
61
|
+
|
|
62
|
+
See [@justwant/contract README](../../contract/README.md#mapping-contract-key--column-name). Default: contract key = column name. Use `defaultMapping: "camelToSnake"` or `mapping` to override.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Supported Dialects and Types
|
|
2
|
+
|
|
3
|
+
`@justwant/db/drizzle` supports PostgreSQL, MySQL, and SQLite via Drizzle ORM.
|
|
4
|
+
|
|
5
|
+
## Drivers
|
|
6
|
+
|
|
7
|
+
| Dialect | Drizzle driver | Package |
|
|
8
|
+
|---------|---------------|---------|
|
|
9
|
+
| **PostgreSQL** | `drizzle-orm/node-pg` | `pg` |
|
|
10
|
+
| **MySQL** | `drizzle-orm/mysql2` | `mysql2` |
|
|
11
|
+
| **SQLite** | `drizzle-orm/better-sqlite3` | `better-sqlite3` |
|
|
12
|
+
| **SQLite (Bun)** | `drizzle-orm/bun-sqlite` | built-in `bun:sqlite` |
|
|
13
|
+
|
|
14
|
+
## Type Support by Dialect
|
|
15
|
+
|
|
16
|
+
### PostgreSQL
|
|
17
|
+
|
|
18
|
+
- `text`, `varchar`, `char` → `string`
|
|
19
|
+
- `integer`, `bigint`, `smallint` → `number`
|
|
20
|
+
- `boolean` → `boolean`
|
|
21
|
+
- `timestamp`, `timestamptz`, `date` → `Date`
|
|
22
|
+
- `json`, `jsonb` → `unknown` (or typed via schema)
|
|
23
|
+
- `uuid` → `string`
|
|
24
|
+
- `numeric`, `decimal` → `number` or `string` (precision-dependent)
|
|
25
|
+
|
|
26
|
+
### MySQL
|
|
27
|
+
|
|
28
|
+
- `varchar`, `char`, `text` → `string`
|
|
29
|
+
- `int`, `bigint`, `tinyint` → `number` (tinyint as boolean: `0`/`1`)
|
|
30
|
+
- `boolean` (alias for tinyint) → `boolean`
|
|
31
|
+
- `datetime`, `timestamp`, `date` → `Date`
|
|
32
|
+
- `json` → `unknown`
|
|
33
|
+
- `decimal` → `number` or `string`
|
|
34
|
+
|
|
35
|
+
### SQLite
|
|
36
|
+
|
|
37
|
+
- `text` → `string`
|
|
38
|
+
- `integer` → `number`
|
|
39
|
+
- `real` → `number`
|
|
40
|
+
- `blob` → `Buffer` or `Uint8Array`
|
|
41
|
+
- `boolean` (stored as integer 0/1) → `boolean`
|
|
42
|
+
- `numeric` → `number` or `string`
|
|
43
|
+
|
|
44
|
+
## Enums
|
|
45
|
+
|
|
46
|
+
- **PostgreSQL**: `pgEnum()` → TypeScript `string` union
|
|
47
|
+
- **MySQL**: `mysqlEnum()` → TypeScript `string` union
|
|
48
|
+
- **SQLite**: Use `text` with check constraint or application-level validation
|
|
49
|
+
|
|
50
|
+
## Dialect Detection
|
|
51
|
+
|
|
52
|
+
The adapter infers dialect from `db.dialect.name`:
|
|
53
|
+
|
|
54
|
+
- `"pg"` or `"postgresql"` → PostgreSQL
|
|
55
|
+
- `"mysql"` → MySQL
|
|
56
|
+
- `"sqlite"` or `"bun-sqlite"` → SQLite
|
|
57
|
+
|
|
58
|
+
For drivers where auto-detection fails (e.g. `drizzle-orm/bun-sqlite`), pass `dialect` explicitly:
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
createDrizzleAdapter(db, { dialect: "sqlite" });
|
|
62
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Known Limits
|
|
2
|
+
|
|
3
|
+
## drizzle-orm Version Compatibility
|
|
4
|
+
|
|
5
|
+
- **0.45.x**: Tested and supported.
|
|
6
|
+
- **1.0.0-beta.x**: Tested with `1.0.0-beta.16` and compatible. The adapter uses the core query builder API (`select`, `insert`, `update`, `delete`, `eq`, `and`, `isNull`, `getTableName`) and does not rely on RQB (Relational Query Builder), so RQBv1→v2 migration does not affect this package.
|
|
7
|
+
- **Internal types**: `Table['_']['columns']` and `Column._.data` are used for mapping; if Drizzle changes these internals in a future release, `drizzle-types.ts` is the single point to update.
|
|
8
|
+
|
|
9
|
+
## Upsert
|
|
10
|
+
|
|
11
|
+
- **PostgreSQL**: Full support via `ON CONFLICT DO UPDATE`
|
|
12
|
+
- **MySQL**: Not supported (throws `AdapterUnsupportedError`). Use `ON DUPLICATE KEY` manually or a separate package.
|
|
13
|
+
- **SQLite**: Not supported in Phase 1. May be added later.
|
|
14
|
+
|
|
15
|
+
## Computed / Generated Columns
|
|
16
|
+
|
|
17
|
+
- Columns with database-side defaults (e.g. `DEFAULT (lower(hex(randomblob(16))))`) are supported for inserts when omitted.
|
|
18
|
+
- Application-generated values (e.g. `$defaultFn`) are handled by Drizzle; ensure your mapping includes them when reading.
|
|
19
|
+
- Virtual/computed columns that are not stored are not supported in the mapping.
|
|
20
|
+
|
|
21
|
+
## JSON / JSONB
|
|
22
|
+
|
|
23
|
+
- Stored and retrieved as `unknown` by default.
|
|
24
|
+
- Use schema-level typing or `mapRowToContract` custom logic for typed JSON fields.
|
|
25
|
+
|
|
26
|
+
## Index Signatures in Contracts
|
|
27
|
+
|
|
28
|
+
- `InferContract` does not support index signatures (`[key: string]: T`).
|
|
29
|
+
- Use explicit field definitions only.
|
|
30
|
+
|
|
31
|
+
## Migrations
|
|
32
|
+
|
|
33
|
+
- `collectSchemas()` returns tables for inspection.
|
|
34
|
+
- Use **drizzle-kit** for migration generation: `drizzle-kit generate`, `drizzle-kit migrate`.
|
|
35
|
+
|
|
36
|
+
## Transactions
|
|
37
|
+
|
|
38
|
+
- Supported when the Drizzle client exposes `transaction(fn)`.
|
|
39
|
+
- The transaction adapter uses the same API; all `defineTable` tables use the transactional client during the callback.
|