@juit/pgproxy-utils 1.3.7 → 1.4.0

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/migrate.cjs CHANGED
@@ -30,14 +30,14 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  mod
31
31
  ));
32
32
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
33
- var __using = (stack, value, async) => {
33
+ var __using = (stack, value, async2) => {
34
34
  if (value != null) {
35
35
  if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
36
36
  var dispose, inner;
37
- if (async) dispose = value[__knownSymbol("asyncDispose")];
37
+ if (async2) dispose = value[__knownSymbol("asyncDispose")];
38
38
  if (dispose === void 0) {
39
39
  dispose = value[__knownSymbol("dispose")];
40
- if (async) inner = dispose;
40
+ if (async2) inner = dispose;
41
41
  }
42
42
  if (typeof dispose !== "function") __typeError("Object not disposable");
43
43
  if (inner) dispose = function() {
@@ -47,9 +47,9 @@ var __using = (stack, value, async) => {
47
47
  return Promise.reject(e);
48
48
  }
49
49
  };
50
- stack.push([async, dispose, value]);
51
- } else if (async) {
52
- stack.push([async]);
50
+ stack.push([async2, dispose, value]);
51
+ } else if (async2) {
52
+ stack.push([async2]);
53
53
  }
54
54
  return value;
55
55
  };
@@ -86,6 +86,12 @@ var migrationsExpression = /^([0-9]+)[^\w](.*)\.(sql)$/i;
86
86
  async function migrate(url, options) {
87
87
  var _stack = [];
88
88
  try {
89
+ const context = import_plug.async.currentContext();
90
+ if (!context) {
91
+ const filename = import_plug.paths.requireFilename(__filename);
92
+ const newContext = new import_plug.pipe.Context(filename, "");
93
+ return import_plug.async.runAsync(newContext, () => migrate(url, options));
94
+ }
89
95
  const {
90
96
  /* Default to our "../sql" migrations directory */
91
97
  migrations: migrationsDirectory = (0, import_plug.resolve)("sql"),
@@ -118,10 +124,10 @@ async function migrate(url, options) {
118
124
  const client = __using(_stack, new import_pgproxy_client.PGClient(url), true);
119
125
  const connection = __using(_stack, await client.connect(), true);
120
126
  const info = await connection.query("SELECT current_database() AS name");
121
- import_plug.log.notice(`Migrating database ${(0, import_plug.$ylw)(info.rows[0].name)} ${(0, import_plug.$gry)(`(group=${group})`)}`);
122
- import_plug.log.info("Beginning migrations transaction");
127
+ context.log.notice(`Migrating database ${(0, import_plug.$ylw)(info.rows[0].name)} ${(0, import_plug.$gry)(`(group=${group})`)}`);
128
+ context.log.info("Beginning migrations transaction");
123
129
  await connection.begin();
124
- import_plug.log.info(`Ensuring presence of ${(0, import_plug.$blu)("$migrations")} table`);
130
+ context.log.info(`Ensuring presence of ${(0, import_plug.$blu)("$migrations")} table`);
125
131
  await connection.query(`
126
132
  SET LOCAL client_min_messages TO WARNING;
127
133
  CREATE TABLE IF NOT EXISTS "$migrations" (
@@ -132,9 +138,9 @@ async function migrate(url, options) {
132
138
  "sha256sum" BYTEA NOT NULL,
133
139
  PRIMARY KEY ("group", "number")
134
140
  );`);
135
- import_plug.log.info(`Lock exclusive use of ${(0, import_plug.$blu)("$migrations")} table`);
141
+ context.log.info(`Lock exclusive use of ${(0, import_plug.$blu)("$migrations")} table`);
136
142
  await connection.query('LOCK TABLE "$migrations"');
137
- import_plug.log.info(`Looking for entries in ${(0, import_plug.$blu)("$migrations")} table ${(0, import_plug.$gry)(`(group=${group})`)}`);
143
+ context.log.info(`Looking for entries in ${(0, import_plug.$blu)("$migrations")} table ${(0, import_plug.$gry)(`(group=${group})`)}`);
138
144
  const result = await connection.query(
139
145
  import_pgproxy_client.SQL`SELECT * FROM "$migrations" WHERE "group" = ${group}`
140
146
  );
@@ -150,22 +156,22 @@ async function migrate(url, options) {
150
156
  if (prev) {
151
157
  if (sha256sum.equals(prev.sha256sum)) {
152
158
  const timestamp = prev.timestamp.toISOString().substring(0, 19).replace("T", " ");
153
- import_plug.log.notice(`Skipping migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$blu)(name)}`, (0, import_plug.$gry)(`applied on ${(0, import_plug.$und)(timestamp)}`));
159
+ context.log.notice(`Skipping migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$blu)(name)}`, (0, import_plug.$gry)(`applied on ${(0, import_plug.$und)(timestamp)}`));
154
160
  } else {
155
- import_plug.log.error(`Failed migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$ylw)(name)}`);
161
+ context.log.error(`Failed migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$ylw)(name)}`);
156
162
  const currHash = sha256sum.toString("hex").substring(0, 6);
157
163
  const prevHash = Buffer.from(prev.sha256sum).toString("hex").substring(0, 6);
158
164
  throw new Error(`Migration ${group}@${num} (${name}) has checksum "${currHash}" but was recorded as "${prevHash}"`);
159
165
  }
160
166
  } else {
161
167
  try {
162
- import_plug.log.notice(`Applying migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$blu)(name)}`);
168
+ context.log.notice(`Applying migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$blu)(name)}`);
163
169
  await connection.query(contents);
164
170
  await connection.query(import_pgproxy_client.SQL`INSERT INTO "$migrations" ("group", "number", "name", "sha256sum")
165
171
  VALUES (${group}, ${number}, ${name}, ${sha256sum})`);
166
172
  count++;
167
173
  } catch (error) {
168
- import_plug.log.error(`Failed migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$ylw)(name)}`);
174
+ context.log.error(`Failed migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$ylw)(name)}`);
169
175
  const message = error.message.split("\n").map((s) => ` ${s}`).join("\n");
170
176
  error.message = `Failed migration ${group}@${num} (${name}):
171
177
  ${message}`;
@@ -173,9 +179,9 @@ ${message}`;
173
179
  }
174
180
  }
175
181
  }
176
- import_plug.log.info("Committing migrations transaction");
182
+ context.log.info("Committing migrations transaction");
177
183
  await connection.commit();
178
- import_plug.log.notice(`Applied ${(0, import_plug.$ylw)(count)} migrations ${(0, import_plug.$ms)(Date.now() - now)}`);
184
+ context.log.notice(`Applied ${(0, import_plug.$ylw)(count)} migrations ${(0, import_plug.$ms)(Date.now() - now)}`);
179
185
  return count;
180
186
  } catch (_) {
181
187
  var _error = _, _hasError = true;
@@ -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": ["additional", "crypto", "applied", "group"]
6
6
  }
package/dist/migrate.mjs CHANGED
@@ -2,14 +2,14 @@ var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.
2
2
  var __typeError = (msg) => {
3
3
  throw TypeError(msg);
4
4
  };
5
- var __using = (stack, value, async) => {
5
+ var __using = (stack, value, async2) => {
6
6
  if (value != null) {
7
7
  if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
8
8
  var dispose, inner;
9
- if (async) dispose = value[__knownSymbol("asyncDispose")];
9
+ if (async2) dispose = value[__knownSymbol("asyncDispose")];
10
10
  if (dispose === void 0) {
11
11
  dispose = value[__knownSymbol("dispose")];
12
- if (async) inner = dispose;
12
+ if (async2) inner = dispose;
13
13
  }
14
14
  if (typeof dispose !== "function") __typeError("Object not disposable");
15
15
  if (inner) dispose = function() {
@@ -19,9 +19,9 @@ var __using = (stack, value, async) => {
19
19
  return Promise.reject(e);
20
20
  }
21
21
  };
22
- stack.push([async, dispose, value]);
23
- } else if (async) {
24
- stack.push([async]);
22
+ stack.push([async2, dispose, value]);
23
+ } else if (async2) {
24
+ stack.push([async2]);
25
25
  }
26
26
  return value;
27
27
  };
@@ -48,11 +48,17 @@ var __callDispose = (stack, error, hasError) => {
48
48
  import crypto from "node:crypto";
49
49
  import { basename } from "node:path";
50
50
  import { PGClient, SQL } from "@juit/pgproxy-client";
51
- import { $blu, $grn, $gry, $ms, $und, $ylw, find, fs, log, merge, resolve } from "@plugjs/plug";
51
+ import { $blu, $grn, $gry, $ms, $und, $ylw, async, find, fs, merge, paths, pipe, resolve } from "@plugjs/plug";
52
52
  var migrationsExpression = /^([0-9]+)[^\w](.*)\.(sql)$/i;
53
53
  async function migrate(url, options) {
54
54
  var _stack = [];
55
55
  try {
56
+ const context = async.currentContext();
57
+ if (!context) {
58
+ const filename = paths.requireFilename(import.meta.url);
59
+ const newContext = new pipe.Context(filename, "");
60
+ return async.runAsync(newContext, () => migrate(url, options));
61
+ }
56
62
  const {
57
63
  /* Default to our "../sql" migrations directory */
58
64
  migrations: migrationsDirectory = resolve("sql"),
@@ -85,10 +91,10 @@ async function migrate(url, options) {
85
91
  const client = __using(_stack, new PGClient(url), true);
86
92
  const connection = __using(_stack, await client.connect(), true);
87
93
  const info = await connection.query("SELECT current_database() AS name");
88
- log.notice(`Migrating database ${$ylw(info.rows[0].name)} ${$gry(`(group=${group})`)}`);
89
- log.info("Beginning migrations transaction");
94
+ context.log.notice(`Migrating database ${$ylw(info.rows[0].name)} ${$gry(`(group=${group})`)}`);
95
+ context.log.info("Beginning migrations transaction");
90
96
  await connection.begin();
91
- log.info(`Ensuring presence of ${$blu("$migrations")} table`);
97
+ context.log.info(`Ensuring presence of ${$blu("$migrations")} table`);
92
98
  await connection.query(`
93
99
  SET LOCAL client_min_messages TO WARNING;
94
100
  CREATE TABLE IF NOT EXISTS "$migrations" (
@@ -99,9 +105,9 @@ async function migrate(url, options) {
99
105
  "sha256sum" BYTEA NOT NULL,
100
106
  PRIMARY KEY ("group", "number")
101
107
  );`);
102
- log.info(`Lock exclusive use of ${$blu("$migrations")} table`);
108
+ context.log.info(`Lock exclusive use of ${$blu("$migrations")} table`);
103
109
  await connection.query('LOCK TABLE "$migrations"');
104
- log.info(`Looking for entries in ${$blu("$migrations")} table ${$gry(`(group=${group})`)}`);
110
+ context.log.info(`Looking for entries in ${$blu("$migrations")} table ${$gry(`(group=${group})`)}`);
105
111
  const result = await connection.query(
106
112
  SQL`SELECT * FROM "$migrations" WHERE "group" = ${group}`
107
113
  );
@@ -117,22 +123,22 @@ async function migrate(url, options) {
117
123
  if (prev) {
118
124
  if (sha256sum.equals(prev.sha256sum)) {
119
125
  const timestamp = prev.timestamp.toISOString().substring(0, 19).replace("T", " ");
120
- log.notice(`Skipping migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`, $gry(`applied on ${$und(timestamp)}`));
126
+ context.log.notice(`Skipping migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`, $gry(`applied on ${$und(timestamp)}`));
121
127
  } else {
122
- log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`);
128
+ context.log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`);
123
129
  const currHash = sha256sum.toString("hex").substring(0, 6);
124
130
  const prevHash = Buffer.from(prev.sha256sum).toString("hex").substring(0, 6);
125
131
  throw new Error(`Migration ${group}@${num} (${name}) has checksum "${currHash}" but was recorded as "${prevHash}"`);
126
132
  }
127
133
  } else {
128
134
  try {
129
- log.notice(`Applying migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`);
135
+ context.log.notice(`Applying migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`);
130
136
  await connection.query(contents);
131
137
  await connection.query(SQL`INSERT INTO "$migrations" ("group", "number", "name", "sha256sum")
132
138
  VALUES (${group}, ${number}, ${name}, ${sha256sum})`);
133
139
  count++;
134
140
  } catch (error) {
135
- log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`);
141
+ context.log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`);
136
142
  const message = error.message.split("\n").map((s) => ` ${s}`).join("\n");
137
143
  error.message = `Failed migration ${group}@${num} (${name}):
138
144
  ${message}`;
@@ -140,9 +146,9 @@ ${message}`;
140
146
  }
141
147
  }
142
148
  }
143
- log.info("Committing migrations transaction");
149
+ context.log.info("Committing migrations transaction");
144
150
  await connection.commit();
145
- log.notice(`Applied ${$ylw(count)} migrations ${$ms(Date.now() - now)}`);
151
+ context.log.notice(`Applied ${$ylw(count)} migrations ${$ms(Date.now() - now)}`);
146
152
  return count;
147
153
  } catch (_) {
148
154
  var _error = _, _hasError = true;
@@ -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": ["additional", "applied", "group"]
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juit/pgproxy-utils",
3
- "version": "1.3.7",
3
+ "version": "1.4.0",
4
4
  "main": "./dist/index.cjs",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
@@ -43,9 +43,8 @@
43
43
  "src/"
44
44
  ],
45
45
  "dependencies": {
46
- "@juit/pgproxy-client": "1.3.7",
47
- "@juit/pgproxy-persister": "1.3.7",
48
- "@juit/pgproxy-types": "1.3.7",
46
+ "@juit/pgproxy-client": "1.4.0",
47
+ "@juit/pgproxy-types": "1.4.0",
49
48
  "@plugjs/plug": "^0.6.78"
50
49
  }
51
50
  }
package/src/migrate.ts CHANGED
@@ -2,7 +2,7 @@ import crypto from 'node:crypto'
2
2
  import { basename } from 'node:path'
3
3
 
4
4
  import { PGClient, SQL } from '@juit/pgproxy-client'
5
- import { $blu, $grn, $gry, $ms, $und, $ylw, find, fs, log, merge, resolve } from '@plugjs/plug'
5
+ import { $blu, $grn, $gry, $ms, $und, $ylw, async, find, fs, merge, paths, pipe, resolve } from '@plugjs/plug'
6
6
 
7
7
  /* ========================================================================== *
8
8
  * INTERNALS *
@@ -46,6 +46,14 @@ export async function migrate(
46
46
  url: string | URL,
47
47
  options?: MigrationOptions,
48
48
  ): Promise<number> {
49
+ const context = async.currentContext()
50
+ // coverage ignore next // we always have a context in tests...
51
+ if (! context) {
52
+ const filename = paths.requireFilename(__fileurl) // self, for context
53
+ const newContext = new pipe.Context(filename, '') // context for pipes
54
+ return async.runAsync(newContext, () => migrate(url, options))
55
+ }
56
+
49
57
  const {
50
58
  /* Default to our "../sql" migrations directory */
51
59
  migrations: migrationsDirectory = resolve('sql'),
@@ -98,15 +106,15 @@ export async function migrate(
98
106
  await using connection = await client.connect()
99
107
 
100
108
  const info = await connection.query<{ name: string }>('SELECT current_database() AS name')
101
- log.notice(`Migrating database ${$ylw((info.rows[0]!.name))} ${$gry(`(group=${group})`)}`)
109
+ context.log.notice(`Migrating database ${$ylw((info.rows[0]!.name))} ${$gry(`(group=${group})`)}`)
102
110
 
103
111
  // const model = connection.in('$migrations')
104
112
 
105
- log.info('Beginning migrations transaction')
113
+ context.log.info('Beginning migrations transaction')
106
114
  await connection.begin()
107
115
 
108
116
  /* First of all, make sure we have our "$migrations" table */
109
- log.info(`Ensuring presence of ${$blu('$migrations')} table`)
117
+ context.log.info(`Ensuring presence of ${$blu('$migrations')} table`)
110
118
  await connection.query(`
111
119
  SET LOCAL client_min_messages TO WARNING;
112
120
  CREATE TABLE IF NOT EXISTS "$migrations" (
@@ -119,11 +127,11 @@ export async function migrate(
119
127
  );`)
120
128
 
121
129
  /* Lock our migrations table */
122
- log.info(`Lock exclusive use of ${$blu('$migrations')} table`)
130
+ context.log.info(`Lock exclusive use of ${$blu('$migrations')} table`)
123
131
  await connection.query('LOCK TABLE "$migrations"')
124
132
 
125
133
  /* Gather all applied migrations */
126
- log.info(`Looking for entries in ${$blu('$migrations')} table ${$gry(`(group=${group})`)}`)
134
+ context.log.info(`Looking for entries in ${$blu('$migrations')} table ${$gry(`(group=${group})`)}`)
127
135
  const result = await connection.query<AppliedMigration>(
128
136
  SQL`SELECT * FROM "$migrations" WHERE "group" = ${group}`,
129
137
  )
@@ -143,22 +151,22 @@ export async function migrate(
143
151
  if (prev) {
144
152
  if (sha256sum.equals(prev.sha256sum)) {
145
153
  const timestamp = prev.timestamp.toISOString().substring(0, 19).replace('T', ' ')
146
- log.notice(`Skipping migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`, $gry(`applied on ${$und(timestamp)}`))
154
+ context.log.notice(`Skipping migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`, $gry(`applied on ${$und(timestamp)}`))
147
155
  } else {
148
- log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`)
156
+ context.log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`)
149
157
  const currHash = sha256sum.toString('hex').substring(0, 6)
150
158
  const prevHash = Buffer.from(prev.sha256sum).toString('hex').substring(0, 6)
151
159
  throw new Error(`Migration ${group}@${num} (${name}) has checksum "${currHash}" but was recorded as "${prevHash}"`)
152
160
  }
153
161
  } else {
154
162
  try {
155
- log.notice(`Applying migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`)
163
+ context.log.notice(`Applying migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`)
156
164
  await connection.query(contents)
157
165
  await connection.query(SQL`INSERT INTO "$migrations" ("group", "number", "name", "sha256sum")
158
166
  VALUES (${group}, ${number}, ${name}, ${sha256sum})`)
159
167
  count ++
160
168
  } catch (error: any) {
161
- log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`)
169
+ context.log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`)
162
170
  const message = error.message.split('\n').map((s: string) => ` ${s}`).join('\n')
163
171
  error.message = `Failed migration ${group}@${num} (${name}):\n${message}`
164
172
  throw error
@@ -167,10 +175,10 @@ export async function migrate(
167
175
  }
168
176
 
169
177
  /* Commit our migrations */
170
- log.info('Committing migrations transaction')
178
+ context.log.info('Committing migrations transaction')
171
179
  await connection.commit()
172
180
 
173
181
  /* All done */
174
- log.notice(`Applied ${$ylw(count)} migrations ${$ms(Date.now() - now)}`)
182
+ context.log.notice(`Applied ${$ylw(count)} migrations ${$ms(Date.now() - now)}`)
175
183
  return count
176
184
  }