@juit/pgproxy-persister 1.2.1 → 1.3.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/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.mjs +3 -2
- package/dist/index.mjs.map +1 -1
- package/dist/model.cjs +18 -22
- package/dist/model.cjs.map +1 -1
- package/dist/model.d.ts +0 -2
- package/dist/model.mjs +2 -5
- package/dist/model.mjs.map +1 -1
- package/dist/persister.cjs +75 -3
- package/dist/persister.cjs.map +1 -1
- package/dist/persister.d.ts +15 -2
- package/dist/persister.mjs +76 -3
- package/dist/persister.mjs.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -1
- package/src/model.ts +2 -5
- package/src/persister.ts +50 -11
package/dist/index.cjs
CHANGED
|
@@ -21,7 +21,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
// index.ts
|
|
22
22
|
var index_exports = {};
|
|
23
23
|
__export(index_exports, {
|
|
24
|
-
SQL: () => import_pgproxy_client.SQL
|
|
24
|
+
SQL: () => import_pgproxy_client.SQL,
|
|
25
|
+
escape: () => import_pgproxy_client.escape
|
|
25
26
|
});
|
|
26
27
|
module.exports = __toCommonJS(index_exports);
|
|
27
28
|
var import_pgproxy_client = require("@juit/pgproxy-client");
|
|
@@ -30,6 +31,7 @@ __reExport(index_exports, require("./persister.cjs"), module.exports);
|
|
|
30
31
|
// Annotate the CommonJS export names for ESM import in node:
|
|
31
32
|
0 && (module.exports = {
|
|
32
33
|
SQL,
|
|
34
|
+
escape,
|
|
33
35
|
...require("./model.cjs"),
|
|
34
36
|
...require("./persister.cjs")
|
|
35
37
|
});
|
package/dist/index.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,4BAA4B;AAC5B,0BAAc,wBAFd;AAGA,0BAAc,4BAHd;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/index.d.ts
CHANGED
package/dist/index.mjs
CHANGED
package/dist/index.mjs.map
CHANGED
package/dist/model.cjs
CHANGED
|
@@ -20,10 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// model.ts
|
|
21
21
|
var model_exports = {};
|
|
22
22
|
__export(model_exports, {
|
|
23
|
-
Model: () => Model
|
|
24
|
-
escape: () => escape
|
|
23
|
+
Model: () => Model
|
|
25
24
|
});
|
|
26
25
|
module.exports = __toCommonJS(model_exports);
|
|
26
|
+
var import_pgproxy_client = require("@juit/pgproxy-client");
|
|
27
27
|
function assert(assertion, message) {
|
|
28
28
|
if (!assertion) throw new Error(message);
|
|
29
29
|
}
|
|
@@ -39,10 +39,10 @@ function where(query, params) {
|
|
|
39
39
|
for (const [column, value] of Object.entries(query)) {
|
|
40
40
|
if (value === void 0) continue;
|
|
41
41
|
if (value === null) {
|
|
42
|
-
conditions.push(`${escape(column)} IS NULL`);
|
|
42
|
+
conditions.push(`${(0, import_pgproxy_client.escape)(column)} IS NULL`);
|
|
43
43
|
} else {
|
|
44
44
|
const index = params.push(value);
|
|
45
|
-
conditions.push(`${escape(column)}=$${index}`);
|
|
45
|
+
conditions.push(`${(0, import_pgproxy_client.escape)(column)}=$${index}`);
|
|
46
46
|
}
|
|
47
47
|
count++;
|
|
48
48
|
}
|
|
@@ -59,12 +59,12 @@ function insert(schema, table, query) {
|
|
|
59
59
|
const values = [];
|
|
60
60
|
for (const [column, value] of Object.entries(query)) {
|
|
61
61
|
if (value === void 0) continue;
|
|
62
|
-
const index = columns.push(`${escape(column)}`);
|
|
62
|
+
const index = columns.push(`${(0, import_pgproxy_client.escape)(column)}`);
|
|
63
63
|
placeholders.push(`$${index}`);
|
|
64
64
|
values.push(value);
|
|
65
65
|
}
|
|
66
66
|
return [
|
|
67
|
-
columns.length == 0 ? `INSERT INTO ${escape(schema)}.${escape(table)} DEFAULT VALUES RETURNING *` : `INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) RETURNING *`,
|
|
67
|
+
columns.length == 0 ? `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} DEFAULT VALUES RETURNING *` : `INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} (${columns.join()}) VALUES (${placeholders.join()}) RETURNING *`,
|
|
68
68
|
values
|
|
69
69
|
];
|
|
70
70
|
}
|
|
@@ -79,22 +79,22 @@ function upsert(schema, table, keys, data) {
|
|
|
79
79
|
const values = [];
|
|
80
80
|
for (const [column, value] of Object.entries(object)) {
|
|
81
81
|
if (value === void 0) continue;
|
|
82
|
-
const index = columns.push(`${escape(column)}`);
|
|
82
|
+
const index = columns.push(`${(0, import_pgproxy_client.escape)(column)}`);
|
|
83
83
|
placeholders.push(`$${index}`);
|
|
84
84
|
values.push(value);
|
|
85
85
|
}
|
|
86
86
|
const conflictKeys = [];
|
|
87
87
|
for (const [column, value] of Object.entries(keys)) {
|
|
88
|
-
if (value !== void 0) conflictKeys.push(escape(column));
|
|
88
|
+
if (value !== void 0) conflictKeys.push((0, import_pgproxy_client.escape)(column));
|
|
89
89
|
}
|
|
90
90
|
const updates = [];
|
|
91
91
|
for (const [column, value] of Object.entries(data)) {
|
|
92
92
|
if (value === void 0) continue;
|
|
93
|
-
updates.push(`${escape(column)}=$${updates.length + columns.length + 1}`);
|
|
93
|
+
updates.push(`${(0, import_pgproxy_client.escape)(column)}=$${updates.length + columns.length + 1}`);
|
|
94
94
|
values.push(value);
|
|
95
95
|
}
|
|
96
96
|
return [
|
|
97
|
-
`INSERT INTO ${escape(schema)}.${escape(table)} (${columns.join()}) VALUES (${placeholders.join()}) ON CONFLICT (${conflictKeys.join(",")}) DO UPDATE SET ${updates.join(",")} RETURNING *`,
|
|
97
|
+
`INSERT INTO ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} (${columns.join()}) VALUES (${placeholders.join()}) ON CONFLICT (${conflictKeys.join(",")}) DO UPDATE SET ${updates.join(",")} RETURNING *`,
|
|
98
98
|
values
|
|
99
99
|
];
|
|
100
100
|
}
|
|
@@ -106,15 +106,15 @@ function select(schema, table, query, sort, offset, limit) {
|
|
|
106
106
|
const order = [];
|
|
107
107
|
for (const field of sort) {
|
|
108
108
|
if (field.toLowerCase().endsWith(" desc")) {
|
|
109
|
-
order.push(`${escape(field.slice(0, -5))} DESC`);
|
|
109
|
+
order.push(`${(0, import_pgproxy_client.escape)(field.slice(0, -5))} DESC`);
|
|
110
110
|
} else if (field.toLowerCase().endsWith(" asc")) {
|
|
111
|
-
order.push(`${escape(field.slice(0, -4))} ASC`);
|
|
111
|
+
order.push(`${(0, import_pgproxy_client.escape)(field.slice(0, -4))} ASC`);
|
|
112
112
|
} else {
|
|
113
|
-
order.push(escape(field));
|
|
113
|
+
order.push((0, import_pgproxy_client.escape)(field));
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
const orderby = order.length == 0 ? "" : ` ORDER BY ${order.join(",")}`;
|
|
117
|
-
let sql = `SELECT * FROM ${escape(schema)}.${escape(table)}${conditions}${orderby}`;
|
|
117
|
+
let sql = `SELECT * FROM ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)}${conditions}${orderby}`;
|
|
118
118
|
if (offset && offset > 0) {
|
|
119
119
|
sql += ` OFFSET $${values.length + 1}`;
|
|
120
120
|
values.push(Math.floor(offset));
|
|
@@ -133,19 +133,19 @@ function update(schema, table, query, patch) {
|
|
|
133
133
|
for (const [column, value] of Object.entries(patch)) {
|
|
134
134
|
if (value === void 0) continue;
|
|
135
135
|
const index = values.push(value);
|
|
136
|
-
patches.push(`${escape(column)}=$${index}`);
|
|
136
|
+
patches.push(`${(0, import_pgproxy_client.escape)(column)}=$${index}`);
|
|
137
137
|
}
|
|
138
138
|
if (patches.length === 0) return select(schema, table, query, [], 0, 0);
|
|
139
139
|
const [conditions, , count] = where(query, values);
|
|
140
140
|
assert(count > 0, "Cowardly refusing to run UPDATE with empty query");
|
|
141
|
-
const statement = `UPDATE ${escape(schema)}.${escape(table)} SET ${patches.join()}${conditions} RETURNING *`;
|
|
141
|
+
const statement = `UPDATE ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)} SET ${patches.join()}${conditions} RETURNING *`;
|
|
142
142
|
return [statement, values];
|
|
143
143
|
}
|
|
144
144
|
function del(schema, table, query) {
|
|
145
145
|
assertObject(query, "Called DELETE with a non-object query");
|
|
146
146
|
const [conditions, values, count] = where(query, []);
|
|
147
147
|
assert(count > 0, "Cowardly refusing to run DELETE with empty query");
|
|
148
|
-
return [`DELETE FROM ${escape(schema)}.${escape(table)}${conditions} RETURNING *`, values];
|
|
148
|
+
return [`DELETE FROM ${(0, import_pgproxy_client.escape)(schema)}.${(0, import_pgproxy_client.escape)(table)}${conditions} RETURNING *`, values];
|
|
149
149
|
}
|
|
150
150
|
var ModelImpl = class {
|
|
151
151
|
_connection;
|
|
@@ -190,13 +190,9 @@ var ModelImpl = class {
|
|
|
190
190
|
return result.rowCount;
|
|
191
191
|
}
|
|
192
192
|
};
|
|
193
|
-
function escape(str) {
|
|
194
|
-
return `"${str.replaceAll('"', '""').trim()}"`;
|
|
195
|
-
}
|
|
196
193
|
var Model = ModelImpl;
|
|
197
194
|
// Annotate the CommonJS export names for ESM import in node:
|
|
198
195
|
0 && (module.exports = {
|
|
199
|
-
Model
|
|
200
|
-
escape
|
|
196
|
+
Model
|
|
201
197
|
});
|
|
202
198
|
//# sourceMappingURL=model.cjs.map
|
package/dist/model.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/model.d.ts
CHANGED
|
@@ -95,7 +95,5 @@ export interface Model<Table extends Record<string, ColumnDefinition>> {
|
|
|
95
95
|
export interface ModelConstructor {
|
|
96
96
|
new <Schema extends Record<string, ColumnDefinition>>(queryable: PGQueryable, table: string): Model<Schema>;
|
|
97
97
|
}
|
|
98
|
-
/** Escape a PostgreSQL identifier (table, column, ... names) */
|
|
99
|
-
export declare function escape(str: string): string;
|
|
100
98
|
export declare const Model: ModelConstructor;
|
|
101
99
|
export {};
|
package/dist/model.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// model.ts
|
|
2
|
+
import { escape } from "@juit/pgproxy-client";
|
|
2
3
|
function assert(assertion, message) {
|
|
3
4
|
if (!assertion) throw new Error(message);
|
|
4
5
|
}
|
|
@@ -165,12 +166,8 @@ var ModelImpl = class {
|
|
|
165
166
|
return result.rowCount;
|
|
166
167
|
}
|
|
167
168
|
};
|
|
168
|
-
function escape(str) {
|
|
169
|
-
return `"${str.replaceAll('"', '""').trim()}"`;
|
|
170
|
-
}
|
|
171
169
|
var Model = ModelImpl;
|
|
172
170
|
export {
|
|
173
|
-
Model
|
|
174
|
-
escape
|
|
171
|
+
Model
|
|
175
172
|
};
|
|
176
173
|
//# sourceMappingURL=model.mjs.map
|
package/dist/model.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/model.ts"],
|
|
4
|
-
"mappings": ";
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/persister.cjs
CHANGED
|
@@ -3,6 +3,10 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __knownSymbol = (name, symbol) => (symbol = Symbol[name]) ? symbol : Symbol.for("Symbol." + name);
|
|
7
|
+
var __typeError = (msg) => {
|
|
8
|
+
throw TypeError(msg);
|
|
9
|
+
};
|
|
6
10
|
var __export = (target, all) => {
|
|
7
11
|
for (var name in all)
|
|
8
12
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -16,6 +20,47 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
16
20
|
return to;
|
|
17
21
|
};
|
|
18
22
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
23
|
+
var __using = (stack, value, async) => {
|
|
24
|
+
if (value != null) {
|
|
25
|
+
if (typeof value !== "object" && typeof value !== "function") __typeError("Object expected");
|
|
26
|
+
var dispose, inner;
|
|
27
|
+
if (async) dispose = value[__knownSymbol("asyncDispose")];
|
|
28
|
+
if (dispose === void 0) {
|
|
29
|
+
dispose = value[__knownSymbol("dispose")];
|
|
30
|
+
if (async) inner = dispose;
|
|
31
|
+
}
|
|
32
|
+
if (typeof dispose !== "function") __typeError("Object not disposable");
|
|
33
|
+
if (inner) dispose = function() {
|
|
34
|
+
try {
|
|
35
|
+
inner.call(this);
|
|
36
|
+
} catch (e) {
|
|
37
|
+
return Promise.reject(e);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
stack.push([async, dispose, value]);
|
|
41
|
+
} else if (async) {
|
|
42
|
+
stack.push([async]);
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
};
|
|
46
|
+
var __callDispose = (stack, error, hasError) => {
|
|
47
|
+
var E = typeof SuppressedError === "function" ? SuppressedError : function(e, s, m, _) {
|
|
48
|
+
return _ = Error(m), _.name = "SuppressedError", _.error = e, _.suppressed = s, _;
|
|
49
|
+
};
|
|
50
|
+
var fail = (e) => error = hasError ? new E(e, error, "An error was suppressed during disposal") : (hasError = true, e);
|
|
51
|
+
var next = (it) => {
|
|
52
|
+
while (it = stack.pop()) {
|
|
53
|
+
try {
|
|
54
|
+
var result = it[1] && it[1].call(it[2]);
|
|
55
|
+
if (it[0]) return Promise.resolve(result).then(next, (e) => (fail(e), next()));
|
|
56
|
+
} catch (e) {
|
|
57
|
+
fail(e);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (hasError) throw error;
|
|
61
|
+
};
|
|
62
|
+
return next();
|
|
63
|
+
};
|
|
19
64
|
|
|
20
65
|
// persister.ts
|
|
21
66
|
var persister_exports = {};
|
|
@@ -26,8 +71,9 @@ module.exports = __toCommonJS(persister_exports);
|
|
|
26
71
|
var import_pgproxy_client = require("@juit/pgproxy-client");
|
|
27
72
|
var import_model = require("./model.cjs");
|
|
28
73
|
var ConnectionImpl = class {
|
|
29
|
-
|
|
30
|
-
|
|
74
|
+
_connection;
|
|
75
|
+
constructor(connection) {
|
|
76
|
+
this._connection = connection;
|
|
31
77
|
}
|
|
32
78
|
begin() {
|
|
33
79
|
return this._connection.begin();
|
|
@@ -45,6 +91,12 @@ var ConnectionImpl = class {
|
|
|
45
91
|
in(table) {
|
|
46
92
|
return new import_model.Model(this._connection, table);
|
|
47
93
|
}
|
|
94
|
+
async close() {
|
|
95
|
+
await this._connection.close();
|
|
96
|
+
}
|
|
97
|
+
[Symbol.asyncDispose]() {
|
|
98
|
+
return this.close();
|
|
99
|
+
}
|
|
48
100
|
};
|
|
49
101
|
var PersisterImpl = class {
|
|
50
102
|
_client;
|
|
@@ -54,6 +106,9 @@ var PersisterImpl = class {
|
|
|
54
106
|
get registry() {
|
|
55
107
|
return this._client.registry;
|
|
56
108
|
}
|
|
109
|
+
get url() {
|
|
110
|
+
return this._client.url;
|
|
111
|
+
}
|
|
57
112
|
async ping() {
|
|
58
113
|
await this._client.query("SELECT now()");
|
|
59
114
|
}
|
|
@@ -66,11 +121,28 @@ var PersisterImpl = class {
|
|
|
66
121
|
await this._client.destroy();
|
|
67
122
|
}
|
|
68
123
|
async connect(consumer) {
|
|
69
|
-
|
|
124
|
+
if (!consumer) {
|
|
125
|
+
const connection = await this._client.connect();
|
|
126
|
+
return new ConnectionImpl(connection);
|
|
127
|
+
} else {
|
|
128
|
+
var _stack = [];
|
|
129
|
+
try {
|
|
130
|
+
const connection = __using(_stack, await this._client.connect(), true);
|
|
131
|
+
return await consumer(new ConnectionImpl(connection));
|
|
132
|
+
} catch (_) {
|
|
133
|
+
var _error = _, _hasError = true;
|
|
134
|
+
} finally {
|
|
135
|
+
var _promise = __callDispose(_stack, _error, _hasError);
|
|
136
|
+
_promise && await _promise;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
70
139
|
}
|
|
71
140
|
in(table) {
|
|
72
141
|
return new import_model.Model(this._client, table);
|
|
73
142
|
}
|
|
143
|
+
[Symbol.asyncDispose]() {
|
|
144
|
+
return this.destroy();
|
|
145
|
+
}
|
|
74
146
|
};
|
|
75
147
|
var Persister = PersisterImpl;
|
|
76
148
|
// Annotate the CommonJS export names for ESM import in node:
|
package/dist/persister.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/persister.ts"],
|
|
4
|
-
"mappings": "
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,4BAAyB;AAEzB,mBAAsB;AAuFtB,IAAM,iBAAN,MAAqE;AAAA,EAClD;AAAA,EAEjB,YAAY,YAA0B;AACpC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,QAA0B;AACxB,WAAO,KAAK,YAAY,MAAM;AAAA,EAChC;AAAA,EAEA,SAAwB;AACtB,WAAO,KAAK,YAAY,OAAO;AAAA,EACjC;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,YAAY,SAAS;AAAA,EACnC;AAAA,EAEA,MAGE,aAA+B,cAA8B,CAAC,GAAkC;AAChG,UAAM,CAAE,MAAM,SAAS,CAAC,CAAE,IACxB,OAAO,gBAAgB,WACnB,CAAE,aAAa,WAAY,IAC3B,CAAE,YAAY,OAAO,YAAY,MAAO;AAC9C,WAAO,KAAK,YAAY,MAAM,MAAM,MAAM;AAAA,EAC5C;AAAA,EAEA,GAAyB,OAA2E;AAClG,WAAO,IAAI,mBAAM,KAAK,aAAa,KAAK;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,YAAY,MAAM;AAAA,EAC/B;AAAA,EAEA,CAAC,OAAO,YAAY,IAAmB;AACrC,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;AAEA,IAAM,gBAAN,MAAmE;AAAA,EAChD;AAAA,EAEjB,YAAY,KAAsC;AAChD,SAAK,UAAU,IAAI,+BAAS,GAAU;AAAA,EACxC;AAAA,EAEA,IAAI,WAAqB;AACvB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,MAAqB;AACvB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,MAAM,OAAsB;AAC1B,UAAM,KAAK,QAAQ,MAAM,cAAc;AAAA,EACzC;AAAA,EAEA,MAAM,MAGJ,aAA+B,cAA8B,CAAC,GAAkC;AAChG,UAAM,CAAE,MAAM,SAAS,CAAC,CAAE,IAAI,OAAO,gBAAgB,WACnD,CAAE,aAAa,WAAY,IAAI,CAAE,YAAY,OAAO,YAAY,MAAO;AAEzE,UAAM,SAAS,KAAK,QAAQ,MAAkB,MAAM,MAAM;AAC1D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,QAAQ,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,QAAW,UAA2E;AAC1F,QAAI,CAAE,UAAU;AACd,YAAM,aAAa,MAAM,KAAK,QAAQ,QAAQ;AAC9C,aAAO,IAAI,eAAuB,UAAU;AAAA,IAC9C,OAAO;AACL;AAAA;AAAA,cAAY,aAAa,sBAAM,KAAK,QAAQ,QAAQ,GAA3B;AACzB,eAAO,MAAM,SAAS,IAAI,eAAuB,UAAU,CAAC;AAAA,eAD5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,GAAyB,OAA2E;AAClG,WAAO,IAAI,mBAAM,KAAK,SAAS,KAAK;AAAA,EACtC;AAAA,EAEA,CAAC,OAAO,YAAY,IAAmB;AACrC,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AAMO,IAAM,YAAkC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/persister.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { PGClient } from '@juit/pgproxy-client';
|
|
2
2
|
import { Model } from './model';
|
|
3
|
-
import type { PGTransactionable } from '@juit/pgproxy-client';
|
|
3
|
+
import type { PGClientOptions, PGTransactionable } from '@juit/pgproxy-client';
|
|
4
4
|
import type { ColumnDefinition } from './model';
|
|
5
5
|
export type InferModelType<Schema, Table extends string & keyof Schema> = Schema[Table] extends Record<string, ColumnDefinition> ? Model<Schema[Table]> : never;
|
|
6
6
|
export interface ModelProvider<Schema> {
|
|
@@ -19,12 +19,24 @@ export interface Connection<Schema> extends ModelProvider<Schema>, PGTransaction
|
|
|
19
19
|
*/
|
|
20
20
|
in<Table extends string>(table: Table & keyof Schema): InferModelType<Schema, Table & keyof Schema>;
|
|
21
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* A connection to a database that can be asynchronously disposed of.
|
|
24
|
+
*/
|
|
25
|
+
export interface DisposableConnection<Schema> extends Connection<Schema>, AsyncDisposable {
|
|
26
|
+
/** Forcedly close the underlying connection to the database */
|
|
27
|
+
close(): Promise<void>;
|
|
28
|
+
}
|
|
22
29
|
/** A consumer for a {@link Connection} */
|
|
23
30
|
export type Consumer<Schema, T> = (connection: Connection<Schema>) => T | PromiseLike<T>;
|
|
24
31
|
/** Our main `Persister` interface */
|
|
25
|
-
export interface Persister<Schema> extends ModelProvider<Schema>, PGClient {
|
|
32
|
+
export interface Persister<Schema = any> extends ModelProvider<Schema>, PGClient {
|
|
26
33
|
/** Ping... Just ping the database. */
|
|
27
34
|
ping(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Connect to the database and return an _async disposable_
|
|
37
|
+
* {@link PGConnection}.
|
|
38
|
+
*/
|
|
39
|
+
connect(): Promise<DisposableConnection<Schema>>;
|
|
28
40
|
/**
|
|
29
41
|
* Connect to the database to execute a number of different queries.
|
|
30
42
|
*
|
|
@@ -44,5 +56,6 @@ export interface Persister<Schema> extends ModelProvider<Schema>, PGClient {
|
|
|
44
56
|
/** Constructor for {@link Persister} instances */
|
|
45
57
|
export interface PersisterConstructor {
|
|
46
58
|
new <Schema = Record<string, Record<string, ColumnDefinition>>>(url?: string | URL): Persister<Schema>;
|
|
59
|
+
new <Schema = Record<string, Record<string, ColumnDefinition>>>(options: PGClientOptions): Persister<Schema>;
|
|
47
60
|
}
|
|
48
61
|
export declare const Persister: PersisterConstructor;
|
package/dist/persister.mjs
CHANGED
|
@@ -1,9 +1,56 @@
|
|
|
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
|
// persister.ts
|
|
2
48
|
import { PGClient } from "@juit/pgproxy-client";
|
|
3
49
|
import { Model } from "./model.mjs";
|
|
4
50
|
var ConnectionImpl = class {
|
|
5
|
-
|
|
6
|
-
|
|
51
|
+
_connection;
|
|
52
|
+
constructor(connection) {
|
|
53
|
+
this._connection = connection;
|
|
7
54
|
}
|
|
8
55
|
begin() {
|
|
9
56
|
return this._connection.begin();
|
|
@@ -21,6 +68,12 @@ var ConnectionImpl = class {
|
|
|
21
68
|
in(table) {
|
|
22
69
|
return new Model(this._connection, table);
|
|
23
70
|
}
|
|
71
|
+
async close() {
|
|
72
|
+
await this._connection.close();
|
|
73
|
+
}
|
|
74
|
+
[Symbol.asyncDispose]() {
|
|
75
|
+
return this.close();
|
|
76
|
+
}
|
|
24
77
|
};
|
|
25
78
|
var PersisterImpl = class {
|
|
26
79
|
_client;
|
|
@@ -30,6 +83,9 @@ var PersisterImpl = class {
|
|
|
30
83
|
get registry() {
|
|
31
84
|
return this._client.registry;
|
|
32
85
|
}
|
|
86
|
+
get url() {
|
|
87
|
+
return this._client.url;
|
|
88
|
+
}
|
|
33
89
|
async ping() {
|
|
34
90
|
await this._client.query("SELECT now()");
|
|
35
91
|
}
|
|
@@ -42,11 +98,28 @@ var PersisterImpl = class {
|
|
|
42
98
|
await this._client.destroy();
|
|
43
99
|
}
|
|
44
100
|
async connect(consumer) {
|
|
45
|
-
|
|
101
|
+
if (!consumer) {
|
|
102
|
+
const connection = await this._client.connect();
|
|
103
|
+
return new ConnectionImpl(connection);
|
|
104
|
+
} else {
|
|
105
|
+
var _stack = [];
|
|
106
|
+
try {
|
|
107
|
+
const connection = __using(_stack, await this._client.connect(), true);
|
|
108
|
+
return await consumer(new ConnectionImpl(connection));
|
|
109
|
+
} catch (_) {
|
|
110
|
+
var _error = _, _hasError = true;
|
|
111
|
+
} finally {
|
|
112
|
+
var _promise = __callDispose(_stack, _error, _hasError);
|
|
113
|
+
_promise && await _promise;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
46
116
|
}
|
|
47
117
|
in(table) {
|
|
48
118
|
return new Model(this._client, table);
|
|
49
119
|
}
|
|
120
|
+
[Symbol.asyncDispose]() {
|
|
121
|
+
return this.destroy();
|
|
122
|
+
}
|
|
50
123
|
};
|
|
51
124
|
var Persister = PersisterImpl;
|
|
52
125
|
export {
|
package/dist/persister.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/persister.ts"],
|
|
4
|
-
"mappings": "
|
|
4
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAS,gBAAgB;AAEzB,SAAS,aAAa;AAuFtB,IAAM,iBAAN,MAAqE;AAAA,EAClD;AAAA,EAEjB,YAAY,YAA0B;AACpC,SAAK,cAAc;AAAA,EACrB;AAAA,EAEA,QAA0B;AACxB,WAAO,KAAK,YAAY,MAAM;AAAA,EAChC;AAAA,EAEA,SAAwB;AACtB,WAAO,KAAK,YAAY,OAAO;AAAA,EACjC;AAAA,EAEA,WAA0B;AACxB,WAAO,KAAK,YAAY,SAAS;AAAA,EACnC;AAAA,EAEA,MAGE,aAA+B,cAA8B,CAAC,GAAkC;AAChG,UAAM,CAAE,MAAM,SAAS,CAAC,CAAE,IACxB,OAAO,gBAAgB,WACnB,CAAE,aAAa,WAAY,IAC3B,CAAE,YAAY,OAAO,YAAY,MAAO;AAC9C,WAAO,KAAK,YAAY,MAAM,MAAM,MAAM;AAAA,EAC5C;AAAA,EAEA,GAAyB,OAA2E;AAClG,WAAO,IAAI,MAAM,KAAK,aAAa,KAAK;AAAA,EAC1C;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,YAAY,MAAM;AAAA,EAC/B;AAAA,EAEA,CAAC,OAAO,YAAY,IAAmB;AACrC,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;AAEA,IAAM,gBAAN,MAAmE;AAAA,EAChD;AAAA,EAEjB,YAAY,KAAsC;AAChD,SAAK,UAAU,IAAI,SAAS,GAAU;AAAA,EACxC;AAAA,EAEA,IAAI,WAAqB;AACvB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,IAAI,MAAqB;AACvB,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,MAAM,OAAsB;AAC1B,UAAM,KAAK,QAAQ,MAAM,cAAc;AAAA,EACzC;AAAA,EAEA,MAAM,MAGJ,aAA+B,cAA8B,CAAC,GAAkC;AAChG,UAAM,CAAE,MAAM,SAAS,CAAC,CAAE,IAAI,OAAO,gBAAgB,WACnD,CAAE,aAAa,WAAY,IAAI,CAAE,YAAY,OAAO,YAAY,MAAO;AAEzE,UAAM,SAAS,KAAK,QAAQ,MAAkB,MAAM,MAAM;AAC1D,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,UAAyB;AAC7B,UAAM,KAAK,QAAQ,QAAQ;AAAA,EAC7B;AAAA,EAEA,MAAM,QAAW,UAA2E;AAC1F,QAAI,CAAE,UAAU;AACd,YAAM,aAAa,MAAM,KAAK,QAAQ,QAAQ;AAC9C,aAAO,IAAI,eAAuB,UAAU;AAAA,IAC9C,OAAO;AACL;AAAA;AAAA,cAAY,aAAa,sBAAM,KAAK,QAAQ,QAAQ,GAA3B;AACzB,eAAO,MAAM,SAAS,IAAI,eAAuB,UAAU,CAAC;AAAA,eAD5D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAEF;AAAA,EACF;AAAA,EAEA,GAAyB,OAA2E;AAClG,WAAO,IAAI,MAAM,KAAK,SAAS,KAAK;AAAA,EACtC;AAAA,EAEA,CAAC,OAAO,YAAY,IAAmB;AACrC,WAAO,KAAK,QAAQ;AAAA,EACtB;AACF;AAMO,IAAM,YAAkC;",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juit/pgproxy-persister",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"src/"
|
|
54
54
|
],
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@juit/pgproxy-client": "1.
|
|
57
|
-
"@juit/pgproxy-types": "1.
|
|
56
|
+
"@juit/pgproxy-client": "1.3.0",
|
|
57
|
+
"@juit/pgproxy-types": "1.3.0"
|
|
58
58
|
}
|
|
59
59
|
}
|
package/src/index.ts
CHANGED
package/src/model.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { escape } from '@juit/pgproxy-client'
|
|
2
|
+
|
|
1
3
|
import type { PGQueryable } from '@juit/pgproxy-client'
|
|
2
4
|
|
|
3
5
|
/* ========================================================================== *
|
|
@@ -464,9 +466,4 @@ class ModelImpl<Table extends Record<string, ColumnDefinition>> implements Model
|
|
|
464
466
|
* EXPORTS *
|
|
465
467
|
* ========================================================================== */
|
|
466
468
|
|
|
467
|
-
/** Escape a PostgreSQL identifier (table, column, ... names) */
|
|
468
|
-
export function escape(str: string): string {
|
|
469
|
-
return `"${str.replaceAll('"', '""').trim()}"`
|
|
470
|
-
}
|
|
471
|
-
|
|
472
469
|
export const Model: ModelConstructor = ModelImpl
|
package/src/persister.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { PGClient } from '@juit/pgproxy-client'
|
|
|
2
2
|
|
|
3
3
|
import { Model } from './model'
|
|
4
4
|
|
|
5
|
-
import type { PGQuery, PGResult, PGTransactionable } from '@juit/pgproxy-client'
|
|
5
|
+
import type { PGClientOptions, PGConnection, PGQuery, PGResult, PGTransactionable } from '@juit/pgproxy-client'
|
|
6
6
|
import type { Registry } from '@juit/pgproxy-types'
|
|
7
7
|
import type { ColumnDefinition } from './model'
|
|
8
8
|
|
|
@@ -37,14 +37,28 @@ export interface Connection<Schema> extends ModelProvider<Schema>, PGTransaction
|
|
|
37
37
|
in<Table extends string>(table: Table & keyof Schema): InferModelType<Schema, Table & keyof Schema>
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
+
/**
|
|
41
|
+
* A connection to a database that can be asynchronously disposed of.
|
|
42
|
+
*/
|
|
43
|
+
export interface DisposableConnection<Schema> extends Connection<Schema>, AsyncDisposable {
|
|
44
|
+
/** Forcedly close the underlying connection to the database */
|
|
45
|
+
close(): Promise<void>
|
|
46
|
+
}
|
|
47
|
+
|
|
40
48
|
/** A consumer for a {@link Connection} */
|
|
41
49
|
export type Consumer<Schema, T> = (connection: Connection<Schema>) => T | PromiseLike<T>
|
|
42
50
|
|
|
43
51
|
/** Our main `Persister` interface */
|
|
44
|
-
export interface Persister<Schema> extends ModelProvider<Schema>, PGClient {
|
|
52
|
+
export interface Persister<Schema = any> extends ModelProvider<Schema>, PGClient {
|
|
45
53
|
/** Ping... Just ping the database. */
|
|
46
54
|
ping(): Promise<void>;
|
|
47
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Connect to the database and return an _async disposable_
|
|
58
|
+
* {@link PGConnection}.
|
|
59
|
+
*/
|
|
60
|
+
connect(): Promise<DisposableConnection<Schema>>
|
|
61
|
+
|
|
48
62
|
/**
|
|
49
63
|
* Connect to the database to execute a number of different queries.
|
|
50
64
|
*
|
|
@@ -66,16 +80,19 @@ export interface Persister<Schema> extends ModelProvider<Schema>, PGClient {
|
|
|
66
80
|
/** Constructor for {@link Persister} instances */
|
|
67
81
|
export interface PersisterConstructor {
|
|
68
82
|
new <Schema = Record<string, Record<string, ColumnDefinition>>>(url?: string | URL): Persister<Schema>
|
|
83
|
+
new <Schema = Record<string, Record<string, ColumnDefinition>>>(options: PGClientOptions): Persister<Schema>
|
|
69
84
|
}
|
|
70
85
|
|
|
71
86
|
/* ========================================================================== *
|
|
72
87
|
* IMPLEMENTATION *
|
|
73
88
|
* ========================================================================== */
|
|
74
89
|
|
|
75
|
-
class ConnectionImpl<Schema> implements
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
) {
|
|
90
|
+
class ConnectionImpl<Schema> implements DisposableConnection<Schema> {
|
|
91
|
+
private readonly _connection: PGConnection
|
|
92
|
+
|
|
93
|
+
constructor(connection: PGConnection) {
|
|
94
|
+
this._connection = connection
|
|
95
|
+
}
|
|
79
96
|
|
|
80
97
|
begin(): Promise<boolean> {
|
|
81
98
|
return this._connection.begin()
|
|
@@ -103,19 +120,31 @@ class ConnectionImpl<Schema> implements Connection<Schema> {
|
|
|
103
120
|
in<Table extends string>(table: Table & keyof Schema): InferModelType<Schema, Table & keyof Schema> {
|
|
104
121
|
return new Model(this._connection, table) as InferModelType<Schema, Table & keyof Schema>
|
|
105
122
|
}
|
|
123
|
+
|
|
124
|
+
async close(): Promise<void> {
|
|
125
|
+
await this._connection.close()
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
[Symbol.asyncDispose](): Promise<void> {
|
|
129
|
+
return this.close()
|
|
130
|
+
}
|
|
106
131
|
}
|
|
107
132
|
|
|
108
133
|
class PersisterImpl<Schema> implements PGClient, Persister<Schema> {
|
|
109
|
-
private _client: PGClient
|
|
134
|
+
private readonly _client: PGClient
|
|
110
135
|
|
|
111
|
-
constructor(url?: string | URL) {
|
|
112
|
-
this._client = new PGClient(url)
|
|
136
|
+
constructor(url?: string | URL | PGClientOptions) {
|
|
137
|
+
this._client = new PGClient(url as any)
|
|
113
138
|
}
|
|
114
139
|
|
|
115
140
|
get registry(): Registry {
|
|
116
141
|
return this._client.registry
|
|
117
142
|
}
|
|
118
143
|
|
|
144
|
+
get url(): Readonly<URL> {
|
|
145
|
+
return this._client.url
|
|
146
|
+
}
|
|
147
|
+
|
|
119
148
|
async ping(): Promise<void> {
|
|
120
149
|
await this._client.query('SELECT now()')
|
|
121
150
|
}
|
|
@@ -135,13 +164,23 @@ class PersisterImpl<Schema> implements PGClient, Persister<Schema> {
|
|
|
135
164
|
await this._client.destroy()
|
|
136
165
|
}
|
|
137
166
|
|
|
138
|
-
async connect<T>(consumer
|
|
139
|
-
|
|
167
|
+
async connect<T>(consumer?: Consumer<Schema, T>): Promise<T | DisposableConnection<Schema>> {
|
|
168
|
+
if (! consumer) {
|
|
169
|
+
const connection = await this._client.connect()
|
|
170
|
+
return new ConnectionImpl<Schema>(connection)
|
|
171
|
+
} else {
|
|
172
|
+
await using connection = await this._client.connect()
|
|
173
|
+
return await consumer(new ConnectionImpl<Schema>(connection))
|
|
174
|
+
}
|
|
140
175
|
}
|
|
141
176
|
|
|
142
177
|
in<Table extends string>(table: Table & keyof Schema): InferModelType<Schema, Table & keyof Schema> {
|
|
143
178
|
return new Model(this._client, table) as InferModelType<Schema, Table & keyof Schema>
|
|
144
179
|
}
|
|
180
|
+
|
|
181
|
+
[Symbol.asyncDispose](): Promise<void> {
|
|
182
|
+
return this.destroy()
|
|
183
|
+
}
|
|
145
184
|
}
|
|
146
185
|
|
|
147
186
|
/* ========================================================================== *
|