@juit/pgproxy-utils 1.2.1 → 1.3.1
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/database.cjs +71 -12
- package/dist/database.cjs.map +1 -1
- package/dist/database.mjs +72 -12
- package/dist/database.mjs.map +1 -1
- package/dist/extract.cjs +68 -21
- package/dist/extract.cjs.map +1 -1
- package/dist/extract.d.ts +0 -1
- package/dist/extract.mjs +69 -21
- package/dist/extract.mjs.map +1 -1
- package/dist/migrate.cjs +101 -47
- package/dist/migrate.cjs.map +1 -1
- package/dist/migrate.mjs +102 -47
- package/dist/migrate.mjs.map +1 -1
- package/dist/serialize.cjs +0 -1
- package/dist/serialize.cjs.map +1 -1
- package/dist/serialize.d.ts +0 -1
- package/dist/serialize.mjs +0 -1
- package/dist/serialize.mjs.map +1 -1
- package/package.json +5 -5
- package/src/database.ts +5 -7
- package/src/extract.ts +3 -9
- package/src/migrate.ts +81 -82
- package/src/serialize.ts +0 -1
package/dist/migrate.cjs
CHANGED
|
@@ -5,6 +5,10 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
9
|
+
var __typeError = (msg) => {
|
|
10
|
+
throw TypeError(msg);
|
|
11
|
+
};
|
|
8
12
|
var __export = (target, all) => {
|
|
9
13
|
for (var name in all)
|
|
10
14
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -26,6 +30,47 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
26
30
|
mod
|
|
27
31
|
));
|
|
28
32
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
33
|
+
var __using = (stack, value, async) => {
|
|
34
|
+
if (value != null) {
|
|
35
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
36
|
+
var dispose, inner;
|
|
37
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
38
|
+
if (dispose === void 0) {
|
|
39
|
+
dispose = value[__knownSymbol("dispose")];
|
|
40
|
+
if (async) inner = dispose;
|
|
41
|
+
}
|
|
42
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
43
|
+
if (inner) dispose = function() {
|
|
44
|
+
try {
|
|
45
|
+
inner.call(this);
|
|
46
|
+
} catch (e) {
|
|
47
|
+
return Promise.reject(e);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
stack.push([async, dispose, value]);
|
|
51
|
+
} else if (async) {
|
|
52
|
+
stack.push([async]);
|
|
53
|
+
}
|
|
54
|
+
return value;
|
|
55
|
+
};
|
|
56
|
+
var __callDispose = (stack, error, hasError) => {
|
|
57
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
58
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
59
|
+
};
|
|
60
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
61
|
+
var next = (it) => {
|
|
62
|
+
while (it = stack.pop()) {
|
|
63
|
+
try {
|
|
64
|
+
var result = it[1] && it[1].call(it[2]);
|
|
65
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
66
|
+
} catch (e) {
|
|
67
|
+
fail(e);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (hasError) throw error;
|
|
71
|
+
};
|
|
72
|
+
return next();
|
|
73
|
+
};
|
|
29
74
|
|
|
30
75
|
// migrate.ts
|
|
31
76
|
var migrate_exports = {};
|
|
@@ -35,62 +80,65 @@ __export(migrate_exports, {
|
|
|
35
80
|
module.exports = __toCommonJS(migrate_exports);
|
|
36
81
|
var import_node_crypto = __toESM(require("node:crypto"));
|
|
37
82
|
var import_node_path = require("node:path");
|
|
38
|
-
var
|
|
83
|
+
var import_pgproxy_client = require("@juit/pgproxy-client");
|
|
39
84
|
var import_plug = require("@plugjs/plug");
|
|
40
85
|
var migrationsExpression = /^([0-9]+)[^\w](.*)\.(sql)$/i;
|
|
41
86
|
async function migrate(url, options) {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
87
|
+
var _stack = [];
|
|
88
|
+
try {
|
|
89
|
+
const {
|
|
90
|
+
/* Default to our "../sql" migrations directory */
|
|
91
|
+
migrations: migrationsDirectory = (0, import_plug.resolve)("sql"),
|
|
92
|
+
/* Our default group name is "default" */
|
|
93
|
+
group = "default",
|
|
94
|
+
/* Optional additional directory for migrations */
|
|
95
|
+
additional
|
|
96
|
+
} = { ...options };
|
|
97
|
+
let entries = await (0, import_plug.find)("*.sql", { directory: migrationsDirectory });
|
|
98
|
+
if (additional) {
|
|
99
|
+
for (const addition of [additional].flat()) {
|
|
100
|
+
const additional2 = await (0, import_plug.find)("*.sql", { directory: addition });
|
|
101
|
+
entries = await (0, import_plug.merge)([entries, additional2]);
|
|
102
|
+
}
|
|
55
103
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
};
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
return await persister.connect(async (connection) => {
|
|
104
|
+
const promises = [...entries.absolutePaths()].map(async (file) => {
|
|
105
|
+
const match = migrationsExpression.exec((0, import_node_path.basename)(file));
|
|
106
|
+
if (!match) return;
|
|
107
|
+
const [, number, name] = match;
|
|
108
|
+
const contents = await import_plug.fs.readFile(file);
|
|
109
|
+
return {
|
|
110
|
+
sha256sum: import_node_crypto.default.createHash("sha256").update(contents).digest(),
|
|
111
|
+
contents: contents.toString("utf8"),
|
|
112
|
+
number: parseInt(number),
|
|
113
|
+
name
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
const migrationFiles = (await Promise.all(promises)).filter((migration) => !!migration).sort((a, b) => a.number - b.number);
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
const client = __using(_stack, new import_pgproxy_client.PGClient(url), true);
|
|
119
|
+
const connection = __using(_stack, await client.connect(), true);
|
|
73
120
|
const info = await connection.query("SELECT current_database() AS name");
|
|
74
|
-
import_plug.log.notice(`Migrating database ${(0, import_plug.$ylw)(info.rows[0].name)}`);
|
|
75
|
-
const model = connection.in("$migrations");
|
|
121
|
+
import_plug.log.notice(`Migrating database ${(0, import_plug.$ylw)(info.rows[0].name)} ${(0, import_plug.$gry)(`(group=${group})`)}`);
|
|
76
122
|
import_plug.log.info("Beginning migrations transaction");
|
|
77
123
|
await connection.begin();
|
|
78
124
|
import_plug.log.info(`Ensuring presence of ${(0, import_plug.$blu)("$migrations")} table`);
|
|
79
125
|
await connection.query(`
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
126
|
+
SET LOCAL client_min_messages TO WARNING;
|
|
127
|
+
CREATE TABLE IF NOT EXISTS "$migrations" (
|
|
128
|
+
"group" VARCHAR(32) NOT NULL DEFAULT 'default',
|
|
129
|
+
"number" INTEGER NOT NULL,
|
|
130
|
+
"name" TEXT NOT NULL,
|
|
131
|
+
"timestamp" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
132
|
+
"sha256sum" BYTEA NOT NULL,
|
|
133
|
+
PRIMARY KEY ("group", "number")
|
|
134
|
+
);`);
|
|
89
135
|
import_plug.log.info(`Lock exclusive use of ${(0, import_plug.$blu)("$migrations")} table`);
|
|
90
136
|
await connection.query('LOCK TABLE "$migrations"');
|
|
91
|
-
import_plug.log.info(`Looking for entries in ${(0, import_plug.$blu)("$migrations")} table`);
|
|
92
|
-
const result = await
|
|
93
|
-
|
|
137
|
+
import_plug.log.info(`Looking for entries in ${(0, import_plug.$blu)("$migrations")} table ${(0, import_plug.$gry)(`(group=${group})`)}`);
|
|
138
|
+
const result = await connection.query(
|
|
139
|
+
import_pgproxy_client.SQL`SELECT * FROM "$migrations" WHERE "group" = ${group}`
|
|
140
|
+
);
|
|
141
|
+
const applied = result.rows.reduce((applied2, row) => {
|
|
94
142
|
const { group: group2, number, name, timestamp, sha256sum } = row;
|
|
95
143
|
applied2[number] = { group: group2, number, name, timestamp, sha256sum };
|
|
96
144
|
return applied2;
|
|
@@ -113,7 +161,8 @@ async function migrate(url, options) {
|
|
|
113
161
|
try {
|
|
114
162
|
import_plug.log.notice(`Applying migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$blu)(name)}`);
|
|
115
163
|
await connection.query(contents);
|
|
116
|
-
await
|
|
164
|
+
await connection.query(import_pgproxy_client.SQL`INSERT INTO "$migrations" ("group", "number", "name", "sha256sum")
|
|
165
|
+
VALUES (${group}, ${number}, ${name}, ${sha256sum})`);
|
|
117
166
|
count++;
|
|
118
167
|
} catch (error) {
|
|
119
168
|
import_plug.log.error(`Failed migration ${(0, import_plug.$gry)(`${group}@`)}${(0, import_plug.$grn)(num)}: ${(0, import_plug.$ylw)(name)}`);
|
|
@@ -128,7 +177,12 @@ ${message}`;
|
|
|
128
177
|
await connection.commit();
|
|
129
178
|
import_plug.log.notice(`Applied ${(0, import_plug.$ylw)(count)} migrations ${(0, import_plug.$ms)(Date.now() - now)}`);
|
|
130
179
|
return count;
|
|
131
|
-
}
|
|
180
|
+
} catch (_) {
|
|
181
|
+
var _error = _, _hasError = true;
|
|
182
|
+
} finally {
|
|
183
|
+
var _promise = __callDispose(_stack, _error, _hasError);
|
|
184
|
+
_promise && await _promise;
|
|
185
|
+
}
|
|
132
186
|
}
|
|
133
187
|
// Annotate the CommonJS export names for ESM import in node:
|
|
134
188
|
0 && (module.exports = {
|
package/dist/migrate.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/migrate.ts"],
|
|
4
|
-
"mappings": "
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["additional", "crypto", "applied", "group"]
|
|
6
6
|
}
|
package/dist/migrate.mjs
CHANGED
|
@@ -1,62 +1,111 @@
|
|
|
1
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
2
|
+
var __typeError = (msg) => {
|
|
3
|
+
throw TypeError(msg);
|
|
4
|
+
};
|
|
5
|
+
var __using = (stack, value, async) => {
|
|
6
|
+
if (value != null) {
|
|
7
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
8
|
+
var dispose, inner;
|
|
9
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
10
|
+
if (dispose === void 0) {
|
|
11
|
+
dispose = value[__knownSymbol("dispose")];
|
|
12
|
+
if (async) inner = dispose;
|
|
13
|
+
}
|
|
14
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
15
|
+
if (inner) dispose = function() {
|
|
16
|
+
try {
|
|
17
|
+
inner.call(this);
|
|
18
|
+
} catch (e) {
|
|
19
|
+
return Promise.reject(e);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
stack.push([async, dispose, value]);
|
|
23
|
+
} else if (async) {
|
|
24
|
+
stack.push([async]);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
};
|
|
28
|
+
var __callDispose = (stack, error, hasError) => {
|
|
29
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
30
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
31
|
+
};
|
|
32
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
33
|
+
var next = (it) => {
|
|
34
|
+
while (it = stack.pop()) {
|
|
35
|
+
try {
|
|
36
|
+
var result = it[1] && it[1].call(it[2]);
|
|
37
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
fail(e);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (hasError) throw error;
|
|
43
|
+
};
|
|
44
|
+
return next();
|
|
45
|
+
};
|
|
46
|
+
|
|
1
47
|
// migrate.ts
|
|
2
48
|
import crypto from "node:crypto";
|
|
3
49
|
import { basename } from "node:path";
|
|
4
|
-
import {
|
|
50
|
+
import { PGClient, SQL } from "@juit/pgproxy-client";
|
|
5
51
|
import { $blu, $grn, $gry, $ms, $und, $ylw, find, fs, log, merge, resolve } from "@plugjs/plug";
|
|
6
52
|
var migrationsExpression = /^([0-9]+)[^\w](.*)\.(sql)$/i;
|
|
7
53
|
async function migrate(url, options) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
54
|
+
var _stack = [];
|
|
55
|
+
try {
|
|
56
|
+
const {
|
|
57
|
+
/* Default to our "../sql" migrations directory */
|
|
58
|
+
migrations: migrationsDirectory = resolve("sql"),
|
|
59
|
+
/* Our default group name is "default" */
|
|
60
|
+
group = "default",
|
|
61
|
+
/* Optional additional directory for migrations */
|
|
62
|
+
additional
|
|
63
|
+
} = { ...options };
|
|
64
|
+
let entries = await find("*.sql", { directory: migrationsDirectory });
|
|
65
|
+
if (additional) {
|
|
66
|
+
for (const addition of [additional].flat()) {
|
|
67
|
+
const additional2 = await find("*.sql", { directory: addition });
|
|
68
|
+
entries = await merge([entries, additional2]);
|
|
69
|
+
}
|
|
21
70
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return await persister.connect(async (connection) => {
|
|
71
|
+
const promises = [...entries.absolutePaths()].map(async (file) => {
|
|
72
|
+
const match = migrationsExpression.exec(basename(file));
|
|
73
|
+
if (!match) return;
|
|
74
|
+
const [, number, name] = match;
|
|
75
|
+
const contents = await fs.readFile(file);
|
|
76
|
+
return {
|
|
77
|
+
sha256sum: crypto.createHash("sha256").update(contents).digest(),
|
|
78
|
+
contents: contents.toString("utf8"),
|
|
79
|
+
number: parseInt(number),
|
|
80
|
+
name
|
|
81
|
+
};
|
|
82
|
+
});
|
|
83
|
+
const migrationFiles = (await Promise.all(promises)).filter((migration) => !!migration).sort((a, b) => a.number - b.number);
|
|
84
|
+
const now = Date.now();
|
|
85
|
+
const client = __using(_stack, new PGClient(url), true);
|
|
86
|
+
const connection = __using(_stack, await client.connect(), true);
|
|
39
87
|
const info = await connection.query("SELECT current_database() AS name");
|
|
40
|
-
log.notice(`Migrating database ${$ylw(info.rows[0].name)}`);
|
|
41
|
-
const model = connection.in("$migrations");
|
|
88
|
+
log.notice(`Migrating database ${$ylw(info.rows[0].name)} ${$gry(`(group=${group})`)}`);
|
|
42
89
|
log.info("Beginning migrations transaction");
|
|
43
90
|
await connection.begin();
|
|
44
91
|
log.info(`Ensuring presence of ${$blu("$migrations")} table`);
|
|
45
92
|
await connection.query(`
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
93
|
+
SET LOCAL client_min_messages TO WARNING;
|
|
94
|
+
CREATE TABLE IF NOT EXISTS "$migrations" (
|
|
95
|
+
"group" VARCHAR(32) NOT NULL DEFAULT 'default',
|
|
96
|
+
"number" INTEGER NOT NULL,
|
|
97
|
+
"name" TEXT NOT NULL,
|
|
98
|
+
"timestamp" TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
|
99
|
+
"sha256sum" BYTEA NOT NULL,
|
|
100
|
+
PRIMARY KEY ("group", "number")
|
|
101
|
+
);`);
|
|
55
102
|
log.info(`Lock exclusive use of ${$blu("$migrations")} table`);
|
|
56
103
|
await connection.query('LOCK TABLE "$migrations"');
|
|
57
|
-
log.info(`Looking for entries in ${$blu("$migrations")} table`);
|
|
58
|
-
const result = await
|
|
59
|
-
|
|
104
|
+
log.info(`Looking for entries in ${$blu("$migrations")} table ${$gry(`(group=${group})`)}`);
|
|
105
|
+
const result = await connection.query(
|
|
106
|
+
SQL`SELECT * FROM "$migrations" WHERE "group" = ${group}`
|
|
107
|
+
);
|
|
108
|
+
const applied = result.rows.reduce((applied2, row) => {
|
|
60
109
|
const { group: group2, number, name, timestamp, sha256sum } = row;
|
|
61
110
|
applied2[number] = { group: group2, number, name, timestamp, sha256sum };
|
|
62
111
|
return applied2;
|
|
@@ -79,7 +128,8 @@ async function migrate(url, options) {
|
|
|
79
128
|
try {
|
|
80
129
|
log.notice(`Applying migration ${$gry(`${group}@`)}${$grn(num)}: ${$blu(name)}`);
|
|
81
130
|
await connection.query(contents);
|
|
82
|
-
await
|
|
131
|
+
await connection.query(SQL`INSERT INTO "$migrations" ("group", "number", "name", "sha256sum")
|
|
132
|
+
VALUES (${group}, ${number}, ${name}, ${sha256sum})`);
|
|
83
133
|
count++;
|
|
84
134
|
} catch (error) {
|
|
85
135
|
log.error(`Failed migration ${$gry(`${group}@`)}${$grn(num)}: ${$ylw(name)}`);
|
|
@@ -94,7 +144,12 @@ ${message}`;
|
|
|
94
144
|
await connection.commit();
|
|
95
145
|
log.notice(`Applied ${$ylw(count)} migrations ${$ms(Date.now() - now)}`);
|
|
96
146
|
return count;
|
|
97
|
-
}
|
|
147
|
+
} catch (_) {
|
|
148
|
+
var _error = _, _hasError = true;
|
|
149
|
+
} finally {
|
|
150
|
+
var _promise = __callDispose(_stack, _error, _hasError);
|
|
151
|
+
_promise && await _promise;
|
|
152
|
+
}
|
|
98
153
|
}
|
|
99
154
|
export {
|
|
100
155
|
migrate
|
package/dist/migrate.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/migrate.ts"],
|
|
4
|
-
"mappings": "
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": ["additional", "applied", "group"]
|
|
6
6
|
}
|
package/dist/serialize.cjs
CHANGED
|
@@ -33,7 +33,6 @@ __export(serialize_exports, {
|
|
|
33
33
|
serializeSchema: () => serializeSchema
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(serialize_exports);
|
|
36
|
-
var import_pgproxy_client_psql = require("@juit/pgproxy-client-psql");
|
|
37
36
|
var import_pgproxy_types = require("@juit/pgproxy-types");
|
|
38
37
|
var import_typescript = __toESM(require("typescript"));
|
|
39
38
|
var types = __toESM(require("./types.cjs"));
|
package/dist/serialize.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/serialize.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAuB;AACvB,wBAAe;AAEf,YAAuB;AAQvB,IAAM,iBAAiB,kBAAAA,QAAG,QAAQ,eAAe,kBAAAA,QAAG,WAAW,aAAa;AAC5E,IAAM,iBAAiB,kBAAAA,QAAG,QAAQ,YAAY,kBAAAA,QAAG,WAAW,cAAc;AAE1E,IAAM,WAAW;AAAA;AAAA,EAEf,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,GAAG,GAAS;AAAA;AAAA,EACpB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA,EACvB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA,EACvB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA,EACvB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA,EAC1B,CAAC,4BAAO,WAAW,GAAS;AAAA;AAAA,EAC5B,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA;AAAA,EAGtB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,GAAG,GAAS;AAAA;AAAA,EACpB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA;AAAA,EAGtB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA,EACvB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,IAAI,GAAS;AAAA;AAAA,EACrB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA,EACvB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,UAAU,GAAS;AAAA;AAAA,EAC3B,CAAC,4BAAO,YAAY,GAAS;AAAA;AAAA,EAC7B,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA,EAC1B,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA;AAAA,EAGvB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,MAAM,GAAS;AAAA;AAAA,EACvB,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA,EACtB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,KAAK,GAAS;AAAA;AAAA;AAAA,EAGtB,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA,EAC1B,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,OAAO,GAAS;AAAA;AAAA,EACxB,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA,EAC1B,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA,EAC1B,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA;AAAA,EAG1B,CAAC,4BAAO,UAAU,GAAS;AAAA;AAAA,EAC3B,CAAC,4BAAO,SAAS,GAAS;AAAA;AAAA,EAC1B,CAAC,4BAAO,QAAQ,GAAS;AAAA;AAAA,EACzB,CAAC,4BAAO,UAAU,GAAS;AAAA;AAAA,EAC3B,CAAC,4BAAO,UAAU,GAAS;AAAA;AAAA,EAC3B,CAAC,4BAAO,UAAU,GAAS;AAAA;AAC7B;AAEA,IAAM,sBAAsB,kBAAAA,QAAG,QAAQ;AAAA,EACnC,kBAAAA,QAAG,QAAQ,YAAY,kBAAAA,QAAG,WAAW,WAAW;AAAC;AAErD,IAAM,uBAAuB,kBAAAA,QAAG,QAAQ;AAAA,EACpC;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAmB;AAEvB,IAAM,sBAAsB,kBAAAA,QAAG,QAAQ;AAAA,EACnC;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAmB;AAEvB,IAAM,sBAAsB,kBAAAA,QAAG,QAAQ;AAAA,EACnC;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAmB;AAWhB,SAAS,gBACZ,QACA,KAAa,UACb,YAAyC,CAAC,GACpC;AAER,QAAM,SAAiC,CAAC;AAGxC,aAAW,CAAE,WAAW,KAAM,KAAK,OAAO,QAAQ,MAAM,GAAG;AAEzD,UAAM,UAAkC,CAAC;AAGzC,eAAW,CAAE,YAAY,MAAO,KAAK,OAAO,QAAQ,KAAK,GAAG;AAC1D,UAAI;AAGJ,UAAI,OAAO,OAAO,WAAW;AAC3B,mBAAW,UAAU,OAAO,GAAG;AAAA,MAGjC,WAAW,OAAO,OAAO,UAAU;AACjC,mBAAW,SAAS,OAAO,GAA4B;AAAA,MAGzD,WAAW,OAAO,YAAY;AAC5B,mBAAW,kBAAAA,QAAG,QAAQ;AAAA,UAClB,OAAO,WAAW,IAAI,CAAC,UACrB,kBAAAA,QAAG,QAAQ;AAAA,YACP,kBAAAA,QAAG,QAAQ,oBAAoB,KAAK;AAAA,UACxC,CAAC;AAAA,QAAC;AAAA,MAGV,OAAO;AACL,mBAAiB;AAAA,MACnB;AAGA,YAAM,gBAAgB,kBAAAA,QAAG,QAAQ;AAAA,QAC7B;AAAA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QACA;AAAA,MACJ;AAGA,YAAM,aAAqC,CAAE,aAAc;AAC3D,UAAI,OAAO,WAAY,YAAW,KAAK,mBAAmB;AAC1D,UAAI,OAAO,WAAY,YAAW,KAAK,mBAAmB;AAC1D,UAAI,OAAO,YAAa,YAAW,KAAK,oBAAoB;AAE5D,YAAM,kBAAkB,kBAAAA,QAAG,QAAQ;AAAA,QAC/B;AAAA;AAAA,QACA,kBAAAA,QAAG,QAAQ,oBAAoB,UAAU;AAAA,QACzC;AAAA;AAAA,QACA,kBAAAA,QAAG,QAAQ,sBAAsB,UAAU;AAAA,MAC/C;AAGA,UAAI,OAAO,aAAa;AACtB,0BAAAA,QAAG;AAAA,UACC;AAAA,UACA,kBAAAA,QAAG,WAAW;AAAA,UACd,KAAK,OAAO,WAAW;AAAA,UACvB;AAAA;AAAA,QACJ;AAAA,MACF;AAGA,cAAQ,KAAK,eAAe;AAAA,IAC9B;AAGA,UAAM,iBAAiB,kBAAAA,QAAG,QAAQ;AAAA,MAC9B;AAAA;AAAA,MACA,kBAAAA,QAAG,QAAQ,oBAAoB,SAAS;AAAA,MACxC;AAAA;AAAA,MACA,kBAAAA,QAAG,QAAQ,sBAAsB,OAAO;AAAA;AAAA,IAC5C;AACA,WAAO,KAAK,cAAc;AAAA,EAC5B;AAGA,QAAM,cAAc,kBAAAA,QAAG,QAAQ;AAAA,IAC3B,CAAE,cAAe;AAAA;AAAA,IACjB;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACJ;AAGA,QAAM,SAAS,kBAAAA,QAAG,QAAQ;AAAA,IACtB,CAAE,WAAY;AAAA,IACd;AAAA,IACA,kBAAAA,QAAG,UAAU;AAAA,EACjB;AAGA,QAAM,UAAU,kBAAAA,QAAG,cAAc,EAAE,UAAU,MAAM;AACnD,SAAO;AACT;",
|
|
5
5
|
"names": ["ts"]
|
|
6
6
|
}
|
package/dist/serialize.d.ts
CHANGED
package/dist/serialize.mjs
CHANGED
package/dist/serialize.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/serialize.ts"],
|
|
4
|
-
"mappings": ";AAAA,
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juit/pgproxy-utils",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.1",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
"src/"
|
|
44
44
|
],
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@juit/pgproxy-client": "1.
|
|
47
|
-
"@juit/pgproxy-persister": "1.
|
|
48
|
-
"@juit/pgproxy-types": "1.
|
|
49
|
-
"@plugjs/plug": "^0.6.
|
|
46
|
+
"@juit/pgproxy-client": "1.3.1",
|
|
47
|
+
"@juit/pgproxy-persister": "1.3.1",
|
|
48
|
+
"@juit/pgproxy-types": "1.3.1",
|
|
49
|
+
"@plugjs/plug": "^0.6.74"
|
|
50
50
|
}
|
|
51
51
|
}
|
package/src/database.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { PGClient, escape } from '@juit/pgproxy-client'
|
|
2
2
|
import { $ylw, log } from '@plugjs/plug'
|
|
3
3
|
|
|
4
4
|
const NAME_EXPR = /^[-\w]{4,}$/
|
|
@@ -24,9 +24,8 @@ export async function createdb(
|
|
|
24
24
|
if (! NAME_EXPR.test(name)) throw new Error(`Invalid database name "${name}"`)
|
|
25
25
|
log.notice(`Creating database ${$ylw(name)}`)
|
|
26
26
|
|
|
27
|
-
|
|
28
|
-
await
|
|
29
|
-
await persister.destroy()
|
|
27
|
+
await using client = new PGClient(url)
|
|
28
|
+
await client.query(`CREATE DATABASE ${escape(name)}`)
|
|
30
29
|
return name
|
|
31
30
|
}
|
|
32
31
|
|
|
@@ -42,7 +41,6 @@ export async function dropdb(
|
|
|
42
41
|
if (! NAME_EXPR.test(name)) throw new Error(`Invalid database name "${name}"`)
|
|
43
42
|
log.notice(`Dropping database ${$ylw(name)}`)
|
|
44
43
|
|
|
45
|
-
|
|
46
|
-
await
|
|
47
|
-
await persister.destroy()
|
|
44
|
+
await using client = new PGClient(url)
|
|
45
|
+
await client.query(`DROP DATABASE IF EXISTS ${escape(name)}`)
|
|
48
46
|
}
|
package/src/extract.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { PGClient } from '@juit/pgproxy-client'
|
|
2
|
-
import '@juit/pgproxy-client-psql'
|
|
3
2
|
|
|
4
3
|
import type { Schema } from './index'
|
|
5
4
|
|
|
@@ -112,14 +111,9 @@ export async function extractSchema(
|
|
|
112
111
|
): Promise<Schema> {
|
|
113
112
|
if (schemas.length === 0) schemas.push('public')
|
|
114
113
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
const result = await client.query<ResultRow>(query, [ schemas ])
|
|
119
|
-
rows = result.rows
|
|
120
|
-
} finally {
|
|
121
|
-
await client.destroy()
|
|
122
|
-
}
|
|
114
|
+
await using client = new PGClient(url)
|
|
115
|
+
const result = await client.query<ResultRow>(query, [ schemas ])
|
|
116
|
+
const rows = result.rows
|
|
123
117
|
|
|
124
118
|
const schemaDef: Schema = {}
|
|
125
119
|
|