@take-out/postgres 0.1.23 → 0.1.26
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/dist/cjs/migrate.cjs +19 -3
- package/dist/cjs/migrate.js +18 -3
- package/dist/cjs/migrate.js.map +1 -1
- package/dist/esm/migrate.js +18 -3
- package/dist/esm/migrate.js.map +1 -1
- package/dist/esm/migrate.mjs +19 -3
- package/dist/esm/migrate.mjs.map +1 -1
- package/package.json +2 -2
- package/src/migrate.ts +24 -1
- package/types/migrate.d.ts +4 -0
- package/types/migrate.d.ts.map +1 -1
package/dist/cjs/migrate.cjs
CHANGED
|
@@ -25,7 +25,21 @@ __export(migrate_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(migrate_exports);
|
|
26
26
|
var import_node_path = require("node:path"),
|
|
27
27
|
import_getDBClient = require("./getDBClient.cjs");
|
|
28
|
-
const
|
|
28
|
+
const DEFAULT_MIGRATION_TIMEOUT = 5e3,
|
|
29
|
+
isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
|
|
30
|
+
async function withTimeout(promise, ms, name) {
|
|
31
|
+
let timeoutId;
|
|
32
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
33
|
+
timeoutId = setTimeout(() => {
|
|
34
|
+
reject(new Error(`migration "${name}" timed out after ${ms}ms`));
|
|
35
|
+
}, ms);
|
|
36
|
+
});
|
|
37
|
+
try {
|
|
38
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
39
|
+
} finally {
|
|
40
|
+
clearTimeout(timeoutId);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
29
43
|
async function migrate(options) {
|
|
30
44
|
const {
|
|
31
45
|
connectionString,
|
|
@@ -34,7 +48,8 @@ async function migrate(options) {
|
|
|
34
48
|
onMigrationComplete,
|
|
35
49
|
gitSha,
|
|
36
50
|
cvrDb,
|
|
37
|
-
changeDb
|
|
51
|
+
changeDb,
|
|
52
|
+
defaultTimeout = DEFAULT_MIGRATION_TIMEOUT
|
|
38
53
|
} = options,
|
|
39
54
|
client = await (0, import_getDBClient.getDBClient)({
|
|
40
55
|
connectionString
|
|
@@ -87,7 +102,8 @@ async function migrate(options) {
|
|
|
87
102
|
const sp = `sp_${migration.name.replace(/\W/g, "_")}`;
|
|
88
103
|
await client.query(`SAVEPOINT ${sp}`);
|
|
89
104
|
try {
|
|
90
|
-
|
|
105
|
+
const timeout = migration.timeout ?? defaultTimeout;
|
|
106
|
+
await withTimeout(migration.up(client), timeout, migration.name), await client.query(`RELEASE SAVEPOINT ${sp}`);
|
|
91
107
|
} catch (e) {
|
|
92
108
|
if (await client.query(`ROLLBACK TO SAVEPOINT ${sp}`), e?.code?.startsWith("42")) console.info(`[migrate] ${migration.name}: ${e.message}, recording as applied`);else throw e;
|
|
93
109
|
}
|
package/dist/cjs/migrate.js
CHANGED
|
@@ -18,7 +18,20 @@ __export(migrate_exports, {
|
|
|
18
18
|
});
|
|
19
19
|
module.exports = __toCommonJS(migrate_exports);
|
|
20
20
|
var import_node_path = require("node:path"), import_getDBClient = require("./getDBClient");
|
|
21
|
-
const isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
|
|
21
|
+
const DEFAULT_MIGRATION_TIMEOUT = 5e3, isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
|
|
22
|
+
async function withTimeout(promise, ms, name) {
|
|
23
|
+
let timeoutId;
|
|
24
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
25
|
+
timeoutId = setTimeout(() => {
|
|
26
|
+
reject(new Error(`migration "${name}" timed out after ${ms}ms`));
|
|
27
|
+
}, ms);
|
|
28
|
+
});
|
|
29
|
+
try {
|
|
30
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
31
|
+
} finally {
|
|
32
|
+
clearTimeout(timeoutId);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
22
35
|
async function migrate(options) {
|
|
23
36
|
const {
|
|
24
37
|
connectionString,
|
|
@@ -27,7 +40,8 @@ async function migrate(options) {
|
|
|
27
40
|
onMigrationComplete,
|
|
28
41
|
gitSha,
|
|
29
42
|
cvrDb,
|
|
30
|
-
changeDb
|
|
43
|
+
changeDb,
|
|
44
|
+
defaultTimeout = DEFAULT_MIGRATION_TIMEOUT
|
|
31
45
|
} = options, client = await (0, import_getDBClient.getDBClient)({ connectionString }), hasDB = async (name) => !!(await client.query(`
|
|
32
46
|
SELECT 1 FROM pg_database WHERE datname = '${name}'
|
|
33
47
|
`)).rows.length;
|
|
@@ -72,7 +86,8 @@ async function migrate(options) {
|
|
|
72
86
|
const sp = `sp_${migration.name.replace(/\W/g, "_")}`;
|
|
73
87
|
await client.query(`SAVEPOINT ${sp}`);
|
|
74
88
|
try {
|
|
75
|
-
|
|
89
|
+
const timeout = migration.timeout ?? defaultTimeout;
|
|
90
|
+
await withTimeout(migration.up(client), timeout, migration.name), await client.query(`RELEASE SAVEPOINT ${sp}`);
|
|
76
91
|
} catch (e) {
|
|
77
92
|
if (await client.query(`ROLLBACK TO SAVEPOINT ${sp}`), e?.code?.startsWith("42"))
|
|
78
93
|
console.info(
|
package/dist/cjs/migrate.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/migrate.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,uBAAyB,sBAEzB,qBAA4B;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["migrations"]
|
|
6
6
|
}
|
package/dist/esm/migrate.js
CHANGED
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
import { getDBClient } from "./getDBClient";
|
|
3
|
-
const isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
|
|
3
|
+
const DEFAULT_MIGRATION_TIMEOUT = 5e3, isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
|
|
4
|
+
async function withTimeout(promise, ms, name) {
|
|
5
|
+
let timeoutId;
|
|
6
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
7
|
+
timeoutId = setTimeout(() => {
|
|
8
|
+
reject(new Error(`migration "${name}" timed out after ${ms}ms`));
|
|
9
|
+
}, ms);
|
|
10
|
+
});
|
|
11
|
+
try {
|
|
12
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
13
|
+
} finally {
|
|
14
|
+
clearTimeout(timeoutId);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
4
17
|
async function migrate(options) {
|
|
5
18
|
const {
|
|
6
19
|
connectionString,
|
|
@@ -9,7 +22,8 @@ async function migrate(options) {
|
|
|
9
22
|
onMigrationComplete,
|
|
10
23
|
gitSha,
|
|
11
24
|
cvrDb,
|
|
12
|
-
changeDb
|
|
25
|
+
changeDb,
|
|
26
|
+
defaultTimeout = DEFAULT_MIGRATION_TIMEOUT
|
|
13
27
|
} = options, client = await getDBClient({ connectionString }), hasDB = async (name) => !!(await client.query(`
|
|
14
28
|
SELECT 1 FROM pg_database WHERE datname = '${name}'
|
|
15
29
|
`)).rows.length;
|
|
@@ -54,7 +68,8 @@ async function migrate(options) {
|
|
|
54
68
|
const sp = `sp_${migration.name.replace(/\W/g, "_")}`;
|
|
55
69
|
await client.query(`SAVEPOINT ${sp}`);
|
|
56
70
|
try {
|
|
57
|
-
|
|
71
|
+
const timeout = migration.timeout ?? defaultTimeout;
|
|
72
|
+
await withTimeout(migration.up(client), timeout, migration.name), await client.query(`RELEASE SAVEPOINT ${sp}`);
|
|
58
73
|
} catch (e) {
|
|
59
74
|
if (await client.query(`ROLLBACK TO SAVEPOINT ${sp}`), e?.code?.startsWith("42"))
|
|
60
75
|
console.info(
|
package/dist/esm/migrate.js.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/migrate.ts"],
|
|
4
|
-
"mappings": "AAUA,SAAS,gBAAgB;AAEzB,SAAS,mBAAmB;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["migrations"]
|
|
6
6
|
}
|
package/dist/esm/migrate.mjs
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { basename } from "node:path";
|
|
2
2
|
import { getDBClient } from "./getDBClient.mjs";
|
|
3
|
-
const
|
|
3
|
+
const DEFAULT_MIGRATION_TIMEOUT = 5e3,
|
|
4
|
+
isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
|
|
5
|
+
async function withTimeout(promise, ms, name) {
|
|
6
|
+
let timeoutId;
|
|
7
|
+
const timeoutPromise = new Promise((_, reject) => {
|
|
8
|
+
timeoutId = setTimeout(() => {
|
|
9
|
+
reject(new Error(`migration "${name}" timed out after ${ms}ms`));
|
|
10
|
+
}, ms);
|
|
11
|
+
});
|
|
12
|
+
try {
|
|
13
|
+
return await Promise.race([promise, timeoutPromise]);
|
|
14
|
+
} finally {
|
|
15
|
+
clearTimeout(timeoutId);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
4
18
|
async function migrate(options) {
|
|
5
19
|
const {
|
|
6
20
|
connectionString,
|
|
@@ -9,7 +23,8 @@ async function migrate(options) {
|
|
|
9
23
|
onMigrationComplete,
|
|
10
24
|
gitSha,
|
|
11
25
|
cvrDb,
|
|
12
|
-
changeDb
|
|
26
|
+
changeDb,
|
|
27
|
+
defaultTimeout = DEFAULT_MIGRATION_TIMEOUT
|
|
13
28
|
} = options,
|
|
14
29
|
client = await getDBClient({
|
|
15
30
|
connectionString
|
|
@@ -62,7 +77,8 @@ async function migrate(options) {
|
|
|
62
77
|
const sp = `sp_${migration.name.replace(/\W/g, "_")}`;
|
|
63
78
|
await client.query(`SAVEPOINT ${sp}`);
|
|
64
79
|
try {
|
|
65
|
-
|
|
80
|
+
const timeout = migration.timeout ?? defaultTimeout;
|
|
81
|
+
await withTimeout(migration.up(client), timeout, migration.name), await client.query(`RELEASE SAVEPOINT ${sp}`);
|
|
66
82
|
} catch (e) {
|
|
67
83
|
if (await client.query(`ROLLBACK TO SAVEPOINT ${sp}`), e?.code?.startsWith("42")) console.info(`[migrate] ${migration.name}: ${e.message}, recording as applied`);else throw e;
|
|
68
84
|
}
|
package/dist/esm/migrate.mjs.map
CHANGED
|
@@ -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","
|
|
1
|
+
{"version":3,"names":["basename","getDBClient","DEFAULT_MIGRATION_TIMEOUT","isServerless","process","env","AWS_LAMBDA_FUNCTION_NAME","AWS_LAMBDA_RUNTIME_API","LAMBDA_RUNTIME_DIR","IS_SERVERLESS","withTimeout","promise","ms","name","timeoutId","timeoutPromise","Promise","_","reject","setTimeout","Error","race","clearTimeout","migrate","options","connectionString","migrationsGlob","createDatabases","onMigrationComplete","gitSha","cvrDb","changeDb","defaultTimeout","client","hasDB","query","rows","length","zeroDBNames","filter","Boolean","dbUrl","appliedMigrations","appliedMigrationNames","Set","map","row","tsMigrationsSorted","Object","entries","sort","a","b","localeCompare","file","run","replace","test","migrations","all","has","error","console","then","migrations2","migration","up","sp","timeout","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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@take-out/postgres",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.26",
|
|
4
4
|
"sideEffects": false,
|
|
5
5
|
"source": "src/index.ts",
|
|
6
6
|
"main": "dist/cjs",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
}
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@take-out/helpers": "0.1.
|
|
46
|
+
"@take-out/helpers": "0.1.26",
|
|
47
47
|
"async-retry": "^1.3.3",
|
|
48
48
|
"citty": "^0.1.6"
|
|
49
49
|
},
|
package/src/migrate.ts
CHANGED
|
@@ -17,8 +17,13 @@ import type { PoolClient } from 'pg'
|
|
|
17
17
|
export type Migration = {
|
|
18
18
|
name: string
|
|
19
19
|
up?: (client: PoolClient) => Promise<void>
|
|
20
|
+
/** per-migration timeout in ms, overrides defaultTimeout */
|
|
21
|
+
timeout?: number
|
|
20
22
|
}
|
|
21
23
|
|
|
24
|
+
/** default timeout for migrations (5 seconds) */
|
|
25
|
+
const DEFAULT_MIGRATION_TIMEOUT = 5_000
|
|
26
|
+
|
|
22
27
|
export type MigrateOptions = {
|
|
23
28
|
connectionString: string
|
|
24
29
|
migrationsGlob: Record<string, () => Promise<unknown>>
|
|
@@ -27,6 +32,8 @@ export type MigrateOptions = {
|
|
|
27
32
|
gitSha?: string
|
|
28
33
|
cvrDb?: string
|
|
29
34
|
changeDb?: string
|
|
35
|
+
/** default timeout for all migrations in ms (default: 5000) */
|
|
36
|
+
defaultTimeout?: number
|
|
30
37
|
}
|
|
31
38
|
|
|
32
39
|
// check if we're running in AWS Lambda or other serverless environment
|
|
@@ -37,6 +44,20 @@ const isServerless = !!(
|
|
|
37
44
|
process.env.IS_SERVERLESS
|
|
38
45
|
)
|
|
39
46
|
|
|
47
|
+
async function withTimeout<T>(promise: Promise<T>, ms: number, name: string): Promise<T> {
|
|
48
|
+
let timeoutId: ReturnType<typeof setTimeout>
|
|
49
|
+
const timeoutPromise = new Promise<never>((_, reject) => {
|
|
50
|
+
timeoutId = setTimeout(() => {
|
|
51
|
+
reject(new Error(`migration "${name}" timed out after ${ms}ms`))
|
|
52
|
+
}, ms)
|
|
53
|
+
})
|
|
54
|
+
try {
|
|
55
|
+
return await Promise.race([promise, timeoutPromise])
|
|
56
|
+
} finally {
|
|
57
|
+
clearTimeout(timeoutId!)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
40
61
|
export async function migrate(options: MigrateOptions) {
|
|
41
62
|
const {
|
|
42
63
|
connectionString,
|
|
@@ -46,6 +67,7 @@ export async function migrate(options: MigrateOptions) {
|
|
|
46
67
|
gitSha,
|
|
47
68
|
cvrDb,
|
|
48
69
|
changeDb,
|
|
70
|
+
defaultTimeout = DEFAULT_MIGRATION_TIMEOUT,
|
|
49
71
|
} = options
|
|
50
72
|
|
|
51
73
|
const client = await getDBClient({ connectionString })
|
|
@@ -137,7 +159,8 @@ export async function migrate(options: MigrateOptions) {
|
|
|
137
159
|
const sp = `sp_${migration.name.replace(/\W/g, '_')}`
|
|
138
160
|
await client.query(`SAVEPOINT ${sp}`)
|
|
139
161
|
try {
|
|
140
|
-
|
|
162
|
+
const timeout = migration.timeout ?? defaultTimeout
|
|
163
|
+
await withTimeout(migration.up(client), timeout, migration.name)
|
|
141
164
|
await client.query(`RELEASE SAVEPOINT ${sp}`)
|
|
142
165
|
} catch (e: any) {
|
|
143
166
|
await client.query(`ROLLBACK TO SAVEPOINT ${sp}`)
|
package/types/migrate.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ import type { PoolClient } from 'pg';
|
|
|
11
11
|
export type Migration = {
|
|
12
12
|
name: string;
|
|
13
13
|
up?: (client: PoolClient) => Promise<void>;
|
|
14
|
+
/** per-migration timeout in ms, overrides defaultTimeout */
|
|
15
|
+
timeout?: number;
|
|
14
16
|
};
|
|
15
17
|
export type MigrateOptions = {
|
|
16
18
|
connectionString: string;
|
|
@@ -20,6 +22,8 @@ export type MigrateOptions = {
|
|
|
20
22
|
gitSha?: string;
|
|
21
23
|
cvrDb?: string;
|
|
22
24
|
changeDb?: string;
|
|
25
|
+
/** default timeout for all migrations in ms (default: 5000) */
|
|
26
|
+
defaultTimeout?: number;
|
|
23
27
|
};
|
|
24
28
|
export declare function migrate(options: MigrateOptions): Promise<void>;
|
|
25
29
|
//# sourceMappingURL=migrate.d.ts.map
|
package/types/migrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAEpC,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../src/migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAEpC,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC1C,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAKD,MAAM,MAAM,cAAc,GAAG;IAC3B,gBAAgB,EAAE,MAAM,CAAA;IACxB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IACtD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACzC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,+DAA+D;IAC/D,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB,CAAA;AAwBD,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,iBAwJpD"}
|