prostgles-server 4.2.350 → 4.2.352
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/getDbConnection.d.ts +9 -0
- package/dist/getDbConnection.d.ts.map +1 -0
- package/dist/getDbConnection.js +79 -0
- package/dist/getDbConnection.js.map +1 -0
- package/dist/initProstgles.d.ts +2 -2
- package/dist/initProstgles.d.ts.map +1 -1
- package/dist/initProstgles.js +11 -81
- package/dist/initProstgles.js.map +1 -1
- package/lib/getDbConnection.ts +91 -0
- package/lib/initProstgles.ts +23 -99
- package/package.json +1 -1
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ProstglesInitOptions } from "./ProstglesTypes";
|
|
2
|
+
import type { DB, PGP } from "./initProstgles";
|
|
3
|
+
type GetDbConnectionArgs = Pick<ProstglesInitOptions, "DEBUG_MODE" | "onQuery" | "dbConnection" | "onNotice" | "onConnectionError">;
|
|
4
|
+
export declare const getDbConnection: ({ dbConnection, onQuery, onConnectionError, DEBUG_MODE, onNotice, }: GetDbConnectionArgs) => {
|
|
5
|
+
db: DB;
|
|
6
|
+
pgp: PGP;
|
|
7
|
+
};
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=getDbConnection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDbConnection.d.ts","sourceRoot":"","sources":["../lib/getDbConnection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAG/C,KAAK,mBAAmB,GAAG,IAAI,CAC7B,oBAAoB,EACpB,YAAY,GAAG,SAAS,GAAG,cAAc,GAAG,UAAU,GAAG,mBAAmB,CAC7E,CAAC;AACF,eAAO,MAAM,eAAe,wEAMzB,mBAAmB;;SAAkB,GAAG;CA2E1C,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getDbConnection = void 0;
|
|
4
|
+
const pgPromise = require("pg-promise");
|
|
5
|
+
const getDbConnection = function ({ dbConnection, onQuery, onConnectionError, DEBUG_MODE, onNotice, }) {
|
|
6
|
+
const onQueryOrError = !onQuery && !DEBUG_MODE ?
|
|
7
|
+
undefined
|
|
8
|
+
: (error, ctx) => {
|
|
9
|
+
if (onQuery) {
|
|
10
|
+
onQuery(error, ctx);
|
|
11
|
+
}
|
|
12
|
+
else if (DEBUG_MODE) {
|
|
13
|
+
if (error) {
|
|
14
|
+
console.error(error, ctx);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.log(ctx);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const pgp = pgPromise({
|
|
22
|
+
...(onQueryOrError && {
|
|
23
|
+
query: (ctx) => onQueryOrError(undefined, ctx),
|
|
24
|
+
}),
|
|
25
|
+
error: (err, ctx) => {
|
|
26
|
+
if (ctx.cn) {
|
|
27
|
+
onConnectionError?.(err, ctx);
|
|
28
|
+
}
|
|
29
|
+
onQueryOrError?.(err, ctx);
|
|
30
|
+
},
|
|
31
|
+
...((onNotice || DEBUG_MODE) && {
|
|
32
|
+
connect: function ({ client, useCount }) {
|
|
33
|
+
const isFresh = !useCount;
|
|
34
|
+
if (isFresh && !client.listeners("notice").length) {
|
|
35
|
+
client.on("notice", function (msg) {
|
|
36
|
+
if (onNotice) {
|
|
37
|
+
onNotice(msg, msg?.message);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
console.log("notice: %j", msg?.message);
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (isFresh && !client.listeners("error").length) {
|
|
45
|
+
client.on("error", function (msg) {
|
|
46
|
+
if (onNotice) {
|
|
47
|
+
onNotice(msg, msg?.message);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.log("error: %j", msg?.message);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
}),
|
|
56
|
+
});
|
|
57
|
+
// pgp.pg.defaults.max = 70;
|
|
58
|
+
// /* Casts count/sum/max to bigint. Needs rework to remove casting "+count" and other issues; */
|
|
59
|
+
// pgp.pg.types.setTypeParser(20, BigInt);
|
|
60
|
+
/**
|
|
61
|
+
* Prevent timestamp casting to ensure we don't lose the microseconds.
|
|
62
|
+
* This is needed to ensure the filters work as expected for a given row
|
|
63
|
+
*
|
|
64
|
+
register(1114, parseTimestamp) // timestamp without time zone
|
|
65
|
+
register(1184, parseTimestampTz) // timestamp with time zone
|
|
66
|
+
*/
|
|
67
|
+
// pgp.pg.types.setTypeParser(1114, v => v); // timestamp without time zone
|
|
68
|
+
// pgp.pg.types.setTypeParser(1184, v => v); // timestamp with time zone
|
|
69
|
+
// pgp.pg.types.setTypeParser(1182, v => v); // date
|
|
70
|
+
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMP, (v) => v); // timestamp without time zone
|
|
71
|
+
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMPTZ, (v) => v); // timestamp with time zone
|
|
72
|
+
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.DATE, (v) => v); // date
|
|
73
|
+
return {
|
|
74
|
+
db: pgp(dbConnection),
|
|
75
|
+
pgp,
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
exports.getDbConnection = getDbConnection;
|
|
79
|
+
//# sourceMappingURL=getDbConnection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDbConnection.js","sourceRoot":"","sources":["../lib/getDbConnection.ts"],"names":[],"mappings":"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"}
|
package/dist/initProstgles.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import * as pgPromise from "pg-promise";
|
|
2
1
|
import type pg from "pg-promise/typescript/pg-subset";
|
|
3
2
|
import type { AuthClientRequest, SessionUser } from "./Auth/AuthTypes";
|
|
4
3
|
import type { DBOFullyTyped } from "./DBSchemaBuilder/DBSchemaBuilder";
|
|
@@ -7,6 +6,7 @@ import type { ProstglesInitOptions } from "./ProstglesTypes";
|
|
|
7
6
|
import type { DbTableInfo } from "./PublishParser/PublishParser";
|
|
8
7
|
import { type PermissionScope } from "./PublishParser/PublishParser";
|
|
9
8
|
import { getClientHandlers } from "./WebsocketAPI/getClientHandlers";
|
|
9
|
+
import type pgPromise from "pg-promise";
|
|
10
10
|
/**
|
|
11
11
|
* Database connection details
|
|
12
12
|
*/
|
|
@@ -18,7 +18,7 @@ string | pg.IConnectionParameters<pg.IClient>;
|
|
|
18
18
|
export type DbConnectionOpts = pg.IDefaults;
|
|
19
19
|
export type PGP = pgPromise.IMain<{}, pg.IClient>;
|
|
20
20
|
export type DB = pgPromise.IDatabase<{}, pg.IClient>;
|
|
21
|
-
export type UpdateableOptions<S = void, SUser extends SessionUser = SessionUser> = Pick<ProstglesInitOptions<S, SUser>, "fileTable" | "restApi" | "tableConfig" | "schemaFilter" | "auth">;
|
|
21
|
+
export type UpdateableOptions<S = void, SUser extends SessionUser = SessionUser> = Pick<ProstglesInitOptions<S, SUser>, "fileTable" | "restApi" | "tableConfig" | "schemaFilter" | "auth" | "publish" | "publishMethods" | "publishRawSQL">;
|
|
22
22
|
export type OnInitReason = {
|
|
23
23
|
type: "schema change";
|
|
24
24
|
query: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initProstgles.d.ts","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"initProstgles.d.ts","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"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"}
|
package/dist/initProstgles.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.initProstgles = void 0;
|
|
4
|
-
const pgPromise = require("pg-promise");
|
|
5
4
|
const prostgles_types_1 = require("prostgles-types");
|
|
6
5
|
const removeExpressRoute_1 = require("./Auth/utils/removeExpressRoute");
|
|
7
6
|
const DBEventsManager_1 = require("./DBEventsManager");
|
|
@@ -11,6 +10,7 @@ const SchemaWatch_1 = require("./SchemaWatch/SchemaWatch");
|
|
|
11
10
|
const runSQLFile_1 = require("./TableConfig/runSQLFile");
|
|
12
11
|
const utils_1 = require("./utils/utils");
|
|
13
12
|
const getClientHandlers_1 = require("./WebsocketAPI/getClientHandlers");
|
|
13
|
+
const getDbConnection_1 = require("./getDbConnection");
|
|
14
14
|
const clientOnlyUpdateKeys = ["auth"];
|
|
15
15
|
const initProstgles = async function (onReady, reason) {
|
|
16
16
|
this.loaded = false;
|
|
@@ -46,7 +46,7 @@ const initProstgles = async function (onReady, reason) {
|
|
|
46
46
|
: this.opts.dbConnection;
|
|
47
47
|
const application_name = `prostgles ${this.appId} ${existingAppName}`;
|
|
48
48
|
/* 1. Connect to db */
|
|
49
|
-
const { db, pgp } = getDbConnection({
|
|
49
|
+
const { db, pgp } = (0, getDbConnection_1.getDbConnection)({
|
|
50
50
|
onQuery: this.opts.onQuery,
|
|
51
51
|
onConnectionError: this.opts.onConnectionError,
|
|
52
52
|
DEBUG_MODE: this.opts.DEBUG_MODE,
|
|
@@ -115,15 +115,18 @@ const initProstgles = async function (onReady, reason) {
|
|
|
115
115
|
getTSSchema: this.getTSFileContent,
|
|
116
116
|
options: this.opts,
|
|
117
117
|
update: async (newOpts) => {
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
const optionsThatChanged = (0, prostgles_types_1.getObjectEntries)(newOpts)
|
|
119
|
+
.map((entry) => {
|
|
120
|
+
const [k, v] = entry;
|
|
120
121
|
if (!(0, prostgles_types_1.isEqual)(this.opts[k], newOpts[k])) {
|
|
121
|
-
optsHaveChanged = true;
|
|
122
122
|
//@ts-ignore
|
|
123
|
-
this.opts[k] =
|
|
123
|
+
this.opts[k] = v;
|
|
124
|
+
return entry;
|
|
124
125
|
}
|
|
125
|
-
|
|
126
|
-
|
|
126
|
+
return;
|
|
127
|
+
})
|
|
128
|
+
.filter(prostgles_types_1.isDefined);
|
|
129
|
+
if (!optionsThatChanged.length) {
|
|
127
130
|
console.warn("No options changed");
|
|
128
131
|
return;
|
|
129
132
|
}
|
|
@@ -193,77 +196,4 @@ const initProstgles = async function (onReady, reason) {
|
|
|
193
196
|
}
|
|
194
197
|
};
|
|
195
198
|
exports.initProstgles = initProstgles;
|
|
196
|
-
const getDbConnection = function ({ dbConnection, onQuery, onConnectionError, DEBUG_MODE, onNotice, }) {
|
|
197
|
-
const onQueryOrError = !onQuery && !DEBUG_MODE ?
|
|
198
|
-
undefined
|
|
199
|
-
: (error, ctx) => {
|
|
200
|
-
if (onQuery) {
|
|
201
|
-
onQuery(error, ctx);
|
|
202
|
-
}
|
|
203
|
-
else if (DEBUG_MODE) {
|
|
204
|
-
if (error) {
|
|
205
|
-
console.error(error, ctx);
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
console.log(ctx);
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
};
|
|
212
|
-
const pgp = pgPromise({
|
|
213
|
-
...(onQueryOrError && {
|
|
214
|
-
query: (ctx) => onQueryOrError(undefined, ctx),
|
|
215
|
-
}),
|
|
216
|
-
error: (err, ctx) => {
|
|
217
|
-
if (ctx.cn) {
|
|
218
|
-
onConnectionError?.(err, ctx);
|
|
219
|
-
}
|
|
220
|
-
onQueryOrError?.(err, ctx);
|
|
221
|
-
},
|
|
222
|
-
...((onNotice || DEBUG_MODE) && {
|
|
223
|
-
connect: function ({ client, useCount }) {
|
|
224
|
-
const isFresh = !useCount;
|
|
225
|
-
if (isFresh && !client.listeners("notice").length) {
|
|
226
|
-
client.on("notice", function (msg) {
|
|
227
|
-
if (onNotice) {
|
|
228
|
-
onNotice(msg, msg?.message);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
console.log("notice: %j", msg?.message);
|
|
232
|
-
}
|
|
233
|
-
});
|
|
234
|
-
}
|
|
235
|
-
if (isFresh && !client.listeners("error").length) {
|
|
236
|
-
client.on("error", function (msg) {
|
|
237
|
-
if (onNotice) {
|
|
238
|
-
onNotice(msg, msg?.message);
|
|
239
|
-
}
|
|
240
|
-
else {
|
|
241
|
-
console.log("error: %j", msg?.message);
|
|
242
|
-
}
|
|
243
|
-
});
|
|
244
|
-
}
|
|
245
|
-
},
|
|
246
|
-
}),
|
|
247
|
-
});
|
|
248
|
-
// pgp.pg.defaults.max = 70;
|
|
249
|
-
// /* Casts count/sum/max to bigint. Needs rework to remove casting "+count" and other issues; */
|
|
250
|
-
// pgp.pg.types.setTypeParser(20, BigInt);
|
|
251
|
-
/**
|
|
252
|
-
* Prevent timestamp casting to ensure we don't lose the microseconds.
|
|
253
|
-
* This is needed to ensure the filters work as expected for a given row
|
|
254
|
-
*
|
|
255
|
-
register(1114, parseTimestamp) // timestamp without time zone
|
|
256
|
-
register(1184, parseTimestampTz) // timestamp with time zone
|
|
257
|
-
*/
|
|
258
|
-
// pgp.pg.types.setTypeParser(1114, v => v); // timestamp without time zone
|
|
259
|
-
// pgp.pg.types.setTypeParser(1184, v => v); // timestamp with time zone
|
|
260
|
-
// pgp.pg.types.setTypeParser(1182, v => v); // date
|
|
261
|
-
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMP, (v) => v); // timestamp without time zone
|
|
262
|
-
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMPTZ, (v) => v); // timestamp with time zone
|
|
263
|
-
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.DATE, (v) => v); // date
|
|
264
|
-
return {
|
|
265
|
-
db: pgp(dbConnection),
|
|
266
|
-
pgp,
|
|
267
|
-
};
|
|
268
|
-
};
|
|
269
199
|
//# sourceMappingURL=initProstgles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initProstgles.js","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"initProstgles.js","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import * as pgPromise from "pg-promise";
|
|
2
|
+
import type { ProstglesInitOptions } from "./ProstglesTypes";
|
|
3
|
+
import type { DB, PGP } from "./initProstgles";
|
|
4
|
+
import type pg from "pg-promise/typescript/pg-subset";
|
|
5
|
+
|
|
6
|
+
type GetDbConnectionArgs = Pick<
|
|
7
|
+
ProstglesInitOptions,
|
|
8
|
+
"DEBUG_MODE" | "onQuery" | "dbConnection" | "onNotice" | "onConnectionError"
|
|
9
|
+
>;
|
|
10
|
+
export const getDbConnection = function ({
|
|
11
|
+
dbConnection,
|
|
12
|
+
onQuery,
|
|
13
|
+
onConnectionError,
|
|
14
|
+
DEBUG_MODE,
|
|
15
|
+
onNotice,
|
|
16
|
+
}: GetDbConnectionArgs): { db: DB; pgp: PGP } {
|
|
17
|
+
const onQueryOrError:
|
|
18
|
+
| undefined
|
|
19
|
+
| ((error: any, ctx: pgPromise.IEventContext<pg.IClient>) => void) =
|
|
20
|
+
!onQuery && !DEBUG_MODE ?
|
|
21
|
+
undefined
|
|
22
|
+
: (error, ctx) => {
|
|
23
|
+
if (onQuery) {
|
|
24
|
+
onQuery(error, ctx);
|
|
25
|
+
} else if (DEBUG_MODE) {
|
|
26
|
+
if (error) {
|
|
27
|
+
console.error(error, ctx);
|
|
28
|
+
} else {
|
|
29
|
+
console.log(ctx);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const pgp: PGP = pgPromise({
|
|
35
|
+
...(onQueryOrError && {
|
|
36
|
+
query: (ctx) => onQueryOrError(undefined, ctx),
|
|
37
|
+
}),
|
|
38
|
+
error: (err: Error, ctx) => {
|
|
39
|
+
if (ctx.cn) {
|
|
40
|
+
onConnectionError?.(err, ctx);
|
|
41
|
+
}
|
|
42
|
+
onQueryOrError?.(err, ctx);
|
|
43
|
+
},
|
|
44
|
+
...((onNotice || DEBUG_MODE) && {
|
|
45
|
+
connect: function ({ client, useCount }) {
|
|
46
|
+
const isFresh = !useCount;
|
|
47
|
+
if (isFresh && !client.listeners("notice").length) {
|
|
48
|
+
client.on("notice", function (msg) {
|
|
49
|
+
if (onNotice) {
|
|
50
|
+
onNotice(msg, msg?.message);
|
|
51
|
+
} else {
|
|
52
|
+
console.log("notice: %j", msg?.message);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (isFresh && !client.listeners("error").length) {
|
|
57
|
+
client.on("error", function (msg) {
|
|
58
|
+
if (onNotice) {
|
|
59
|
+
onNotice(msg, msg?.message);
|
|
60
|
+
} else {
|
|
61
|
+
console.log("error: %j", msg?.message);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
}),
|
|
67
|
+
});
|
|
68
|
+
// pgp.pg.defaults.max = 70;
|
|
69
|
+
|
|
70
|
+
// /* Casts count/sum/max to bigint. Needs rework to remove casting "+count" and other issues; */
|
|
71
|
+
// pgp.pg.types.setTypeParser(20, BigInt);
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* Prevent timestamp casting to ensure we don't lose the microseconds.
|
|
75
|
+
* This is needed to ensure the filters work as expected for a given row
|
|
76
|
+
*
|
|
77
|
+
register(1114, parseTimestamp) // timestamp without time zone
|
|
78
|
+
register(1184, parseTimestampTz) // timestamp with time zone
|
|
79
|
+
*/
|
|
80
|
+
// pgp.pg.types.setTypeParser(1114, v => v); // timestamp without time zone
|
|
81
|
+
// pgp.pg.types.setTypeParser(1184, v => v); // timestamp with time zone
|
|
82
|
+
// pgp.pg.types.setTypeParser(1182, v => v); // date
|
|
83
|
+
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMP, (v) => v); // timestamp without time zone
|
|
84
|
+
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMPTZ, (v) => v); // timestamp with time zone
|
|
85
|
+
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.DATE, (v) => v); // date
|
|
86
|
+
|
|
87
|
+
return {
|
|
88
|
+
db: pgp(dbConnection),
|
|
89
|
+
pgp,
|
|
90
|
+
};
|
|
91
|
+
};
|
package/lib/initProstgles.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as pgPromise from "pg-promise";
|
|
2
1
|
import type pg from "pg-promise/typescript/pg-subset";
|
|
3
|
-
import { getKeys, isEmpty, isEqual } from "prostgles-types";
|
|
2
|
+
import { getKeys, getObjectEntries, isDefined, isEmpty, isEqual } from "prostgles-types";
|
|
4
3
|
import type { AuthClientRequest, SessionUser } from "./Auth/AuthTypes";
|
|
5
4
|
import { removeExpressRoutesTest } from "./Auth/utils/removeExpressRoute";
|
|
6
5
|
import { DBEventsManager } from "./DBEventsManager";
|
|
@@ -14,6 +13,8 @@ import { SchemaWatch } from "./SchemaWatch/SchemaWatch";
|
|
|
14
13
|
import { runSQLFile } from "./TableConfig/runSQLFile";
|
|
15
14
|
import { sleep } from "./utils/utils";
|
|
16
15
|
import { getClientHandlers } from "./WebsocketAPI/getClientHandlers";
|
|
16
|
+
import { getDbConnection } from "./getDbConnection";
|
|
17
|
+
import type pgPromise from "pg-promise";
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* Database connection details
|
|
@@ -30,7 +31,14 @@ export type DB = pgPromise.IDatabase<{}, pg.IClient>;
|
|
|
30
31
|
|
|
31
32
|
export type UpdateableOptions<S = void, SUser extends SessionUser = SessionUser> = Pick<
|
|
32
33
|
ProstglesInitOptions<S, SUser>,
|
|
33
|
-
|
|
34
|
+
| "fileTable"
|
|
35
|
+
| "restApi"
|
|
36
|
+
| "tableConfig"
|
|
37
|
+
| "schemaFilter"
|
|
38
|
+
| "auth"
|
|
39
|
+
| "publish"
|
|
40
|
+
| "publishMethods"
|
|
41
|
+
| "publishRawSQL"
|
|
34
42
|
>;
|
|
35
43
|
export type OnInitReason =
|
|
36
44
|
| {
|
|
@@ -201,15 +209,18 @@ export const initProstgles = async function (
|
|
|
201
209
|
getTSSchema: this.getTSFileContent,
|
|
202
210
|
options: this.opts,
|
|
203
211
|
update: async (newOpts) => {
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
212
|
+
const optionsThatChanged = getObjectEntries(newOpts)
|
|
213
|
+
.map((entry) => {
|
|
214
|
+
const [k, v] = entry;
|
|
215
|
+
if (!isEqual(this.opts[k], newOpts[k])) {
|
|
216
|
+
//@ts-ignore
|
|
217
|
+
this.opts[k] = v;
|
|
218
|
+
return entry;
|
|
219
|
+
}
|
|
220
|
+
return;
|
|
221
|
+
})
|
|
222
|
+
.filter(isDefined);
|
|
223
|
+
if (!optionsThatChanged.length) {
|
|
213
224
|
console.warn("No options changed");
|
|
214
225
|
return;
|
|
215
226
|
}
|
|
@@ -285,90 +296,3 @@ export const initProstgles = async function (
|
|
|
285
296
|
throw "init issues: " + (e as Error).toString();
|
|
286
297
|
}
|
|
287
298
|
};
|
|
288
|
-
|
|
289
|
-
type GetDbConnectionArgs = Pick<
|
|
290
|
-
ProstglesInitOptions,
|
|
291
|
-
"DEBUG_MODE" | "onQuery" | "dbConnection" | "onNotice" | "onConnectionError"
|
|
292
|
-
>;
|
|
293
|
-
const getDbConnection = function ({
|
|
294
|
-
dbConnection,
|
|
295
|
-
onQuery,
|
|
296
|
-
onConnectionError,
|
|
297
|
-
DEBUG_MODE,
|
|
298
|
-
onNotice,
|
|
299
|
-
}: GetDbConnectionArgs): { db: DB; pgp: PGP } {
|
|
300
|
-
const onQueryOrError:
|
|
301
|
-
| undefined
|
|
302
|
-
| ((error: any, ctx: pgPromise.IEventContext<pg.IClient>) => void) =
|
|
303
|
-
!onQuery && !DEBUG_MODE ?
|
|
304
|
-
undefined
|
|
305
|
-
: (error, ctx) => {
|
|
306
|
-
if (onQuery) {
|
|
307
|
-
onQuery(error, ctx);
|
|
308
|
-
} else if (DEBUG_MODE) {
|
|
309
|
-
if (error) {
|
|
310
|
-
console.error(error, ctx);
|
|
311
|
-
} else {
|
|
312
|
-
console.log(ctx);
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
const pgp: PGP = pgPromise({
|
|
318
|
-
...(onQueryOrError && {
|
|
319
|
-
query: (ctx) => onQueryOrError(undefined, ctx),
|
|
320
|
-
}),
|
|
321
|
-
error: (err: Error, ctx) => {
|
|
322
|
-
if (ctx.cn) {
|
|
323
|
-
onConnectionError?.(err, ctx);
|
|
324
|
-
}
|
|
325
|
-
onQueryOrError?.(err, ctx);
|
|
326
|
-
},
|
|
327
|
-
...((onNotice || DEBUG_MODE) && {
|
|
328
|
-
connect: function ({ client, useCount }) {
|
|
329
|
-
const isFresh = !useCount;
|
|
330
|
-
if (isFresh && !client.listeners("notice").length) {
|
|
331
|
-
client.on("notice", function (msg) {
|
|
332
|
-
if (onNotice) {
|
|
333
|
-
onNotice(msg, msg?.message);
|
|
334
|
-
} else {
|
|
335
|
-
console.log("notice: %j", msg?.message);
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
if (isFresh && !client.listeners("error").length) {
|
|
340
|
-
client.on("error", function (msg) {
|
|
341
|
-
if (onNotice) {
|
|
342
|
-
onNotice(msg, msg?.message);
|
|
343
|
-
} else {
|
|
344
|
-
console.log("error: %j", msg?.message);
|
|
345
|
-
}
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
},
|
|
349
|
-
}),
|
|
350
|
-
});
|
|
351
|
-
// pgp.pg.defaults.max = 70;
|
|
352
|
-
|
|
353
|
-
// /* Casts count/sum/max to bigint. Needs rework to remove casting "+count" and other issues; */
|
|
354
|
-
// pgp.pg.types.setTypeParser(20, BigInt);
|
|
355
|
-
|
|
356
|
-
/**
|
|
357
|
-
* Prevent timestamp casting to ensure we don't lose the microseconds.
|
|
358
|
-
* This is needed to ensure the filters work as expected for a given row
|
|
359
|
-
*
|
|
360
|
-
register(1114, parseTimestamp) // timestamp without time zone
|
|
361
|
-
register(1184, parseTimestampTz) // timestamp with time zone
|
|
362
|
-
*/
|
|
363
|
-
// pgp.pg.types.setTypeParser(1114, v => v); // timestamp without time zone
|
|
364
|
-
// pgp.pg.types.setTypeParser(1184, v => v); // timestamp with time zone
|
|
365
|
-
// pgp.pg.types.setTypeParser(1182, v => v); // date
|
|
366
|
-
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMP, (v) => v); // timestamp without time zone
|
|
367
|
-
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.TIMESTAMPTZ, (v) => v); // timestamp with time zone
|
|
368
|
-
pgp.pg.types.setTypeParser(pgp.pg.types.builtins.DATE, (v) => v); // date
|
|
369
|
-
|
|
370
|
-
return {
|
|
371
|
-
db: pgp(dbConnection),
|
|
372
|
-
pgp,
|
|
373
|
-
};
|
|
374
|
-
};
|