@alchemy.run/drizzle 0.0.0 → 2.0.0-beta.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/Schema.js ADDED
@@ -0,0 +1,514 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import * as crypto from "node:crypto";
10
+ import * as Artifacts from "alchemy/Artifacts";
11
+ import { isResolved } from "alchemy/Diff";
12
+ import { Interaction } from "alchemy/Interaction";
13
+ import * as Provider from "alchemy/Provider";
14
+ import { Resource } from "alchemy/Resource";
15
+ import * as Data from "effect/Data";
16
+ import * as Effect from "effect/Effect";
17
+ import * as FileSystem from "effect/FileSystem";
18
+ import * as Match from "effect/Match";
19
+ import * as Option from "effect/Option";
20
+ import * as Path from "effect/Path";
21
+ import * as Record from "effect/Record";
22
+ import * as S from "effect/Schema";
23
+ import * as Semaphore from "effect/Semaphore";
24
+ // Unlisted fields are kept (the rest records), so a decoded snapshot can be
25
+ // written back whole.
26
+ const DdlEntry = S.StructWithRest(S.Struct({
27
+ entityType: S.String,
28
+ schema: S.optional(S.String),
29
+ table: S.optional(S.String),
30
+ name: S.optional(S.String),
31
+ }), [S.Record(S.String, S.Unknown)]);
32
+ // A `snapshot.json`. Postgres folders hold one `base` snapshot followed by
33
+ // `diff` snapshots carrying `deltas`; mysql and sqlite snapshots are full.
34
+ const Snapshot = S.StructWithRest(S.Struct({
35
+ type: S.optional(S.Literals(["base", "diff"])),
36
+ version: S.optional(S.String),
37
+ dialect: S.optional(S.String),
38
+ id: S.optional(S.String),
39
+ prevIds: S.String.pipe(S.Array, S.optional),
40
+ ddl: DdlEntry.pipe(S.Array, S.optional),
41
+ }), [S.Record(S.String, S.Unknown)]);
42
+ const decodeSnapshot = S.decodeEffect(S.fromJsonString(Snapshot));
43
+ class DrizzleKitLoadFailed extends Data.TaggedError("DrizzleKitLoadFailed") {
44
+ get message() {
45
+ return `Failed to load ${this.module} (is drizzle-kit installed?): ${this.cause instanceof Error ? this.cause.message : String(this.cause)}`;
46
+ }
47
+ }
48
+ class InvalidSnapshot extends Data.TaggedError("InvalidSnapshot") {
49
+ get message() {
50
+ return `Invalid drizzle snapshot at ${this.file}: ${this.cause.message}`;
51
+ }
52
+ }
53
+ class SchemaImportFailed extends Data.TaggedError("SchemaImportFailed") {
54
+ get message() {
55
+ return `Failed to import schema at ${this.schema}: ${this.cause instanceof Error ? this.cause.message : String(this.cause)}`;
56
+ }
57
+ }
58
+ class DrizzleKitFailed extends Data.TaggedError("DrizzleKitFailed") {
59
+ get message() {
60
+ // Thrown errors carry their own message; reported ones (`{ status:
61
+ // "error", error }`) are plain objects like `{ code, kind, snapshot }`.
62
+ const { cause } = this;
63
+ const detail = cause instanceof Error ? cause.message : JSON.stringify(cause);
64
+ return `drizzle-kit ${this.command} failed: ${detail}`;
65
+ }
66
+ }
67
+ class DrizzleKitExited extends Data.TaggedError("DrizzleKitExited") {
68
+ get message() {
69
+ return `drizzle-kit ${this.command} found errors in the schema (such as two columns with one name) and tried to exit the process`;
70
+ }
71
+ }
72
+ /** An ambiguous schema change with no terminal to ask. */
73
+ class UndecidedSchemaChange extends Data.TaggedError("UndecidedSchemaChange") {
74
+ get message() {
75
+ const { props, hint } = this;
76
+ return [
77
+ `${props.schema} has an ambiguous change that needs a decision:`,
78
+ ` ${formatEntity(hint.entity)}: created or renamed?`,
79
+ "Re-run in an interactive terminal to answer it.",
80
+ ].join("\n");
81
+ }
82
+ }
83
+ /**
84
+ * A Drizzle schema managed as an Alchemy resource.
85
+ *
86
+ * Runs `drizzle-kit generate` through drizzle-kit's programmatic API so
87
+ * migration SQL is regenerated as part of `alchemy deploy` whenever the
88
+ * source schema changes. Ambiguous changes (a rename or a new column/table?)
89
+ * are asked with Alchemy's prompts during plan. The output directory is
90
+ * intended to be passed straight to a database resource's `migrations`
91
+ * prop, giving you a single deploy-driven flow:
92
+ *
93
+ * ```typescript
94
+ * const schema = yield* Drizzle.Schema("app-schema", {
95
+ * schema: "./src/schema.ts",
96
+ * });
97
+ *
98
+ * const branch = yield* Neon.Branch("app-branch", {
99
+ * project,
100
+ * migrations: schema,
101
+ * });
102
+ *
103
+ * const db = yield* Fly.Postgres("Db", {
104
+ * region: "iad",
105
+ * migrations: schema,
106
+ * });
107
+ * ```
108
+ *
109
+ * `Drizzle.Schema` runs first (because the database resource depends
110
+ * on its `out` output), regenerates pending migration files, and the
111
+ * database resource then applies them.
112
+ *
113
+ * The resource is delete-safe: removing it from the stack does **not** wipe
114
+ * the migrations directory, since migration files are typically checked in
115
+ * and shared with other environments.
116
+ *
117
+ * @resource
118
+ */
119
+ export const Schema = Resource("Drizzle.Schema");
120
+ const cliDialect = (props) => props.dialect === undefined || props.dialect === "postgres" ? "postgresql" : props.dialect;
121
+ const sha = (s) => crypto.createHash("sha256").update(s).digest("hex");
122
+ const importModule = (module) => Effect.tryPromise({
123
+ try: () => import(__rewriteRelativeImportExtension(/* @vite-ignore */ module)),
124
+ catch: (cause) => new DrizzleKitLoadFailed({ module, cause }),
125
+ });
126
+ // drizzle-kit runs in-process but calls `process.exit` on schema errors.
127
+ // Calls trap the exit and fail instead, one at a time since the trap swaps
128
+ // the global.
129
+ const exitTrap = Semaphore.makeUnsafe(1);
130
+ const callDrizzleKit = (command, run) => Effect.acquireUseRelease(Effect.sync(() => {
131
+ // oxlint-disable-next-line typescript/unbound-method -- saved only to restore `process.exit` verbatim, never called unbound
132
+ const trap = { exit: process.exit, exited: false };
133
+ process.exit = () => {
134
+ trap.exited = true;
135
+ throw new Error("drizzle-kit exited");
136
+ };
137
+ return trap;
138
+ }), (trap) =>
139
+ // `cli` commands catch the trap's throw and report it as an error result.
140
+ // Uninterruptible: the promise can't be cancelled, so the trap stays
141
+ // until it settles.
142
+ Effect.tryPromise({
143
+ try: run,
144
+ catch: (cause) => trap.exited
145
+ ? new DrizzleKitExited({ command })
146
+ : new DrizzleKitFailed({ command, cause }),
147
+ }).pipe(Effect.flatMap((result) => trap.exited ? Effect.fail(new DrizzleKitExited({ command })) : Effect.succeed(result)), Effect.uninterruptible), (trap) => Effect.sync(() => {
148
+ process.exit = trap.exit;
149
+ })).pipe((effect) => exitTrap.withPermit(effect));
150
+ // A `drizzle-kit/cli` command as an Effect, failing on a thrown or reported error.
151
+ const command = (name) => Effect.fn(`drizzleKit.${name}`)(function* (options) {
152
+ const cli = yield* importModule("drizzle-kit/cli");
153
+ const result = yield* callDrizzleKit(name, () => cli[name](options));
154
+ if (result.status === "error") {
155
+ return yield* new DrizzleKitFailed({ command: name, cause: result.error });
156
+ }
157
+ return result;
158
+ });
159
+ const drizzleKit = {
160
+ /** `drizzle-kit generate`; with `explain` a dry run that writes nothing. */
161
+ generate: command("generate"),
162
+ /** `drizzle-kit up`: upgrade snapshots to the current format. */
163
+ up: command("up"),
164
+ };
165
+ export const SchemaProvider = () => Provider.effect(Schema, Effect.gen(function* () {
166
+ const fs = yield* FileSystem.FileSystem;
167
+ const path = yield* Path.Path;
168
+ const resolveOut = (p) => path.resolve(process.cwd(), p.out ?? "./migrations");
169
+ // The `out` attribute is exposed as a path relative to the current
170
+ // working directory so that persisted state stays portable across
171
+ // machines/checkouts. Internal filesystem ops always use the absolute
172
+ // `resolveOut` form.
173
+ const relativeOut = (abs) => path.relative(process.cwd(), abs);
174
+ const resolveSchema = (p) => path.resolve(process.cwd(), p.schema);
175
+ // drizzle-kit reads `schema` as a glob, where `\` is an escape.
176
+ const schemaGlob = (p) => resolveSchema(p).replaceAll("\\", "/");
177
+ // List `<ts>_*` migration directories under `out`, sorted by numeric
178
+ // prefix. Returns an empty array if `out` doesn't exist.
179
+ const listMigrationDirs = Effect.fn("Drizzle.listMigrationDirs")(function* (out) {
180
+ if (!(yield* fs.exists(out)))
181
+ return [];
182
+ const entries = yield* fs.readDirectory(out);
183
+ return entries.filter((name) => /^\d+_/.test(name)).sort();
184
+ });
185
+ const readSnapshots = Effect.fn("Drizzle.readSnapshots")(function* (out) {
186
+ const entries = yield* Effect.forEach(yield* listMigrationDirs(out), (dir) => Effect.gen(function* () {
187
+ const file = path.join(out, dir, "snapshot.json");
188
+ if (!(yield* fs.exists(file)))
189
+ return [];
190
+ const text = yield* fs.readFileString(file);
191
+ const snapshot = yield* decodeSnapshot(text).pipe(Effect.mapError((cause) => new InvalidSnapshot({ file, cause })));
192
+ return [[dir, { snapshot, text }]];
193
+ }));
194
+ return Record.fromEntries(entries.flat());
195
+ });
196
+ // The latest snapshot is the head of the `prevIds` chain — the one no
197
+ // other snapshot points back to. Directory-name order alone is not
198
+ // enough: two migrations generated within the same second share the
199
+ // timestamp prefix, and the random name suffix then decides the sort.
200
+ const readLatestSnapshot = Effect.fn("Drizzle.readLatestSnapshot")(function* (out) {
201
+ const entries = Record.values(yield* readSnapshots(out));
202
+ if (entries.length === 0)
203
+ return undefined;
204
+ const referenced = new Set(entries.flatMap((entry) => entry.snapshot.prevIds ?? []));
205
+ const head = entries.find((entry) => entry.snapshot.id !== undefined && !referenced.has(entry.snapshot.id));
206
+ // Fall back to name order for snapshots without id/prevIds chains.
207
+ const latest = head ?? entries[entries.length - 1];
208
+ return { snapshot: latest.snapshot, hash: sha(latest.text) };
209
+ });
210
+ /**
211
+ * Bring a migrations folder up to drizzle-kit's current snapshot format
212
+ * with `drizzle-kit up`. Returns whether anything changed.
213
+ *
214
+ * Earlier Alchemy versions wrote every postgres snapshot as a full
215
+ * version-9 snapshot without a `type`. That is the version-8 shape, which
216
+ * `up` turns into drizzle-kit's base/diff chain, so relabel them first.
217
+ */
218
+ const upgradeFolder = Effect.fn("Drizzle.upgradeFolder")(function* (props, out) {
219
+ if (!(yield* fs.exists(out)))
220
+ return false;
221
+ if (cliDialect(props) === "postgresql") {
222
+ for (const [dir, { snapshot }] of Record.toEntries(yield* readSnapshots(out))) {
223
+ if (snapshot.type !== undefined || snapshot.version !== "9")
224
+ continue;
225
+ yield* fs.writeFileString(path.join(out, dir, "snapshot.json"), JSON.stringify({ ...snapshot, version: "8", renames: [] }, null, 2));
226
+ }
227
+ }
228
+ const { upgraded } = yield* drizzleKit.up({ dialect: cliDialect(props), out });
229
+ return upgraded.length > 0;
230
+ });
231
+ // The schema the migrations folder describes. Postgres folders are diff
232
+ // chains drizzle-kit rebuilds; other dialects store full snapshots.
233
+ const readPreviousSnapshot = Effect.fn("Drizzle.readPreviousSnapshot")(function* (kit, out) {
234
+ const reconstruct = kit.reconstruct;
235
+ if (reconstruct === undefined)
236
+ return (yield* readLatestSnapshot(out))?.snapshot;
237
+ const files = Record.map(yield* readSnapshots(out), ({ snapshot }) => snapshot);
238
+ if (Record.isEmptyRecord(files))
239
+ return undefined;
240
+ const parents = new Set(Record.values(files).flatMap((file) => file.prevIds ?? []));
241
+ const leaves = Record.values(files).filter(({ id }) => id !== undefined && !parents.has(id));
242
+ if (leaves.length < 2) {
243
+ return yield* callDrizzleKit("reconstruct", () => reconstruct(files));
244
+ }
245
+ // Unmerged branches: reconstruct an empty merge of their leaves, the
246
+ // combined state drizzle-kit's generate diffs against.
247
+ const merge = {
248
+ ...leaves[0],
249
+ id: MERGE_ID,
250
+ prevIds: leaves.map(({ id }) => id),
251
+ deltas: [],
252
+ };
253
+ return yield* callDrizzleKit("reconstruct", () => reconstruct({ ...files, [`99999999999999_${MERGE_ID}`]: merge }, MERGE_ID));
254
+ });
255
+ /**
256
+ * The previous and current schema, for working out which entities a
257
+ * rename-or-create question could have been renamed from.
258
+ */
259
+ const loadRenameContext = Effect.fn("Drizzle.loadRenameContext")(function* (props, out) {
260
+ const dialect = props.dialect ?? "postgres";
261
+ const kit = yield* importModule(`drizzle-kit/payload/${dialect}`);
262
+ const schemaModule = yield* Effect.tryPromise({
263
+ try: () => import(__rewriteRelativeImportExtension(/* @vite-ignore */ resolveSchema(props))),
264
+ catch: (cause) => new SchemaImportFailed({ schema: props.schema, cause }),
265
+ });
266
+ const cur = yield* callDrizzleKit("generateDrizzleJson", () => kit.generateDrizzleJson(schemaModule));
267
+ const prev = yield* readPreviousSnapshot(kit, out);
268
+ return { prev: prev?.ddl ?? [], cur: cur.ddl ?? [] };
269
+ });
270
+ /**
271
+ * Dry-run `drizzle-kit generate` until it has no unanswered questions,
272
+ * asking the user each rename-or-create question it reports. The SQL is
273
+ * applied to the real database later in the same deploy, so ambiguous
274
+ * changes are never answered automatically.
275
+ */
276
+ const resolveHints = Effect.fn("Drizzle.resolveHints")(function* (props, out) {
277
+ const hints = [];
278
+ const context = yield* Effect.cached(loadRenameContext(props, out));
279
+ // `explain` dry-runs generate: it reports the pending migration
280
+ // (`ok`), `no_changes`, or the questions it still needs answered
281
+ // (`missing_hints`) without writing anything. Answers can raise new
282
+ // questions (columns of a renamed table), so ask until none are left.
283
+ const result = yield* Effect.gen(function* () {
284
+ const result = yield* drizzleKit.generate({
285
+ dialect: cliDialect(props),
286
+ schema: schemaGlob(props),
287
+ out,
288
+ explain: true,
289
+ hints,
290
+ });
291
+ if (result.status === "missing_hints") {
292
+ const { prev, cur } = yield* context;
293
+ for (const hint of result.unresolved) {
294
+ hints.push(yield* askHint(props, hint, prev, cur, hints));
295
+ }
296
+ }
297
+ return result;
298
+ }).pipe(Effect.repeat({ until: (result) => result.status !== "missing_hints" }));
299
+ return { hints, changed: result.status === "ok" };
300
+ });
301
+ /**
302
+ * Decide what a deploy would change, without touching `out`: upgrade a
303
+ * scratch copy of the folder, then resolve every question drizzle-kit
304
+ * has about the schema change. Cached so `diff` and `reconcile` share
305
+ * one set of answers.
306
+ */
307
+ const detectDrift = Effect.fn("Drizzle.detectDrift")(function* (props) {
308
+ const out = resolveOut(props);
309
+ const scratch = yield* fs.makeTempDirectoryScoped({ prefix: "alchemy-drizzle-" });
310
+ const migrations = path.join(scratch, "migrations");
311
+ if (yield* fs.exists(out))
312
+ yield* fs.copy(out, migrations);
313
+ const upgraded = yield* upgradeFolder(props, migrations);
314
+ const { hints, changed } = yield* resolveHints(props, migrations);
315
+ return { out, upgraded, hints, changed };
316
+ },
317
+ // Keyed by props: an interrupted create's recovery `read` sees the
318
+ // persisted props, which may differ from the ones being deployed.
319
+ (effect, props) => effect.pipe(Effect.scoped, Artifacts.cached(`detectDrift:${cliDialect(props)}:${resolveSchema(props)}:${resolveOut(props)}`)));
320
+ /**
321
+ * Upgrade `out` if needed and generate the pending migration with the
322
+ * answers gathered by {@link detectDrift}.
323
+ */
324
+ const regenerate = Effect.fn("Drizzle.regenerate")(function* (props) {
325
+ const { out, upgraded, hints, changed } = yield* detectDrift(props);
326
+ if (upgraded)
327
+ yield* upgradeFolder(props, out);
328
+ if (changed) {
329
+ yield* fs.makeDirectory(out, { recursive: true });
330
+ const result = yield* drizzleKit.generate({
331
+ dialect: cliDialect(props),
332
+ schema: schemaGlob(props),
333
+ out,
334
+ hints,
335
+ });
336
+ if (result.status === "missing_hints") {
337
+ return yield* new UndecidedSchemaChange({ props, hint: result.unresolved[0] });
338
+ }
339
+ }
340
+ const latest = yield* readLatestSnapshot(out);
341
+ return {
342
+ out: relativeOut(out),
343
+ snapshotHash: latest?.hash ?? sha(""),
344
+ migrations: yield* listMigrationDirs(out),
345
+ };
346
+ });
347
+ return {
348
+ // Non-listable: a Drizzle.Schema is a local build artifact (generated
349
+ // migration SQL under `out`, a path supplied entirely by props with no
350
+ // account/store to enumerate). There is no remote enumeration API, so
351
+ // there is nothing to discover out-of-band.
352
+ list: () => Effect.succeed([]),
353
+ diff: Effect.fn(function* ({ news, output }) {
354
+ if (!isResolved(news))
355
+ return undefined;
356
+ if (!output) {
357
+ // Re-driving an interrupted create: answer questions now, not
358
+ // during apply.
359
+ yield* detectDrift(news);
360
+ return undefined;
361
+ }
362
+ // Only flag an update when drizzle-kit would emit new SQL (or the
363
+ // folder needs upgrading) — otherwise downstream resources (e.g.
364
+ // Neon.Branch) would see `schema.out` as an unresolved Output during
365
+ // plan and cascade into spurious updates of their own.
366
+ const { changed, upgraded } = yield* detectDrift(news);
367
+ // Originally `output.out` was an absolute path, which is not portable.
368
+ // So, we trigger an update to migrate existing resources to the
369
+ // canonical (cwd-relative) form. This is safe because `regenerate`
370
+ // is idempotent. Compare against the canonical form rather than
371
+ // testing `isAbsolute`: on Windows a cross-drive `out` can never be
372
+ // relativized, so its canonical form IS absolute and an isAbsolute
373
+ // check would flag an update on every deploy.
374
+ return changed || upgraded || output.out !== relativeOut(resolveOut(news))
375
+ ? { action: "update" }
376
+ : undefined;
377
+ }),
378
+ read: Effect.fn(function* ({ olds, output }) {
379
+ if (!output) {
380
+ // A create never reaches `diff`; plan only calls `read` to look
381
+ // for something to adopt. Ask any rename questions now so they
382
+ // are answered before apply starts changing other resources.
383
+ if (olds && isResolved(olds))
384
+ yield* detectDrift(olds);
385
+ return undefined;
386
+ }
387
+ const out = resolveOut(olds ?? {});
388
+ const exists = yield* fs.exists(out);
389
+ if (!exists)
390
+ return undefined;
391
+ const latest = yield* readLatestSnapshot(out);
392
+ const migrations = yield* listMigrationDirs(out);
393
+ return {
394
+ out: relativeOut(out),
395
+ snapshotHash: latest?.hash ?? output.snapshotHash,
396
+ migrations,
397
+ };
398
+ }),
399
+ reconcile: Effect.fn(function* ({ news, output, session }) {
400
+ yield* session.note(`${output ? "Regenerating" : "Generating"} drizzle migrations for ${news.schema}`);
401
+ return yield* regenerate(news);
402
+ }),
403
+ delete: Effect.fn(function* () {
404
+ // Migrations are typically checked in; do not delete on resource
405
+ // teardown.
406
+ }),
407
+ };
408
+ }));
409
+ // drizzle-kit hint kinds → snapshot `ddl` entity types.
410
+ const ddlEntityTypes = {
411
+ table: "tables",
412
+ column: "columns",
413
+ index: "indexes",
414
+ enum: "enums",
415
+ sequence: "sequences",
416
+ view: "views",
417
+ schema: "schemas",
418
+ policy: "policies",
419
+ role: "roles",
420
+ check: "checks",
421
+ unique: "uniques",
422
+ primary_key: "pks",
423
+ "foreign key": "fks",
424
+ };
425
+ const MERGE_ID = "alchemy-unmerged-branches";
426
+ // mysql and sqlite have no schemas; drizzle-kit fills ids with `public`.
427
+ const DEFAULT_SCHEMA = "public";
428
+ const formatEntity = (entity) => (entity.length > 1 && entity[0] === DEFAULT_SCHEMA ? entity.slice(1) : entity).join(".");
429
+ const locate = (row) => ({
430
+ entityType: row.entityType,
431
+ schema: row.schema ?? DEFAULT_SCHEMA,
432
+ table: row.table ?? "",
433
+ name: row.name ?? "",
434
+ });
435
+ const idOf = (row, arity) => Match.value(arity).pipe(Match.when(1, () => [row.name]), Match.when(2, () => [row.schema, row.name]), Match.orElse(() => [row.schema, row.table, row.name]));
436
+ // Give `row` the id `to`, shaped like the `from` id it was matched by.
437
+ const withId = (row, to) => Match.value(to.length).pipe(Match.when(1, () => ({ ...row, name: to[0] })), Match.when(2, () => ({ ...row, schema: to[0], name: to[1] })), Match.orElse(() => ({ ...row, schema: to[0], table: to[1], name: to[2] })));
438
+ const renameRow = (row, rename) => {
439
+ const { from, to } = rename;
440
+ return Match.value(rename).pipe(
441
+ // Schema rows name themselves; everything else names its schema.
442
+ Match.when({ kind: "schema" }, () => Match.value(row).pipe(Match.when({ entityType: "schemas", name: from[0] }, () => ({ ...row, name: to[0] })), Match.when({ entityType: (type) => type !== "schemas", schema: from[0] }, () => ({
443
+ ...row,
444
+ schema: to[0],
445
+ })), Match.orElse(() => row))),
446
+ // The table and everything inside it follow the rename (or move).
447
+ Match.when({ kind: "table" }, () => Match.value(row).pipe(Match.when({ entityType: "tables", schema: from[0], name: from[1] }, () => withId(row, to)), Match.when({ schema: from[0], table: from[1] }, () => ({
448
+ ...row,
449
+ schema: to[0],
450
+ table: to[1],
451
+ })), Match.orElse(() => row))), Match.orElse(({ kind }) => row.entityType === ddlEntityTypes[kind] &&
452
+ JSON.stringify(idOf(row, from.length)) === JSON.stringify(from)
453
+ ? withId(row, to)
454
+ : row));
455
+ };
456
+ /**
457
+ * Carry previous entities through the renames answered so far, so a later
458
+ * question about the renamed table (or a table moved to another schema)
459
+ * matches the entities that moved with it.
460
+ */
461
+ const applyRenames = (rows, hints) => {
462
+ let current = rows;
463
+ for (const hint of hints) {
464
+ if (hint.type === "rename")
465
+ current = current.map((row) => renameRow(row, hint));
466
+ }
467
+ return current;
468
+ };
469
+ /**
470
+ * Entities a rename-or-create question could have been renamed from: same
471
+ * kind, present before (after the renames answered so far), gone now.
472
+ * Columns, indexes, … are offered from the same table first.
473
+ */
474
+ const renameCandidates = (hint, prev, cur, hints) => {
475
+ const entityType = ddlEntityTypes[hint.kind];
476
+ const arity = hint.entity.length;
477
+ const ofKind = (rows) => rows.filter((row) => row.entityType === entityType);
478
+ const current = new Set(ofKind(cur.map(locate)).map((row) => JSON.stringify(idOf(row, arity))));
479
+ const gone = ofKind(applyRenames(prev.map(locate), hints))
480
+ .map((row) => idOf(row, arity))
481
+ .filter((id) => !current.has(JSON.stringify(id)));
482
+ const sameParent = gone.filter((id) => arity < 3 || (id[0] === hint.entity[0] && id[1] === hint.entity[1]));
483
+ return sameParent.length > 0 ? sameParent : gone;
484
+ };
485
+ /**
486
+ * Answer one drizzle-kit `MissingHint` with an Alchemy prompt. drizzle-kit
487
+ * only asks when a rename is possible, so the question is always shown —
488
+ * never answered with "create" on the user's behalf. A dismissed prompt stays
489
+ * a `TerminalCancelled` so the CLI exits quietly, the same as cancelling the
490
+ * deploy confirmation.
491
+ */
492
+ const askHint = Effect.fn("Drizzle.askHint")(function* (props, hint, prev, cur, hints) {
493
+ const interaction = yield* Effect.serviceOption(Interaction);
494
+ if (Option.isNone(interaction))
495
+ return yield* new UndecidedSchemaChange({ props, hint });
496
+ const name = formatEntity(hint.entity);
497
+ return yield* interaction.value.prompt.select({
498
+ message: `Is ${hint.kind} ${name} created or renamed from another ${hint.kind}?`,
499
+ options: [
500
+ {
501
+ value: { type: "create", kind: hint.kind, entity: hint.entity },
502
+ label: `+ ${name}`,
503
+ description: `create ${hint.kind}`,
504
+ },
505
+ ...renameCandidates(hint, prev, cur, hints).map((from) => ({
506
+ value: { type: "rename", kind: hint.kind, from, to: hint.entity },
507
+ label: `~ ${formatEntity(from)} › ${name}`,
508
+ description: `rename ${hint.kind}`,
509
+ })),
510
+ ],
511
+ descriptionPlacement: "inline",
512
+ });
513
+ }, (effect, props, hint) => effect.pipe(Effect.catchTag("NonInteractiveTerminal", () => Effect.fail(new UndecidedSchemaChange({ props, hint })))));
514
+ //# sourceMappingURL=Schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Schema.js","sourceRoot":"","sources":["../src/Schema.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ export * from "./D1.ts";
2
+ export { EffectDrizzleError, EffectDrizzleQueryError, EffectTransactionRollbackError, MigratorInitError, } from "drizzle-orm/effect-core";
3
+ export * from "./Providers.ts";
4
+ export * from "./Schema.ts";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAMxB,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,EAC9B,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,14 @@
1
+ export * from "./D1.js";
2
+ // The tagged errors drizzle's effect drivers fail with — re-exported so
3
+ // consumers can reference them without reaching into drizzle-orm
4
+ // internals. (`Effect.catchTag` needs only the tag string; these are for
5
+ // instanceof checks, schemas, and annotations.)
6
+ export { EffectDrizzleError, EffectDrizzleQueryError, EffectTransactionRollbackError, MigratorInitError, } from "drizzle-orm/effect-core";
7
+ export * from "./Providers.js";
8
+ export * from "./Schema.js";
9
+ // MySQL and Postgres are deliberately NOT re-exported here: their drivers
10
+ // (`@effect/sql-mysql2`/`mysql2`, `@effect/sql-pg`/`pg`) are optional peer
11
+ // dependencies, and keeping them out of the barrel keeps them out of every
12
+ // non-user's module graph. Import them via their subpaths instead:
13
+ // `@alchemy.run/drizzle/MySQL`, `@alchemy.run/drizzle/Postgres`.
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AAExB,wEAAwE;AACxE,iEAAiE;AACjE,yEAAyE;AACzE,gDAAgD;AAChD,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,8BAA8B,EAC9B,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,0EAA0E;AAC1E,2EAA2E;AAC3E,2EAA2E;AAC3E,mEAAmE;AACnE,iEAAiE"}