prostgles-server 4.2.45 → 4.2.46
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/PubSubManager/getInitQuery.d.ts.map +1 -1
- package/dist/PubSubManager/getInitQuery.js +6 -4
- package/dist/PubSubManager/getInitQuery.js.map +1 -1
- package/dist/SchemaWatch/SchemaWatch.d.ts.map +1 -1
- package/dist/SchemaWatch/SchemaWatch.js +5 -4
- package/dist/SchemaWatch/SchemaWatch.js.map +1 -1
- package/lib/PubSubManager/getInitQuery.ts +6 -4
- package/lib/SchemaWatch/SchemaWatch.ts +6 -5
- package/lib/SchemaWatch/createSchemaWatchEventTrigger.ts +3 -0
- package/package.json +1 -1
- package/tests/client/renderReactHook.ts +5 -3
- package/tests/client/useProstgles.spec.ts +31 -27
- package/tests/server/DBoGenerated.d.ts +10 -0
- package/tests/server/package-lock.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInitQuery.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,eAAO,MAAM,YAAY,SAAwB,aAAa,KAAG,QAAQ,MAAM,
|
|
1
|
+
{"version":3,"file":"getInitQuery.d.ts","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAsC,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGpF,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,eAAO,MAAM,YAAY,SAAwB,aAAa,KAAG,QAAQ,MAAM,CA0jB9E,CAAA"}
|
|
@@ -492,7 +492,7 @@ BEGIN
|
|
|
492
492
|
json_build_object(
|
|
493
493
|
'TG_OP', TG_OP,
|
|
494
494
|
'duration', (EXTRACT(EPOCH FROM now()) * 1000) - start_time,
|
|
495
|
-
'query', LEFT(current_query(), 400)
|
|
495
|
+
'query', ${this.dboBuilder.prostgles.opts.DEBUG_MODE ? 'LEFT(current_query(), 400)' : "'Only shown in debug mode'"}
|
|
496
496
|
)
|
|
497
497
|
)::TEXT, 7999/4)
|
|
498
498
|
);
|
|
@@ -524,8 +524,6 @@ BEGIN
|
|
|
524
524
|
DECLARE app RECORD;
|
|
525
525
|
|
|
526
526
|
BEGIN
|
|
527
|
-
|
|
528
|
-
--RAISE NOTICE 'SCHEMA_WATCH: %', tg_tag;
|
|
529
527
|
|
|
530
528
|
/*
|
|
531
529
|
This event trigger will outlive a prostgles app instance.
|
|
@@ -547,12 +545,16 @@ BEGIN
|
|
|
547
545
|
SELECT *
|
|
548
546
|
FROM prostgles.apps
|
|
549
547
|
WHERE tg_tag = ANY(watching_schema_tag_names)
|
|
548
|
+
AND curr_query NOT ILIKE '%${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}%'
|
|
550
549
|
LOOP
|
|
551
550
|
PERFORM pg_notify(
|
|
552
551
|
${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_CHANNEL.preffix)} || app.id,
|
|
553
552
|
LEFT(concat_ws(
|
|
554
553
|
${(0, PubSubManager_1.asValue)(PubSubManager_1.PubSubManager.DELIMITER)},
|
|
555
|
-
${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_TYPE.schema)},
|
|
554
|
+
${(0, PubSubManager_1.asValue)(PubSubManager_1.NOTIF_TYPE.schema)},
|
|
555
|
+
tg_tag ,
|
|
556
|
+
TG_event,
|
|
557
|
+
${this.dboBuilder.prostgles.opts.DEBUG_MODE ? 'curr_query' : "'Only shown in debug mode'"}
|
|
556
558
|
), 7999/4)
|
|
557
559
|
);
|
|
558
560
|
END LOOP;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":";;;AACA,mDAAoF;AACpF,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;AAErC,QAAA,YAAY,GAAG;IAC1B,uBAAuB,EAAE,mCAAmC;IAC5D,eAAe,EAAE,sCAAsC;IACvD,iBAAiB,EAAE,6BAA6B;IAChD,oBAAoB,EAAE,oCAAoC;CAClD,CAAC;AAEJ,MAAM,YAAY,GAAG,KAAK;IAE/B,MAAM,QAAQ,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAmB,EAAE;QAC9D,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,GAAG,WAAW,CAAA,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,8BAA8B,EAAE,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAElI,OAAO;;;;;;;IAOP,6BAAa,CAAC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sEA+BkB,IAAA,uBAAO,EAAC,OAAO,CAAC;yEACb,IAAA,uBAAO,EAAC,OAAO,CAAC;+BAC1D,IAAA,uBAAO,EAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA4BjC,IAAA,uBAAO,EAAC,OAAO,CAAC,KAAK,IAAA,uBAAO,EAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCAsGpB,oBAAY,CAAC,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gCAyGjC,IAAA,uBAAO,EAAC,6BAAa,CAAC,OAAO,CAAC;;kCAE5B,IAAA,uBAAO,EAAC,6BAAa,CAAC,SAAS,CAAC;;kCAEhC,IAAA,uBAAO,EAAC,0BAAU,CAAC,IAAI,CAAC;;;;;;;kCAOxB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAA,CAAC,CAAC,CAAC,qHAAqH,CAAC,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;kBAuBvL,uDAAuD;;;;;;;;;;8BAU3C,oBAAY,CAAC,eAAe;;qCAErB,oBAAY,CAAC,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uEAwFF,oBAAY,CAAC,eAAe;;;;;;;;;;uEAU5B,oBAAY,CAAC,eAAe;;;;;;;;;;uEAU5B,oBAAY,CAAC,eAAe;;;;;;;;;;;;;yCAazD,6BAAa,CAAC,kCAAkC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBA+BlE,IAAA,uBAAO,EAAC,6BAAa,CAAC,OAAO,CAAC;;0BAE5B,IAAA,uBAAO,EAAC,6BAAa,CAAC,SAAS,CAAC;0BAChC,IAAA,uBAAO,EAAC,0BAAU,CAAC,mBAAmB,CAAC
|
|
1
|
+
{"version":3,"file":"getInitQuery.js","sourceRoot":"","sources":["../../lib/PubSubManager/getInitQuery.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaWatch.d.ts","sourceRoot":"","sources":["../../lib/SchemaWatch/SchemaWatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAA+B,MAAM,+BAA+B,CAAC;AAOtG,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC;AAEtC,qBAAa,WAAW;IAEtB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO;IAYP,MAAM,CAAC,MAAM,eAAsB,UAAU,
|
|
1
|
+
{"version":3,"file":"SchemaWatch.d.ts","sourceRoot":"","sources":["../../lib/SchemaWatch/SchemaWatch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEtD,OAAO,EAAE,wBAAwB,EAA+B,MAAM,+BAA+B,CAAC;AAOtG,MAAM,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC;AAEtC,qBAAa,WAAW;IAEtB,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,wBAAwB,CAAC;IAC/B,OAAO;IAYP,MAAM,CAAC,MAAM,eAAsB,UAAU,0BAO5C;IAED;;OAEG;IACH,sBAAsB,EAAE,sBAAsB,GAAG,SAAS,CAazD;IAED,cAAc,EAAE,sBAAsB,GAAG,SAAS,CA0BhD;CACH"}
|
|
@@ -26,6 +26,7 @@ class SchemaWatch {
|
|
|
26
26
|
const instance = new SchemaWatch(dboBuilder);
|
|
27
27
|
if (instance.type.watchType === "DDL_trigger") {
|
|
28
28
|
await dboBuilder.getPubSubManager();
|
|
29
|
+
// TODO finish createSchemaWatchEventTrigger to ensure the query is not used in NOTIFY and exclude happens inside Postgres
|
|
29
30
|
}
|
|
30
31
|
return instance;
|
|
31
32
|
};
|
|
@@ -33,6 +34,10 @@ class SchemaWatch {
|
|
|
33
34
|
* Fallback for watchSchema in case of not a superuser (cannot add db event listener)
|
|
34
35
|
*/
|
|
35
36
|
onSchemaChangeFallback = async ({ command, query }) => {
|
|
37
|
+
if (typeof query === "string" && query.includes(PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID)) {
|
|
38
|
+
(0, PubSubManager_1.log)("Schema change event excluded from triggers due to EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID");
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
36
41
|
if (this.type.watchType !== "prostgles_queries" ||
|
|
37
42
|
!this.onSchemaChange ||
|
|
38
43
|
!DB_FALLBACK_COMMANDS.includes(command))
|
|
@@ -44,10 +49,6 @@ class SchemaWatch {
|
|
|
44
49
|
if (watchSchema && this.dboBuilder.prostgles.loaded) {
|
|
45
50
|
(0, PubSubManager_1.log)("Schema changed");
|
|
46
51
|
const { query, command } = event;
|
|
47
|
-
if (typeof query === "string" && query.includes(PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID)) {
|
|
48
|
-
(0, PubSubManager_1.log)("Schema change event excluded from triggers due to EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID");
|
|
49
|
-
return;
|
|
50
|
-
}
|
|
51
52
|
if (typeof watchSchema === "function") {
|
|
52
53
|
/* Only call the provided func */
|
|
53
54
|
watchSchema(event);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaWatch.js","sourceRoot":"","sources":["../../lib/SchemaWatch/SchemaWatch.ts"],"names":[],"mappings":";;;AACA,8DAA2D;AAE3D,kEAAoE;AACpE,+EAAsG;AACtG,MAAM,sBAAsB,GAAG,uCAAkB;KAC9C,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;KAC9B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,8EAA8E;AAElH,MAAM,oBAAoB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAIzE,MAAa,WAAW;IAEtB,UAAU,CAAa;IACvB,IAAI,CAA2B;IAC/B,YAAoB,UAAsB;QACxC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAA,yDAA2B,EAAC,UAAU,CAAC,CAAC;QACpD,IAAG,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;YAChC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,CAAC;QACD,IAAG,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;YACzC,IAAI,CAAC,sBAAsB,GAAG,SAAS,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,UAAsB,EAAE,EAAE;QAC/C,MAAM,QAAQ,GAAG,IAAI,WAAW,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,KAAK,aAAa,EAAE,CAAC;YAC7C,MAAM,UAAU,CAAC,gBAAgB,EAAE,
|
|
1
|
+
{"version":3,"file":"SchemaWatch.js","sourceRoot":"","sources":["../../lib/SchemaWatch/SchemaWatch.ts"],"names":[],"mappings":"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"}
|
|
@@ -494,7 +494,7 @@ BEGIN
|
|
|
494
494
|
json_build_object(
|
|
495
495
|
'TG_OP', TG_OP,
|
|
496
496
|
'duration', (EXTRACT(EPOCH FROM now()) * 1000) - start_time,
|
|
497
|
-
'query', LEFT(current_query(), 400)
|
|
497
|
+
'query', ${this.dboBuilder.prostgles.opts.DEBUG_MODE? 'LEFT(current_query(), 400)' : "'Only shown in debug mode'"}
|
|
498
498
|
)
|
|
499
499
|
)::TEXT, 7999/4)
|
|
500
500
|
);
|
|
@@ -526,8 +526,6 @@ BEGIN
|
|
|
526
526
|
DECLARE app RECORD;
|
|
527
527
|
|
|
528
528
|
BEGIN
|
|
529
|
-
|
|
530
|
-
--RAISE NOTICE 'SCHEMA_WATCH: %', tg_tag;
|
|
531
529
|
|
|
532
530
|
/*
|
|
533
531
|
This event trigger will outlive a prostgles app instance.
|
|
@@ -549,12 +547,16 @@ BEGIN
|
|
|
549
547
|
SELECT *
|
|
550
548
|
FROM prostgles.apps
|
|
551
549
|
WHERE tg_tag = ANY(watching_schema_tag_names)
|
|
550
|
+
AND curr_query NOT ILIKE '%${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}%'
|
|
552
551
|
LOOP
|
|
553
552
|
PERFORM pg_notify(
|
|
554
553
|
${asValue(NOTIF_CHANNEL.preffix)} || app.id,
|
|
555
554
|
LEFT(concat_ws(
|
|
556
555
|
${asValue(PubSubManager.DELIMITER)},
|
|
557
|
-
${asValue(NOTIF_TYPE.schema)},
|
|
556
|
+
${asValue(NOTIF_TYPE.schema)},
|
|
557
|
+
tg_tag ,
|
|
558
|
+
TG_event,
|
|
559
|
+
${this.dboBuilder.prostgles.opts.DEBUG_MODE? 'curr_query' : "'Only shown in debug mode'"}
|
|
558
560
|
), 7999/4)
|
|
559
561
|
);
|
|
560
562
|
END LOOP;
|
|
@@ -30,7 +30,8 @@ export class SchemaWatch {
|
|
|
30
30
|
static create = async (dboBuilder: DboBuilder) => {
|
|
31
31
|
const instance = new SchemaWatch(dboBuilder);
|
|
32
32
|
if(instance.type.watchType === "DDL_trigger") {
|
|
33
|
-
await dboBuilder.getPubSubManager()
|
|
33
|
+
await dboBuilder.getPubSubManager();
|
|
34
|
+
// TODO finish createSchemaWatchEventTrigger to ensure the query is not used in NOTIFY and exclude happens inside Postgres
|
|
34
35
|
}
|
|
35
36
|
return instance;
|
|
36
37
|
}
|
|
@@ -40,6 +41,10 @@ export class SchemaWatch {
|
|
|
40
41
|
*/
|
|
41
42
|
onSchemaChangeFallback: OnSchemaChangeCallback | undefined = async ({ command, query }) => {
|
|
42
43
|
|
|
44
|
+
if (typeof query === "string" && query.includes(PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID)) {
|
|
45
|
+
log("Schema change event excluded from triggers due to EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID");
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
43
48
|
if(
|
|
44
49
|
this.type.watchType !== "prostgles_queries" ||
|
|
45
50
|
!this.onSchemaChange ||
|
|
@@ -55,10 +60,6 @@ export class SchemaWatch {
|
|
|
55
60
|
if (watchSchema && this.dboBuilder.prostgles.loaded) {
|
|
56
61
|
log("Schema changed");
|
|
57
62
|
const { query, command } = event;
|
|
58
|
-
if (typeof query === "string" && query.includes(PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID)) {
|
|
59
|
-
log("Schema change event excluded from triggers due to EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID");
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
63
|
|
|
63
64
|
if (typeof watchSchema === "function") {
|
|
64
65
|
/* Only call the provided func */
|
package/package.json
CHANGED
|
@@ -75,20 +75,22 @@ export const renderReactHookManual = async <H extends Hook>(rootArgs: {
|
|
|
75
75
|
*/
|
|
76
76
|
renderDuration?: number;
|
|
77
77
|
onEnd?: OnEnd<H>;
|
|
78
|
+
onRender?: OnEnd<H>;
|
|
78
79
|
}): Promise<{
|
|
79
80
|
setProps: (props: Parameters<H>, opts: { waitFor?: number; onEnd?: OnEnd<H>; }) => void;
|
|
80
81
|
getResults: () => ReturnType<H>[];
|
|
81
82
|
}> => {
|
|
82
|
-
const { hook, onUnmount, renderDuration = 250, onEnd } = rootArgs;
|
|
83
|
+
const { hook, onUnmount, renderDuration = 250, onEnd, onRender } = rootArgs;
|
|
83
84
|
let lastRenderWaitTimeout: NodeJS.Timeout | null = null;
|
|
84
85
|
let didResolve = false;
|
|
85
86
|
let setProps: (props: any[]) => void;
|
|
86
87
|
resetBasicComponent();
|
|
87
88
|
return new Promise((resolve, reject) => {
|
|
88
89
|
const results = [];
|
|
89
|
-
const
|
|
90
|
+
const onCompRender = (result) => {
|
|
90
91
|
results.push(result);
|
|
91
92
|
if(didResolve) return;
|
|
93
|
+
onRender?.(results);
|
|
92
94
|
clearTimeout(lastRenderWaitTimeout);
|
|
93
95
|
lastRenderWaitTimeout = setTimeout(async () => {
|
|
94
96
|
|
|
@@ -117,7 +119,7 @@ export const renderReactHookManual = async <H extends Hook>(rootArgs: {
|
|
|
117
119
|
onUnmount?.();
|
|
118
120
|
};
|
|
119
121
|
}, []);
|
|
120
|
-
|
|
122
|
+
onCompRender(result);
|
|
121
123
|
return React.createElement('h1', null, `Hello`);
|
|
122
124
|
}
|
|
123
125
|
root.render(
|
|
@@ -32,37 +32,41 @@ export const useProstglesTest = async (db: DBHandlerClient, getSocketOptions: (w
|
|
|
32
32
|
|
|
33
33
|
await test("useProstglesClient with schema reload", async (t) => {
|
|
34
34
|
await db.sql(`select pg_sleep(1)`);
|
|
35
|
-
|
|
36
|
-
const { results: [res1, res2, res3], rerender } = await renderReactHook({
|
|
35
|
+
await renderReactHookManual({
|
|
37
36
|
hook: useProstglesClient,
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
if(rerenders < 2) return;
|
|
43
|
-
rerenders = -2;
|
|
37
|
+
initialProps: [{ socketOptions: getSocketOptions(true) }],
|
|
38
|
+
renderDuration: 1000,
|
|
39
|
+
onRender: async (results) => {
|
|
40
|
+
if(results.length !== 1) return;
|
|
44
41
|
db.sql(`CREATE TABLE ${newly_created_table}(id integer);`);
|
|
42
|
+
},
|
|
43
|
+
onEnd: async (results) => {
|
|
44
|
+
const [res1, res2, res3] = results;
|
|
45
|
+
assert.equal(
|
|
46
|
+
results.length, 3
|
|
47
|
+
);
|
|
48
|
+
assert.deepStrictEqual(
|
|
49
|
+
res1,
|
|
50
|
+
{ isLoading: true }
|
|
51
|
+
);
|
|
52
|
+
assert.equal(
|
|
53
|
+
res2.isLoading,
|
|
54
|
+
false
|
|
55
|
+
);
|
|
56
|
+
assert.equal(
|
|
57
|
+
typeof (res2 as any)?.dbo[newly_created_table]?.useFind,
|
|
58
|
+
"undefined"
|
|
59
|
+
);
|
|
60
|
+
assert.equal(
|
|
61
|
+
typeof (res3 as any)?.dbo[newly_created_table].useFind,
|
|
62
|
+
"function"
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
const count = await (res3 as any)?.dbo[newly_created_table].count();
|
|
66
|
+
assert.equal(count, 0);
|
|
67
|
+
|
|
45
68
|
}
|
|
46
69
|
});
|
|
47
|
-
assert.deepStrictEqual(
|
|
48
|
-
res1,
|
|
49
|
-
{ isLoading: true }
|
|
50
|
-
);
|
|
51
|
-
assert.equal(
|
|
52
|
-
res2.isLoading,
|
|
53
|
-
false
|
|
54
|
-
);
|
|
55
|
-
assert.equal(
|
|
56
|
-
typeof (res2 as any)?.dbo[newly_created_table]?.useFind,
|
|
57
|
-
"undefined"
|
|
58
|
-
);
|
|
59
|
-
assert.equal(
|
|
60
|
-
typeof (res3 as any)?.dbo[newly_created_table].useFind,
|
|
61
|
-
"function"
|
|
62
|
-
);
|
|
63
|
-
|
|
64
|
-
const count = await (res3 as any)?.dbo[newly_created_table].count();
|
|
65
|
-
assert.equal(count, 0);
|
|
66
70
|
});
|
|
67
71
|
|
|
68
72
|
await test("useProstglesClient with initial skip", async (t) => {
|
|
@@ -257,6 +257,16 @@ export type DBSchemaGenerated = {
|
|
|
257
257
|
id: string;
|
|
258
258
|
};
|
|
259
259
|
};
|
|
260
|
+
newly_created_table: {
|
|
261
|
+
is_view: false;
|
|
262
|
+
select: true;
|
|
263
|
+
insert: true;
|
|
264
|
+
update: true;
|
|
265
|
+
delete: true;
|
|
266
|
+
columns: {
|
|
267
|
+
id?: null | number;
|
|
268
|
+
};
|
|
269
|
+
};
|
|
260
270
|
obj_table: {
|
|
261
271
|
is_view: false;
|
|
262
272
|
select: true;
|