alchemy 2.0.0-beta.20 → 2.0.0-beta.22

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 (136) hide show
  1. package/bin/alchemy.js +1 -1
  2. package/bin/alchemy.js.map +1 -1
  3. package/bin/commands/bootstrap.ts +59 -57
  4. package/bin/commands/deploy.ts +8 -2
  5. package/bin/commands/login.ts +56 -49
  6. package/bin/commands/logs.ts +92 -90
  7. package/bin/commands/profile.ts +74 -70
  8. package/bin/commands/state.ts +160 -135
  9. package/bin/commands/tail.ts +94 -92
  10. package/lib/AWS/CloudFront/CachePolicy.d.ts.map +1 -1
  11. package/lib/AWS/CloudFront/CachePolicy.js.map +1 -1
  12. package/lib/AWS/CloudFront/KeyGroup.d.ts.map +1 -1
  13. package/lib/AWS/CloudFront/KeyGroup.js.map +1 -1
  14. package/lib/AWS/CloudFront/OriginRequestPolicy.d.ts.map +1 -1
  15. package/lib/AWS/CloudFront/OriginRequestPolicy.js +3 -1
  16. package/lib/AWS/CloudFront/OriginRequestPolicy.js.map +1 -1
  17. package/lib/AWS/CloudFront/PublicKey.d.ts.map +1 -1
  18. package/lib/AWS/CloudFront/PublicKey.js.map +1 -1
  19. package/lib/AWS/ECS/CapacityProvider.d.ts.map +1 -1
  20. package/lib/AWS/ECS/CapacityProvider.js +5 -4
  21. package/lib/AWS/ECS/CapacityProvider.js.map +1 -1
  22. package/lib/Axiom/Annotation.d.ts +3 -3
  23. package/lib/Axiom/Annotation.d.ts.map +1 -1
  24. package/lib/Axiom/Annotation.js +5 -5
  25. package/lib/Axiom/Annotation.js.map +1 -1
  26. package/lib/Axiom/ApiToken.d.ts +3 -3
  27. package/lib/Axiom/ApiToken.d.ts.map +1 -1
  28. package/lib/Axiom/ApiToken.js +4 -4
  29. package/lib/Axiom/ApiToken.js.map +1 -1
  30. package/lib/Axiom/AuthProvider.js.map +1 -1
  31. package/lib/Axiom/Credentials.d.ts +1 -1
  32. package/lib/Axiom/Credentials.d.ts.map +1 -1
  33. package/lib/Axiom/Credentials.js +2 -3
  34. package/lib/Axiom/Credentials.js.map +1 -1
  35. package/lib/Axiom/Dashboard.d.ts +4 -4
  36. package/lib/Axiom/Dashboard.d.ts.map +1 -1
  37. package/lib/Axiom/Dashboard.js +5 -5
  38. package/lib/Axiom/Dashboard.js.map +1 -1
  39. package/lib/Axiom/Dataset.d.ts.map +1 -1
  40. package/lib/Axiom/Dataset.js +5 -5
  41. package/lib/Axiom/Dataset.js.map +1 -1
  42. package/lib/Axiom/Monitor.d.ts +3 -3
  43. package/lib/Axiom/Monitor.d.ts.map +1 -1
  44. package/lib/Axiom/Monitor.js +6 -6
  45. package/lib/Axiom/Monitor.js.map +1 -1
  46. package/lib/Axiom/Notifier.d.ts +3 -3
  47. package/lib/Axiom/Notifier.d.ts.map +1 -1
  48. package/lib/Axiom/Notifier.js +9 -6
  49. package/lib/Axiom/Notifier.js.map +1 -1
  50. package/lib/Axiom/View.d.ts +3 -3
  51. package/lib/Axiom/View.d.ts.map +1 -1
  52. package/lib/Axiom/View.js +5 -5
  53. package/lib/Axiom/View.js.map +1 -1
  54. package/lib/Axiom/VirtualField.d.ts +3 -3
  55. package/lib/Axiom/VirtualField.d.ts.map +1 -1
  56. package/lib/Axiom/VirtualField.js +5 -5
  57. package/lib/Axiom/VirtualField.js.map +1 -1
  58. package/lib/Bundle/PurePlugin.d.ts.map +1 -1
  59. package/lib/Bundle/PurePlugin.js +4 -4
  60. package/lib/Bundle/PurePlugin.js.map +1 -1
  61. package/lib/Cloudflare/ApiToken/AccountApiToken.d.ts.map +1 -1
  62. package/lib/Cloudflare/ApiToken/AccountApiToken.js.map +1 -1
  63. package/lib/Cloudflare/ApiToken/Common.d.ts.map +1 -1
  64. package/lib/Cloudflare/ApiToken/Common.js.map +1 -1
  65. package/lib/Cloudflare/ApiToken/UserApiToken.d.ts.map +1 -1
  66. package/lib/Cloudflare/ApiToken/UserApiToken.js.map +1 -1
  67. package/lib/Cloudflare/D1/D1Clone.d.ts +13 -0
  68. package/lib/Cloudflare/D1/D1Clone.d.ts.map +1 -0
  69. package/lib/Cloudflare/D1/D1Clone.js +31 -0
  70. package/lib/Cloudflare/D1/D1Clone.js.map +1 -0
  71. package/lib/Cloudflare/D1/D1Database.d.ts +150 -5
  72. package/lib/Cloudflare/D1/D1Database.d.ts.map +1 -1
  73. package/lib/Cloudflare/D1/D1Database.js +253 -0
  74. package/lib/Cloudflare/D1/D1Database.js.map +1 -1
  75. package/lib/Cloudflare/D1/D1Export.d.ts +24 -0
  76. package/lib/Cloudflare/D1/D1Export.d.ts.map +1 -0
  77. package/lib/Cloudflare/D1/D1Export.js +34 -0
  78. package/lib/Cloudflare/D1/D1Export.js.map +1 -0
  79. package/lib/Cloudflare/D1/D1Import.d.ts +21 -0
  80. package/lib/Cloudflare/D1/D1Import.d.ts.map +1 -0
  81. package/lib/Cloudflare/D1/D1Import.js +87 -0
  82. package/lib/Cloudflare/D1/D1Import.js.map +1 -0
  83. package/lib/Cloudflare/D1/D1Migrations.d.ts +16 -0
  84. package/lib/Cloudflare/D1/D1Migrations.d.ts.map +1 -0
  85. package/lib/Cloudflare/D1/D1Migrations.js +110 -0
  86. package/lib/Cloudflare/D1/D1Migrations.js.map +1 -0
  87. package/lib/Cloudflare/D1/D1SqlFile.d.ts +20 -0
  88. package/lib/Cloudflare/D1/D1SqlFile.d.ts.map +1 -0
  89. package/lib/Cloudflare/D1/D1SqlFile.js +46 -0
  90. package/lib/Cloudflare/D1/D1SqlFile.js.map +1 -0
  91. package/lib/Cloudflare/Fetcher.d.ts.map +1 -1
  92. package/lib/Cloudflare/Fetcher.js +3 -1
  93. package/lib/Cloudflare/Fetcher.js.map +1 -1
  94. package/lib/Cloudflare/Providers.d.ts +1 -1
  95. package/lib/Cloudflare/Providers.d.ts.map +1 -1
  96. package/lib/Cloudflare/Workers/Worker.d.ts.map +1 -1
  97. package/lib/Cloudflare/Workers/Worker.js +12 -3
  98. package/lib/Cloudflare/Workers/Worker.js.map +1 -1
  99. package/lib/Output.d.ts.map +1 -1
  100. package/lib/Output.js +1 -1
  101. package/lib/Output.js.map +1 -1
  102. package/lib/Telemetry/Layer.d.ts.map +1 -1
  103. package/lib/Telemetry/Layer.js.map +1 -1
  104. package/lib/Telemetry/Metrics.d.ts.map +1 -1
  105. package/lib/Telemetry/Metrics.js.map +1 -1
  106. package/package.json +5 -5
  107. package/src/AWS/CloudFront/CachePolicy.ts +5 -2
  108. package/src/AWS/CloudFront/KeyGroup.ts +2 -1
  109. package/src/AWS/CloudFront/OriginRequestPolicy.ts +8 -2
  110. package/src/AWS/CloudFront/PublicKey.ts +2 -1
  111. package/src/AWS/ECS/CapacityProvider.ts +12 -9
  112. package/src/Axiom/Annotation.ts +7 -7
  113. package/src/Axiom/ApiToken.ts +6 -6
  114. package/src/Axiom/AuthProvider.ts +2 -7
  115. package/src/Axiom/Credentials.ts +2 -6
  116. package/src/Axiom/Dashboard.ts +10 -13
  117. package/src/Axiom/Dataset.ts +8 -12
  118. package/src/Axiom/Monitor.ts +8 -8
  119. package/src/Axiom/Notifier.ts +11 -8
  120. package/src/Axiom/View.ts +7 -7
  121. package/src/Axiom/VirtualField.ts +7 -7
  122. package/src/Bundle/PurePlugin.ts +6 -5
  123. package/src/Cloudflare/ApiToken/AccountApiToken.ts +1 -3
  124. package/src/Cloudflare/ApiToken/Common.ts +1 -3
  125. package/src/Cloudflare/ApiToken/UserApiToken.ts +1 -3
  126. package/src/Cloudflare/D1/D1Clone.ts +42 -0
  127. package/src/Cloudflare/D1/D1Database.ts +386 -3
  128. package/src/Cloudflare/D1/D1Export.ts +70 -0
  129. package/src/Cloudflare/D1/D1Import.ts +156 -0
  130. package/src/Cloudflare/D1/D1Migrations.ts +229 -0
  131. package/src/Cloudflare/D1/D1SqlFile.ts +57 -0
  132. package/src/Cloudflare/Fetcher.ts +3 -1
  133. package/src/Cloudflare/Workers/Worker.ts +40 -27
  134. package/src/Output.ts +1 -2
  135. package/src/Telemetry/Layer.ts +9 -10
  136. package/src/Telemetry/Metrics.ts +1 -6
@@ -5,6 +5,11 @@ import { createPhysicalName } from "../../PhysicalName.js";
5
5
  import * as Provider from "../../Provider.js";
6
6
  import { Resource } from "../../Resource.js";
7
7
  import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
8
+ import { cloneD1Database } from "./D1Clone.js";
9
+ import { importD1Database } from "./D1Import.js";
10
+ import { applyMigrations } from "./D1Migrations.js";
11
+ import { listSqlFiles, readSqlFile } from "./D1SqlFile.js";
12
+ const DEFAULT_MIGRATIONS_TABLE = "d1_migrations";
8
13
  /**
9
14
  * A Cloudflare D1 serverless SQL database built on SQLite.
10
15
  *
@@ -18,12 +23,95 @@ import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
18
23
  * ```
19
24
  *
20
25
  * @example Database with location hint
26
+ * The primary copy of the data is stored in the chosen region; reads can be
27
+ * served closer to users when read replication is enabled.
21
28
  * ```typescript
22
29
  * const db = yield* Cloudflare.D1Database("my-db", {
23
30
  * primaryLocationHint: "wnam",
24
31
  * });
25
32
  * ```
26
33
  *
34
+ * @example Database with read replication
35
+ * Read replication is the only mutable property after creation — toggling it
36
+ * triggers an update rather than a replacement.
37
+ * ```typescript
38
+ * const db = yield* Cloudflare.D1Database("my-db", {
39
+ * readReplication: { mode: "auto" },
40
+ * });
41
+ * ```
42
+ *
43
+ * @example Database in a specific jurisdiction
44
+ * ```typescript
45
+ * const db = yield* Cloudflare.D1Database("my-db", {
46
+ * jurisdiction: "eu",
47
+ * });
48
+ * ```
49
+ *
50
+ * @section Migrations
51
+ * Point `migrationsDir` at a folder of `.sql` files. Files are sorted by
52
+ * numeric prefix (e.g. `0001_`, `0002_`) and applied in order. Already-applied
53
+ * migrations are skipped on subsequent deploys; new files are detected
54
+ * automatically and applied as part of the next update.
55
+ *
56
+ * Migration tracking uses the wrangler-compatible
57
+ * `(id TEXT PRIMARY KEY, name TEXT, applied_at TEXT)` schema. The resource
58
+ * also detects and upgrades a legacy 2-column tracking table in place if one
59
+ * already exists.
60
+ *
61
+ * @example Apply migrations from a directory
62
+ * ```typescript
63
+ * const db = yield* Cloudflare.D1Database("my-db", {
64
+ * migrationsDir: "./migrations",
65
+ * });
66
+ * ```
67
+ *
68
+ * @example Custom migrations table (e.g. for Drizzle)
69
+ * ```typescript
70
+ * const db = yield* Cloudflare.D1Database("my-db", {
71
+ * migrationsDir: "./migrations",
72
+ * migrationsTable: "drizzle_migrations",
73
+ * });
74
+ * ```
75
+ *
76
+ * @section Importing SQL
77
+ * Use `importFiles` to seed the database with raw `.sql` files via Cloudflare's
78
+ * D1 import API. Each file is hashed; only files whose contents change are
79
+ * re-imported on subsequent deploys.
80
+ *
81
+ * @example Seed a database with SQL files
82
+ * ```typescript
83
+ * const db = yield* Cloudflare.D1Database("my-db", {
84
+ * importFiles: ["./seed/users.sql", "./seed/posts.sql"],
85
+ * });
86
+ * ```
87
+ *
88
+ * @section Cloning a Database
89
+ * `clone` performs a full export → import from a source database during
90
+ * creation. It accepts a `D1Database` resource, a `{ databaseId }`, or a
91
+ * `{ name }` to look up by name.
92
+ *
93
+ * @example Clone by passing the source resource directly
94
+ * ```typescript
95
+ * const source = yield* Cloudflare.D1Database("source-db");
96
+ * const cloned = yield* Cloudflare.D1Database("cloned-db", {
97
+ * clone: source,
98
+ * });
99
+ * ```
100
+ *
101
+ * @example Clone by databaseId
102
+ * ```typescript
103
+ * const cloned = yield* Cloudflare.D1Database("cloned-db", {
104
+ * clone: { databaseId: "abcdef12-3456-7890-abcd-ef1234567890" },
105
+ * });
106
+ * ```
107
+ *
108
+ * @example Clone by name
109
+ * ```typescript
110
+ * const cloned = yield* Cloudflare.D1Database("cloned-db", {
111
+ * clone: { name: "source-db" },
112
+ * });
113
+ * ```
114
+ *
27
115
  * @section Binding to a Worker
28
116
  * @example Using D1 inside a Worker
29
117
  * ```typescript
@@ -39,6 +127,8 @@ import { CloudflareEnvironment } from "../CloudflareEnvironment.js";
39
127
  * .bind(newId, name)
40
128
  * .run();
41
129
  * ```
130
+ *
131
+ * @see https://developers.cloudflare.com/d1/
42
132
  */
43
133
  export const D1Database = Resource("Cloudflare.D1Database");
44
134
  export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(function* () {
@@ -48,6 +138,8 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
48
138
  const patchDb = yield* d1.patchDatabase;
49
139
  const deleteDb = yield* d1.deleteDatabase;
50
140
  const listDbs = yield* d1.listDatabases;
141
+ // rootDir for resolving relative `importFiles` paths
142
+ const rootDir = process.cwd();
51
143
  const createDatabaseName = (id, name) => Effect.gen(function* () {
52
144
  return name ?? (yield* createPhysicalName({ id }));
53
145
  });
@@ -77,6 +169,31 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
77
169
  if (oldReplicationMode !== newReplicationMode) {
78
170
  return { action: "update" };
79
171
  }
172
+ // Detect migration/import file drift.
173
+ if (news.migrationsDir) {
174
+ const newHashes = yield* hashMigrations(news.migrationsDir);
175
+ const oldHashes = output?.migrationsHashes ?? {};
176
+ if (!recordsEqual(newHashes, oldHashes)) {
177
+ return { action: "update" };
178
+ }
179
+ if ((news.migrationsTable ?? DEFAULT_MIGRATIONS_TABLE) !==
180
+ (output?.migrationsTable ?? DEFAULT_MIGRATIONS_TABLE)) {
181
+ return { action: "update" };
182
+ }
183
+ }
184
+ else if (output?.migrationsHashes &&
185
+ Object.keys(output.migrationsHashes).length > 0) {
186
+ // migrationsDir was removed but state still tracks migrations: nothing
187
+ // to do remotely (we never un-apply), but no diff needed either.
188
+ }
189
+ if (news.importFiles?.length) {
190
+ const newHashes = yield* hashImports(news.importFiles, rootDir);
191
+ const oldHashes = output?.importHashes ?? {};
192
+ if (!recordsEqual(newHashes, oldHashes)) {
193
+ return { action: "update" };
194
+ }
195
+ }
196
+ return undefined;
80
197
  }),
81
198
  read: Effect.fn(function* ({ id, output, olds }) {
82
199
  if (output?.databaseId) {
@@ -89,6 +206,10 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
89
206
  jurisdiction: output.jurisdiction,
90
207
  readReplication: db.readReplication ?? undefined,
91
208
  accountId: output.accountId,
209
+ migrationsDir: output.migrationsDir,
210
+ migrationsTable: output.migrationsTable,
211
+ migrationsHashes: output.migrationsHashes,
212
+ importHashes: output.importHashes,
92
213
  })), Effect.catchTag("DatabaseNotFound", () => Effect.succeed(undefined)));
93
214
  }
94
215
  const name = yield* createDatabaseName(id, olds?.name);
@@ -101,6 +222,10 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
101
222
  jurisdiction: (olds?.jurisdiction ?? "default"),
102
223
  readReplication: olds?.readReplication,
103
224
  accountId,
225
+ migrationsDir: olds?.migrationsDir,
226
+ migrationsTable: olds?.migrationsTable,
227
+ migrationsHashes: {},
228
+ importHashes: {},
104
229
  };
105
230
  }
106
231
  return undefined;
@@ -129,12 +254,31 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
129
254
  readReplication: news.readReplication,
130
255
  });
131
256
  }
257
+ if (news.clone) {
258
+ const sourceId = yield* resolveCloneSource(news.clone, accountId, listDbs);
259
+ yield* cloneD1Database({
260
+ accountId,
261
+ sourceDatabaseId: sourceId,
262
+ targetDatabaseId: databaseId,
263
+ });
264
+ }
265
+ const migrationsTable = news.migrationsTable ?? DEFAULT_MIGRATIONS_TABLE;
266
+ const migrationsHashes = news.migrationsDir
267
+ ? yield* runMigrations(accountId, databaseId, news.migrationsDir, migrationsTable)
268
+ : {};
269
+ const importHashes = news.importFiles?.length
270
+ ? yield* runImports(accountId, databaseId, news.importFiles, rootDir, {})
271
+ : {};
132
272
  return {
133
273
  databaseId,
134
274
  databaseName: db.name ?? name,
135
275
  jurisdiction,
136
276
  readReplication: news.readReplication,
137
277
  accountId,
278
+ migrationsDir: news.migrationsDir,
279
+ migrationsTable: news.migrationsDir ? migrationsTable : undefined,
280
+ migrationsHashes,
281
+ importHashes,
138
282
  };
139
283
  }),
140
284
  update: Effect.fn(function* ({ news = {}, output }) {
@@ -144,12 +288,25 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
144
288
  databaseId: output.databaseId,
145
289
  readReplication: { mode: replicationMode },
146
290
  });
291
+ const migrationsTable = news.migrationsTable ??
292
+ output.migrationsTable ??
293
+ DEFAULT_MIGRATIONS_TABLE;
294
+ const migrationsHashes = news.migrationsDir
295
+ ? yield* runMigrations(output.accountId, output.databaseId, news.migrationsDir, migrationsTable)
296
+ : output.migrationsHashes;
297
+ const importHashes = news.importFiles?.length
298
+ ? yield* runImports(output.accountId, output.databaseId, news.importFiles, rootDir, output.importHashes ?? {})
299
+ : {};
147
300
  return {
148
301
  databaseId: updated.uuid ?? output.databaseId,
149
302
  databaseName: updated.name ?? output.databaseName,
150
303
  jurisdiction: output.jurisdiction,
151
304
  readReplication: news.readReplication,
152
305
  accountId: output.accountId,
306
+ migrationsDir: news.migrationsDir,
307
+ migrationsTable: news.migrationsDir ? migrationsTable : undefined,
308
+ migrationsHashes,
309
+ importHashes,
153
310
  };
154
311
  }),
155
312
  delete: Effect.fn(function* ({ output }) {
@@ -160,4 +317,100 @@ export const DatabaseProvider = () => Provider.effect(D1Database, Effect.gen(fun
160
317
  }),
161
318
  };
162
319
  }));
320
+ /**
321
+ * Resolve a clone source spec into a concrete database UUID. Looks up by
322
+ * name through `listDatabases` when only a name is provided.
323
+ */
324
+ const resolveCloneSource = (source, accountId, listDbs) => Effect.gen(function* () {
325
+ if ("databaseId" in source && source.databaseId) {
326
+ // At lifecycle time, Output<string> attributes have resolved to strings.
327
+ return source.databaseId;
328
+ }
329
+ if ("name" in source && source.name) {
330
+ const name = source.name;
331
+ const dbs = yield* listDbs({ accountId, name });
332
+ const match = dbs.result.find((db) => db.name === name);
333
+ if (!match?.uuid) {
334
+ return yield* Effect.die(`Source database "${name}" not found for cloning`);
335
+ }
336
+ return match.uuid;
337
+ }
338
+ return yield* Effect.die("Invalid clone source: must provide databaseId or name");
339
+ });
340
+ /**
341
+ * Read all migration files from `migrationsDir`, run pending migrations,
342
+ * and return the per-file content hashes for state tracking.
343
+ */
344
+ const runMigrations = (accountId, databaseId, migrationsDir, migrationsTable) => Effect.gen(function* () {
345
+ const files = yield* listSqlFiles(migrationsDir);
346
+ if (files.length > 0) {
347
+ yield* applyMigrations({
348
+ accountId,
349
+ databaseId,
350
+ migrationsTable,
351
+ migrationsFiles: files,
352
+ });
353
+ }
354
+ const hashes = {};
355
+ for (const file of files)
356
+ hashes[file.id] = file.hash;
357
+ return hashes;
358
+ });
359
+ /**
360
+ * Read each `importFiles` entry and run it through the D1 import flow,
361
+ * skipping files whose hash matches the previously-imported hash.
362
+ */
363
+ const runImports = (accountId, databaseId, importFiles, rootDir, previous) => Effect.gen(function* () {
364
+ const hashes = { ...previous };
365
+ for (const filePath of importFiles) {
366
+ const file = yield* readSqlFile(rootDir, filePath);
367
+ if (previous[filePath] === file.hash) {
368
+ hashes[filePath] = file.hash;
369
+ continue;
370
+ }
371
+ yield* importD1Database({
372
+ accountId,
373
+ databaseId,
374
+ sqlData: file.sql,
375
+ filename: file.id,
376
+ });
377
+ hashes[filePath] = file.hash;
378
+ }
379
+ // Drop entries for files no longer listed.
380
+ const tracked = new Set(importFiles);
381
+ for (const key of Object.keys(hashes)) {
382
+ if (!tracked.has(key))
383
+ delete hashes[key];
384
+ }
385
+ return hashes;
386
+ });
387
+ /**
388
+ * Hash all `.sql` files in `migrationsDir` without applying them; used by
389
+ * `diff` to detect drift relative to previously-applied state.
390
+ */
391
+ const hashMigrations = (migrationsDir) => listSqlFiles(migrationsDir).pipe(Effect.map((files) => {
392
+ const hashes = {};
393
+ for (const file of files)
394
+ hashes[file.id] = file.hash;
395
+ return hashes;
396
+ }));
397
+ const hashImports = (importFiles, rootDir) => Effect.gen(function* () {
398
+ const hashes = {};
399
+ for (const filePath of importFiles) {
400
+ const file = yield* readSqlFile(rootDir, filePath);
401
+ hashes[filePath] = file.hash;
402
+ }
403
+ return hashes;
404
+ });
405
+ const recordsEqual = (a, b) => {
406
+ const aKeys = Object.keys(a);
407
+ const bKeys = Object.keys(b);
408
+ if (aKeys.length !== bKeys.length)
409
+ return false;
410
+ for (const k of aKeys) {
411
+ if (a[k] !== b[k])
412
+ return false;
413
+ }
414
+ return true;
415
+ };
163
416
  //# sourceMappingURL=D1Database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"D1Database.js","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"D1Database.js","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as d1 from "@distilled.cloud/cloudflare/d1";
2
+ import * as Effect from "effect/Effect";
3
+ import type * as HttpClient from "effect/unstable/http/HttpClient";
4
+ import type { Credentials } from "@distilled.cloud/cloudflare/Credentials";
5
+ export interface ExportD1DatabaseOptions {
6
+ accountId: string;
7
+ databaseId: string;
8
+ dumpOptions?: {
9
+ tables?: string[];
10
+ noSchema?: boolean;
11
+ noData?: boolean;
12
+ };
13
+ }
14
+ export interface ExportD1DatabaseResult {
15
+ filename: string;
16
+ signedUrl: string;
17
+ }
18
+ /**
19
+ * Initiates an export of a Cloudflare D1 database and returns a signed
20
+ * download URL. Recursively polls with the bookmark until the export
21
+ * completes or fails.
22
+ */
23
+ export declare const exportD1Database: (options: ExportD1DatabaseOptions) => Effect.Effect<ExportD1DatabaseResult, d1.ExportDatabaseError, Credentials | HttpClient.HttpClient>;
24
+ //# sourceMappingURL=D1Export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1Export.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAE3E,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAC3B,SAAS,uBAAuB,KAC/B,MAAM,CAAC,MAAM,CACd,sBAAsB,EACtB,EAAE,CAAC,mBAAmB,EACtB,WAAW,GAAG,UAAU,CAAC,UAAU,CAuCjC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import * as d1 from "@distilled.cloud/cloudflare/d1";
2
+ import * as Effect from "effect/Effect";
3
+ /**
4
+ * Initiates an export of a Cloudflare D1 database and returns a signed
5
+ * download URL. Recursively polls with the bookmark until the export
6
+ * completes or fails.
7
+ */
8
+ export const exportD1Database = (options) => Effect.gen(function* () {
9
+ const exportDb = yield* d1.exportDatabase;
10
+ const poll = (currentBookmark) => Effect.gen(function* () {
11
+ const data = yield* exportDb({
12
+ accountId: options.accountId,
13
+ databaseId: options.databaseId,
14
+ outputFormat: "polling",
15
+ currentBookmark,
16
+ dumpOptions: options.dumpOptions,
17
+ });
18
+ if (data.status === "complete" && data.result) {
19
+ if (!data.result.filename || !data.result.signedUrl) {
20
+ return yield* Effect.die("D1 export completed but missing filename/signedUrl");
21
+ }
22
+ return {
23
+ filename: data.result.filename,
24
+ signedUrl: data.result.signedUrl,
25
+ };
26
+ }
27
+ if (data.status === "error") {
28
+ return yield* Effect.die(data.error ?? "Error during D1 export");
29
+ }
30
+ return yield* poll(data.atBookmark ?? undefined);
31
+ });
32
+ return yield* poll();
33
+ });
34
+ //# sourceMappingURL=D1Export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1Export.js","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Export.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AACrD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAmBxC;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,OAAgC,EAKhC,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC;IAE1C,MAAM,IAAI,GAAG,CACX,eAAwB,EAKxB,EAAE,CACF,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QAClB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC;YAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,YAAY,EAAE,SAAS;YACvB,eAAe;YACf,WAAW,EAAE,OAAO,CAAC,WAAW;SACjC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC9C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACpD,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CACtB,oDAAoD,CACrD,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAC9B,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;aACjC,CAAC;QACJ,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAC5B,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,wBAAwB,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEL,OAAO,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import * as d1 from "@distilled.cloud/cloudflare/d1";
2
+ import * as Effect from "effect/Effect";
3
+ export interface ImportD1DatabaseOptions {
4
+ accountId: string;
5
+ databaseId: string;
6
+ sqlData: string | Uint8Array;
7
+ filename?: string;
8
+ }
9
+ export interface ImportD1DatabaseResult {
10
+ filename: string;
11
+ numQueries: number;
12
+ }
13
+ /**
14
+ * Import SQL into a D1 database via the multi-step Cloudflare flow:
15
+ * 1. POST `action: "init"` -> returns presigned `upload_url`
16
+ * 2. PUT raw SQL to `upload_url`
17
+ * 3. POST `action: "ingest"` -> returns `at_bookmark`
18
+ * 4. POST `action: "poll"` until `status === "complete"`
19
+ */
20
+ export declare const importD1Database: (options: ImportD1DatabaseOptions) => Effect.Effect<ImportD1DatabaseResult, import("@distilled.cloud/cloudflare").CredentialsError | d1.ImportDatabaseError, any>;
21
+ //# sourceMappingURL=D1Import.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1Import.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Import.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAMrD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAIxC,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,GAAG,UAAU,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAyBD;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,uBAAuB,gIAuG7D,CAAC"}
@@ -0,0 +1,87 @@
1
+ import * as d1 from "@distilled.cloud/cloudflare/d1";
2
+ import { Credentials, formatHeaders, } from "@distilled.cloud/cloudflare/Credentials";
3
+ import crypto from "node:crypto";
4
+ import * as Effect from "effect/Effect";
5
+ import * as HttpClient from "effect/unstable/http/HttpClient";
6
+ import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
7
+ const md5 = (data) => crypto.createHash("md5").update(data).digest("hex");
8
+ const importEndpoint = (apiBaseUrl, accountId, databaseId) => `${apiBaseUrl}/accounts/${accountId}/d1/database/${databaseId}/import`;
9
+ /**
10
+ * Import SQL into a D1 database via the multi-step Cloudflare flow:
11
+ * 1. POST `action: "init"` -> returns presigned `upload_url`
12
+ * 2. PUT raw SQL to `upload_url`
13
+ * 3. POST `action: "ingest"` -> returns `at_bookmark`
14
+ * 4. POST `action: "poll"` until `status === "complete"`
15
+ */
16
+ export const importD1Database = (options) => Effect.gen(function* () {
17
+ const credentialsEff = yield* Credentials;
18
+ const credentials = yield* credentialsEff;
19
+ const authHeaders = formatHeaders(credentials);
20
+ const url = importEndpoint(credentials.apiBaseUrl, options.accountId, options.databaseId);
21
+ const client = yield* HttpClient.HttpClient;
22
+ const postJson = (body) => Effect.gen(function* () {
23
+ const req = HttpClientRequest.post(url).pipe(HttpClientRequest.setHeaders(authHeaders), HttpClientRequest.bodyJsonUnsafe(body));
24
+ const res = yield* client.execute(req).pipe(Effect.orDie);
25
+ if (res.status < 200 || res.status >= 300) {
26
+ const text = yield* res.text.pipe(Effect.orElseSucceed(() => ""));
27
+ return yield* Effect.die(`D1 import request failed (${res.status}): ${text}`);
28
+ }
29
+ const text = yield* res.text.pipe(Effect.orDie);
30
+ const json = JSON.parse(text);
31
+ return json.result;
32
+ });
33
+ const etag = md5(options.sqlData);
34
+ // Step 1: init via the typed d1 client
35
+ const initDb = yield* d1.importDatabase;
36
+ const init = yield* initDb({
37
+ accountId: options.accountId,
38
+ databaseId: options.databaseId,
39
+ action: "init",
40
+ etag,
41
+ });
42
+ if (!init.uploadUrl) {
43
+ return yield* Effect.die(init.error ?? "Failed to get upload URL for D1 import");
44
+ }
45
+ const uploadFilename = options.filename ?? init.filename ?? "import.sql";
46
+ // Step 2: PUT to the presigned upload URL
47
+ const bytes = typeof options.sqlData === "string"
48
+ ? new TextEncoder().encode(options.sqlData)
49
+ : options.sqlData;
50
+ const putReq = HttpClientRequest.put(init.uploadUrl).pipe(HttpClientRequest.bodyUint8Array(bytes, "application/sql"));
51
+ const putRes = yield* client.execute(putReq).pipe(Effect.orDie);
52
+ if (putRes.status < 200 || putRes.status >= 300) {
53
+ const text = yield* putRes.text.pipe(Effect.orElseSucceed(() => ""));
54
+ return yield* Effect.die(`Failed to upload SQL file to D1 (${putRes.status}): ${text}`);
55
+ }
56
+ // Step 3: ingest
57
+ const ingest = yield* postJson({
58
+ action: "ingest",
59
+ etag,
60
+ filename: init.filename,
61
+ });
62
+ if (!ingest.at_bookmark) {
63
+ return yield* Effect.die(ingest.error ?? "Ingest response missing bookmark");
64
+ }
65
+ // Step 4: poll until complete
66
+ const poll = (bookmark) => Effect.gen(function* () {
67
+ const data = yield* postJson({
68
+ action: "poll",
69
+ current_bookmark: bookmark,
70
+ });
71
+ if (data.status === "complete" && data.result) {
72
+ return {
73
+ filename: data.filename ?? uploadFilename,
74
+ numQueries: data.result.num_queries ?? 0,
75
+ };
76
+ }
77
+ if (data.status === "error") {
78
+ return yield* Effect.die(data.error ?? "Error during D1 import");
79
+ }
80
+ if (!data.at_bookmark) {
81
+ return yield* Effect.die("D1 import poll missing bookmark");
82
+ }
83
+ return yield* poll(data.at_bookmark);
84
+ });
85
+ return yield* poll(ingest.at_bookmark);
86
+ });
87
+ //# sourceMappingURL=D1Import.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1Import.js","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Import.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import * as Effect from "effect/Effect";
2
+ import type * as HttpClient from "effect/unstable/http/HttpClient";
3
+ import type { Credentials } from "@distilled.cloud/cloudflare/Credentials";
4
+ import type { D1SqlFile } from "./D1SqlFile.ts";
5
+ export interface ApplyMigrationsOptions {
6
+ accountId: string;
7
+ databaseId: string;
8
+ migrationsTable: string;
9
+ migrationsFiles: ReadonlyArray<D1SqlFile>;
10
+ }
11
+ /**
12
+ * Apply pending D1 migrations in order. Uses the wrangler-compatible
13
+ * 3-column schema `(id TEXT PK, name TEXT, applied_at TEXT)`.
14
+ */
15
+ export declare const applyMigrations: (options: ApplyMigrationsOptions) => Effect.Effect<void, import("@distilled.cloud/cloudflare").DefaultErrors, HttpClient.HttpClient | Credentials>;
16
+ //# sourceMappingURL=D1Migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"D1Migrations.d.ts","sourceRoot":"","sources":["../../../src/Cloudflare/D1/D1Migrations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,UAAU,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;CAC3C;AA2LD;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,sBAAsB,kHA0B3D,CAAC"}