@payloadcms/db-d1-sqlite 3.83.0-internal.06ac84e → 3.83.0-internal.ddc1147

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/README.md +26 -1
  2. package/dist/connect.d.ts.map +1 -1
  3. package/dist/connect.js +17 -2
  4. package/dist/connect.js.map +1 -1
  5. package/dist/d1-libsql-client-shim.d.ts +12 -0
  6. package/dist/d1-libsql-client-shim.d.ts.map +1 -0
  7. package/dist/d1-libsql-client-shim.js +28 -0
  8. package/dist/d1-libsql-client-shim.js.map +1 -0
  9. package/dist/http-binding/d1-http-binding.d.ts +16 -0
  10. package/dist/http-binding/d1-http-binding.d.ts.map +1 -0
  11. package/dist/http-binding/d1-http-binding.js +104 -0
  12. package/dist/http-binding/d1-http-binding.js.map +1 -0
  13. package/dist/http-binding/d1-http-prepared-statement.d.ts +16 -0
  14. package/dist/http-binding/d1-http-prepared-statement.d.ts.map +1 -0
  15. package/dist/http-binding/d1-http-prepared-statement.js +56 -0
  16. package/dist/http-binding/d1-http-prepared-statement.js.map +1 -0
  17. package/dist/http-binding/d1-http-types.d.ts +19 -0
  18. package/dist/http-binding/d1-http-types.d.ts.map +1 -0
  19. package/dist/http-binding/d1-http-types.js +6 -0
  20. package/dist/http-binding/d1-http-types.js.map +1 -0
  21. package/dist/http-binding/http-binding.spec.js +214 -0
  22. package/dist/http-binding/http-binding.spec.js.map +1 -0
  23. package/dist/http-binding/index.d.ts +3 -0
  24. package/dist/http-binding/index.d.ts.map +1 -0
  25. package/dist/http-binding/index.js +4 -0
  26. package/dist/http-binding/index.js.map +1 -0
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +9 -1
  30. package/dist/index.js.map +1 -1
  31. package/dist/types.d.ts +29 -3
  32. package/dist/types.d.ts.map +1 -1
  33. package/dist/types.js.map +1 -1
  34. package/package.json +7 -8
package/README.md CHANGED
@@ -13,6 +13,8 @@ npm install @payloadcms/db-d1-sqlite
13
13
 
14
14
  ## Usage
15
15
 
16
+ ### Cloudflare Workers (D1 binding)
17
+
16
18
  ```ts
17
19
  import { sqliteD1Adapter } from '@payloadcms/db-d1-sqlite'
18
20
 
@@ -24,10 +26,33 @@ export default buildConfig({
24
26
  // Configure the D1 adapter here
25
27
  db: sqliteD1Adapter({
26
28
  // D1-specific arguments go here.
27
- // `binding` is required and should match the D1 database binding name in your Cloudflare Worker environment.
29
+ // `binding` should match the D1 database binding in your Cloudflare Worker environment.
28
30
  binding: cloudflare.env.D1,
29
31
  }),
30
32
  })
31
33
  ```
32
34
 
35
+ ### HTTP (REST API — Vercel, Node, etc.)
36
+
37
+ Use the [D1 HTTP API](https://developers.cloudflare.com/d1/build-with-d1/d1-api/) when you do not have a D1 binding (for example on Vercel). Provide a Cloudflare API token with D1 permissions and your account and database IDs.
38
+
39
+ Expect higher latency than a Workers binding (one HTTP request per query, plus network). Read replica routing (`readReplicas`) is not available over the HTTP API; use a Cloudflare Workers deployment with a D1 binding if you need it.
40
+
41
+ ```ts
42
+ import { sqliteD1Adapter } from '@payloadcms/db-d1-sqlite'
43
+
44
+ export default buildConfig({
45
+ collections: [
46
+ // Collections go here
47
+ ],
48
+ db: sqliteD1Adapter({
49
+ http: {
50
+ accountId: process.env.CLOUDFLARE_ACCOUNT_ID,
51
+ apiToken: process.env.CLOUDFLARE_API_TOKEN,
52
+ databaseId: process.env.CLOUDFLARE_D1_DATABASE_ID,
53
+ },
54
+ }),
55
+ })
56
+ ```
57
+
33
58
  More detailed usage can be found in the [Payload Docs](https://payloadcms.com/docs/database/sqlite).
@@ -1 +1 @@
1
- {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,SAAS,CAAA;AAOjD,eAAO,MAAM,OAAO,EAAE,OAgErB,CAAA"}
1
+ {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAa,MAAM,SAAS,CAAA;AAUjD,eAAO,MAAM,OAAO,EAAE,OAqFrB,CAAA"}
package/dist/connect.js CHANGED
@@ -1,5 +1,7 @@
1
1
  import { pushDevSchema } from '@payloadcms/drizzle';
2
2
  import { drizzle } from 'drizzle-orm/d1';
3
+ import { createD1LibsqlClientShim } from './d1-libsql-client-shim.js';
4
+ import { D1HttpBinding } from './http-binding/index.js';
3
5
  export const connect = async function connect(options = {
4
6
  hotReload: false
5
7
  }) {
@@ -12,6 +14,20 @@ export const connect = async function connect(options = {
12
14
  const logger = this.logger || false;
13
15
  const readReplicas = this.readReplicas;
14
16
  let binding = this.binding;
17
+ let httpBinding = false;
18
+ if (!binding && this.httpConfig) {
19
+ binding = new D1HttpBinding(this.httpConfig);
20
+ this.binding = binding;
21
+ httpBinding = true;
22
+ }
23
+ if (!binding) {
24
+ throw new Error('db-d1-sqlite requires either a D1 `binding` or `http` config');
25
+ }
26
+ // `readReplicas` uses D1 `withSession` and only exists on a Workers binding — not on HTTP.
27
+ // sqliteD1Adapter rejects http + readReplicas; repeat here if adapter state was mutated.
28
+ if (httpBinding && readReplicas === 'first-primary') {
29
+ throw new Error('db-d1-sqlite: `readReplicas` is not supported with `http`. Use a Cloudflare Workers deployment with a D1 binding (this feature is not available over the HTTP API).');
30
+ }
15
31
  if (readReplicas && readReplicas === 'first-primary') {
16
32
  // @ts-expect-error - need to have types that support withSession binding from D1
17
33
  binding = this.binding.withSession('first-primary');
@@ -20,7 +36,7 @@ export const connect = async function connect(options = {
20
36
  logger,
21
37
  schema: this.schema
22
38
  });
23
- this.client = this.drizzle.$client;
39
+ this.client = httpBinding ? createD1LibsqlClientShim(binding) : this.drizzle.$client;
24
40
  if (!hotReload) {
25
41
  if (process.env.PAYLOAD_DROP_DATABASE === 'true') {
26
42
  this.payload.logger.info(`---- DROPPING TABLES ----`);
@@ -39,7 +55,6 @@ export const connect = async function connect(options = {
39
55
  if (typeof this.rejectInitializing === 'function') {
40
56
  this.rejectInitializing();
41
57
  }
42
- console.error(err);
43
58
  throw new Error(`Error: cannot connect to SQLite: ${message}`);
44
59
  }
45
60
  // Only push schema if not in production
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/connect.ts"],"sourcesContent":["import type { DrizzleAdapter } from '@payloadcms/drizzle'\nimport type { Connect, Migration } from 'payload'\n\nimport { pushDevSchema } from '@payloadcms/drizzle'\nimport { drizzle } from 'drizzle-orm/d1'\n\nimport type { SQLiteD1Adapter } from './types.js'\n\nexport const connect: Connect = async function connect(\n this: SQLiteD1Adapter,\n options = {\n hotReload: false,\n },\n) {\n const { hotReload } = options\n\n this.schema = {\n ...this.tables,\n ...this.relations,\n }\n\n try {\n const logger = this.logger || false\n const readReplicas = this.readReplicas\n\n let binding = this.binding\n\n if (readReplicas && readReplicas === 'first-primary') {\n // @ts-expect-error - need to have types that support withSession binding from D1\n binding = this.binding.withSession('first-primary')\n }\n\n this.drizzle = drizzle(binding, {\n logger,\n schema: this.schema,\n })\n\n this.client = this.drizzle.$client as any\n\n if (!hotReload) {\n if (process.env.PAYLOAD_DROP_DATABASE === 'true') {\n this.payload.logger.info(`---- DROPPING TABLES ----`)\n await this.dropDatabase({ adapter: this })\n this.payload.logger.info('---- DROPPED TABLES ----')\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n this.payload.logger.error({ err, msg: `Error: cannot connect to SQLite: ${message}` })\n if (typeof this.rejectInitializing === 'function') {\n this.rejectInitializing()\n }\n console.error(err)\n throw new Error(`Error: cannot connect to SQLite: ${message}`)\n }\n\n // Only push schema if not in production\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.PAYLOAD_MIGRATING !== 'true' &&\n this.push !== false\n ) {\n await pushDevSchema(this as unknown as DrizzleAdapter)\n }\n\n if (typeof this.resolveInitializing === 'function') {\n this.resolveInitializing()\n }\n\n if (process.env.NODE_ENV === 'production' && this.prodMigrations) {\n await this.migrate({ migrations: this.prodMigrations as Migration[] })\n }\n}\n"],"names":["pushDevSchema","drizzle","connect","options","hotReload","schema","tables","relations","logger","readReplicas","binding","withSession","client","$client","process","env","PAYLOAD_DROP_DATABASE","payload","info","dropDatabase","adapter","err","message","Error","String","error","msg","rejectInitializing","console","NODE_ENV","PAYLOAD_MIGRATING","push","resolveInitializing","prodMigrations","migrate","migrations"],"mappings":"AAGA,SAASA,aAAa,QAAQ,sBAAqB;AACnD,SAASC,OAAO,QAAQ,iBAAgB;AAIxC,OAAO,MAAMC,UAAmB,eAAeA,QAE7CC,UAAU;IACRC,WAAW;AACb,CAAC;IAED,MAAM,EAAEA,SAAS,EAAE,GAAGD;IAEtB,IAAI,CAACE,MAAM,GAAG;QACZ,GAAG,IAAI,CAACC,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;IACnB;IAEA,IAAI;QACF,MAAMC,SAAS,IAAI,CAACA,MAAM,IAAI;QAC9B,MAAMC,eAAe,IAAI,CAACA,YAAY;QAEtC,IAAIC,UAAU,IAAI,CAACA,OAAO;QAE1B,IAAID,gBAAgBA,iBAAiB,iBAAiB;YACpD,iFAAiF;YACjFC,UAAU,IAAI,CAACA,OAAO,CAACC,WAAW,CAAC;QACrC;QAEA,IAAI,CAACV,OAAO,GAAGA,QAAQS,SAAS;YAC9BF;YACAH,QAAQ,IAAI,CAACA,MAAM;QACrB;QAEA,IAAI,CAACO,MAAM,GAAG,IAAI,CAACX,OAAO,CAACY,OAAO;QAElC,IAAI,CAACT,WAAW;YACd,IAAIU,QAAQC,GAAG,CAACC,qBAAqB,KAAK,QAAQ;gBAChD,IAAI,CAACC,OAAO,CAACT,MAAM,CAACU,IAAI,CAAC,CAAC,yBAAyB,CAAC;gBACpD,MAAM,IAAI,CAACC,YAAY,CAAC;oBAAEC,SAAS,IAAI;gBAAC;gBACxC,IAAI,CAACH,OAAO,CAACT,MAAM,CAACU,IAAI,CAAC;YAC3B;QACF;IACF,EAAE,OAAOG,KAAK;QACZ,MAAMC,UAAUD,eAAeE,QAAQF,IAAIC,OAAO,GAAGE,OAAOH;QAC5D,IAAI,CAACJ,OAAO,CAACT,MAAM,CAACiB,KAAK,CAAC;YAAEJ;YAAKK,KAAK,CAAC,iCAAiC,EAAEJ,SAAS;QAAC;QACpF,IAAI,OAAO,IAAI,CAACK,kBAAkB,KAAK,YAAY;YACjD,IAAI,CAACA,kBAAkB;QACzB;QACAC,QAAQH,KAAK,CAACJ;QACd,MAAM,IAAIE,MAAM,CAAC,iCAAiC,EAAED,SAAS;IAC/D;IAEA,wCAAwC;IACxC,IACER,QAAQC,GAAG,CAACc,QAAQ,KAAK,gBACzBf,QAAQC,GAAG,CAACe,iBAAiB,KAAK,UAClC,IAAI,CAACC,IAAI,KAAK,OACd;QACA,MAAM/B,cAAc,IAAI;IAC1B;IAEA,IAAI,OAAO,IAAI,CAACgC,mBAAmB,KAAK,YAAY;QAClD,IAAI,CAACA,mBAAmB;IAC1B;IAEA,IAAIlB,QAAQC,GAAG,CAACc,QAAQ,KAAK,gBAAgB,IAAI,CAACI,cAAc,EAAE;QAChE,MAAM,IAAI,CAACC,OAAO,CAAC;YAAEC,YAAY,IAAI,CAACF,cAAc;QAAgB;IACtE;AACF,EAAC"}
1
+ {"version":3,"sources":["../src/connect.ts"],"sourcesContent":["import type { DrizzleAdapter } from '@payloadcms/drizzle'\nimport type { AnyD1Database } from 'drizzle-orm/d1'\nimport type { Connect, Migration } from 'payload'\n\nimport { pushDevSchema } from '@payloadcms/drizzle'\nimport { drizzle } from 'drizzle-orm/d1'\n\nimport type { SQLiteD1Adapter } from './types.js'\n\nimport { createD1LibsqlClientShim } from './d1-libsql-client-shim.js'\nimport { D1HttpBinding } from './http-binding/index.js'\n\nexport const connect: Connect = async function connect(\n this: SQLiteD1Adapter,\n options = {\n hotReload: false,\n },\n) {\n const { hotReload } = options\n\n this.schema = {\n ...this.tables,\n ...this.relations,\n }\n\n try {\n const logger = this.logger || false\n const readReplicas = this.readReplicas\n\n let binding: AnyD1Database | undefined = this.binding\n let httpBinding = false\n\n if (!binding && this.httpConfig) {\n binding = new D1HttpBinding(this.httpConfig) as unknown as AnyD1Database\n this.binding = binding\n httpBinding = true\n }\n\n if (!binding) {\n throw new Error('db-d1-sqlite requires either a D1 `binding` or `http` config')\n }\n\n // `readReplicas` uses D1 `withSession` and only exists on a Workers binding — not on HTTP.\n // sqliteD1Adapter rejects http + readReplicas; repeat here if adapter state was mutated.\n if (httpBinding && readReplicas === 'first-primary') {\n throw new Error(\n 'db-d1-sqlite: `readReplicas` is not supported with `http`. Use a Cloudflare Workers deployment with a D1 binding (this feature is not available over the HTTP API).',\n )\n }\n\n if (readReplicas && readReplicas === 'first-primary') {\n // @ts-expect-error - need to have types that support withSession binding from D1\n binding = this.binding.withSession('first-primary')\n }\n\n this.drizzle = drizzle(binding!, {\n logger,\n schema: this.schema,\n })\n\n this.client = httpBinding\n ? (createD1LibsqlClientShim(binding!) as SQLiteD1Adapter['client'])\n : (this.drizzle.$client as SQLiteD1Adapter['client'])\n\n if (!hotReload) {\n if (process.env.PAYLOAD_DROP_DATABASE === 'true') {\n this.payload.logger.info(`---- DROPPING TABLES ----`)\n await this.dropDatabase({ adapter: this })\n this.payload.logger.info('---- DROPPED TABLES ----')\n }\n }\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err)\n this.payload.logger.error({ err, msg: `Error: cannot connect to SQLite: ${message}` })\n if (typeof this.rejectInitializing === 'function') {\n this.rejectInitializing()\n }\n\n throw new Error(`Error: cannot connect to SQLite: ${message}`)\n }\n\n // Only push schema if not in production\n if (\n process.env.NODE_ENV !== 'production' &&\n process.env.PAYLOAD_MIGRATING !== 'true' &&\n this.push !== false\n ) {\n await pushDevSchema(this as unknown as DrizzleAdapter)\n }\n\n if (typeof this.resolveInitializing === 'function') {\n this.resolveInitializing()\n }\n\n if (process.env.NODE_ENV === 'production' && this.prodMigrations) {\n await this.migrate({ migrations: this.prodMigrations as Migration[] })\n }\n}\n"],"names":["pushDevSchema","drizzle","createD1LibsqlClientShim","D1HttpBinding","connect","options","hotReload","schema","tables","relations","logger","readReplicas","binding","httpBinding","httpConfig","Error","withSession","client","$client","process","env","PAYLOAD_DROP_DATABASE","payload","info","dropDatabase","adapter","err","message","String","error","msg","rejectInitializing","NODE_ENV","PAYLOAD_MIGRATING","push","resolveInitializing","prodMigrations","migrate","migrations"],"mappings":"AAIA,SAASA,aAAa,QAAQ,sBAAqB;AACnD,SAASC,OAAO,QAAQ,iBAAgB;AAIxC,SAASC,wBAAwB,QAAQ,6BAA4B;AACrE,SAASC,aAAa,QAAQ,0BAAyB;AAEvD,OAAO,MAAMC,UAAmB,eAAeA,QAE7CC,UAAU;IACRC,WAAW;AACb,CAAC;IAED,MAAM,EAAEA,SAAS,EAAE,GAAGD;IAEtB,IAAI,CAACE,MAAM,GAAG;QACZ,GAAG,IAAI,CAACC,MAAM;QACd,GAAG,IAAI,CAACC,SAAS;IACnB;IAEA,IAAI;QACF,MAAMC,SAAS,IAAI,CAACA,MAAM,IAAI;QAC9B,MAAMC,eAAe,IAAI,CAACA,YAAY;QAEtC,IAAIC,UAAqC,IAAI,CAACA,OAAO;QACrD,IAAIC,cAAc;QAElB,IAAI,CAACD,WAAW,IAAI,CAACE,UAAU,EAAE;YAC/BF,UAAU,IAAIT,cAAc,IAAI,CAACW,UAAU;YAC3C,IAAI,CAACF,OAAO,GAAGA;YACfC,cAAc;QAChB;QAEA,IAAI,CAACD,SAAS;YACZ,MAAM,IAAIG,MAAM;QAClB;QAEA,2FAA2F;QAC3F,yFAAyF;QACzF,IAAIF,eAAeF,iBAAiB,iBAAiB;YACnD,MAAM,IAAII,MACR;QAEJ;QAEA,IAAIJ,gBAAgBA,iBAAiB,iBAAiB;YACpD,iFAAiF;YACjFC,UAAU,IAAI,CAACA,OAAO,CAACI,WAAW,CAAC;QACrC;QAEA,IAAI,CAACf,OAAO,GAAGA,QAAQW,SAAU;YAC/BF;YACAH,QAAQ,IAAI,CAACA,MAAM;QACrB;QAEA,IAAI,CAACU,MAAM,GAAGJ,cACTX,yBAAyBU,WACzB,IAAI,CAACX,OAAO,CAACiB,OAAO;QAEzB,IAAI,CAACZ,WAAW;YACd,IAAIa,QAAQC,GAAG,CAACC,qBAAqB,KAAK,QAAQ;gBAChD,IAAI,CAACC,OAAO,CAACZ,MAAM,CAACa,IAAI,CAAC,CAAC,yBAAyB,CAAC;gBACpD,MAAM,IAAI,CAACC,YAAY,CAAC;oBAAEC,SAAS,IAAI;gBAAC;gBACxC,IAAI,CAACH,OAAO,CAACZ,MAAM,CAACa,IAAI,CAAC;YAC3B;QACF;IACF,EAAE,OAAOG,KAAK;QACZ,MAAMC,UAAUD,eAAeX,QAAQW,IAAIC,OAAO,GAAGC,OAAOF;QAC5D,IAAI,CAACJ,OAAO,CAACZ,MAAM,CAACmB,KAAK,CAAC;YAAEH;YAAKI,KAAK,CAAC,iCAAiC,EAAEH,SAAS;QAAC;QACpF,IAAI,OAAO,IAAI,CAACI,kBAAkB,KAAK,YAAY;YACjD,IAAI,CAACA,kBAAkB;QACzB;QAEA,MAAM,IAAIhB,MAAM,CAAC,iCAAiC,EAAEY,SAAS;IAC/D;IAEA,wCAAwC;IACxC,IACER,QAAQC,GAAG,CAACY,QAAQ,KAAK,gBACzBb,QAAQC,GAAG,CAACa,iBAAiB,KAAK,UAClC,IAAI,CAACC,IAAI,KAAK,OACd;QACA,MAAMlC,cAAc,IAAI;IAC1B;IAEA,IAAI,OAAO,IAAI,CAACmC,mBAAmB,KAAK,YAAY;QAClD,IAAI,CAACA,mBAAmB;IAC1B;IAEA,IAAIhB,QAAQC,GAAG,CAACY,QAAQ,KAAK,gBAAgB,IAAI,CAACI,cAAc,EAAE;QAChE,MAAM,IAAI,CAACC,OAAO,CAAC;YAAEC,YAAY,IAAI,CAACF,cAAc;QAAgB;IACtE;AACF,EAAC"}
@@ -0,0 +1,12 @@
1
+ import type { AnyD1Database } from 'drizzle-orm/d1';
2
+ /**
3
+ * `dropDatabase` in `@payloadcms/drizzle/sqlite` expects a libsql client (`execute`, `executeMultiple`).
4
+ * Cloudflare D1 (Workers binding and HTTP REST) exposes `prepare` / `exec` instead. This shim bridges the two.
5
+ */
6
+ export declare function createD1LibsqlClientShim(client: AnyD1Database): {
7
+ execute(sql: string): Promise<{
8
+ rows: Record<string, unknown>[];
9
+ }>;
10
+ executeMultiple(sql: string): Promise<void>;
11
+ };
12
+ //# sourceMappingURL=d1-libsql-client-shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d1-libsql-client-shim.d.ts","sourceRoot":"","sources":["../src/d1-libsql-client-shim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAmBnD;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,aAAa;iBAEvC,MAAM;;;yBAOE,MAAM;EAIpC"}
@@ -0,0 +1,28 @@
1
+ function getRowsFromD1AllResult(result) {
2
+ if (Array.isArray(result)) {
3
+ return result;
4
+ }
5
+ if (result && typeof result === 'object' && 'results' in result && Array.isArray(result.results)) {
6
+ return result.results;
7
+ }
8
+ return [];
9
+ }
10
+ /**
11
+ * `dropDatabase` in `@payloadcms/drizzle/sqlite` expects a libsql client (`execute`, `executeMultiple`).
12
+ * Cloudflare D1 (Workers binding and HTTP REST) exposes `prepare` / `exec` instead. This shim bridges the two.
13
+ */ export function createD1LibsqlClientShim(client) {
14
+ return {
15
+ async execute (sql) {
16
+ const result = await client.prepare(sql).all();
17
+ const rows = getRowsFromD1AllResult(result);
18
+ return {
19
+ rows
20
+ };
21
+ },
22
+ async executeMultiple (sql) {
23
+ await client.exec(sql);
24
+ }
25
+ };
26
+ }
27
+
28
+ //# sourceMappingURL=d1-libsql-client-shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/d1-libsql-client-shim.ts"],"sourcesContent":["import type { AnyD1Database } from 'drizzle-orm/d1'\n\nfunction getRowsFromD1AllResult(result: unknown): Record<string, unknown>[] {\n if (Array.isArray(result)) {\n return result as Record<string, unknown>[]\n }\n\n if (\n result &&\n typeof result === 'object' &&\n 'results' in result &&\n Array.isArray((result as { results: unknown }).results)\n ) {\n return (result as { results: Record<string, unknown>[] }).results\n }\n\n return []\n}\n\n/**\n * `dropDatabase` in `@payloadcms/drizzle/sqlite` expects a libsql client (`execute`, `executeMultiple`).\n * Cloudflare D1 (Workers binding and HTTP REST) exposes `prepare` / `exec` instead. This shim bridges the two.\n */\nexport function createD1LibsqlClientShim(client: AnyD1Database) {\n return {\n async execute(sql: string) {\n const result = await client.prepare(sql).all()\n const rows = getRowsFromD1AllResult(result)\n\n return { rows }\n },\n\n async executeMultiple(sql: string) {\n await client.exec(sql)\n },\n }\n}\n"],"names":["getRowsFromD1AllResult","result","Array","isArray","results","createD1LibsqlClientShim","client","execute","sql","prepare","all","rows","executeMultiple","exec"],"mappings":"AAEA,SAASA,uBAAuBC,MAAe;IAC7C,IAAIC,MAAMC,OAAO,CAACF,SAAS;QACzB,OAAOA;IACT;IAEA,IACEA,UACA,OAAOA,WAAW,YAClB,aAAaA,UACbC,MAAMC,OAAO,CAAC,AAACF,OAAgCG,OAAO,GACtD;QACA,OAAO,AAACH,OAAkDG,OAAO;IACnE;IAEA,OAAO,EAAE;AACX;AAEA;;;CAGC,GACD,OAAO,SAASC,yBAAyBC,MAAqB;IAC5D,OAAO;QACL,MAAMC,SAAQC,GAAW;YACvB,MAAMP,SAAS,MAAMK,OAAOG,OAAO,CAACD,KAAKE,GAAG;YAC5C,MAAMC,OAAOX,uBAAuBC;YAEpC,OAAO;gBAAEU;YAAK;QAChB;QAEA,MAAMC,iBAAgBJ,GAAW;YAC/B,MAAMF,OAAOO,IAAI,CAACL;QACpB;IACF;AACF"}
@@ -0,0 +1,16 @@
1
+ import type { HttpConfig } from '../types.js';
2
+ import type { D1HttpExecResult, D1HttpResult } from './d1-http-types.js';
3
+ import { D1HttpPreparedStatement } from './d1-http-prepared-statement.js';
4
+ export declare class D1HttpBinding {
5
+ private readonly config;
6
+ constructor(config: HttpConfig);
7
+ private request;
8
+ batch<T = unknown>(statements: readonly unknown[]): Promise<D1HttpResult<T>[]>;
9
+ dump(): Promise<ArrayBuffer>;
10
+ exec(query: string): Promise<D1HttpExecResult>;
11
+ prepare(query: string): D1HttpPreparedStatement;
12
+ query<T>(sql: string, params: unknown[]): Promise<D1HttpResult<T>>;
13
+ withSession(): never;
14
+ private get endpoint();
15
+ }
16
+ //# sourceMappingURL=d1-http-binding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d1-http-binding.d.ts","sourceRoot":"","sources":["../../src/http-binding/d1-http-binding.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAExE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA;AAuBzE,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAEgD;gBAE3D,MAAM,EAAE,UAAU;YAOhB,OAAO;IA8Bf,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,SAAS,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IAkCpF,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAMtB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAiBpD,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,uBAAuB;IAIzC,KAAK,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAiBxE,WAAW,IAAI,KAAK;IAIpB,OAAO,KAAK,QAAQ,GAEnB;CACF"}
@@ -0,0 +1,104 @@
1
+ import { D1HttpPreparedStatement } from './d1-http-prepared-statement.js';
2
+ function throwIfD1RowFailed(row, label) {
3
+ if (row && typeof row === 'object' && 'success' in row && row.success === false) {
4
+ const err = row.error ?? row.errors;
5
+ throw new Error(`D1 HTTP ${label} failed${err !== undefined ? `: ${JSON.stringify(err)}` : ''}`);
6
+ }
7
+ }
8
+ export class D1HttpBinding {
9
+ config;
10
+ constructor(config){
11
+ this.config = {
12
+ ...config,
13
+ baseUrl: config.baseUrl ?? 'https://api.cloudflare.com/client/v4'
14
+ };
15
+ }
16
+ async request(body) {
17
+ const response = await fetch(this.endpoint, {
18
+ body: JSON.stringify(body),
19
+ headers: {
20
+ Authorization: `Bearer ${this.config.apiToken}`,
21
+ 'Content-Type': 'application/json'
22
+ },
23
+ method: 'POST'
24
+ });
25
+ const text = await response.text();
26
+ let data;
27
+ try {
28
+ data = JSON.parse(text);
29
+ } catch {
30
+ throw new Error(`D1 HTTP API error: ${response.status} ${text}`);
31
+ }
32
+ if (!response.ok) {
33
+ throw new Error(`D1 HTTP API error: ${response.status} ${text}`);
34
+ }
35
+ if (typeof data === 'object' && data !== null && 'success' in data && data.success === false) {
36
+ throw new Error(`D1 query failed: ${JSON.stringify(data.errors)}`);
37
+ }
38
+ return data;
39
+ }
40
+ async batch(statements) {
41
+ const batchPayload = [];
42
+ for(let i = 0; i < statements.length; i++){
43
+ const stmt = statements[i];
44
+ if (!(stmt instanceof D1HttpPreparedStatement)) {
45
+ throw new Error(`D1HttpBinding.batch: expected statements from this binding.prepare() at index ${i}`);
46
+ }
47
+ batchPayload.push({
48
+ params: stmt.params,
49
+ sql: stmt.sql
50
+ });
51
+ }
52
+ const response = await this.request({
53
+ batch: batchPayload
54
+ });
55
+ const { result } = response;
56
+ if (result.length !== statements.length) {
57
+ throw new Error(`D1 batch: expected ${String(statements.length)} result(s), got ${String(result.length)}`);
58
+ }
59
+ for(let i = 0; i < result.length; i++){
60
+ throwIfD1RowFailed(result[i], `batch statement ${String(i)}`);
61
+ }
62
+ return result;
63
+ }
64
+ dump() {
65
+ return Promise.reject(new Error('D1 dump() is deprecated and not supported via the D1 HTTP API'));
66
+ }
67
+ async exec(query) {
68
+ const response = await this.request({
69
+ sql: query
70
+ });
71
+ const first = response.result[0];
72
+ if (first) {
73
+ throwIfD1RowFailed(first, 'exec');
74
+ }
75
+ const meta = first?.meta;
76
+ return {
77
+ count: meta?.changes ?? 0,
78
+ duration: meta?.duration ?? 0
79
+ };
80
+ }
81
+ prepare(query) {
82
+ return new D1HttpPreparedStatement(this, query);
83
+ }
84
+ async query(sql, params) {
85
+ const response = await this.request({
86
+ params,
87
+ sql
88
+ });
89
+ const first = response.result[0];
90
+ if (!first) {
91
+ throw new Error('D1 HTTP API returned an empty result array');
92
+ }
93
+ throwIfD1RowFailed(first, 'query');
94
+ return first;
95
+ }
96
+ withSession() {
97
+ throw new Error('D1 withSession() is not supported via the HTTP API');
98
+ }
99
+ get endpoint() {
100
+ return `${this.config.baseUrl}/accounts/${this.config.accountId}/d1/database/${this.config.databaseId}/query`;
101
+ }
102
+ }
103
+
104
+ //# sourceMappingURL=d1-http-binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http-binding/d1-http-binding.ts"],"sourcesContent":["import type { HttpConfig } from '../types.js'\nimport type { D1HttpExecResult, D1HttpResult } from './d1-http-types.js'\n\nimport { D1HttpPreparedStatement } from './d1-http-prepared-statement.js'\n\ntype CloudflareD1QueryResponse<T> = {\n errors?: unknown\n messages?: unknown\n result: T\n success: boolean\n}\n\nfunction throwIfD1RowFailed(row: unknown, label: string): void {\n if (\n row &&\n typeof row === 'object' &&\n 'success' in row &&\n (row as { success?: boolean }).success === false\n ) {\n const err =\n (row as { error?: unknown; errors?: unknown }).error ?? (row as { errors?: unknown }).errors\n\n throw new Error(`D1 HTTP ${label} failed${err !== undefined ? `: ${JSON.stringify(err)}` : ''}`)\n }\n}\n\nexport class D1HttpBinding {\n private readonly config: {\n baseUrl: string\n } & Required<Pick<HttpConfig, 'accountId' | 'apiToken' | 'databaseId'>>\n\n constructor(config: HttpConfig) {\n this.config = {\n ...config,\n baseUrl: config.baseUrl ?? 'https://api.cloudflare.com/client/v4',\n }\n }\n\n private async request<T extends CloudflareD1QueryResponse<unknown>>(body: object): Promise<T> {\n const response = await fetch(this.endpoint, {\n body: JSON.stringify(body),\n headers: {\n Authorization: `Bearer ${this.config.apiToken}`,\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n })\n\n const text = await response.text()\n let data: unknown\n\n try {\n data = JSON.parse(text) as { errors?: unknown; success?: boolean } & T\n } catch {\n throw new Error(`D1 HTTP API error: ${response.status} ${text}`)\n }\n\n if (!response.ok) {\n throw new Error(`D1 HTTP API error: ${response.status} ${text}`)\n }\n\n if (typeof data === 'object' && data !== null && 'success' in data && data.success === false) {\n throw new Error(`D1 query failed: ${JSON.stringify((data as { errors?: unknown }).errors)}`)\n }\n\n return data as T\n }\n\n async batch<T = unknown>(statements: readonly unknown[]): Promise<D1HttpResult<T>[]> {\n const batchPayload: { params: unknown[]; sql: string }[] = []\n\n for (let i = 0; i < statements.length; i++) {\n const stmt = statements[i]\n\n if (!(stmt instanceof D1HttpPreparedStatement)) {\n throw new Error(\n `D1HttpBinding.batch: expected statements from this binding.prepare() at index ${i}`,\n )\n }\n\n batchPayload.push({ params: stmt.params, sql: stmt.sql })\n }\n\n const response = await this.request<CloudflareD1QueryResponse<D1HttpResult<T>[]>>({\n batch: batchPayload,\n })\n\n const { result } = response\n\n if (result.length !== statements.length) {\n throw new Error(\n `D1 batch: expected ${String(statements.length)} result(s), got ${String(result.length)}`,\n )\n }\n\n for (let i = 0; i < result.length; i++) {\n throwIfD1RowFailed(result[i], `batch statement ${String(i)}`)\n }\n\n return result\n }\n\n dump(): Promise<ArrayBuffer> {\n return Promise.reject(\n new Error('D1 dump() is deprecated and not supported via the D1 HTTP API'),\n )\n }\n\n async exec(query: string): Promise<D1HttpExecResult> {\n const response = await this.request<CloudflareD1QueryResponse<D1HttpResult[]>>({ sql: query })\n\n const first = response.result[0]\n\n if (first) {\n throwIfD1RowFailed(first, 'exec')\n }\n\n const meta = first?.meta\n\n return {\n count: meta?.changes ?? 0,\n duration: meta?.duration ?? 0,\n }\n }\n\n prepare(query: string): D1HttpPreparedStatement {\n return new D1HttpPreparedStatement(this, query)\n }\n\n async query<T>(sql: string, params: unknown[]): Promise<D1HttpResult<T>> {\n const response = await this.request<CloudflareD1QueryResponse<D1HttpResult<T>[]>>({\n params,\n sql,\n })\n\n const first = response.result[0]\n\n if (!first) {\n throw new Error('D1 HTTP API returned an empty result array')\n }\n\n throwIfD1RowFailed(first, 'query')\n\n return first\n }\n\n withSession(): never {\n throw new Error('D1 withSession() is not supported via the HTTP API')\n }\n\n private get endpoint(): string {\n return `${this.config.baseUrl}/accounts/${this.config.accountId}/d1/database/${this.config.databaseId}/query`\n }\n}\n"],"names":["D1HttpPreparedStatement","throwIfD1RowFailed","row","label","success","err","error","errors","Error","undefined","JSON","stringify","D1HttpBinding","config","baseUrl","request","body","response","fetch","endpoint","headers","Authorization","apiToken","method","text","data","parse","status","ok","batch","statements","batchPayload","i","length","stmt","push","params","sql","result","String","dump","Promise","reject","exec","query","first","meta","count","changes","duration","prepare","withSession","accountId","databaseId"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { D1HttpBinding } from './d1-http-binding.js';
2
+ import type { D1HttpResult } from './d1-http-types.js';
3
+ export declare class D1HttpPreparedStatement {
4
+ private readonly binding;
5
+ params: unknown[];
6
+ readonly sql: string;
7
+ constructor(binding: D1HttpBinding, sql: string);
8
+ all<T = Record<string, unknown>>(): Promise<D1HttpResult<T>>;
9
+ bind(...values: unknown[]): D1HttpPreparedStatement;
10
+ first<T = unknown>(colName?: string): Promise<null | T>;
11
+ raw<T = unknown[]>(options?: {
12
+ columnNames?: boolean;
13
+ }): Promise<[string[], ...T[]] | T[]>;
14
+ run<T = Record<string, unknown>>(): Promise<D1HttpResult<T>>;
15
+ }
16
+ //# sourceMappingURL=d1-http-prepared-statement.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d1-http-prepared-statement.d.ts","sourceRoot":"","sources":["../../src/http-binding/d1-http-prepared-statement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAChC,MAAM,EAAE,OAAO,EAAE,CAAK;IAC7B,SAAgB,GAAG,EAAE,MAAM,CAAA;gBAEf,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;IAKzC,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAIlE,IAAI,CAAC,GAAG,MAAM,EAAE,OAAO,EAAE,GAAG,uBAAuB;IAQ7C,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAevD,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC;IAuB1F,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAGnE"}
@@ -0,0 +1,56 @@
1
+ export class D1HttpPreparedStatement {
2
+ binding;
3
+ params = [];
4
+ sql;
5
+ constructor(binding, sql){
6
+ this.binding = binding;
7
+ this.sql = sql;
8
+ }
9
+ async all() {
10
+ return this.binding.query(this.sql, this.params);
11
+ }
12
+ bind(...values) {
13
+ const stmt = new D1HttpPreparedStatement(this.binding, this.sql);
14
+ stmt.params = values;
15
+ return stmt;
16
+ }
17
+ async first(colName) {
18
+ const result = await this.binding.query(this.sql, this.params);
19
+ const row = result.results[0];
20
+ if (!row) {
21
+ return null;
22
+ }
23
+ if (colName !== undefined) {
24
+ return row[colName] ?? null;
25
+ }
26
+ return row;
27
+ }
28
+ async raw(options) {
29
+ const result = await this.binding.query(this.sql, this.params);
30
+ if (result.results.length === 0) {
31
+ return options?.columnNames ? [
32
+ []
33
+ ] : [];
34
+ }
35
+ const firstRow = result.results[0];
36
+ if (!firstRow) {
37
+ return options?.columnNames ? [
38
+ []
39
+ ] : [];
40
+ }
41
+ const columns = Object.keys(firstRow);
42
+ const rows = result.results.map((row)=>columns.map((col)=>row[col]));
43
+ if (options?.columnNames) {
44
+ return [
45
+ columns,
46
+ ...rows
47
+ ];
48
+ }
49
+ return rows;
50
+ }
51
+ async run() {
52
+ return this.binding.query(this.sql, this.params);
53
+ }
54
+ }
55
+
56
+ //# sourceMappingURL=d1-http-prepared-statement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http-binding/d1-http-prepared-statement.ts"],"sourcesContent":["import type { D1HttpBinding } from './d1-http-binding.js'\nimport type { D1HttpResult } from './d1-http-types.js'\n\nexport class D1HttpPreparedStatement {\n private readonly binding: D1HttpBinding\n public params: unknown[] = []\n public readonly sql: string\n\n constructor(binding: D1HttpBinding, sql: string) {\n this.binding = binding\n this.sql = sql\n }\n\n async all<T = Record<string, unknown>>(): Promise<D1HttpResult<T>> {\n return this.binding.query<T>(this.sql, this.params)\n }\n\n bind(...values: unknown[]): D1HttpPreparedStatement {\n const stmt = new D1HttpPreparedStatement(this.binding, this.sql)\n\n stmt.params = values\n\n return stmt\n }\n\n async first<T = unknown>(colName?: string): Promise<null | T> {\n const result = await this.binding.query<Record<string, unknown>>(this.sql, this.params)\n const row = result.results[0]\n\n if (!row) {\n return null\n }\n\n if (colName !== undefined) {\n return (row[colName] as T) ?? null\n }\n\n return row as T\n }\n\n async raw<T = unknown[]>(options?: { columnNames?: boolean }): Promise<[string[], ...T[]] | T[]> {\n const result = await this.binding.query<Record<string, unknown>>(this.sql, this.params)\n\n if (result.results.length === 0) {\n return options?.columnNames ? ([[]] as [string[], ...T[]]) : ([] as T[])\n }\n\n const firstRow = result.results[0]\n\n if (!firstRow) {\n return options?.columnNames ? ([[]] as [string[], ...T[]]) : ([] as T[])\n }\n\n const columns = Object.keys(firstRow)\n const rows = result.results.map((row) => columns.map((col) => row[col])) as T[]\n\n if (options?.columnNames) {\n return [columns, ...rows] as [string[], ...T[]]\n }\n\n return rows\n }\n\n async run<T = Record<string, unknown>>(): Promise<D1HttpResult<T>> {\n return this.binding.query<T>(this.sql, this.params)\n }\n}\n"],"names":["D1HttpPreparedStatement","binding","params","sql","all","query","bind","values","stmt","first","colName","result","row","results","undefined","raw","options","length","columnNames","firstRow","columns","Object","keys","rows","map","col","run"],"mappings":"AAGA,OAAO,MAAMA;IACMC,QAAsB;IAChCC,SAAoB,EAAE,CAAA;IACbC,IAAW;IAE3B,YAAYF,OAAsB,EAAEE,GAAW,CAAE;QAC/C,IAAI,CAACF,OAAO,GAAGA;QACf,IAAI,CAACE,GAAG,GAAGA;IACb;IAEA,MAAMC,MAA6D;QACjE,OAAO,IAAI,CAACH,OAAO,CAACI,KAAK,CAAI,IAAI,CAACF,GAAG,EAAE,IAAI,CAACD,MAAM;IACpD;IAEAI,KAAK,GAAGC,MAAiB,EAA2B;QAClD,MAAMC,OAAO,IAAIR,wBAAwB,IAAI,CAACC,OAAO,EAAE,IAAI,CAACE,GAAG;QAE/DK,KAAKN,MAAM,GAAGK;QAEd,OAAOC;IACT;IAEA,MAAMC,MAAmBC,OAAgB,EAAqB;QAC5D,MAAMC,SAAS,MAAM,IAAI,CAACV,OAAO,CAACI,KAAK,CAA0B,IAAI,CAACF,GAAG,EAAE,IAAI,CAACD,MAAM;QACtF,MAAMU,MAAMD,OAAOE,OAAO,CAAC,EAAE;QAE7B,IAAI,CAACD,KAAK;YACR,OAAO;QACT;QAEA,IAAIF,YAAYI,WAAW;YACzB,OAAO,AAACF,GAAG,CAACF,QAAQ,IAAU;QAChC;QAEA,OAAOE;IACT;IAEA,MAAMG,IAAmBC,OAAmC,EAAqC;QAC/F,MAAML,SAAS,MAAM,IAAI,CAACV,OAAO,CAACI,KAAK,CAA0B,IAAI,CAACF,GAAG,EAAE,IAAI,CAACD,MAAM;QAEtF,IAAIS,OAAOE,OAAO,CAACI,MAAM,KAAK,GAAG;YAC/B,OAAOD,SAASE,cAAe;gBAAC,EAAE;aAAC,GAA2B,EAAE;QAClE;QAEA,MAAMC,WAAWR,OAAOE,OAAO,CAAC,EAAE;QAElC,IAAI,CAACM,UAAU;YACb,OAAOH,SAASE,cAAe;gBAAC,EAAE;aAAC,GAA2B,EAAE;QAClE;QAEA,MAAME,UAAUC,OAAOC,IAAI,CAACH;QAC5B,MAAMI,OAAOZ,OAAOE,OAAO,CAACW,GAAG,CAAC,CAACZ,MAAQQ,QAAQI,GAAG,CAAC,CAACC,MAAQb,GAAG,CAACa,IAAI;QAEtE,IAAIT,SAASE,aAAa;YACxB,OAAO;gBAACE;mBAAYG;aAAK;QAC3B;QAEA,OAAOA;IACT;IAEA,MAAMG,MAA6D;QACjE,OAAO,IAAI,CAACzB,OAAO,CAACI,KAAK,CAAI,IAAI,CAACF,GAAG,EAAE,IAAI,CAACD,MAAM;IACpD;AACF"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Subset of Cloudflare D1 result types used by the HTTP shim. Kept local to avoid a
3
+ * dependency on `@cloudflare/workers-types` for consumers who only use HTTP mode.
4
+ */
5
+ export type D1HttpMeta = {
6
+ [key: string]: unknown;
7
+ changes?: number;
8
+ duration: number;
9
+ };
10
+ export type D1HttpResult<T = unknown> = {
11
+ meta: D1HttpMeta;
12
+ results: T[];
13
+ success: true;
14
+ };
15
+ export type D1HttpExecResult = {
16
+ count: number;
17
+ duration: number;
18
+ };
19
+ //# sourceMappingURL=d1-http-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"d1-http-types.d.ts","sourceRoot":"","sources":["../../src/http-binding/d1-http-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,IAAI;IACtC,IAAI,EAAE,UAAU,CAAA;IAChB,OAAO,EAAE,CAAC,EAAE,CAAA;IACZ,OAAO,EAAE,IAAI,CAAA;CACd,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Subset of Cloudflare D1 result types used by the HTTP shim. Kept local to avoid a
3
+ * dependency on `@cloudflare/workers-types` for consumers who only use HTTP mode.
4
+ */ export { };
5
+
6
+ //# sourceMappingURL=d1-http-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http-binding/d1-http-types.ts"],"sourcesContent":["/**\n * Subset of Cloudflare D1 result types used by the HTTP shim. Kept local to avoid a\n * dependency on `@cloudflare/workers-types` for consumers who only use HTTP mode.\n */\nexport type D1HttpMeta = {\n [key: string]: unknown\n changes?: number\n duration: number\n}\n\nexport type D1HttpResult<T = unknown> = {\n meta: D1HttpMeta\n results: T[]\n success: true\n}\n\nexport type D1HttpExecResult = {\n count: number\n duration: number\n}\n"],"names":[],"mappings":"AAAA;;;CAGC,GAaD,WAGC"}
@@ -0,0 +1,214 @@
1
+ import { afterEach, describe, expect, it, vi } from 'vitest';
2
+ import { D1HttpBinding } from './d1-http-binding.js';
3
+ const mockConfig = {
4
+ accountId: 'test-account',
5
+ apiToken: 'test-token',
6
+ databaseId: 'test-db'
7
+ };
8
+ function mockFetchJson(body) {
9
+ const text = JSON.stringify(body);
10
+ return vi.fn().mockResolvedValue({
11
+ ok: true,
12
+ text: ()=>Promise.resolve(text)
13
+ });
14
+ }
15
+ describe('D1HttpBinding', ()=>{
16
+ afterEach(()=>{
17
+ vi.restoreAllMocks();
18
+ });
19
+ it('should prepare statements', ()=>{
20
+ const binding = new D1HttpBinding(mockConfig);
21
+ const stmt = binding.prepare('SELECT * FROM users WHERE id = ?');
22
+ expect(stmt).toBeDefined();
23
+ expect(stmt.sql).toBe('SELECT * FROM users WHERE id = ?');
24
+ });
25
+ it('should bind parameters immutably', ()=>{
26
+ const binding = new D1HttpBinding(mockConfig);
27
+ const stmt1 = binding.prepare('SELECT * FROM users WHERE id = ?');
28
+ const stmt2 = stmt1.bind(123);
29
+ expect(stmt1).not.toBe(stmt2);
30
+ expect(stmt1.params).toEqual([]);
31
+ expect(stmt2.params).toEqual([
32
+ 123
33
+ ]);
34
+ });
35
+ it('should execute query via HTTP', async ()=>{
36
+ const fetchMock = mockFetchJson({
37
+ result: [
38
+ {
39
+ meta: {
40
+ duration: 0.5
41
+ },
42
+ results: [
43
+ {
44
+ id: 1,
45
+ name: 'Test'
46
+ }
47
+ ],
48
+ success: true
49
+ }
50
+ ],
51
+ success: true
52
+ });
53
+ vi.stubGlobal('fetch', fetchMock);
54
+ const binding = new D1HttpBinding(mockConfig);
55
+ const result = await binding.prepare('SELECT * FROM users').all();
56
+ expect(result.results).toEqual([
57
+ {
58
+ id: 1,
59
+ name: 'Test'
60
+ }
61
+ ]);
62
+ expect(fetchMock).toHaveBeenCalledWith('https://api.cloudflare.com/client/v4/accounts/test-account/d1/database/test-db/query', expect.objectContaining({
63
+ headers: expect.objectContaining({
64
+ Authorization: 'Bearer test-token'
65
+ }),
66
+ method: 'POST'
67
+ }));
68
+ });
69
+ it('should throw when API returns top-level success false', async ()=>{
70
+ const fetchMock = mockFetchJson({
71
+ errors: [
72
+ {
73
+ code: 7500,
74
+ message: 'fail'
75
+ }
76
+ ],
77
+ success: false
78
+ });
79
+ vi.stubGlobal('fetch', fetchMock);
80
+ const binding = new D1HttpBinding(mockConfig);
81
+ await expect(binding.prepare('SELECT 1').all()).rejects.toThrow(/D1 query failed/);
82
+ });
83
+ it('should throw when a single query row has success false', async ()=>{
84
+ const fetchMock = mockFetchJson({
85
+ result: [
86
+ {
87
+ error: 'syntax error',
88
+ success: false
89
+ }
90
+ ],
91
+ success: true
92
+ });
93
+ vi.stubGlobal('fetch', fetchMock);
94
+ const binding = new D1HttpBinding(mockConfig);
95
+ await expect(binding.prepare('SELECT 1').all()).rejects.toThrow(/D1 HTTP query failed/);
96
+ });
97
+ it('should run batch with one result per statement', async ()=>{
98
+ const fetchMock = mockFetchJson({
99
+ result: [
100
+ {
101
+ meta: {
102
+ changes: 1,
103
+ duration: 0.1
104
+ },
105
+ results: [],
106
+ success: true
107
+ },
108
+ {
109
+ meta: {
110
+ changes: 0,
111
+ duration: 0.1
112
+ },
113
+ results: [
114
+ {
115
+ id: 1
116
+ }
117
+ ],
118
+ success: true
119
+ }
120
+ ],
121
+ success: true
122
+ });
123
+ vi.stubGlobal('fetch', fetchMock);
124
+ const binding = new D1HttpBinding(mockConfig);
125
+ const a = binding.prepare('INSERT INTO t (x) VALUES (?)').bind('a');
126
+ const b = binding.prepare('SELECT * FROM t').bind();
127
+ const results = await binding.batch([
128
+ a,
129
+ b
130
+ ]);
131
+ expect(results).toHaveLength(2);
132
+ expect(fetchMock).toHaveBeenCalledWith(expect.any(String), expect.objectContaining({
133
+ body: expect.stringContaining('"batch"')
134
+ }));
135
+ });
136
+ it('should throw when batch receives non-D1HttpPreparedStatement', async ()=>{
137
+ vi.stubGlobal('fetch', mockFetchJson({
138
+ result: [],
139
+ success: true
140
+ }));
141
+ const binding = new D1HttpBinding(mockConfig);
142
+ await expect(binding.batch([
143
+ {}
144
+ ])).rejects.toThrow(/expected statements from this binding/);
145
+ });
146
+ it('should throw when batch result count mismatches statement count', async ()=>{
147
+ const fetchMock = mockFetchJson({
148
+ result: [
149
+ {
150
+ meta: {},
151
+ results: [],
152
+ success: true
153
+ }
154
+ ],
155
+ success: true
156
+ });
157
+ vi.stubGlobal('fetch', fetchMock);
158
+ const binding = new D1HttpBinding(mockConfig);
159
+ const a = binding.prepare('SELECT 1');
160
+ const b = binding.prepare('SELECT 2');
161
+ await expect(binding.batch([
162
+ a,
163
+ b
164
+ ])).rejects.toThrow(/expected 2 result/);
165
+ });
166
+ it('should throw when a batch row has success false', async ()=>{
167
+ const fetchMock = mockFetchJson({
168
+ result: [
169
+ {
170
+ meta: {},
171
+ results: [],
172
+ success: true
173
+ },
174
+ {
175
+ error: 'constraint',
176
+ success: false
177
+ }
178
+ ],
179
+ success: true
180
+ });
181
+ vi.stubGlobal('fetch', fetchMock);
182
+ const binding = new D1HttpBinding(mockConfig);
183
+ const a = binding.prepare('SELECT 1');
184
+ const b = binding.prepare('SELECT 2');
185
+ await expect(binding.batch([
186
+ a,
187
+ b
188
+ ])).rejects.toThrow(/batch statement 1 failed/);
189
+ });
190
+ it('should return exec meta from first result', async ()=>{
191
+ const fetchMock = mockFetchJson({
192
+ result: [
193
+ {
194
+ meta: {
195
+ changes: 3,
196
+ duration: 1.2
197
+ },
198
+ results: [],
199
+ success: true
200
+ }
201
+ ],
202
+ success: true
203
+ });
204
+ vi.stubGlobal('fetch', fetchMock);
205
+ const binding = new D1HttpBinding(mockConfig);
206
+ const out = await binding.exec('DELETE FROM t');
207
+ expect(out).toEqual({
208
+ count: 3,
209
+ duration: 1.2
210
+ });
211
+ });
212
+ });
213
+
214
+ //# sourceMappingURL=http-binding.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http-binding/http-binding.spec.ts"],"sourcesContent":["import { afterEach, describe, expect, it, vi } from 'vitest'\n\nimport { D1HttpBinding } from './d1-http-binding.js'\n\nconst mockConfig = {\n accountId: 'test-account',\n apiToken: 'test-token',\n databaseId: 'test-db',\n}\n\nfunction mockFetchJson(body: object) {\n const text = JSON.stringify(body)\n\n return vi.fn().mockResolvedValue({\n ok: true,\n text: () => Promise.resolve(text),\n })\n}\n\ndescribe('D1HttpBinding', () => {\n afterEach(() => {\n vi.restoreAllMocks()\n })\n\n it('should prepare statements', () => {\n const binding = new D1HttpBinding(mockConfig)\n const stmt = binding.prepare('SELECT * FROM users WHERE id = ?')\n\n expect(stmt).toBeDefined()\n expect(stmt.sql).toBe('SELECT * FROM users WHERE id = ?')\n })\n\n it('should bind parameters immutably', () => {\n const binding = new D1HttpBinding(mockConfig)\n const stmt1 = binding.prepare('SELECT * FROM users WHERE id = ?')\n const stmt2 = stmt1.bind(123)\n\n expect(stmt1).not.toBe(stmt2)\n expect(stmt1.params).toEqual([])\n expect(stmt2.params).toEqual([123])\n })\n\n it('should execute query via HTTP', async () => {\n const fetchMock = mockFetchJson({\n result: [\n {\n meta: { duration: 0.5 },\n results: [{ id: 1, name: 'Test' }],\n success: true,\n },\n ],\n success: true,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n const result = await binding.prepare('SELECT * FROM users').all()\n\n expect(result.results).toEqual([{ id: 1, name: 'Test' }])\n expect(fetchMock).toHaveBeenCalledWith(\n 'https://api.cloudflare.com/client/v4/accounts/test-account/d1/database/test-db/query',\n expect.objectContaining({\n headers: expect.objectContaining({\n Authorization: 'Bearer test-token',\n }),\n method: 'POST',\n }),\n )\n })\n\n it('should throw when API returns top-level success false', async () => {\n const fetchMock = mockFetchJson({\n errors: [{ code: 7500, message: 'fail' }],\n success: false,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n\n await expect(binding.prepare('SELECT 1').all()).rejects.toThrow(/D1 query failed/)\n })\n\n it('should throw when a single query row has success false', async () => {\n const fetchMock = mockFetchJson({\n result: [{ error: 'syntax error', success: false }],\n success: true,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n\n await expect(binding.prepare('SELECT 1').all()).rejects.toThrow(/D1 HTTP query failed/)\n })\n\n it('should run batch with one result per statement', async () => {\n const fetchMock = mockFetchJson({\n result: [\n { meta: { changes: 1, duration: 0.1 }, results: [], success: true },\n { meta: { changes: 0, duration: 0.1 }, results: [{ id: 1 }], success: true },\n ],\n success: true,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n const a = binding.prepare('INSERT INTO t (x) VALUES (?)').bind('a')\n const b = binding.prepare('SELECT * FROM t').bind()\n\n const results = await binding.batch([a, b])\n\n expect(results).toHaveLength(2)\n expect(fetchMock).toHaveBeenCalledWith(\n expect.any(String),\n expect.objectContaining({\n body: expect.stringContaining('\"batch\"'),\n }),\n )\n })\n\n it('should throw when batch receives non-D1HttpPreparedStatement', async () => {\n vi.stubGlobal('fetch', mockFetchJson({ result: [], success: true }))\n\n const binding = new D1HttpBinding(mockConfig)\n\n await expect(binding.batch([{} as never])).rejects.toThrow(\n /expected statements from this binding/,\n )\n })\n\n it('should throw when batch result count mismatches statement count', async () => {\n const fetchMock = mockFetchJson({\n result: [{ meta: {}, results: [], success: true }],\n success: true,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n const a = binding.prepare('SELECT 1')\n const b = binding.prepare('SELECT 2')\n\n await expect(binding.batch([a, b])).rejects.toThrow(/expected 2 result/)\n })\n\n it('should throw when a batch row has success false', async () => {\n const fetchMock = mockFetchJson({\n result: [\n { meta: {}, results: [], success: true },\n { error: 'constraint', success: false },\n ],\n success: true,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n const a = binding.prepare('SELECT 1')\n const b = binding.prepare('SELECT 2')\n\n await expect(binding.batch([a, b])).rejects.toThrow(/batch statement 1 failed/)\n })\n\n it('should return exec meta from first result', async () => {\n const fetchMock = mockFetchJson({\n result: [{ meta: { changes: 3, duration: 1.2 }, results: [], success: true }],\n success: true,\n })\n\n vi.stubGlobal('fetch', fetchMock)\n\n const binding = new D1HttpBinding(mockConfig)\n const out = await binding.exec('DELETE FROM t')\n\n expect(out).toEqual({ count: 3, duration: 1.2 })\n })\n})\n"],"names":["afterEach","describe","expect","it","vi","D1HttpBinding","mockConfig","accountId","apiToken","databaseId","mockFetchJson","body","text","JSON","stringify","fn","mockResolvedValue","ok","Promise","resolve","restoreAllMocks","binding","stmt","prepare","toBeDefined","sql","toBe","stmt1","stmt2","bind","not","params","toEqual","fetchMock","result","meta","duration","results","id","name","success","stubGlobal","all","toHaveBeenCalledWith","objectContaining","headers","Authorization","method","errors","code","message","rejects","toThrow","error","changes","a","b","batch","toHaveLength","any","String","stringContaining","out","exec","count"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { D1HttpBinding } from './d1-http-binding.js';
2
+ export { D1HttpPreparedStatement } from './d1-http-prepared-statement.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http-binding/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAA"}
@@ -0,0 +1,4 @@
1
+ export { D1HttpBinding } from './d1-http-binding.js';
2
+ export { D1HttpPreparedStatement } from './d1-http-prepared-statement.js';
3
+
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/http-binding/index.ts"],"sourcesContent":["export { D1HttpBinding } from './d1-http-binding.js'\nexport { D1HttpPreparedStatement } from './d1-http-prepared-statement.js'\n"],"names":["D1HttpBinding","D1HttpPreparedStatement"],"mappings":"AAAA,SAASA,aAAa,QAAQ,uBAAsB;AACpD,SAASC,uBAAuB,QAAQ,kCAAiC"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,10 @@
1
1
  import type { DatabaseAdapterObj } from 'payload';
2
2
  import type { Args, SQLiteD1Adapter } from './types.js';
3
+ export { D1HttpBinding } from './http-binding/index.js';
3
4
  export declare function sqliteD1Adapter(args: Args): DatabaseAdapterObj<SQLiteD1Adapter>;
4
5
  /**
5
6
  * @todo deprecate /types subpath export in 4.0
6
7
  */
7
- export type { Args as SQLiteAdapterArgs, CountDistinct, DeleteWhere, DropDatabase, Execute, GeneratedDatabaseSchema, GenericColumns, GenericRelation, GenericTable, IDType, Insert, MigrateDownArgs, MigrateUpArgs, SQLiteD1Adapter as SQLiteAdapter, SQLiteSchemaHook, } from './types.js';
8
+ export type { Args as SQLiteAdapterArgs, CountDistinct, DeleteWhere, DropDatabase, Execute, GeneratedDatabaseSchema, GenericColumns, GenericRelation, GenericTable, HttpConfig, IDType, Insert, MigrateDownArgs, MigrateUpArgs, SQLiteD1Adapter as SQLiteAdapter, SQLiteSchemaHook, } from './types.js';
8
9
  export { sql } from 'drizzle-orm';
9
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAW,MAAM,SAAS,CAAA;AAwD1D,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAOvD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB,CAAC,eAAe,CAAC,CA6J/E;AAED;;GAEG;AACH,YAAY,EACV,IAAI,IAAI,iBAAiB,EACzB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,OAAO,EACP,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,MAAM,EACN,MAAM,EACN,eAAe,EACf,aAAa,EACb,eAAe,IAAI,aAAa,EAChC,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAW,MAAM,SAAS,CAAA;AAwD1D,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAKvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAIvD,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,kBAAkB,CAAC,eAAe,CAAC,CA0K/E;AAED;;GAEG;AACH,YAAY,EACV,IAAI,IAAI,iBAAiB,EACzB,aAAa,EACb,WAAW,EACX,YAAY,EACZ,OAAO,EACP,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,YAAY,EACZ,UAAU,EACV,MAAM,EACN,MAAM,EACN,eAAe,EACf,aAAa,EACb,eAAe,IAAI,aAAa,EAChC,gBAAgB,GACjB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js CHANGED
@@ -5,10 +5,17 @@ import { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from
5
5
  import { fileURLToPath } from 'url';
6
6
  import { connect } from './connect.js';
7
7
  import { execute } from './execute.js';
8
+ export { D1HttpBinding } from './http-binding/index.js';
8
9
  const filename = fileURLToPath(import.meta.url);
9
10
  export function sqliteD1Adapter(args) {
11
+ if (!args.binding && !args.http || args.binding && args.http) {
12
+ throw new Error('db-d1-sqlite: Provide exactly one of `binding` (Cloudflare Workers) or `http` (REST API).');
13
+ }
14
+ if (args.http && args.readReplicas) {
15
+ throw new Error('db-d1-sqlite: `readReplicas` is not supported with `http`. Use a Cloudflare Workers deployment with a D1 binding (this feature is not available over the HTTP API).');
16
+ }
10
17
  const sqliteIDType = args.idType || 'number';
11
- const payloadIDType = sqliteIDType === 'uuid' ? 'text' : 'number';
18
+ const payloadIDType = sqliteIDType === 'uuid' || sqliteIDType === 'uuidv7' ? 'text' : 'number';
12
19
  const allowIDOnCreate = args.allowIDOnCreate ?? false;
13
20
  function adapter({ payload }) {
14
21
  const migrationDir = findMigrationDir(args.migrationDir);
@@ -37,6 +44,7 @@ export function sqliteD1Adapter(args) {
37
44
  beforeSchemaInit: args.beforeSchemaInit ?? [],
38
45
  binding: args.binding,
39
46
  blocksAsJSON: args.blocksAsJSON ?? false,
47
+ httpConfig: args.http,
40
48
  // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve
41
49
  client: undefined,
42
50
  defaultDrizzleSnapshot,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { DrizzleAdapter, Operators } from '@payloadcms/drizzle'\nimport type { DatabaseAdapterObj, Payload } from 'payload'\n\nimport {\n beginTransaction,\n buildCreateMigration,\n commitTransaction,\n count,\n countGlobalVersions,\n countVersions,\n create,\n createBlocksToJsonMigrator,\n createGlobal,\n createGlobalVersion,\n createSchemaGenerator,\n createVersion,\n deleteMany,\n deleteOne,\n deleteVersions,\n destroy,\n find,\n findGlobal,\n findGlobalVersions,\n findOne,\n findVersions,\n migrate,\n migrateDown,\n migrateFresh,\n migrateRefresh,\n migrateReset,\n migrateStatus,\n operatorMap,\n queryDrafts,\n rollbackTransaction,\n updateGlobal,\n updateGlobalVersion,\n updateJobs,\n updateMany,\n updateOne,\n updateVersion,\n} from '@payloadcms/drizzle'\nimport {\n columnToCodeConverter,\n convertPathToJSONTraversal,\n countDistinct,\n createJSONQuery,\n defaultDrizzleSnapshot,\n deleteWhere,\n dropDatabase,\n init,\n insert,\n requireDrizzleKit,\n} from '@payloadcms/drizzle/sqlite'\nimport { like, notLike } from 'drizzle-orm'\nimport { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'\nimport { fileURLToPath } from 'url'\n\nimport type { Args, SQLiteD1Adapter } from './types.js'\n\nimport { connect } from './connect.js'\nimport { execute } from './execute.js'\n\nconst filename = fileURLToPath(import.meta.url)\n\nexport function sqliteD1Adapter(args: Args): DatabaseAdapterObj<SQLiteD1Adapter> {\n const sqliteIDType = args.idType || 'number'\n const payloadIDType = sqliteIDType === 'uuid' ? 'text' : 'number'\n const allowIDOnCreate = args.allowIDOnCreate ?? false\n\n function adapter({ payload }: { payload: Payload }) {\n const migrationDir = findMigrationDir(args.migrationDir)\n let resolveInitializing: () => void = () => {}\n let rejectInitializing: () => void = () => {}\n\n const initializing = new Promise<void>((res, rej) => {\n resolveInitializing = res\n rejectInitializing = rej\n })\n\n // sqlite's like operator is case-insensitive, so we overwrite the DrizzleAdapter operators to not use ilike\n const operators = {\n ...operatorMap,\n contains: like,\n like,\n not_like: notLike,\n } as unknown as Operators\n\n const executeMethod = 'run'\n\n const sanitizeStatements = ({\n sqlExecute,\n statements,\n }: {\n sqlExecute: string\n statements: string[]\n }) => {\n return statements\n .map((statement) => `${sqlExecute}${statement?.replaceAll('`', '\\\\`')}\\`)`)\n .join('\\n')\n }\n\n const adapter = createDatabaseAdapter<SQLiteD1Adapter>({\n name: 'sqlite',\n afterSchemaInit: args.afterSchemaInit ?? [],\n allowIDOnCreate,\n autoIncrement: args.autoIncrement ?? false,\n beforeSchemaInit: args.beforeSchemaInit ?? [],\n binding: args.binding,\n blocksAsJSON: args.blocksAsJSON ?? false,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n client: undefined,\n defaultDrizzleSnapshot,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n drizzle: undefined,\n features: {\n json: true,\n },\n fieldConstraints: {},\n foreignKeys: new Set(),\n generateSchema: createSchemaGenerator({\n columnToCodeConverter,\n corePackageSuffix: 'sqlite-core',\n defaultOutputFile: args.generateSchemaOutputFile,\n tableImport: 'sqliteTable',\n }),\n idType: sqliteIDType,\n initializing,\n limitedBoundParameters: true,\n localesSuffix: args.localesSuffix || '_locales',\n logger: args.logger,\n operators,\n prodMigrations: args.prodMigrations,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n push: args.push,\n rawRelations: {},\n rawTables: {},\n readReplicas: args.readReplicas,\n relations: {},\n relationshipsSuffix: args.relationshipsSuffix || '_rels',\n schema: {},\n schemaName: args.schemaName,\n sessions: {},\n tableNameMap: new Map<string, string>(),\n tables: {},\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n execute,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n transactionOptions: args.transactionOptions || undefined,\n updateJobs,\n updateMany,\n versionsSuffix: args.versionsSuffix || '_v',\n // DatabaseAdapter\n beginTransaction: args.transactionOptions ? beginTransaction : defaultBeginTransaction(),\n commitTransaction,\n connect,\n convertPathToJSONTraversal,\n count,\n countDistinct,\n countGlobalVersions,\n countVersions,\n create,\n createGlobal,\n createGlobalVersion,\n createJSONQuery,\n createMigration: buildCreateMigration({\n executeMethod,\n filename,\n sanitizeStatements,\n }),\n createVersion,\n defaultIDType: payloadIDType,\n deleteMany,\n deleteOne,\n deleteVersions,\n deleteWhere,\n destroy,\n dropDatabase,\n find,\n findGlobal,\n findGlobalVersions,\n findOne,\n findVersions,\n indexes: new Set<string>(),\n init,\n insert,\n migrate,\n migrateDown,\n migrateFresh,\n migrateRefresh,\n migrateReset,\n migrateStatus,\n migrationDir,\n packageName: '@payloadcms/db-d1-sqlite',\n payload,\n queryDrafts,\n rejectInitializing,\n requireDrizzleKit,\n resolveInitializing,\n rollbackTransaction,\n updateGlobal,\n updateGlobalVersion,\n updateOne,\n updateVersion,\n upsert: updateOne,\n })\n\n adapter.blocksToJsonMigrator = createBlocksToJsonMigrator({\n adapter: adapter as unknown as DrizzleAdapter,\n executeMethod,\n sanitizeStatements,\n })\n\n return adapter\n }\n\n return {\n name: 'd1-sqlite',\n allowIDOnCreate,\n defaultIDType: payloadIDType,\n init: adapter,\n }\n}\n\n/**\n * @todo deprecate /types subpath export in 4.0\n */\nexport type {\n Args as SQLiteAdapterArgs,\n CountDistinct,\n DeleteWhere,\n DropDatabase,\n Execute,\n GeneratedDatabaseSchema,\n GenericColumns,\n GenericRelation,\n GenericTable,\n IDType,\n Insert,\n MigrateDownArgs,\n MigrateUpArgs,\n SQLiteD1Adapter as SQLiteAdapter,\n SQLiteSchemaHook,\n} from './types.js'\n\nexport { sql } from 'drizzle-orm'\n"],"names":["beginTransaction","buildCreateMigration","commitTransaction","count","countGlobalVersions","countVersions","create","createBlocksToJsonMigrator","createGlobal","createGlobalVersion","createSchemaGenerator","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","findGlobal","findGlobalVersions","findOne","findVersions","migrate","migrateDown","migrateFresh","migrateRefresh","migrateReset","migrateStatus","operatorMap","queryDrafts","rollbackTransaction","updateGlobal","updateGlobalVersion","updateJobs","updateMany","updateOne","updateVersion","columnToCodeConverter","convertPathToJSONTraversal","countDistinct","createJSONQuery","defaultDrizzleSnapshot","deleteWhere","dropDatabase","init","insert","requireDrizzleKit","like","notLike","createDatabaseAdapter","defaultBeginTransaction","findMigrationDir","fileURLToPath","connect","execute","filename","url","sqliteD1Adapter","args","sqliteIDType","idType","payloadIDType","allowIDOnCreate","adapter","payload","migrationDir","resolveInitializing","rejectInitializing","initializing","Promise","res","rej","operators","contains","not_like","executeMethod","sanitizeStatements","sqlExecute","statements","map","statement","replaceAll","join","name","afterSchemaInit","autoIncrement","beforeSchemaInit","binding","blocksAsJSON","client","undefined","drizzle","features","json","fieldConstraints","foreignKeys","Set","generateSchema","corePackageSuffix","defaultOutputFile","generateSchemaOutputFile","tableImport","limitedBoundParameters","localesSuffix","logger","prodMigrations","push","rawRelations","rawTables","readReplicas","relations","relationshipsSuffix","schema","schemaName","sessions","tableNameMap","Map","tables","transactionOptions","versionsSuffix","createMigration","defaultIDType","indexes","packageName","upsert","blocksToJsonMigrator","sql"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type { DrizzleAdapter, Operators } from '@payloadcms/drizzle'\nimport type { DatabaseAdapterObj, Payload } from 'payload'\n\nimport {\n beginTransaction,\n buildCreateMigration,\n commitTransaction,\n count,\n countGlobalVersions,\n countVersions,\n create,\n createBlocksToJsonMigrator,\n createGlobal,\n createGlobalVersion,\n createSchemaGenerator,\n createVersion,\n deleteMany,\n deleteOne,\n deleteVersions,\n destroy,\n find,\n findGlobal,\n findGlobalVersions,\n findOne,\n findVersions,\n migrate,\n migrateDown,\n migrateFresh,\n migrateRefresh,\n migrateReset,\n migrateStatus,\n operatorMap,\n queryDrafts,\n rollbackTransaction,\n updateGlobal,\n updateGlobalVersion,\n updateJobs,\n updateMany,\n updateOne,\n updateVersion,\n} from '@payloadcms/drizzle'\nimport {\n columnToCodeConverter,\n convertPathToJSONTraversal,\n countDistinct,\n createJSONQuery,\n defaultDrizzleSnapshot,\n deleteWhere,\n dropDatabase,\n init,\n insert,\n requireDrizzleKit,\n} from '@payloadcms/drizzle/sqlite'\nimport { like, notLike } from 'drizzle-orm'\nimport { createDatabaseAdapter, defaultBeginTransaction, findMigrationDir } from 'payload'\nimport { fileURLToPath } from 'url'\n\nimport type { Args, SQLiteD1Adapter } from './types.js'\n\nimport { connect } from './connect.js'\nimport { execute } from './execute.js'\n\nexport { D1HttpBinding } from './http-binding/index.js'\n\nconst filename = fileURLToPath(import.meta.url)\n\nexport function sqliteD1Adapter(args: Args): DatabaseAdapterObj<SQLiteD1Adapter> {\n if ((!args.binding && !args.http) || (args.binding && args.http)) {\n throw new Error(\n 'db-d1-sqlite: Provide exactly one of `binding` (Cloudflare Workers) or `http` (REST API).',\n )\n }\n\n if (args.http && args.readReplicas) {\n throw new Error(\n 'db-d1-sqlite: `readReplicas` is not supported with `http`. Use a Cloudflare Workers deployment with a D1 binding (this feature is not available over the HTTP API).',\n )\n }\n\n const sqliteIDType = args.idType || 'number'\n const payloadIDType = sqliteIDType === 'uuid' || sqliteIDType === 'uuidv7' ? 'text' : 'number'\n const allowIDOnCreate = args.allowIDOnCreate ?? false\n\n function adapter({ payload }: { payload: Payload }) {\n const migrationDir = findMigrationDir(args.migrationDir)\n let resolveInitializing: () => void = () => {}\n let rejectInitializing: () => void = () => {}\n\n const initializing = new Promise<void>((res, rej) => {\n resolveInitializing = res\n rejectInitializing = rej\n })\n\n // sqlite's like operator is case-insensitive, so we overwrite the DrizzleAdapter operators to not use ilike\n const operators = {\n ...operatorMap,\n contains: like,\n like,\n not_like: notLike,\n } as unknown as Operators\n\n const executeMethod = 'run'\n\n const sanitizeStatements = ({\n sqlExecute,\n statements,\n }: {\n sqlExecute: string\n statements: string[]\n }) => {\n return statements\n .map((statement) => `${sqlExecute}${statement?.replaceAll('`', '\\\\`')}\\`)`)\n .join('\\n')\n }\n\n const adapter = createDatabaseAdapter<SQLiteD1Adapter>({\n name: 'sqlite',\n afterSchemaInit: args.afterSchemaInit ?? [],\n allowIDOnCreate,\n autoIncrement: args.autoIncrement ?? false,\n beforeSchemaInit: args.beforeSchemaInit ?? [],\n binding: args.binding,\n blocksAsJSON: args.blocksAsJSON ?? false,\n httpConfig: args.http,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n client: undefined,\n defaultDrizzleSnapshot,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n drizzle: undefined,\n features: {\n json: true,\n },\n fieldConstraints: {},\n foreignKeys: new Set(),\n generateSchema: createSchemaGenerator({\n columnToCodeConverter,\n corePackageSuffix: 'sqlite-core',\n defaultOutputFile: args.generateSchemaOutputFile,\n tableImport: 'sqliteTable',\n }),\n idType: sqliteIDType,\n initializing,\n limitedBoundParameters: true,\n localesSuffix: args.localesSuffix || '_locales',\n logger: args.logger,\n operators,\n prodMigrations: args.prodMigrations,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n push: args.push,\n rawRelations: {},\n rawTables: {},\n readReplicas: args.readReplicas,\n relations: {},\n relationshipsSuffix: args.relationshipsSuffix || '_rels',\n schema: {},\n schemaName: args.schemaName,\n sessions: {},\n tableNameMap: new Map<string, string>(),\n tables: {},\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n execute,\n // @ts-expect-error - vestiges of when tsconfig was not strict. Feel free to improve\n transactionOptions: args.transactionOptions || undefined,\n updateJobs,\n updateMany,\n versionsSuffix: args.versionsSuffix || '_v',\n // DatabaseAdapter\n beginTransaction: args.transactionOptions ? beginTransaction : defaultBeginTransaction(),\n commitTransaction,\n connect,\n convertPathToJSONTraversal,\n count,\n countDistinct,\n countGlobalVersions,\n countVersions,\n create,\n createGlobal,\n createGlobalVersion,\n createJSONQuery,\n createMigration: buildCreateMigration({\n executeMethod,\n filename,\n sanitizeStatements,\n }),\n createVersion,\n defaultIDType: payloadIDType,\n deleteMany,\n deleteOne,\n deleteVersions,\n deleteWhere,\n destroy,\n dropDatabase,\n find,\n findGlobal,\n findGlobalVersions,\n findOne,\n findVersions,\n indexes: new Set<string>(),\n init,\n insert,\n migrate,\n migrateDown,\n migrateFresh,\n migrateRefresh,\n migrateReset,\n migrateStatus,\n migrationDir,\n packageName: '@payloadcms/db-d1-sqlite',\n payload,\n queryDrafts,\n rejectInitializing,\n requireDrizzleKit,\n resolveInitializing,\n rollbackTransaction,\n updateGlobal,\n updateGlobalVersion,\n updateOne,\n updateVersion,\n upsert: updateOne,\n })\n\n adapter.blocksToJsonMigrator = createBlocksToJsonMigrator({\n adapter: adapter as unknown as DrizzleAdapter,\n executeMethod,\n sanitizeStatements,\n })\n\n return adapter\n }\n\n return {\n name: 'd1-sqlite',\n allowIDOnCreate,\n defaultIDType: payloadIDType,\n init: adapter,\n }\n}\n\n/**\n * @todo deprecate /types subpath export in 4.0\n */\nexport type {\n Args as SQLiteAdapterArgs,\n CountDistinct,\n DeleteWhere,\n DropDatabase,\n Execute,\n GeneratedDatabaseSchema,\n GenericColumns,\n GenericRelation,\n GenericTable,\n HttpConfig,\n IDType,\n Insert,\n MigrateDownArgs,\n MigrateUpArgs,\n SQLiteD1Adapter as SQLiteAdapter,\n SQLiteSchemaHook,\n} from './types.js'\n\nexport { sql } from 'drizzle-orm'\n"],"names":["beginTransaction","buildCreateMigration","commitTransaction","count","countGlobalVersions","countVersions","create","createBlocksToJsonMigrator","createGlobal","createGlobalVersion","createSchemaGenerator","createVersion","deleteMany","deleteOne","deleteVersions","destroy","find","findGlobal","findGlobalVersions","findOne","findVersions","migrate","migrateDown","migrateFresh","migrateRefresh","migrateReset","migrateStatus","operatorMap","queryDrafts","rollbackTransaction","updateGlobal","updateGlobalVersion","updateJobs","updateMany","updateOne","updateVersion","columnToCodeConverter","convertPathToJSONTraversal","countDistinct","createJSONQuery","defaultDrizzleSnapshot","deleteWhere","dropDatabase","init","insert","requireDrizzleKit","like","notLike","createDatabaseAdapter","defaultBeginTransaction","findMigrationDir","fileURLToPath","connect","execute","D1HttpBinding","filename","url","sqliteD1Adapter","args","binding","http","Error","readReplicas","sqliteIDType","idType","payloadIDType","allowIDOnCreate","adapter","payload","migrationDir","resolveInitializing","rejectInitializing","initializing","Promise","res","rej","operators","contains","not_like","executeMethod","sanitizeStatements","sqlExecute","statements","map","statement","replaceAll","join","name","afterSchemaInit","autoIncrement","beforeSchemaInit","blocksAsJSON","httpConfig","client","undefined","drizzle","features","json","fieldConstraints","foreignKeys","Set","generateSchema","corePackageSuffix","defaultOutputFile","generateSchemaOutputFile","tableImport","limitedBoundParameters","localesSuffix","logger","prodMigrations","push","rawRelations","rawTables","relations","relationshipsSuffix","schema","schemaName","sessions","tableNameMap","Map","tables","transactionOptions","versionsSuffix","createMigration","defaultIDType","indexes","packageName","upsert","blocksToJsonMigrator","sql"],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -16,10 +16,32 @@ type SQLiteSchemaHookArgs = {
16
16
  schema: SQLiteSchema;
17
17
  };
18
18
  export type SQLiteSchemaHook = (args: SQLiteSchemaHookArgs) => Promise<SQLiteSchema> | SQLiteSchema;
19
- export type Args = {
19
+ /**
20
+ * Connect to D1 using the Cloudflare REST API (for example from Vercel or Node).
21
+ * Requires a Cloudflare API token with D1 permissions.
22
+ */
23
+ export type HttpConfig = {
24
+ /** Cloudflare account ID */
25
+ accountId: string;
26
+ /** Cloudflare API token with D1 access */
27
+ apiToken: string;
28
+ /** Override the default `https://api.cloudflare.com/client/v4` base URL (for testing) */
29
+ baseUrl?: string;
30
+ /** D1 database ID */
31
+ databaseId: string;
32
+ };
33
+ type WorkerBindingArgs = {
20
34
  binding: AnyD1Database;
35
+ http?: never;
36
+ };
37
+ type RemoteHttpArgs = {
38
+ binding?: never;
39
+ http: HttpConfig;
40
+ };
41
+ export type Args = {
21
42
  /**
22
43
  * Experimental. Enables read replicas support with the `first-primary` strategy.
44
+ * Not supported with `http` — use a Cloudflare Workers deployment with a D1 binding (not available over the HTTP API).
23
45
  *
24
46
  * @experimental
25
47
  * @example
@@ -27,7 +49,7 @@ export type Args = {
27
49
  * ```readReplicas: 'first-primary'```
28
50
  */
29
51
  readReplicas?: 'first-primary';
30
- } & BaseSQLiteArgs;
52
+ } & BaseSQLiteArgs & (RemoteHttpArgs | WorkerBindingArgs);
31
53
  export type GenericColumns = {
32
54
  [x: string]: AnySQLiteColumn;
33
55
  };
@@ -72,11 +94,15 @@ type Drizzle = {
72
94
  $client: AnyD1Database;
73
95
  } & DrizzleD1Database<Record<string, any>>;
74
96
  export type SQLiteD1Adapter = {
75
- binding: Args['binding'];
97
+ /** After `connect`, the D1 client in use (Workers binding, session wrapper, or HTTP shim). */
98
+ binding?: AnyD1Database;
76
99
  client: AnyD1Database;
77
100
  drizzle: Drizzle;
101
+ /** When using HTTP mode, config used to construct the remote D1 client */
102
+ httpConfig?: HttpConfig;
78
103
  /**
79
104
  * Experimental. Enables read replicas support with the `first-primary` strategy.
105
+ * Requires a Cloudflare Workers D1 binding — not available with `http`.
80
106
  *
81
107
  * @example
82
108
  *
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { ResultSet } from '@libsql/client'\nimport type { BuildQueryJoinAliases, DrizzleAdapter, extendDrizzleTable } from '@payloadcms/drizzle'\nimport type { BaseSQLiteAdapter, BaseSQLiteArgs } from '@payloadcms/drizzle/sqlite'\nimport type { DrizzleConfig, Relation, Relations, SQL } from 'drizzle-orm'\nimport type { AnyD1Database, DrizzleD1Database } from 'drizzle-orm/d1'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type {\n AnySQLiteColumn,\n SQLiteInsertOnConflictDoUpdateConfig,\n SQLiteTableWithColumns,\n SQLiteTransactionConfig,\n} from 'drizzle-orm/sqlite-core'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { Payload, PayloadRequest } from 'payload'\n\ntype SQLiteSchema = {\n relations: Record<string, GenericRelation>\n tables: Record<string, SQLiteTableWithColumns<any>>\n}\n\ntype SQLiteSchemaHookArgs = {\n extendTable: typeof extendDrizzleTable\n schema: SQLiteSchema\n}\n\nexport type SQLiteSchemaHook = (args: SQLiteSchemaHookArgs) => Promise<SQLiteSchema> | SQLiteSchema\n\nexport type Args = {\n binding: AnyD1Database\n /**\n * Experimental. Enables read replicas support with the `first-primary` strategy.\n *\n * @experimental\n * @example\n *\n * ```readReplicas: 'first-primary'```\n */\n readReplicas?: 'first-primary'\n} & BaseSQLiteArgs\n\nexport type GenericColumns = {\n [x: string]: AnySQLiteColumn\n}\n\nexport type GenericTable = SQLiteTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type CountDistinct = (args: {\n db: LibSQLDatabase\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: LibSQLDatabase\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: SQLiteD1Adapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: LibSQLDatabase\n drizzle?: LibSQLDatabase\n raw?: string\n sql?: SQL<unknown>\n}) => SQLiteRaw<Promise<T>> | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: LibSQLDatabase\n onConflictDoUpdate?: SQLiteInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\n// Explicitly omit drizzle property for complete override in SQLiteAdapter, required in ts 5.5\ntype SQLiteDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'idType'\n | 'insert'\n | 'operators'\n | 'relations'\n>\n\nexport interface GeneratedDatabaseSchema {\n schemaUntyped: Record<string, unknown>\n}\n\ntype ResolveSchemaType<T> = 'schema' extends keyof T\n ? T['schema']\n : GeneratedDatabaseSchema['schemaUntyped']\n\ntype Drizzle = { $client: AnyD1Database } & DrizzleD1Database<Record<string, any>>\n\nexport type SQLiteD1Adapter = {\n binding: Args['binding']\n client: AnyD1Database\n drizzle: Drizzle\n /**\n * Experimental. Enables read replicas support with the `first-primary` strategy.\n *\n * @example\n *\n * ```readReplicas: 'first-primary'```\n */\n readReplicas?: 'first-primary'\n} & BaseSQLiteAdapter &\n SQLiteDrizzleAdapter\n\nexport type IDType = 'integer' | 'numeric' | 'text'\n\nexport type MigrateUpArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\nexport type MigrateDownArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n\ndeclare module 'payload' {\n export interface DatabaseAdapter\n extends Omit<Args, 'idType' | 'logger' | 'migrationDir' | 'pool'>,\n DrizzleAdapter {\n beginTransaction: (options?: SQLiteTransactionConfig) => Promise<null | number | string>\n drizzle: Drizzle\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: Args['idType']\n initializing: Promise<void>\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n rejectInitializing: () => void\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schema: Record<string, GenericRelation | GenericTable>\n tableNameMap: Map<string, string>\n transactionOptions: SQLiteTransactionConfig\n versionsSuffix?: string\n }\n}\n"],"names":[],"mappings":"AA0JA,WA8BC"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { ResultSet } from '@libsql/client'\nimport type { BuildQueryJoinAliases, DrizzleAdapter, extendDrizzleTable } from '@payloadcms/drizzle'\nimport type { BaseSQLiteAdapter, BaseSQLiteArgs } from '@payloadcms/drizzle/sqlite'\nimport type { DrizzleConfig, Relation, Relations, SQL } from 'drizzle-orm'\nimport type { AnyD1Database, DrizzleD1Database } from 'drizzle-orm/d1'\nimport type { LibSQLDatabase } from 'drizzle-orm/libsql'\nimport type {\n AnySQLiteColumn,\n SQLiteInsertOnConflictDoUpdateConfig,\n SQLiteTableWithColumns,\n SQLiteTransactionConfig,\n} from 'drizzle-orm/sqlite-core'\nimport type { SQLiteRaw } from 'drizzle-orm/sqlite-core/query-builders/raw'\nimport type { Payload, PayloadRequest } from 'payload'\n\ntype SQLiteSchema = {\n relations: Record<string, GenericRelation>\n tables: Record<string, SQLiteTableWithColumns<any>>\n}\n\ntype SQLiteSchemaHookArgs = {\n extendTable: typeof extendDrizzleTable\n schema: SQLiteSchema\n}\n\nexport type SQLiteSchemaHook = (args: SQLiteSchemaHookArgs) => Promise<SQLiteSchema> | SQLiteSchema\n\n/**\n * Connect to D1 using the Cloudflare REST API (for example from Vercel or Node).\n * Requires a Cloudflare API token with D1 permissions.\n */\nexport type HttpConfig = {\n /** Cloudflare account ID */\n accountId: string\n /** Cloudflare API token with D1 access */\n apiToken: string\n /** Override the default `https://api.cloudflare.com/client/v4` base URL (for testing) */\n baseUrl?: string\n /** D1 database ID */\n databaseId: string\n}\n\ntype WorkerBindingArgs = {\n binding: AnyD1Database\n http?: never\n}\n\ntype RemoteHttpArgs = {\n binding?: never\n http: HttpConfig\n}\n\nexport type Args = {\n /**\n * Experimental. Enables read replicas support with the `first-primary` strategy.\n * Not supported with `http` — use a Cloudflare Workers deployment with a D1 binding (not available over the HTTP API).\n *\n * @experimental\n * @example\n *\n * ```readReplicas: 'first-primary'```\n */\n readReplicas?: 'first-primary'\n} & BaseSQLiteArgs &\n (RemoteHttpArgs | WorkerBindingArgs)\n\nexport type GenericColumns = {\n [x: string]: AnySQLiteColumn\n}\n\nexport type GenericTable = SQLiteTableWithColumns<{\n columns: GenericColumns\n dialect: string\n name: string\n schema: string\n}>\n\nexport type GenericRelation = Relations<string, Record<string, Relation<string>>>\n\nexport type CountDistinct = (args: {\n db: LibSQLDatabase\n joins: BuildQueryJoinAliases\n tableName: string\n where: SQL\n}) => Promise<number>\n\nexport type DeleteWhere = (args: {\n db: LibSQLDatabase\n tableName: string\n where: SQL\n}) => Promise<void>\n\nexport type DropDatabase = (args: { adapter: SQLiteD1Adapter }) => Promise<void>\n\nexport type Execute<T> = (args: {\n db?: LibSQLDatabase\n drizzle?: LibSQLDatabase\n raw?: string\n sql?: SQL<unknown>\n}) => SQLiteRaw<Promise<T>> | SQLiteRaw<ResultSet>\n\nexport type Insert = (args: {\n db: LibSQLDatabase\n onConflictDoUpdate?: SQLiteInsertOnConflictDoUpdateConfig<any>\n tableName: string\n values: Record<string, unknown> | Record<string, unknown>[]\n}) => Promise<Record<string, unknown>[]>\n\n// Explicitly omit drizzle property for complete override in SQLiteAdapter, required in ts 5.5\ntype SQLiteDrizzleAdapter = Omit<\n DrizzleAdapter,\n | 'countDistinct'\n | 'deleteWhere'\n | 'drizzle'\n | 'dropDatabase'\n | 'execute'\n | 'idType'\n | 'insert'\n | 'operators'\n | 'relations'\n>\n\nexport interface GeneratedDatabaseSchema {\n schemaUntyped: Record<string, unknown>\n}\n\ntype ResolveSchemaType<T> = 'schema' extends keyof T\n ? T['schema']\n : GeneratedDatabaseSchema['schemaUntyped']\n\ntype Drizzle = { $client: AnyD1Database } & DrizzleD1Database<Record<string, any>>\n\nexport type SQLiteD1Adapter = {\n /** After `connect`, the D1 client in use (Workers binding, session wrapper, or HTTP shim). */\n binding?: AnyD1Database\n client: AnyD1Database\n drizzle: Drizzle\n /** When using HTTP mode, config used to construct the remote D1 client */\n httpConfig?: HttpConfig\n /**\n * Experimental. Enables read replicas support with the `first-primary` strategy.\n * Requires a Cloudflare Workers D1 binding — not available with `http`.\n *\n * @example\n *\n * ```readReplicas: 'first-primary'```\n */\n readReplicas?: 'first-primary'\n} & BaseSQLiteAdapter &\n SQLiteDrizzleAdapter\n\nexport type IDType = 'integer' | 'numeric' | 'text'\n\nexport type MigrateUpArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateUpArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateUpArgs } from '@payloadcms/db-sqlite'\n *\n * export async function up({ db, payload, req }: MigrateUpArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\nexport type MigrateDownArgs = {\n /**\n * The SQLite Drizzle instance that you can use to execute SQL directly within the current transaction.\n * @example\n * ```ts\n * import { type MigrateDownArgs, sql } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const { rows: posts } = await db.run(sql`SELECT * FROM posts`)\n * }\n * ```\n */\n db: Drizzle\n /**\n * The Payload instance that you can use to execute Local API methods\n * To use the current transaction you must pass `req` to arguments\n * @example\n * ```ts\n * import { type MigrateDownArgs } from '@payloadcms/db-sqlite'\n *\n * export async function down({ db, payload, req }: MigrateDownArgs): Promise<void> {\n * const posts = await payload.find({ collection: 'posts', req })\n * }\n * ```\n */\n payload: Payload\n /**\n * The `PayloadRequest` object that contains the current transaction\n */\n req: PayloadRequest\n}\n\ndeclare module 'payload' {\n export interface DatabaseAdapter\n extends Omit<Args, 'idType' | 'logger' | 'migrationDir' | 'pool'>,\n DrizzleAdapter {\n beginTransaction: (options?: SQLiteTransactionConfig) => Promise<null | number | string>\n drizzle: Drizzle\n /**\n * An object keyed on each table, with a key value pair where the constraint name is the key, followed by the dot-notation field name\n * Used for returning properly formed errors from unique fields\n */\n fieldConstraints: Record<string, Record<string, string>>\n idType: Args['idType']\n initializing: Promise<void>\n localesSuffix?: string\n logger: DrizzleConfig['logger']\n prodMigrations?: {\n down: (args: MigrateDownArgs) => Promise<void>\n name: string\n up: (args: MigrateUpArgs) => Promise<void>\n }[]\n push: boolean\n rejectInitializing: () => void\n relationshipsSuffix?: string\n resolveInitializing: () => void\n schema: Record<string, GenericRelation | GenericTable>\n tableNameMap: Map<string, string>\n transactionOptions: SQLiteTransactionConfig\n versionsSuffix?: string\n }\n}\n"],"names":[],"mappings":"AAwLA,WA8BC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/db-d1-sqlite",
3
- "version": "3.83.0-internal.06ac84e",
3
+ "version": "3.83.0-internal.ddc1147",
4
4
  "description": "The officially supported D1 SQLite database adapter for Payload",
5
5
  "homepage": "https://payloadcms.com",
6
6
  "repository": {
@@ -64,21 +64,20 @@
64
64
  "dependencies": {
65
65
  "console-table-printer": "2.12.1",
66
66
  "drizzle-kit": "0.31.7",
67
- "drizzle-orm": "0.44.7",
67
+ "drizzle-orm": "0.45.2",
68
68
  "prompts": "2.4.2",
69
69
  "to-snake-case": "1.0.0",
70
- "uuid": "9.0.0",
71
- "@payloadcms/drizzle": "3.83.0-internal.06ac84e"
70
+ "uuid": "11.1.0",
71
+ "@payloadcms/drizzle": "3.83.0-internal.ddc1147"
72
72
  },
73
73
  "devDependencies": {
74
- "@types/pg": "8.10.2",
74
+ "@types/pg": "8.20.0",
75
75
  "@types/to-snake-case": "1.0.0",
76
- "@types/uuid": "10.0.0",
77
76
  "@payloadcms/eslint-config": "3.28.0",
78
- "payload": "3.83.0-internal.06ac84e"
77
+ "payload": "3.83.0-internal.ddc1147"
79
78
  },
80
79
  "peerDependencies": {
81
- "payload": "3.83.0-internal.06ac84e"
80
+ "payload": "3.83.0-internal.ddc1147"
82
81
  },
83
82
  "scripts": {
84
83
  "build": "pnpm build:swc && pnpm build:types",