prostgles-server 3.0.35 → 3.0.37
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/DboBuilder.d.ts +1 -0
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +25 -14
- package/dist/DboBuilder.js.map +1 -1
- package/dist/Filtering.d.ts.map +1 -1
- package/dist/Filtering.js +11 -2
- package/dist/Filtering.js.map +1 -1
- package/dist/PostgresNotifListenManager.d.ts +1 -1
- package/dist/PostgresNotifListenManager.d.ts.map +1 -1
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts +3 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +2 -5
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager.d.ts +5 -0
- package/dist/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager.js +27 -16
- package/dist/PubSubManager.js.map +1 -1
- package/dist/SchemaWatch.d.ts +13 -0
- package/dist/SchemaWatch.d.ts.map +1 -0
- package/dist/SchemaWatch.js +34 -0
- package/dist/SchemaWatch.js.map +1 -0
- package/lib/DboBuilder.d.ts +1 -0
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +25 -14
- package/lib/DboBuilder.ts +28 -12
- package/lib/Filtering.d.ts.map +1 -1
- package/lib/Filtering.js +11 -2
- package/lib/Filtering.ts +18 -3
- package/lib/PostgresNotifListenManager.d.ts +1 -1
- package/lib/PostgresNotifListenManager.d.ts.map +1 -1
- package/lib/PostgresNotifListenManager.ts +10 -3
- package/lib/Prostgles.d.ts +2 -0
- package/lib/Prostgles.d.ts.map +1 -1
- package/lib/Prostgles.js +2 -5
- package/lib/Prostgles.ts +24 -26
- package/lib/PubSubManager.d.ts +5 -0
- package/lib/PubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager.js +27 -16
- package/lib/PubSubManager.ts +28 -17
- package/lib/SchemaWatch.d.ts +13 -0
- package/lib/SchemaWatch.d.ts.map +1 -0
- package/lib/SchemaWatch.js +33 -0
- package/lib/SchemaWatch.ts +40 -0
- package/package.json +1 -1
- package/tests/client/PID.txt +1 -1
- package/tests/server/package-lock.json +20 -20
- package/tests/server/package.json +1 -1
- package/dist/QueryBuilder.d.ts +0 -150
- package/dist/QueryBuilder.d.ts.map +0 -1
- package/dist/QueryBuilder.js +0 -1381
- package/dist/QueryBuilder.js.map +0 -1
package/lib/DboBuilder.js
CHANGED
|
@@ -28,7 +28,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|
|
28
28
|
};
|
|
29
29
|
var _a;
|
|
30
30
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
-
exports.prepareSort = exports.postgresToTsType = exports.isPlainObject = exports.DboBuilder = exports.TableHandler = exports.isPojoObject = exports.ViewHandler = exports.parseError = exports.EXISTS_KEYS = exports.makeErr = exports.escapeTSNames = exports.pgp = void 0;
|
|
31
|
+
exports.canEXECUTE = exports.prepareSort = exports.postgresToTsType = exports.isPlainObject = exports.DboBuilder = exports.TableHandler = exports.isPojoObject = exports.ViewHandler = exports.parseError = exports.EXISTS_KEYS = exports.makeErr = exports.escapeTSNames = exports.pgp = void 0;
|
|
32
32
|
const Bluebird = __importStar(require("bluebird"));
|
|
33
33
|
const makeSelectQuery_1 = require("./DboBuilder/QueryBuilder/makeSelectQuery");
|
|
34
34
|
const pgPromise = __importStar(require("pg-promise"));
|
|
@@ -1896,9 +1896,12 @@ class DboBuilder {
|
|
|
1896
1896
|
this.getPubSubManager = async () => {
|
|
1897
1897
|
if (!this._pubSubManager) {
|
|
1898
1898
|
let onSchemaChange;
|
|
1899
|
+
const { yes, canExecute, isSuperUs } = await PubSubManager_1.PubSubManager.canCreate(this.db);
|
|
1900
|
+
if (!exports.canEXECUTE)
|
|
1901
|
+
throw "PubSubManager based subscriptions not possible: Cannot run EXECUTE statements on this connection";
|
|
1899
1902
|
if (this.prostgles.opts.watchSchema && this.prostgles.opts.watchSchemaType === "DDL_trigger") {
|
|
1900
|
-
if (!
|
|
1901
|
-
console.warn(`watchSchemaType "
|
|
1903
|
+
if (!isSuperUs) {
|
|
1904
|
+
console.warn(`watchSchemaType "${this.prostgles.opts.watchSchemaType}" cannot be used because db user is not a superuser. Will fallback to watchSchemaType "prostgles_queries" `);
|
|
1902
1905
|
}
|
|
1903
1906
|
else {
|
|
1904
1907
|
onSchemaChange = (event) => {
|
|
@@ -1906,15 +1909,10 @@ class DboBuilder {
|
|
|
1906
1909
|
};
|
|
1907
1910
|
}
|
|
1908
1911
|
}
|
|
1909
|
-
|
|
1910
|
-
this
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
});
|
|
1914
|
-
}
|
|
1915
|
-
else {
|
|
1916
|
-
console.warn(`subscribe and sync cannot be used because db user is not a superuser `);
|
|
1917
|
-
}
|
|
1912
|
+
this._pubSubManager = await PubSubManager_1.PubSubManager.create({
|
|
1913
|
+
dboBuilder: this,
|
|
1914
|
+
onSchemaChange
|
|
1915
|
+
});
|
|
1918
1916
|
}
|
|
1919
1917
|
if (!this._pubSubManager) {
|
|
1920
1918
|
console.trace("Could not create this._pubSubManager");
|
|
@@ -1924,9 +1922,11 @@ class DboBuilder {
|
|
|
1924
1922
|
};
|
|
1925
1923
|
this.joinPaths = [];
|
|
1926
1924
|
this.init = async () => {
|
|
1927
|
-
/* If watchSchema then PubSubManager must be created */
|
|
1925
|
+
/* If watchSchema then PubSubManager must be created (if possible) */
|
|
1928
1926
|
await this.build();
|
|
1929
|
-
if (this.prostgles.opts.watchSchema &&
|
|
1927
|
+
if (this.prostgles.opts.watchSchema &&
|
|
1928
|
+
(this.prostgles.opts.watchSchemaType === "DDL_trigger" || !this.prostgles.opts.watchSchemaType) &&
|
|
1929
|
+
this.prostgles.isSuperUser) {
|
|
1930
1930
|
await this.getPubSubManager();
|
|
1931
1931
|
}
|
|
1932
1932
|
return this;
|
|
@@ -2620,3 +2620,14 @@ const prepareSort = (items, excludeOrder = false) => {
|
|
|
2620
2620
|
}).join(", ");
|
|
2621
2621
|
};
|
|
2622
2622
|
exports.prepareSort = prepareSort;
|
|
2623
|
+
const canEXECUTE = async (db) => {
|
|
2624
|
+
try {
|
|
2625
|
+
await db.any(`DO $$ BEGIN EXECUTE 'select 1'; END $$;`);
|
|
2626
|
+
return true;
|
|
2627
|
+
}
|
|
2628
|
+
catch (error) {
|
|
2629
|
+
console.warn(error);
|
|
2630
|
+
}
|
|
2631
|
+
return false;
|
|
2632
|
+
};
|
|
2633
|
+
exports.canEXECUTE = canEXECUTE;
|
package/lib/DboBuilder.ts
CHANGED
|
@@ -2544,9 +2544,12 @@ export class DboBuilder {
|
|
|
2544
2544
|
if(!this._pubSubManager){
|
|
2545
2545
|
let onSchemaChange;
|
|
2546
2546
|
|
|
2547
|
+
const { yes, canExecute, isSuperUs } = await PubSubManager.canCreate(this.db);
|
|
2548
|
+
if(!canEXECUTE) throw "PubSubManager based subscriptions not possible: Cannot run EXECUTE statements on this connection";
|
|
2549
|
+
|
|
2547
2550
|
if(this.prostgles.opts.watchSchema && this.prostgles.opts.watchSchemaType === "DDL_trigger"){
|
|
2548
|
-
if(!
|
|
2549
|
-
console.warn(`watchSchemaType "
|
|
2551
|
+
if(!isSuperUs){
|
|
2552
|
+
console.warn(`watchSchemaType "${this.prostgles.opts.watchSchemaType}" cannot be used because db user is not a superuser. Will fallback to watchSchemaType "prostgles_queries" `)
|
|
2550
2553
|
} else {
|
|
2551
2554
|
onSchemaChange = (event: { command: string; query: string }) => {
|
|
2552
2555
|
this.prostgles.onSchemaChange(event)
|
|
@@ -2554,14 +2557,10 @@ export class DboBuilder {
|
|
|
2554
2557
|
}
|
|
2555
2558
|
}
|
|
2556
2559
|
|
|
2557
|
-
|
|
2558
|
-
this
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
});
|
|
2562
|
-
} else {
|
|
2563
|
-
console.warn(`subscribe and sync cannot be used because db user is not a superuser `)
|
|
2564
|
-
}
|
|
2560
|
+
this._pubSubManager = await PubSubManager.create({
|
|
2561
|
+
dboBuilder: this,
|
|
2562
|
+
onSchemaChange
|
|
2563
|
+
});
|
|
2565
2564
|
}
|
|
2566
2565
|
if(!this._pubSubManager) {
|
|
2567
2566
|
console.trace("Could not create this._pubSubManager")
|
|
@@ -2594,10 +2593,15 @@ export class DboBuilder {
|
|
|
2594
2593
|
}
|
|
2595
2594
|
|
|
2596
2595
|
private init = async () => {
|
|
2596
|
+
|
|
2597
2597
|
|
|
2598
|
-
/* If watchSchema then PubSubManager must be created */
|
|
2598
|
+
/* If watchSchema then PubSubManager must be created (if possible) */
|
|
2599
2599
|
await this.build();
|
|
2600
|
-
if(
|
|
2600
|
+
if(
|
|
2601
|
+
this.prostgles.opts.watchSchema &&
|
|
2602
|
+
(this.prostgles.opts.watchSchemaType === "DDL_trigger" || !this.prostgles.opts.watchSchemaType) &&
|
|
2603
|
+
this.prostgles.isSuperUser
|
|
2604
|
+
){
|
|
2601
2605
|
await this.getPubSubManager()
|
|
2602
2606
|
}
|
|
2603
2607
|
|
|
@@ -3393,4 +3397,16 @@ export const prepareSort = (items: SortItem[], excludeOrder: boolean = false): s
|
|
|
3393
3397
|
let colKey = "fieldQuery" in d? d.fieldQuery : d.fieldPosition;
|
|
3394
3398
|
return `${colKey} ${orderType} ${nullOrder}`;
|
|
3395
3399
|
}).join(", ")
|
|
3400
|
+
}
|
|
3401
|
+
|
|
3402
|
+
export const canEXECUTE = async (db: DB) => {
|
|
3403
|
+
|
|
3404
|
+
try {
|
|
3405
|
+
await db.any(`DO $$ BEGIN EXECUTE 'select 1'; END $$;`);
|
|
3406
|
+
return true;
|
|
3407
|
+
} catch(error){
|
|
3408
|
+
console.warn(error)
|
|
3409
|
+
}
|
|
3410
|
+
|
|
3411
|
+
return false;
|
|
3396
3412
|
}
|
package/lib/Filtering.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Filtering.d.ts","sourceRoot":"","sources":["Filtering.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,
|
|
1
|
+
{"version":3,"file":"Filtering.d.ts","sourceRoot":"","sources":["Filtering.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,wCAAwC,CAAC;AACpE,OAAO,EACa,UAAU,EAG7B,MAAM,iBAAiB,CAAC;AAGzB;;;EAGE;AACF,aAAK,mBAAmB,GAAG;IAAG,MAAM,EAAE,UAAU,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,CAAC;AACzG,eAAO,MAAM,eAAe,SAAU,mBAAmB,KAAG,MAqT3D,CAAA"}
|
package/lib/Filtering.js
CHANGED
|
@@ -54,7 +54,13 @@ const parseFilterItem = (args) => {
|
|
|
54
54
|
mErr("Bad filter. Could not match to a column or alias: ");
|
|
55
55
|
throw " ";
|
|
56
56
|
}
|
|
57
|
-
|
|
57
|
+
let remainingStr = fKey.slice(selItem.alias.length);
|
|
58
|
+
/** Has shorthand operand 'col->>key.<>' */
|
|
59
|
+
const matchingOperand = prostgles_types_1.CompareFilterKeys.find(operand => remainingStr.endsWith(`.${operand}`));
|
|
60
|
+
if (matchingOperand) {
|
|
61
|
+
remainingStr = remainingStr.slice(-matchingOperand.length - 1);
|
|
62
|
+
rightF = { [matchingOperand]: rightF };
|
|
63
|
+
}
|
|
58
64
|
/* Is json path spec */
|
|
59
65
|
if (remainingStr.startsWith("->")) {
|
|
60
66
|
leftQ = getLeftQ(selItem);
|
|
@@ -87,7 +93,10 @@ const parseFilterItem = (args) => {
|
|
|
87
93
|
leftQ += currSep.sep + asValue(remainingStr.slice(currSep.idx + currSep.sep.length, nextIdx));
|
|
88
94
|
currSep = nextSep;
|
|
89
95
|
}
|
|
90
|
-
/*
|
|
96
|
+
/*
|
|
97
|
+
Is collapsed filter spec e.g. { "col.$ilike": 'text' }
|
|
98
|
+
will transform into { col: { $ilike: ['text'] } }
|
|
99
|
+
*/
|
|
91
100
|
}
|
|
92
101
|
else if (remainingStr.startsWith(".")) {
|
|
93
102
|
leftQ = getLeftQ(selItem);
|
package/lib/Filtering.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
|
|
3
3
|
import { SelectItem } from "./DboBuilder/QueryBuilder/QueryBuilder";
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
isEmpty, getKeys, FullFilter, EXISTS_KEYS, FilterDataType,
|
|
6
|
+
GeomFilterKeys, GeomFilter_Funcs,
|
|
7
|
+
TextFilter_FullTextSearchFilterKeys, CompareFilterKeys
|
|
8
|
+
} from "prostgles-types";
|
|
5
9
|
import { isPlainObject } from "./DboBuilder";
|
|
6
10
|
|
|
7
11
|
/**
|
|
@@ -69,7 +73,15 @@ export const parseFilterItem = (args: ParseFilterItemArgs): string => {
|
|
|
69
73
|
mErr("Bad filter. Could not match to a column or alias: ");
|
|
70
74
|
throw " "
|
|
71
75
|
}
|
|
72
|
-
|
|
76
|
+
|
|
77
|
+
let remainingStr = fKey.slice(selItem.alias.length);
|
|
78
|
+
|
|
79
|
+
/** Has shorthand operand 'col->>key.<>' */
|
|
80
|
+
const matchingOperand = CompareFilterKeys.find(operand => remainingStr.endsWith(`.${operand}`));
|
|
81
|
+
if(matchingOperand){
|
|
82
|
+
remainingStr = remainingStr.slice(- matchingOperand.length - 1)
|
|
83
|
+
rightF = { [matchingOperand]: rightF }
|
|
84
|
+
}
|
|
73
85
|
|
|
74
86
|
/* Is json path spec */
|
|
75
87
|
if(remainingStr.startsWith("->")){
|
|
@@ -114,7 +126,10 @@ export const parseFilterItem = (args: ParseFilterItemArgs): string => {
|
|
|
114
126
|
currSep = nextSep;
|
|
115
127
|
}
|
|
116
128
|
|
|
117
|
-
/*
|
|
129
|
+
/*
|
|
130
|
+
Is collapsed filter spec e.g. { "col.$ilike": 'text' }
|
|
131
|
+
will transform into { col: { $ilike: ['text'] } }
|
|
132
|
+
*/
|
|
118
133
|
} else if(remainingStr.startsWith(".")){
|
|
119
134
|
leftQ = getLeftQ(selItem);
|
|
120
135
|
|
|
@@ -14,7 +14,7 @@ export declare class PostgresNotifListenManager {
|
|
|
14
14
|
notifListener: PrglNotifListener;
|
|
15
15
|
db_channel_name: string;
|
|
16
16
|
isListening: any;
|
|
17
|
-
client
|
|
17
|
+
client?: pg.IClient;
|
|
18
18
|
static create: (db_pg: DB, notifListener: PrglNotifListener, db_channel_name: string) => Promise<PostgresNotifListenManager>;
|
|
19
19
|
constructor(db_pg: DB, notifListener: PrglNotifListener, db_channel_name: string, noInit?: boolean);
|
|
20
20
|
init(): Promise<PostgresNotifListenManager>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PostgresNotifListenManager.d.ts","sourceRoot":"","sources":["PostgresNotifListenManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,oBAAY,iBAAiB,GAAG,CAAC,IAAI,EAAE;
|
|
1
|
+
{"version":3,"file":"PostgresNotifListenManager.d.ts","sourceRoot":"","sources":["PostgresNotifListenManager.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACjD,OAAO,SAAS,MAAM,YAAY,CAAC;AAEnC,oBAAY,iBAAiB,GAAG,CAAC,IAAI,EAAE;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,KAAK,IAAI,CAAC;AAEX,qBAAa,0BAA0B;IACnC,UAAU,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IAClD,KAAK,EAAE,EAAE,CAAC;IACV,aAAa,EAAE,iBAAiB,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,GAAG,CAAC;IACjB,MAAM,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC;IAEpB,MAAM,CAAC,MAAM,6BAA8B,iBAAiB,mBAAmB,MAAM,KAAG,QAAQ,0BAA0B,CAAC,CAG1H;gBAEW,KAAK,EAAE,EAAE,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,UAAQ;IAS1F,IAAI,IAAI,OAAO,CAAC,0BAA0B,CAAC;IAQjD,OAAO;IAIP,cAAc;IA+Bd,SAAS,UAAS;IAClB,OAAO,aAMN;IAED,aAAa,aAKZ;IAED,SAAS,CAAC,KAAK,GAAE,MAAM,GAAG,SAAa,EAAE,WAAW,GAAE,MAAM,GAAG,SAAa;CAyD/E"}
|
|
@@ -7,14 +7,21 @@ import { DB } from "./Prostgles";
|
|
|
7
7
|
import pg from "pg-promise/typescript/pg-subset";
|
|
8
8
|
import pgPromise from "pg-promise";
|
|
9
9
|
|
|
10
|
-
export type PrglNotifListener = (args: {
|
|
10
|
+
export type PrglNotifListener = (args: {
|
|
11
|
+
length: number;
|
|
12
|
+
processId: number;
|
|
13
|
+
channel: string;
|
|
14
|
+
payload: string;
|
|
15
|
+
name: string;
|
|
16
|
+
}) => void;
|
|
17
|
+
|
|
11
18
|
export class PostgresNotifListenManager {
|
|
12
19
|
connection?: pgPromise.IConnected<{}, pg.IClient>;
|
|
13
20
|
db_pg: DB;
|
|
14
21
|
notifListener: PrglNotifListener;
|
|
15
22
|
db_channel_name: string;
|
|
16
23
|
isListening: any;
|
|
17
|
-
client
|
|
24
|
+
client?: pg.IClient;
|
|
18
25
|
|
|
19
26
|
static create = (db_pg: DB, notifListener: PrglNotifListener, db_channel_name: string): Promise<PostgresNotifListenManager> => {
|
|
20
27
|
let res = new PostgresNotifListenManager(db_pg, notifListener, db_channel_name, true);
|
|
@@ -85,7 +92,7 @@ export class PostgresNotifListenManager {
|
|
|
85
92
|
stopListening = () => {
|
|
86
93
|
if(this.db_channel_name) {
|
|
87
94
|
if(this.connection) this.connection.none('UNLISTEN $1~', this.db_channel_name)
|
|
88
|
-
if(this.client) this.client.query('UNLISTEN $1~', this.db_channel_name)
|
|
95
|
+
if(this.client) this.client.query('UNLISTEN $1~', this.db_channel_name as any)
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
98
|
|
package/lib/Prostgles.d.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import * as pgPromise from 'pg-promise';
|
|
3
3
|
import pg = require('pg-promise/typescript/pg-subset');
|
|
4
4
|
import FileManager, { ImageOptions, LocalConfig, S3Config } from "./FileManager";
|
|
5
|
+
import { SchemaWatch } from "./SchemaWatch";
|
|
5
6
|
import AuthHandler, { Auth, SessionUser, AuthRequestParams } from "./AuthHandler";
|
|
6
7
|
import TableConfigurator, { TableConfig } from "./TableConfig";
|
|
7
8
|
import { DboBuilder, DBHandlerServer, PRGLIOSocket } from "./DboBuilder";
|
|
@@ -209,6 +210,7 @@ export declare class Prostgles {
|
|
|
209
210
|
set dboBuilder(d: DboBuilder);
|
|
210
211
|
publishParser?: PublishParser;
|
|
211
212
|
authHandler?: AuthHandler;
|
|
213
|
+
schemaWatch?: SchemaWatch;
|
|
212
214
|
keywords: {
|
|
213
215
|
$filter: string;
|
|
214
216
|
$and: string;
|
package/lib/Prostgles.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Prostgles.d.ts","sourceRoot":"","sources":["Prostgles.ts"],"names":[],"mappings":";AAMA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,GAAG,QAAQ,iCAAiC,CAAC,CAAC;AACvD,OAAO,WAAW,EAAE,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Prostgles.d.ts","sourceRoot":"","sources":["Prostgles.ts"],"names":[],"mappings":"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"}
|
package/lib/Prostgles.js
CHANGED
|
@@ -305,10 +305,10 @@ class Prostgles {
|
|
|
305
305
|
async onSchemaChange(event) {
|
|
306
306
|
const { watchSchema, watchSchemaType, onReady, tsGeneratedTypesDir } = this.opts;
|
|
307
307
|
if (watchSchema && this.loaded) {
|
|
308
|
-
|
|
308
|
+
(0, PubSubManager_1.log)("Schema changed");
|
|
309
309
|
const { query } = event;
|
|
310
310
|
if (typeof query === "string" && query.includes(PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID)) {
|
|
311
|
-
|
|
311
|
+
(0, PubSubManager_1.log)("Schema change event excluded from triggers due to EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID");
|
|
312
312
|
return;
|
|
313
313
|
}
|
|
314
314
|
if (typeof watchSchema === "function") {
|
|
@@ -420,9 +420,6 @@ class Prostgles {
|
|
|
420
420
|
else if (this.opts.auth) {
|
|
421
421
|
throw "Auth config does not work without publish";
|
|
422
422
|
}
|
|
423
|
-
// if(this.watchSchema){
|
|
424
|
-
// if(!(await isSuperUser(db))) throw "Cannot watchSchema without a super user schema. Set watchSchema=false or provide a super user";
|
|
425
|
-
// }
|
|
426
423
|
this.dbEventsManager = new DBEventsManager_1.DBEventsManager(db, pgp);
|
|
427
424
|
this.writeDBSchema();
|
|
428
425
|
/* 5. Finish init and provide DBO object */
|
package/lib/Prostgles.ts
CHANGED
|
@@ -7,6 +7,7 @@ import * as promise from "bluebird";
|
|
|
7
7
|
import * as pgPromise from 'pg-promise';
|
|
8
8
|
import pg = require('pg-promise/typescript/pg-subset');
|
|
9
9
|
import FileManager, { ImageOptions, LocalConfig, S3Config } from "./FileManager";
|
|
10
|
+
import { SchemaWatch } from "./SchemaWatch";
|
|
10
11
|
|
|
11
12
|
const pkgj = require('../package.json');
|
|
12
13
|
const version = pkgj.version;
|
|
@@ -17,7 +18,7 @@ import TableConfigurator, { TableConfig } from "./TableConfig";
|
|
|
17
18
|
|
|
18
19
|
import { get } from "./utils";
|
|
19
20
|
import { DboBuilder, DBHandlerServer, isPlainObject, PRGLIOSocket } from "./DboBuilder";
|
|
20
|
-
import { PubSubManager, pickKeys } from "./PubSubManager";
|
|
21
|
+
import { PubSubManager, pickKeys, log } from "./PubSubManager";
|
|
21
22
|
export { DBHandlerServer }
|
|
22
23
|
export type PGP = pgPromise.IMain<{}, pg.IClient>;
|
|
23
24
|
|
|
@@ -252,22 +253,21 @@ export type ProstglesInitOptions<S = void, SUser extends SessionUser = SessionUs
|
|
|
252
253
|
| { checkIntervalMillis: number };
|
|
253
254
|
|
|
254
255
|
watchSchema?:
|
|
256
|
+
/**
|
|
257
|
+
* If true then DBoGenerated.d.ts will be updated and "onReady" will be called with new schema on both client and server
|
|
258
|
+
*/
|
|
259
|
+
| boolean
|
|
255
260
|
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
/**
|
|
262
|
-
* Will only rewrite the DBoGenerated.d.ts found in tsGeneratedTypesDir
|
|
263
|
-
* This is meant to be used in development when server restarts on file change
|
|
264
|
-
*/
|
|
265
|
-
| "hotReloadMode"
|
|
261
|
+
/**
|
|
262
|
+
* Will only rewrite the DBoGenerated.d.ts found in tsGeneratedTypesDir
|
|
263
|
+
* This is meant to be used in development when server restarts on file change
|
|
264
|
+
*/
|
|
265
|
+
| "hotReloadMode"
|
|
266
266
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
267
|
+
/**
|
|
268
|
+
* Function called when schema changes. Nothing else triggered
|
|
269
|
+
*/
|
|
270
|
+
| ((event: { command: string; query: string }) => void)
|
|
271
271
|
|
|
272
272
|
keywords?: Keywords;
|
|
273
273
|
onNotice?: (notice: AnyObject, message?: string) => void;
|
|
@@ -349,6 +349,7 @@ export class Prostgles {
|
|
|
349
349
|
|
|
350
350
|
authHandler?: AuthHandler;
|
|
351
351
|
|
|
352
|
+
schemaWatch?: SchemaWatch;
|
|
352
353
|
|
|
353
354
|
keywords = DEFAULT_KEYWORDS;
|
|
354
355
|
private loaded = false;
|
|
@@ -400,10 +401,10 @@ export class Prostgles {
|
|
|
400
401
|
async onSchemaChange(event: { command: string; query: string }) {
|
|
401
402
|
const { watchSchema, watchSchemaType, onReady, tsGeneratedTypesDir } = this.opts;
|
|
402
403
|
if (watchSchema && this.loaded) {
|
|
403
|
-
|
|
404
|
+
log("Schema changed");
|
|
404
405
|
const { query } = event;
|
|
405
406
|
if (typeof query === "string" && query.includes(PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID)) {
|
|
406
|
-
|
|
407
|
+
log("Schema change event excluded from triggers due to EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID");
|
|
407
408
|
return;
|
|
408
409
|
}
|
|
409
410
|
|
|
@@ -481,10 +482,10 @@ export class Prostgles {
|
|
|
481
482
|
await this._dboBuilder.build();
|
|
482
483
|
// this._dboBuilder.destroy();
|
|
483
484
|
} else {
|
|
484
|
-
this.dboBuilder = await DboBuilder.create(this
|
|
485
|
+
this.dboBuilder = await DboBuilder.create(this);
|
|
485
486
|
}
|
|
486
|
-
if (!this.dboBuilder) throw "this.dboBuilder"
|
|
487
|
-
this.dbo = this.dboBuilder.dbo
|
|
487
|
+
if (!this.dboBuilder) throw "this.dboBuilder";
|
|
488
|
+
this.dbo = this.dboBuilder.dbo;
|
|
488
489
|
return this.dbo;
|
|
489
490
|
}
|
|
490
491
|
|
|
@@ -504,12 +505,13 @@ export class Prostgles {
|
|
|
504
505
|
}
|
|
505
506
|
this.schema_checkIntervalMillis = setInterval(async () => {
|
|
506
507
|
if(!this.loaded) return;
|
|
507
|
-
const dbuilder = await DboBuilder.create(this
|
|
508
|
+
const dbuilder = await DboBuilder.create(this);
|
|
508
509
|
if (dbuilder.tsTypesDefinition !== this.dboBuilder.tsTypesDefinition) {
|
|
509
510
|
await this.refreshDBO();
|
|
510
511
|
this.init(onReady);
|
|
511
512
|
}
|
|
512
|
-
}, this.opts.watchSchemaType.checkIntervalMillis)
|
|
513
|
+
}, this.opts.watchSchemaType.checkIntervalMillis);
|
|
514
|
+
|
|
513
515
|
}
|
|
514
516
|
|
|
515
517
|
}
|
|
@@ -604,10 +606,6 @@ export class Prostgles {
|
|
|
604
606
|
throw "Auth config does not work without publish";
|
|
605
607
|
}
|
|
606
608
|
|
|
607
|
-
// if(this.watchSchema){
|
|
608
|
-
// if(!(await isSuperUser(db))) throw "Cannot watchSchema without a super user schema. Set watchSchema=false or provide a super user";
|
|
609
|
-
// }
|
|
610
|
-
|
|
611
609
|
this.dbEventsManager = new DBEventsManager(db, pgp);
|
|
612
610
|
|
|
613
611
|
|
package/lib/PubSubManager.d.ts
CHANGED
|
@@ -103,6 +103,11 @@ export declare class PubSubManager {
|
|
|
103
103
|
private appID?;
|
|
104
104
|
appCheckFrequencyMS: number;
|
|
105
105
|
appCheck?: ReturnType<typeof setInterval>;
|
|
106
|
+
static canCreate: (db: DB) => Promise<{
|
|
107
|
+
canExecute: boolean;
|
|
108
|
+
isSuperUs: boolean;
|
|
109
|
+
yes: boolean;
|
|
110
|
+
}>;
|
|
106
111
|
static create: (options: PubSubManagerOptions) => Promise<PubSubManager>;
|
|
107
112
|
destroyed: boolean;
|
|
108
113
|
destroy: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["PubSubManager.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["PubSubManager.ts"],"names":[],"mappings":"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"}
|
package/lib/PubSubManager.js
CHANGED
|
@@ -31,6 +31,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
31
31
|
exports.pickKeys = exports.omitKeys = exports.PubSubManager = exports.log = exports.DEFAULT_SYNC_BATCH_SIZE = exports.asValue = void 0;
|
|
32
32
|
const PostgresNotifListenManager_1 = require("./PostgresNotifListenManager");
|
|
33
33
|
const utils_1 = require("./utils");
|
|
34
|
+
const DboBuilder_1 = require("./DboBuilder");
|
|
34
35
|
const Prostgles_1 = require("./Prostgles");
|
|
35
36
|
const Bluebird = __importStar(require("bluebird"));
|
|
36
37
|
const pgPromise = __importStar(require("pg-promise"));
|
|
@@ -59,9 +60,10 @@ class PubSubManager {
|
|
|
59
60
|
this.NOTIF_CHANNEL = {
|
|
60
61
|
preffix: 'prostgles_',
|
|
61
62
|
getFull: (appID) => {
|
|
62
|
-
|
|
63
|
+
const finalAppId = appID ?? this.appID;
|
|
64
|
+
if (!finalAppId)
|
|
63
65
|
throw "No appID";
|
|
64
|
-
return this.NOTIF_CHANNEL.preffix +
|
|
66
|
+
return this.NOTIF_CHANNEL.preffix + finalAppId;
|
|
65
67
|
}
|
|
66
68
|
};
|
|
67
69
|
this.appCheckFrequencyMS = 10 * 1000;
|
|
@@ -552,29 +554,33 @@ class PubSubManager {
|
|
|
552
554
|
|
|
553
555
|
--RAISE NOTICE 'SCHEMA_WATCH: %', tg_tag;
|
|
554
556
|
|
|
557
|
+
/*
|
|
558
|
+
This event trigger will outlive a prostgles app instance.
|
|
559
|
+
Must ensure it only fires if an app instance is running
|
|
560
|
+
*/
|
|
555
561
|
IF
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
+
EXISTS (
|
|
563
|
+
SELECT 1
|
|
564
|
+
FROM information_schema.tables
|
|
565
|
+
WHERE table_schema = 'prostgles'
|
|
566
|
+
AND table_name = 'apps'
|
|
567
|
+
)
|
|
562
568
|
THEN
|
|
563
569
|
|
|
564
570
|
SELECT LEFT(COALESCE(current_query(), ''), 5000)
|
|
565
571
|
INTO curr_query;
|
|
566
572
|
|
|
567
573
|
FOR arw IN
|
|
568
|
-
|
|
574
|
+
SELECT * FROM prostgles.apps WHERE watching_schema IS TRUE
|
|
569
575
|
|
|
570
576
|
LOOP
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
577
|
+
PERFORM pg_notify(
|
|
578
|
+
${(0, exports.asValue)(this.NOTIF_CHANNEL.preffix)} || arw.id,
|
|
579
|
+
concat_ws(
|
|
580
|
+
${(0, exports.asValue)(PubSubManager.DELIMITER)},
|
|
581
|
+
${(0, exports.asValue)(this.NOTIF_TYPE.schema)}, tg_tag , TG_event, curr_query
|
|
582
|
+
)
|
|
583
|
+
);
|
|
578
584
|
END LOOP;
|
|
579
585
|
|
|
580
586
|
END IF;
|
|
@@ -1383,6 +1389,11 @@ PubSubManager.DELIMITER = '|$prstgls$|';
|
|
|
1383
1389
|
// FROM pg_stat_activity
|
|
1384
1390
|
// WHERE application_name IS NOT NULL AND application_name != '' -- state = 'active';
|
|
1385
1391
|
// `))
|
|
1392
|
+
PubSubManager.canCreate = async (db) => {
|
|
1393
|
+
const canExecute = await (0, DboBuilder_1.canEXECUTE)(db);
|
|
1394
|
+
const isSuperUs = await (0, Prostgles_1.isSuperUser)(db);
|
|
1395
|
+
return { canExecute, isSuperUs, yes: canExecute && isSuperUs };
|
|
1396
|
+
};
|
|
1386
1397
|
PubSubManager.create = async (options) => {
|
|
1387
1398
|
const res = new PubSubManager(options);
|
|
1388
1399
|
return await res.init();
|