@take-out/postgres 0.1.22 → 0.1.24

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.
@@ -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 isServerless = !!(process.env.AWS_LAMBDA_FUNCTION_NAME || process.env.AWS_LAMBDA_RUNTIME_API || process.env.LAMBDA_RUNTIME_DIR || process.env.IS_SERVERLESS);
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
- await migration.up(client), await client.query(`RELEASE SAVEPOINT ${sp}`);
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
  }
@@ -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
- await migration.up(client), await client.query(`RELEASE SAVEPOINT ${sp}`);
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(
@@ -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;AAoB5B,MAAM,eAAe,CAAC,EACpB,QAAQ,IAAI,4BACZ,QAAQ,IAAI,0BACZ,QAAQ,IAAI,sBACZ,QAAQ,IAAI;AAGd,eAAsB,QAAQ,SAAyB;AACrD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,kBAAkB,CAAC;AAAA,IACnB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,SAEE,SAAS,UAAM,gCAAY,EAAE,iBAAiB,CAAC,GAE/C,QAAQ,OAAO,SACJ,CAAC,EACd,MAAM,OAAO,MAAM;AAAA,qDAC4B,IAAI;AAAA,OAClD,GACD,KAAK;AAMT,MAAI,SAAS,UAAU;AACrB,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,eAAe;AAGjC,UAAM,cAAc,KAAC,2BAAS,SAAS,EAAE,OAAG,2BAAS,YAAY,EAAE,CAAC,EAAE,OAAO,OAAO;AAEpF,eAAW,QAAQ;AACjB,MAAM,MAAM,MAAM,IAAI,KACpB,MAAM,OAAO,MAAM,mBAAmB,IAAI,GAAG;AAAA,EAGnD;AAGA,aAAW,SAAS,iBAAiB;AACnC,UAAM,WAAO,2BAAS,KAAK;AAC3B,IAAM,MAAM,MAAM,IAAI,KACpB,MAAM,OAAO,MAAM,mBAAmB,IAAI,GAAG;AAAA,EAEjD;AAEA,MAAI;AACF,UAAM,OAAO,MAAM,OAAO,GAG1B,MAAM,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMlB;AAED,UAAM,oBAAoB,MAAM,OAAO,MAAM,oCAAoC,GAC3E,wBAAwB,IAAI,IAAI,kBAAkB,KAAK,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,GAG7E,qBAAqB,OAAO,QAAQ,cAAc,EACrD,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,EACrC,IAAI,CAAC,CAAC,MAAM,GAAG,OAAO;AAAA,MACrB,UAAM,2BAAS,IAAI,EAAE,QAAQ,OAAO,EAAE;AAAA,MACtC;AAAA,IACF,EAAE,EACD,OAAO,CAAC,EAAE,KAAK,MAAM,SAAS,KAAK,IAAI,CAAC,GAmBrC,aAAa,CAAC,GAhBc,MAAM,QAAQ;AAAA,MAC9C,mBAAmB,IAAI,OAAO,EAAE,MAAM,IAAI,MAAM;AAC9C,YAAI,sBAAsB,IAAI,IAAI;AAChC,iBAAO;AAET,YAAI;AAEF,iBAAO,EAAE,GADU,MAAM,IAAI,GACN,KAAK;AAAA,QAC9B,SAAS,OAAO;AACd,wBAAQ,MAAM,uCAAuC,IAAI,KAAK,KAAK,GAC7D;AAAA,QACR;AAAA,MACF,CAAC;AAAA,IACH,EAAE,KAAK,CAACA,gBAAeA,YAAW,OAAO,OAAO,CAAgB,CAG7B,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,cAAc,EAAE,IAAI,CAAC;AAEhF,QAAI,CAAC,WAAW;AACd,YAAM,OAAO,MAAM,QAAQ;AAAA,SACtB;AACL,iBAAW,aAAa,YAAY;AAClC,YAAI,UAAU,IAAI;AAIhB,gBAAM,KAAK,MAAM,UAAU,KAAK,QAAQ,OAAO,GAAG,CAAC;AACnD,gBAAM,OAAO,MAAM,aAAa,EAAE,EAAE;AACpC,cAAI;AACF,kBAAM,UAAU,GAAG,MAAM,GACzB,MAAM,OAAO,MAAM,qBAAqB,EAAE,EAAE;AAAA,UAC9C,SAAS,GAAQ;AAGf,gBAFA,MAAM,OAAO,MAAM,yBAAyB,EAAE,EAAE,GAE5C,GAAG,MAAM,WAAW,IAAI;AAC1B,sBAAQ;AAAA,gBACN,aAAa,UAAU,IAAI,KAAK,EAAE,OAAO;AAAA,cAC3C;AAAA;AAEA,oBAAM;AAAA,UAEV;AAAA,QACF;AAEA,cAAM,OAAO,MAAM,oDAAoD;AAAA,UACrE,UAAU;AAAA,QACZ,CAAC;AAAA,MACH;AAEA,YAAM,OAAO,MAAM,QAAQ;AAAA,IAC7B;AAAA,EACF,SAAS,GAAG;AACV,YAAQ,MAAM,mCAAmC,CAAC,GAClD,MAAM,OAAO,MAAM,UAAU;AAC7B,QAAI;AACF,aAAO,QAAQ,EAAK;AAAA,IACtB,SAAS,YAAY;AACnB,cAAQ,MAAM,8CAA8C,UAAU;AAAA,IACxE;AACA,UAAM;AAAA,EACR;AAEA,EAAI,uBACF,MAAM,oBAAoB;AAG5B,MAAI;AAEF,WAAO,QAAQ,EAAK;AAAA,EACtB,SAAS,KAAK;AACZ,YAAQ,MAAM,6DAA6D,GAAG;AAC9E,QAAI;AACF,aAAO,QAAQ,EAAI;AAAA,IACrB,SAAS,YAAY;AACnB,cAAQ,MAAM,gCAAgC,UAAU;AAAA,IAC1D;AAAA,EACF;AAEA,cAAY;AACd;AAEA,SAAS,cAAc;AACrB,EAAI,OAAO,UAAY,OAEnB,gBACJ,QAAQ,KAAK,CAAC;AAChB;",
4
+ "mappings": "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",
5
5
  "names": ["migrations"]
6
6
  }
@@ -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
- await migration.up(client), await client.query(`RELEASE SAVEPOINT ${sp}`);
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(
@@ -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
  }
@@ -1,6 +1,20 @@
1
1
  import { basename } from "node:path";
2
2
  import { getDBClient } from "./getDBClient.mjs";
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,
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
- await migration.up(client), await client.query(`RELEASE SAVEPOINT ${sp}`);
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
  }
@@ -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","sp","e","code","startsWith","info","message","release","releaseErr","err","destroyErr","exitProcess","exit"],"sources":["../../src/migrate.ts"],"sourcesContent":[null],"mappings":"AAUA,SAASA,QAAA,QAAgB;AAEzB,SAASC,WAAA,QAAmB;AAoB5B,MAAMC,YAAA,GAAe,CAAC,EACpBC,OAAA,CAAQC,GAAA,CAAIC,wBAAA,IACZF,OAAA,CAAQC,GAAA,CAAIE,sBAAA,IACZH,OAAA,CAAQC,GAAA,CAAIG,kBAAA,IACZJ,OAAA,CAAQC,GAAA,CAAII,aAAA;AAGd,eAAsBC,QAAQC,OAAA,EAAyB;EACrD,MAAM;MACJC,gBAAA;MACAC,cAAA;MACAC,eAAA,GAAkB,EAAC;MACnBC,mBAAA;MACAC,MAAA;MACAC,KAAA;MACAC;IACF,IAAIP,OAAA;IAEEQ,MAAA,GAAS,MAAMjB,WAAA,CAAY;MAAEU;IAAiB,CAAC;IAE/CQ,KAAA,GAAQ,MAAOC,IAAA,IACJ,CAAC,EACd,MAAMF,MAAA,CAAOG,KAAA,CAAM;AAAA,qDAC4BD,IAAI;AAAA,OAClD,GACDE,IAAA,CAAKC,MAAA;EAMT,IAAIP,KAAA,IAASC,QAAA,EAAU;IACrB,IAAI,CAACD,KAAA,EACH,MAAM,IAAIQ,KAAA,CAAM,eAAe;IAGjC,MAAMC,WAAA,GAAc,CAACzB,QAAA,CAASgB,KAAA,IAAS,EAAE,GAAGhB,QAAA,CAASiB,QAAA,IAAY,EAAE,CAAC,EAAES,MAAA,CAAOC,OAAO;IAEpF,WAAWP,IAAA,IAAQK,WAAA,EACX,OAAMN,KAAA,CAAMC,IAAI,OACpB,MAAMF,MAAA,CAAOG,KAAA,CAAM,mBAAmBD,IAAI,GAAG;EAGnD;EAGA,WAAWQ,KAAA,IAASf,eAAA,EAAiB;IACnC,MAAMO,IAAA,GAAOpB,QAAA,CAAS4B,KAAK;IACrB,OAAMT,KAAA,CAAMC,IAAI,OACpB,MAAMF,MAAA,CAAOG,KAAA,CAAM,mBAAmBD,IAAI,GAAG;EAEjD;EAEA,IAAI;IACF,MAAMF,MAAA,CAAOG,KAAA,CAAM,OAAO,GAG1B,MAAMH,MAAA,CAAOG,KAAA,CAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAMlB;IAED,MAAMQ,iBAAA,GAAoB,MAAMX,MAAA,CAAOG,KAAA,CAAM,oCAAoC;MAC3ES,qBAAA,GAAwB,IAAIC,GAAA,CAAIF,iBAAA,CAAkBP,IAAA,CAAKU,GAAA,CAAKC,GAAA,IAAQA,GAAA,CAAIb,IAAI,CAAC;MAG7Ec,kBAAA,GAAqBC,MAAA,CAAOC,OAAA,CAAQxB,cAAc,EACrDyB,IAAA,CAAK,CAAC,CAACC,CAAC,GAAG,CAACC,CAAC,MAAMD,CAAA,CAAEE,aAAA,CAAcD,CAAC,CAAC,EACrCP,GAAA,CAAI,CAAC,CAACS,IAAA,EAAMC,GAAG,OAAO;QACrBtB,IAAA,EAAMpB,QAAA,CAASyC,IAAI,EAAEE,OAAA,CAAQ,OAAO,EAAE;QACtCD;MACF,EAAE,EACDhB,MAAA,CAAO,CAAC;QAAEN;MAAK,MAAM,SAASwB,IAAA,CAAKxB,IAAI,CAAC;MAmBrCyB,UAAA,GAAa,CAAC,IAhBc,MAAMC,OAAA,CAAQC,GAAA,CAC9Cb,kBAAA,CAAmBF,GAAA,CAAI,OAAO;QAAEZ,IAAA;QAAMsB;MAAI,MAAM;QAC9C,IAAIZ,qBAAA,CAAsBkB,GAAA,CAAI5B,IAAI,GAChC,OAAO;QAET,IAAI;UAEF,OAAO;YAAE,IADU,MAAMsB,GAAA,CAAI;YACNtB;UAAK;QAC9B,SAAS6B,KAAA,EAAO;UACd,MAAAC,OAAA,CAAQD,KAAA,CAAM,uCAAuC7B,IAAI,KAAK6B,KAAK,GAC7DA,KAAA;QACR;MACF,CAAC,CACH,EAAEE,IAAA,CAAMC,WAAA,IAAeA,WAAA,CAAW1B,MAAA,CAAOC,OAAO,CAAgB,CAG7B,GAAEU,IAAA,CAAK,CAACC,CAAA,EAAGC,CAAA,KAAMD,CAAA,CAAElB,IAAA,CAAKoB,aAAA,CAAcD,CAAA,CAAEnB,IAAI,CAAC;IAEhF,IAAI,CAACyB,UAAA,CAAWtB,MAAA,EACd,MAAML,MAAA,CAAOG,KAAA,CAAM,QAAQ,OACtB;MACL,WAAWgC,SAAA,IAAaR,UAAA,EAAY;QAClC,IAAIQ,SAAA,CAAUC,EAAA,EAAI;UAIhB,MAAMC,EAAA,GAAK,MAAMF,SAAA,CAAUjC,IAAA,CAAKuB,OAAA,CAAQ,OAAO,GAAG,CAAC;UACnD,MAAMzB,MAAA,CAAOG,KAAA,CAAM,aAAakC,EAAE,EAAE;UACpC,IAAI;YACF,MAAMF,SAAA,CAAUC,EAAA,CAAGpC,MAAM,GACzB,MAAMA,MAAA,CAAOG,KAAA,CAAM,qBAAqBkC,EAAE,EAAE;UAC9C,SAASC,CAAA,EAAQ;YAGf,IAFA,MAAMtC,MAAA,CAAOG,KAAA,CAAM,yBAAyBkC,EAAE,EAAE,GAE5CC,CAAA,EAAGC,IAAA,EAAMC,UAAA,CAAW,IAAI,GAC1BR,OAAA,CAAQS,IAAA,CACN,aAAaN,SAAA,CAAUjC,IAAI,KAAKoC,CAAA,CAAEI,OAAO,wBAC3C,OAEA,MAAMJ,CAAA;UAEV;QACF;QAEA,MAAMtC,MAAA,CAAOG,KAAA,CAAM,oDAAoD,CACrEgC,SAAA,CAAUjC,IAAA,CACX;MACH;MAEA,MAAMF,MAAA,CAAOG,KAAA,CAAM,QAAQ;IAC7B;EACF,SAASmC,CAAA,EAAG;IACVN,OAAA,CAAQD,KAAA,CAAM,mCAAmCO,CAAC,GAClD,MAAMtC,MAAA,CAAOG,KAAA,CAAM,UAAU;IAC7B,IAAI;MACFH,MAAA,CAAO2C,OAAA,CAAQ,EAAK;IACtB,SAASC,UAAA,EAAY;MACnBZ,OAAA,CAAQD,KAAA,CAAM,8CAA8Ca,UAAU;IACxE;IACA,MAAMN,CAAA;EACR;EAEI1C,mBAAA,KACF,MAAMA,mBAAA,CAAoB;EAG5B,IAAI;IAEFI,MAAA,CAAO2C,OAAA,CAAQ,EAAK;EACtB,SAASE,GAAA,EAAK;IACZb,OAAA,CAAQD,KAAA,CAAM,6DAA6Dc,GAAG;IAC9E,IAAI;MACF7C,MAAA,CAAO2C,OAAA,CAAQ,EAAI;IACrB,SAASG,UAAA,EAAY;MACnBd,OAAA,CAAQD,KAAA,CAAM,gCAAgCe,UAAU;IAC1D;EACF;EAEAC,WAAA,CAAY;AACd;AAEA,SAASA,YAAA,EAAc;EACjB,OAAO9D,OAAA,GAAY,OAEnBD,YAAA,IACJC,OAAA,CAAQ+D,IAAA,CAAK,CAAC;AAChB","ignoreList":[]}
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.22",
3
+ "version": "0.1.24",
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.22",
46
+ "@take-out/helpers": "0.1.24",
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
- await migration.up(client)
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}`)
@@ -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
@@ -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;CAC3C,CAAA;AAED,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;CAClB,CAAA;AAUD,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,iBAsJpD"}
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"}