@take-out/postgres 0.1.14 → 0.1.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -136,7 +136,7 @@ bun migrate run
136
136
  bun migrate build
137
137
 
138
138
  # add a custom typescript migration
139
- bun db:migrate-add my-migration-name
139
+ bun db:add-migration my-migration-name
140
140
  ```
141
141
 
142
142
  ### CLI Configuration
@@ -162,7 +162,7 @@ migrations. You don't need to run Drizzle commands directly.
162
162
  For data migrations or changes that can't be expressed in schema:
163
163
 
164
164
  ```bash
165
- bun db:migrate-add fix-user-data
165
+ bun db:add-migration fix-user-data
166
166
  ```
167
167
 
168
168
  This creates a new TypeScript file:
@@ -82,7 +82,17 @@ async function migrate(options) {
82
82
  }
83
83
  })).then(migrations2 => migrations2.filter(Boolean)))].sort((a, b) => a.name.localeCompare(b.name));
84
84
  if (!migrations.length) await client.query("COMMIT");else {
85
- for (const migration of migrations) migration.up && (await migration.up(client)), await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [migration.name]);
85
+ for (const migration of migrations) {
86
+ if (migration.up) {
87
+ await client.query(`SAVEPOINT migration_${migration.name}`);
88
+ try {
89
+ await migration.up(client), await client.query(`RELEASE SAVEPOINT migration_${migration.name}`);
90
+ } catch (e) {
91
+ if (await client.query(`ROLLBACK TO SAVEPOINT migration_${migration.name}`), e?.code?.startsWith("42")) console.info(`[migrate] ${migration.name}: ${e.message}, recording as applied`);else throw e;
92
+ }
93
+ }
94
+ await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [migration.name]);
95
+ }
86
96
  await client.query("COMMIT");
87
97
  }
88
98
  } catch (e) {
@@ -67,10 +67,24 @@ async function migrate(options) {
67
67
  if (!migrations.length)
68
68
  await client.query("COMMIT");
69
69
  else {
70
- for (const migration of migrations)
71
- migration.up && await migration.up(client), await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [
70
+ for (const migration of migrations) {
71
+ if (migration.up) {
72
+ await client.query(`SAVEPOINT migration_${migration.name}`);
73
+ try {
74
+ await migration.up(client), await client.query(`RELEASE SAVEPOINT migration_${migration.name}`);
75
+ } catch (e) {
76
+ if (await client.query(`ROLLBACK TO SAVEPOINT migration_${migration.name}`), e?.code?.startsWith("42"))
77
+ console.info(
78
+ `[migrate] ${migration.name}: ${e.message}, recording as applied`
79
+ );
80
+ else
81
+ throw e;
82
+ }
83
+ }
84
+ await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [
72
85
  migration.name
73
86
  ]);
87
+ }
74
88
  await client.query("COMMIT");
75
89
  }
76
90
  } catch (e) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/migrate.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["migrations"]
6
6
  }
@@ -49,10 +49,24 @@ async function migrate(options) {
49
49
  if (!migrations.length)
50
50
  await client.query("COMMIT");
51
51
  else {
52
- for (const migration of migrations)
53
- migration.up && await migration.up(client), await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [
52
+ for (const migration of migrations) {
53
+ if (migration.up) {
54
+ await client.query(`SAVEPOINT migration_${migration.name}`);
55
+ try {
56
+ await migration.up(client), await client.query(`RELEASE SAVEPOINT migration_${migration.name}`);
57
+ } catch (e) {
58
+ if (await client.query(`ROLLBACK TO SAVEPOINT migration_${migration.name}`), e?.code?.startsWith("42"))
59
+ console.info(
60
+ `[migrate] ${migration.name}: ${e.message}, recording as applied`
61
+ );
62
+ else
63
+ throw e;
64
+ }
65
+ }
66
+ await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [
54
67
  migration.name
55
68
  ]);
69
+ }
56
70
  await client.query("COMMIT");
57
71
  }
58
72
  } catch (e) {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/migrate.ts"],
4
- "mappings": "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",
4
+ "mappings": "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",
5
5
  "names": ["migrations"]
6
6
  }
@@ -57,7 +57,17 @@ async function migrate(options) {
57
57
  }
58
58
  })).then(migrations2 => migrations2.filter(Boolean)))].sort((a, b) => a.name.localeCompare(b.name));
59
59
  if (!migrations.length) await client.query("COMMIT");else {
60
- for (const migration of migrations) migration.up && (await migration.up(client)), await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [migration.name]);
60
+ for (const migration of migrations) {
61
+ if (migration.up) {
62
+ await client.query(`SAVEPOINT migration_${migration.name}`);
63
+ try {
64
+ await migration.up(client), await client.query(`RELEASE SAVEPOINT migration_${migration.name}`);
65
+ } catch (e) {
66
+ if (await client.query(`ROLLBACK TO SAVEPOINT migration_${migration.name}`), e?.code?.startsWith("42")) console.info(`[migrate] ${migration.name}: ${e.message}, recording as applied`);else throw e;
67
+ }
68
+ }
69
+ await client.query("INSERT INTO public.migrations (name) VALUES ($1)", [migration.name]);
70
+ }
61
71
  await client.query("COMMIT");
62
72
  }
63
73
  } catch (e) {
@@ -1 +1 @@
1
- {"version":3,"names":["basename","getDBClient","isServerless","process","env","AWS_LAMBDA_FUNCTION_NAME","AWS_LAMBDA_RUNTIME_API","LAMBDA_RUNTIME_DIR","IS_SERVERLESS","migrate","options","connectionString","migrationsGlob","createDatabases","onMigrationComplete","gitSha","cvrDb","changeDb","client","hasDB","name","query","rows","length","Error","zeroDBNames","filter","Boolean","dbUrl","appliedMigrations","appliedMigrationNames","Set","map","row","tsMigrationsSorted","Object","entries","sort","a","b","localeCompare","file","run","replace","test","migrations","Promise","all","has","error","console","then","migrations2","migration","up","e","release","releaseErr","err","destroyErr","exitProcess","exit"],"sources":["../../src/migrate.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["basename","getDBClient","isServerless","process","env","AWS_LAMBDA_FUNCTION_NAME","AWS_LAMBDA_RUNTIME_API","LAMBDA_RUNTIME_DIR","IS_SERVERLESS","migrate","options","connectionString","migrationsGlob","createDatabases","onMigrationComplete","gitSha","cvrDb","changeDb","client","hasDB","name","query","rows","length","Error","zeroDBNames","filter","Boolean","dbUrl","appliedMigrations","appliedMigrationNames","Set","map","row","tsMigrationsSorted","Object","entries","sort","a","b","localeCompare","file","run","replace","test","migrations","Promise","all","has","error","console","then","migrations2","migration","up","e","code","startsWith","info","message","release","releaseErr","err","destroyErr","exitProcess","exit"],"sources":["../../src/migrate.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@take-out/postgres",
3
- "version": "0.1.14",
3
+ "version": "0.1.17",
4
4
  "sideEffects": false,
5
5
  "source": "src/index.ts",
6
6
  "main": "dist/cjs",
7
7
  "module": "dist/esm",
8
8
  "type": "module",
9
- "types": "./types/index.d.ts",
9
+ "types": "./src/index.ts",
10
10
  "bin": {
11
11
  "postgres": "./cli.cjs"
12
12
  },
@@ -31,19 +31,19 @@
31
31
  "exports": {
32
32
  "./package.json": "./package.json",
33
33
  ".": {
34
- "types": "./types/index.d.ts",
34
+ "types": "./src/index.ts",
35
35
  "import": "./dist/esm/index.mjs",
36
36
  "require": "./dist/cjs/index.cjs",
37
37
  "default": "./dist/esm/index.mjs"
38
38
  },
39
39
  "./*": {
40
- "types": "./types/*.d.ts",
40
+ "types": "./src/*.ts",
41
41
  "import": "./dist/esm/*.mjs",
42
42
  "require": "./dist/cjs/*.cjs"
43
43
  }
44
44
  },
45
45
  "dependencies": {
46
- "@take-out/helpers": "0.1.14",
46
+ "@take-out/helpers": "workspace:*",
47
47
  "async-retry": "^1.3.3",
48
48
  "citty": "^0.1.6"
49
49
  },
package/src/migrate.ts CHANGED
@@ -131,7 +131,24 @@ export async function migrate(options: MigrateOptions) {
131
131
  } else {
132
132
  for (const migration of migrations) {
133
133
  if (migration.up) {
134
- await migration.up(client)
134
+ // use savepoints so "already exists" errors don't abort the transaction.
135
+ // this handles cases where tables/columns exist but migration tracking
136
+ // was lost (e.g. db restore, pglite data loss)
137
+ await client.query(`SAVEPOINT migration_${migration.name}`)
138
+ try {
139
+ await migration.up(client)
140
+ await client.query(`RELEASE SAVEPOINT migration_${migration.name}`)
141
+ } catch (e: any) {
142
+ await client.query(`ROLLBACK TO SAVEPOINT migration_${migration.name}`)
143
+ // pg "duplicate" class errors: table, column, object, etc
144
+ if (e?.code?.startsWith('42')) {
145
+ console.info(
146
+ `[migrate] ${migration.name}: ${e.message}, recording as applied`,
147
+ )
148
+ } else {
149
+ throw e
150
+ }
151
+ }
135
152
  }
136
153
 
137
154
  await client.query('INSERT INTO public.migrations (name) VALUES ($1)', [