prostgles-server 4.2.599 → 4.2.601
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/README.md +26 -0
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.external.fixture.d.ts +2 -2
- package/dist/DBSchemaBuilder/getServerFunctionReturnTypes.fixture.d.ts +8 -8
- package/dist/DboBuilder/DboBuilder.d.ts +4 -0
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +64 -13
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilder.spec.d.ts +2 -0
- package/dist/DboBuilder/DboBuilder.spec.d.ts.map +1 -0
- package/dist/DboBuilder/DboBuilder.spec.js +72 -0
- package/dist/DboBuilder/DboBuilder.spec.js.map +1 -0
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts +10 -5
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +1 -0
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.js +1 -0
- package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
- package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js +3 -0
- package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +2 -2
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
- package/dist/Logging.d.ts +1 -1
- package/dist/Logging.d.ts.map +1 -1
- package/dist/Prostgles.d.ts +13 -8
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +57 -4
- package/dist/Prostgles.js.map +1 -1
- package/dist/ProstglesContext.spec.d.ts +2 -0
- package/dist/ProstglesContext.spec.d.ts.map +1 -0
- package/dist/ProstglesContext.spec.js +73 -0
- package/dist/ProstglesContext.spec.js.map +1 -0
- package/dist/ProstglesTypes.d.ts +11 -5
- package/dist/ProstglesTypes.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.d.ts +2 -2
- package/dist/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js +2 -0
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/defineServerFunction.d.ts +21 -16
- package/dist/PublishParser/defineServerFunction.d.ts.map +1 -1
- package/dist/PublishParser/defineServerFunction.js +7 -1
- package/dist/PublishParser/defineServerFunction.js.map +1 -1
- package/dist/PublishParser/defineServerFunction.spec.js +38 -0
- package/dist/PublishParser/defineServerFunction.spec.js.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.d.ts +10 -3
- package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
- package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
- package/dist/StorageClient/getFileTableConfig.d.ts +1 -1
- package/dist/StorageClient/getFileTableConfig.d.ts.map +1 -1
- package/dist/StorageClient/getFileTableConfig.js.map +1 -1
- package/dist/TableConfig/TableConfigTypes.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.js +4 -4
- package/dist/TableConfig/initTableConfig.js.map +1 -1
- package/dist/TableHooks/TableHooks.d.ts +28 -20
- package/dist/TableHooks/TableHooks.d.ts.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/initProstgles.d.ts +22 -13
- package/dist/initProstgles.d.ts.map +1 -1
- package/dist/initProstgles.js +11 -2
- package/dist/initProstgles.js.map +1 -1
- package/dist/updateConfiguration.d.ts +1 -1
- package/dist/updateConfiguration.d.ts.map +1 -1
- package/dist/updateConfiguration.js.map +1 -1
- package/lib/DboBuilder/DboBuilder.spec.ts +84 -0
- package/lib/DboBuilder/DboBuilder.ts +68 -13
- package/lib/DboBuilder/TableHandler/TableHandler.ts +2 -1
- package/lib/DboBuilder/TableHandler/delete.ts +1 -0
- package/lib/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.ts +4 -0
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +2 -2
- package/lib/Logging.ts +1 -0
- package/lib/Prostgles.ts +63 -8
- package/lib/ProstglesContext.spec.ts +76 -0
- package/lib/ProstglesTypes.ts +16 -5
- package/lib/PublishParser/PublishParser.ts +6 -4
- package/lib/PublishParser/defineServerFunction.spec.ts +48 -0
- package/lib/PublishParser/defineServerFunction.ts +61 -21
- package/lib/PublishParser/publishTypesAndUtils.ts +11 -3
- package/lib/StorageClient/getFileTableConfig.ts +2 -2
- package/lib/TableConfig/TableConfigTypes.ts +2 -13
- package/lib/TableConfig/initTableConfig.ts +4 -4
- package/lib/TableHooks/TableHooks.ts +35 -20
- package/lib/index.ts +25 -5
- package/lib/initProstgles.ts +57 -19
- package/lib/updateConfiguration.ts +1 -1
- package/package.json +1 -1
- package/tsconfig.json +2 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,2CAAwC;AAGxC,SAAS,SAAS,CAKhB,MAA+C;IAE/C,MAAM,IAAI,GAAG,IAAI,qBAAS,CACxB,MAAiE,CAClE,CAAC;IACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAA0C,EAAE;QAClE,IAAI,EAAE,MAAM;KACb,CAAsD,CAAC;AAC1D,CAAC;AAED,qFAAqF;AAC9E,MAAM,eAAe,GAAG,GAAsD,EAAE;IACrF,OAAO,CAAsB,MAA+C,EAAE,EAAE,CAC9E,SAAS,CAAoB,MAAM,CAAC,CAAC;AACzC,CAAC,CAAC;AAHW,QAAA,eAAe,mBAG1B;AACF,uEAAqD;AACrD,mDAAiC;AAKjC,wEAAsD;AAYtD,4EAA0D;AAE1D,kBAAe,SAAS,CAAC"}
|
package/dist/initProstgles.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type pgPromise from "pg-promise";
|
|
2
2
|
import type pg from "pg-promise/typescript/pg-subset";
|
|
3
|
-
import type { SQLHandler, TableSchema } from "prostgles-types";
|
|
3
|
+
import type { MaybePromise, SQLHandler, TableSchema } from "prostgles-types";
|
|
4
4
|
import type { AuthClientRequest, SessionUser } from "./Auth/AuthTypes";
|
|
5
5
|
import type { DboBuilder } from "./DboBuilder/DboBuilder";
|
|
6
6
|
import type { DBOFullyTyped } from "./DBSchemaBuilder/DBSchemaBuilder";
|
|
@@ -20,16 +20,16 @@ string | pg.IConnectionParameters<pg.IClient>;
|
|
|
20
20
|
export type DbConnectionOpts = pg.IDefaults;
|
|
21
21
|
export type PGP = pgPromise.IMain<{}, pg.IClient>;
|
|
22
22
|
export type DB = pgPromise.IDatabase<{}, pg.IClient>;
|
|
23
|
-
export type UpdatableOptions<S = void, SUser extends SessionUser = SessionUser> = Pick<ProstglesInitOptions<S, SUser>, "io" | "fileTable" | "restApi" | "tableHooks" | "tableConfig" | "schemaFilter" | "auth" | "publish" | "functions" | "publishRawSQL" | "tsGeneratedTypesDir" | "tsGeneratedTypesFunctionsPath" | "modifyClientSchema">;
|
|
23
|
+
export type UpdatableOptions<S = void, SUser extends SessionUser = SessionUser, Context = undefined> = Pick<ProstglesInitOptions<S, SUser, Context>, "io" | "fileTable" | "restApi" | "tableHooks" | "tableConfig" | "schemaFilter" | "auth" | "publish" | "functions" | "publishRawSQL" | "tsGeneratedTypesDir" | "tsGeneratedTypesFunctionsPath" | "modifyClientSchema" | "createContext">;
|
|
24
24
|
export type OnInitReason = {
|
|
25
25
|
type: "schema change";
|
|
26
26
|
query: string;
|
|
27
27
|
command: string | undefined;
|
|
28
28
|
} | {
|
|
29
29
|
type: "prgl.update";
|
|
30
|
-
newOpts: Omit<UpdatableOptions, (typeof clientOnlyUpdateKeys)[number]>;
|
|
30
|
+
newOpts: Omit<UpdatableOptions<void, SessionUser, any>, (typeof clientOnlyUpdateKeys)[number]>;
|
|
31
31
|
} | {
|
|
32
|
-
type: "init" | "prgl.restart" | "TableConfig";
|
|
32
|
+
type: "init" | "prgl.restart" | "TableConfig" | "dbo.refresh";
|
|
33
33
|
};
|
|
34
34
|
type OnReadyParamsCommon = {
|
|
35
35
|
db: DB;
|
|
@@ -39,18 +39,27 @@ type OnReadyParamsCommon = {
|
|
|
39
39
|
};
|
|
40
40
|
export type OnReadyParamsBasic = OnReadyParamsCommon & {
|
|
41
41
|
dbo: DBHandlerServer;
|
|
42
|
+
context: any;
|
|
42
43
|
};
|
|
43
|
-
export type OnReadyParams<S> = OnReadyParamsCommon & {
|
|
44
|
+
export type OnReadyParams<S, Context = undefined> = OnReadyParamsCommon & {
|
|
44
45
|
dbo: DBOFullyTyped<S>;
|
|
46
|
+
context: Context;
|
|
45
47
|
};
|
|
46
|
-
export type
|
|
47
|
-
export type
|
|
48
|
-
|
|
48
|
+
export type ContextCleanup = () => MaybePromise<void>;
|
|
49
|
+
export type CreateContextParams<S> = OnReadyParamsCommon & {
|
|
50
|
+
dbo: DBOFullyTyped<S>;
|
|
51
|
+
onCleanup: (cleanup: ContextCleanup) => void;
|
|
52
|
+
};
|
|
53
|
+
export type CreateContext<S, Context> = (params: CreateContextParams<S>) => MaybePromise<Context>;
|
|
54
|
+
export type OnReadyCallback<S, SUser extends SessionUser, Context = undefined> = (params: OnReadyParams<S, Context>, update: (newOpts: UpdatableOptions<S, SUser, Context>, force?: true) => Promise<void>) => void | Promise<void>;
|
|
55
|
+
export type OnReadyCallbackBasic = (params: OnReadyParamsBasic, update: (newOpts: UpdatableOptions<void, SessionUser, any>, force?: true) => Promise<void>) => void | Promise<void>;
|
|
56
|
+
export type InitResult<S = void, SUser extends SessionUser = SessionUser, Context = undefined> = {
|
|
49
57
|
db: DBOFullyTyped<S>;
|
|
58
|
+
context: Context;
|
|
50
59
|
sql: SQLHandler;
|
|
51
60
|
_db: DB;
|
|
52
61
|
pgp: PGP;
|
|
53
|
-
io: ProstglesInitOptions<S, SUser>["io"];
|
|
62
|
+
io: ProstglesInitOptions<S, SUser, Context>["io"];
|
|
54
63
|
destroy: () => Promise<boolean>;
|
|
55
64
|
/**
|
|
56
65
|
* Generated database public schema TS types for all tables and views
|
|
@@ -58,12 +67,12 @@ export type InitResult<S = void, SUser extends SessionUser = SessionUser> = {
|
|
|
58
67
|
getTSSchema: typeof DboBuilder.prototype.getTsDefinitions;
|
|
59
68
|
getSchema: typeof DboBuilder.prototype.getSchema;
|
|
60
69
|
reWriteDBSchema: () => void;
|
|
61
|
-
update: (newOpts: UpdatableOptions<S, SUser>, force?: true) => Promise<void>;
|
|
62
|
-
restart: () => Promise<InitResult<S, SUser>>;
|
|
63
|
-
options: ProstglesInitOptions<S, SUser>;
|
|
70
|
+
update: (newOpts: UpdatableOptions<S, SUser, Context>, force?: true) => Promise<void>;
|
|
71
|
+
restart: () => Promise<InitResult<S, SUser, Context>>;
|
|
72
|
+
options: ProstglesInitOptions<S, SUser, Context>;
|
|
64
73
|
getClientDBHandlers: (clientReq: AuthClientRequest, scope: PermissionScope | undefined) => ReturnType<typeof getClientHandlers<S>>;
|
|
65
74
|
getFieldsWithTypes: typeof DboBuilder.prototype.getDetailedFieldInfo;
|
|
66
75
|
};
|
|
67
|
-
export declare const initProstgles: (this: Prostgles, onReady: OnReadyCallbackBasic, reason: OnInitReason) => Promise<InitResult
|
|
76
|
+
export declare const initProstgles: (this: Prostgles, onReady: OnReadyCallbackBasic, reason: OnInitReason) => Promise<InitResult<void, SessionUser, any>>;
|
|
68
77
|
export {};
|
|
69
78
|
//# sourceMappingURL=initProstgles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initProstgles.d.ts","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,MAAM,iCAAiC,CAAC;AACtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"initProstgles.d.ts","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"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"}
|
package/dist/initProstgles.js
CHANGED
|
@@ -81,11 +81,13 @@ const initProstgles = async function (onReady, reason) {
|
|
|
81
81
|
const db = this.db;
|
|
82
82
|
const pgp = this.pgp;
|
|
83
83
|
try {
|
|
84
|
+
await this.cleanupContext();
|
|
84
85
|
/* 2. Execute any SQL file if provided */
|
|
85
86
|
await (0, runSQLFile_1.runSQLFile)(this);
|
|
86
|
-
await this.
|
|
87
|
+
await this.rebuildDBO();
|
|
87
88
|
await this.initTableConfig(reason);
|
|
88
|
-
await this.
|
|
89
|
+
await this.rebuildDBO();
|
|
90
|
+
await this.createContext(reason);
|
|
89
91
|
this.initRestApi();
|
|
90
92
|
this.schemaWatch = await SchemaWatch_1.SchemaWatch.create(this.dboBuilder);
|
|
91
93
|
if (this.opts.publish) {
|
|
@@ -115,6 +117,7 @@ const initProstgles = async function (onReady, reason) {
|
|
|
115
117
|
db: this.db,
|
|
116
118
|
tables: this.dboBuilder.tables,
|
|
117
119
|
reason,
|
|
120
|
+
context: this.context,
|
|
118
121
|
}, async (...args) => {
|
|
119
122
|
await (0, updateConfiguration_1.updateConfiguration)(this, onReady, ...args);
|
|
120
123
|
});
|
|
@@ -123,8 +126,12 @@ const initProstgles = async function (onReady, reason) {
|
|
|
123
126
|
console.error("Prostgles: Error within onReady: \n", err);
|
|
124
127
|
}
|
|
125
128
|
this.loaded = true;
|
|
129
|
+
const getContext = () => this.context;
|
|
126
130
|
const initResult = {
|
|
127
131
|
db: this.dbo,
|
|
132
|
+
get context() {
|
|
133
|
+
return getContext();
|
|
134
|
+
},
|
|
128
135
|
sql: this.dboBuilder.sql,
|
|
129
136
|
_db: db,
|
|
130
137
|
pgp,
|
|
@@ -155,6 +162,7 @@ const initProstgles = async function (onReady, reason) {
|
|
|
155
162
|
this.opts.io.engine.close();
|
|
156
163
|
}
|
|
157
164
|
}
|
|
165
|
+
await this.cleanupContext();
|
|
158
166
|
await this.dboBuilder.destroy();
|
|
159
167
|
this.authHandler.destroy();
|
|
160
168
|
await this.tableConfigurator?.destroy();
|
|
@@ -171,6 +179,7 @@ const initProstgles = async function (onReady, reason) {
|
|
|
171
179
|
return initResult;
|
|
172
180
|
}
|
|
173
181
|
catch (e) {
|
|
182
|
+
await this.cleanupContext();
|
|
174
183
|
console.trace(e);
|
|
175
184
|
throw "init issues: " + e.toString();
|
|
176
185
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initProstgles.js","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":";;;AAIA,wEAA0E;AAC1E,uDAAoD;AAGpD,uDAAoD;AAEpD,2CAA6C;AAE7C,iEAAoF;AACpF,2DAAwD;AACxD,yDAAsD;AACtD,+DAAuF;AACvF,yCAAsC;AACtC,wEAAqE;AACrE,uEAAoE;
|
|
1
|
+
{"version":3,"file":"initProstgles.js","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OnReadyCallbackBasic, UpdatableOptions } from "./initProstgles";
|
|
2
2
|
import type { Prostgles } from "./Prostgles";
|
|
3
|
-
export declare const updateConfiguration: (prgl: Prostgles, onReady: OnReadyCallbackBasic, newOpts: UpdatableOptions, force?: true) => Promise<void>;
|
|
3
|
+
export declare const updateConfiguration: (prgl: Prostgles, onReady: OnReadyCallbackBasic, newOpts: UpdatableOptions<void, any, any>, force?: true) => Promise<void>;
|
|
4
4
|
/**
|
|
5
5
|
* Changes that do not affect the server so onReady does not need to be called again
|
|
6
6
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateConfiguration.d.ts","sourceRoot":"","sources":["../lib/updateConfiguration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,mBAAmB,GAC9B,MAAM,SAAS,EACf,SAAS,oBAAoB,EAC7B,SAAS,gBAAgB,
|
|
1
|
+
{"version":3,"file":"updateConfiguration.d.ts","sourceRoot":"","sources":["../lib/updateConfiguration.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,mBAAmB,GAC9B,MAAM,SAAS,EACf,SAAS,oBAAoB,EAC7B,SAAS,gBAAgB,CAAC,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,EACzC,QAAQ,IAAI,kBAoEb,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,oBAAoB,+EAOc,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateConfiguration.js","sourceRoot":"","sources":["../lib/updateConfiguration.ts"],"names":[],"mappings":";;;AAAA,qDAAiF;AAI1E,MAAM,mBAAmB,GAAG,KAAK,EACtC,IAAe,EACf,OAA6B,EAC7B,
|
|
1
|
+
{"version":3,"file":"updateConfiguration.js","sourceRoot":"","sources":["../lib/updateConfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import assert from "node:assert";
|
|
2
|
+
import { describe, test } from "node:test";
|
|
3
|
+
import type { EventInfo } from "../Logging";
|
|
4
|
+
import type { Prostgles } from "../Prostgles";
|
|
5
|
+
import { DboBuilder } from "./DboBuilder";
|
|
6
|
+
|
|
7
|
+
const createDboBuilder = ({
|
|
8
|
+
events,
|
|
9
|
+
logs,
|
|
10
|
+
}: {
|
|
11
|
+
events: string[];
|
|
12
|
+
logs: EventInfo[];
|
|
13
|
+
}) => {
|
|
14
|
+
const transaction = {};
|
|
15
|
+
const prostgles = {
|
|
16
|
+
db: {
|
|
17
|
+
tx: async (callback: (tx: object) => unknown) => {
|
|
18
|
+
const result = await callback(transaction);
|
|
19
|
+
events.push("committed");
|
|
20
|
+
return result;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
opts: {
|
|
24
|
+
onLog: (event: EventInfo) => {
|
|
25
|
+
logs.push(event);
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
} as unknown as Prostgles;
|
|
29
|
+
const dboBuilder = Reflect.construct(DboBuilder, [prostgles]) as DboBuilder;
|
|
30
|
+
dboBuilder.tablesOrViews = [];
|
|
31
|
+
return dboBuilder;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
void describe("DboBuilder onCommit", async () => {
|
|
35
|
+
await test("awaits callbacks after commit and logs callback errors", async () => {
|
|
36
|
+
const events: string[] = [];
|
|
37
|
+
const logs: EventInfo[] = [];
|
|
38
|
+
const dboBuilder = createDboBuilder({ events, logs });
|
|
39
|
+
|
|
40
|
+
const result = await dboBuilder.getTX((_dbTX, transaction) => {
|
|
41
|
+
dboBuilder.registerOnCommitCallback(transaction, async () => {
|
|
42
|
+
await Promise.resolve();
|
|
43
|
+
events.push("first callback");
|
|
44
|
+
throw new Error("callback failed");
|
|
45
|
+
});
|
|
46
|
+
dboBuilder.registerOnCommitCallback(transaction, () => {
|
|
47
|
+
events.push("second callback");
|
|
48
|
+
return 123;
|
|
49
|
+
});
|
|
50
|
+
events.push("transaction callback");
|
|
51
|
+
return "mutation result";
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
assert.equal(result, "mutation result");
|
|
55
|
+
assert.deepEqual(events, [
|
|
56
|
+
"transaction callback",
|
|
57
|
+
"committed",
|
|
58
|
+
"first callback",
|
|
59
|
+
"second callback",
|
|
60
|
+
]);
|
|
61
|
+
assert.equal(logs.length, 1);
|
|
62
|
+
assert.equal(logs[0]?.type, "debug");
|
|
63
|
+
if (logs[0]?.type === "debug") {
|
|
64
|
+
assert.equal(logs[0].command, "DboBuilder.onCommit");
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
await test("discards callbacks on rollback", async () => {
|
|
69
|
+
const events: string[] = [];
|
|
70
|
+
const dboBuilder = createDboBuilder({ events, logs: [] });
|
|
71
|
+
|
|
72
|
+
await assert.rejects(
|
|
73
|
+
dboBuilder.getTX((_dbTX, transaction) => {
|
|
74
|
+
dboBuilder.registerOnCommitCallback(transaction, () => {
|
|
75
|
+
events.push("callback");
|
|
76
|
+
});
|
|
77
|
+
throw new Error("rollback");
|
|
78
|
+
}),
|
|
79
|
+
/rollback/,
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
assert.deepEqual(events, []);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
@@ -8,6 +8,7 @@ import type { Join } from "../ProstglesTypes";
|
|
|
8
8
|
import { PubSubManager } from "../PubSubManager/PubSubManager";
|
|
9
9
|
import { getCreatePubSubManagerError } from "../PubSubManager/getCreatePubSubManagerError";
|
|
10
10
|
import type { PublishParser } from "../PublishParser/PublishParser";
|
|
11
|
+
import type { OnCommitCallback } from "../PublishParser/publishTypesAndUtils";
|
|
11
12
|
import type { ServerFunctionDefinition } from "../PublishParser/defineServerFunction";
|
|
12
13
|
import { getQueryErrorPositionInfo } from "../TableConfig/runSQLFile";
|
|
13
14
|
import type { Graph } from "../shortestPath";
|
|
@@ -139,6 +140,45 @@ export class DboBuilder {
|
|
|
139
140
|
|
|
140
141
|
onSchemaChange?: (event: { command: string; query: string }) => void;
|
|
141
142
|
|
|
143
|
+
private readonly onCommitCallbacksByTransaction = new WeakMap<
|
|
144
|
+
object,
|
|
145
|
+
OnCommitCallback[]
|
|
146
|
+
>();
|
|
147
|
+
|
|
148
|
+
registerOnCommitCallback = (transaction: object, callback: OnCommitCallback) => {
|
|
149
|
+
const callbacks = this.onCommitCallbacksByTransaction.get(transaction);
|
|
150
|
+
if (!callbacks) {
|
|
151
|
+
throw new Error("onCommit can only be called while its transaction is active");
|
|
152
|
+
}
|
|
153
|
+
callbacks.push(callback);
|
|
154
|
+
};
|
|
155
|
+
|
|
156
|
+
private runOnCommitCallbacks = async (callbacks: OnCommitCallback[]) => {
|
|
157
|
+
for (const callback of callbacks) {
|
|
158
|
+
const start = Date.now();
|
|
159
|
+
try {
|
|
160
|
+
await callback();
|
|
161
|
+
} catch (rawError) {
|
|
162
|
+
const error = getSerialisableError(rawError);
|
|
163
|
+
const onLog = this.prostgles.opts.onLog;
|
|
164
|
+
if (!onLog) {
|
|
165
|
+
console.error("DboBuilder.onCommit callback failed", error);
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
try {
|
|
169
|
+
await onLog({
|
|
170
|
+
type: "debug",
|
|
171
|
+
command: "DboBuilder.onCommit",
|
|
172
|
+
duration: Date.now() - start,
|
|
173
|
+
error,
|
|
174
|
+
});
|
|
175
|
+
} catch (logError) {
|
|
176
|
+
console.error("DboBuilder.onCommit error logging failed", logError, error);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
142
182
|
public static create = async (prostgles: Prostgles): Promise<DboBuilder> => {
|
|
143
183
|
const res = new DboBuilder(prostgles);
|
|
144
184
|
return await res.init();
|
|
@@ -379,22 +419,37 @@ export class DboBuilder {
|
|
|
379
419
|
};
|
|
380
420
|
|
|
381
421
|
getTX = async <R, TH extends DbTxTableHandlers>(cb: TxCB<Promise<R> | R, TH>) => {
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
422
|
+
const onCommitCallbacks: OnCommitCallback[] = [];
|
|
423
|
+
let transaction: object | undefined;
|
|
424
|
+
let result: R;
|
|
425
|
+
try {
|
|
426
|
+
result = await this.db.tx((t) => {
|
|
427
|
+
transaction = t;
|
|
428
|
+
this.onCommitCallbacksByTransaction.set(transaction, onCommitCallbacks);
|
|
429
|
+
|
|
430
|
+
const dbTX: DbTxTableHandlers = {};
|
|
431
|
+
this.tablesOrViews?.map((tov) => {
|
|
432
|
+
dbTX[tov.name] = new TableHandler({
|
|
433
|
+
db: this.db,
|
|
434
|
+
tableOrViewInfo: tov,
|
|
435
|
+
dboBuilder: this,
|
|
436
|
+
tx: { t, dbTX },
|
|
437
|
+
config: this.prostgles.mergedTableConfig.tableConfig?.[tov.name],
|
|
438
|
+
hooks: this.prostgles.mergedTableConfig.tableHooks?.[tov.name],
|
|
439
|
+
joinPaths: this.shortestJoinPaths,
|
|
440
|
+
});
|
|
393
441
|
});
|
|
442
|
+
|
|
443
|
+
return cb(dbTX as TH, t);
|
|
394
444
|
});
|
|
445
|
+
} catch (error) {
|
|
446
|
+
if (transaction) this.onCommitCallbacksByTransaction.delete(transaction);
|
|
447
|
+
throw error;
|
|
448
|
+
}
|
|
395
449
|
|
|
396
|
-
|
|
397
|
-
|
|
450
|
+
if (transaction) this.onCommitCallbacksByTransaction.delete(transaction);
|
|
451
|
+
await this.runOnCommitCallbacks(onCommitCallbacks);
|
|
452
|
+
return result;
|
|
398
453
|
};
|
|
399
454
|
|
|
400
455
|
cacheDBTypes = cacheDBTypes.bind(this);
|
|
@@ -63,7 +63,7 @@ export class TableHandler extends ViewHandler {
|
|
|
63
63
|
tableOrViewInfo: TableSchema;
|
|
64
64
|
dboBuilder: DboBuilder;
|
|
65
65
|
config: TableDefinition<any> | undefined;
|
|
66
|
-
hooks: TableHooksDefinition | undefined;
|
|
66
|
+
hooks: TableHooksDefinition<AnyObject, TableHandlers, any> | undefined;
|
|
67
67
|
tx?: { t: pgPromise.ITask<{}>; dbTX: TableHandlers };
|
|
68
68
|
joinPaths?: JoinPaths;
|
|
69
69
|
}) {
|
|
@@ -98,6 +98,7 @@ export class TableHandler extends ViewHandler {
|
|
|
98
98
|
if (!isApplicable) continue;
|
|
99
99
|
const hookResult = await hook.validate({
|
|
100
100
|
command,
|
|
101
|
+
context: this.dboBuilder.prostgles.context,
|
|
101
102
|
data: newRow,
|
|
102
103
|
dbx: this.getFinalDbo(localParams),
|
|
103
104
|
localParams,
|
|
@@ -47,6 +47,8 @@ export const executeAfterHooksCheckAndPostValidation = async ({
|
|
|
47
47
|
const txParams = {
|
|
48
48
|
tx: transaction.t,
|
|
49
49
|
dbx: transaction.dbTX,
|
|
50
|
+
onCommit: (callback: Parameters<typeof tableHandler.dboBuilder.registerOnCommitCallback>[1]) =>
|
|
51
|
+
tableHandler.dboBuilder.registerOnCommitCallback(transaction.t, callback),
|
|
50
52
|
};
|
|
51
53
|
|
|
52
54
|
const txKey = transaction.t as unknown as object;
|
|
@@ -69,6 +71,7 @@ export const executeAfterHooksCheckAndPostValidation = async ({
|
|
|
69
71
|
...txParams,
|
|
70
72
|
command,
|
|
71
73
|
data,
|
|
74
|
+
context: tableHandler.dboBuilder.prostgles.context,
|
|
72
75
|
} as const;
|
|
73
76
|
|
|
74
77
|
for (const hook of applicableHooks) {
|
|
@@ -121,6 +124,7 @@ export const executeAfterHooksCheckAndPostValidation = async ({
|
|
|
121
124
|
data: applicableData,
|
|
122
125
|
rows: applicableRows,
|
|
123
126
|
localParams,
|
|
127
|
+
context: tableHandler.dboBuilder.prostgles.context,
|
|
124
128
|
});
|
|
125
129
|
}
|
|
126
130
|
}
|
|
@@ -55,7 +55,7 @@ export class ViewHandler {
|
|
|
55
55
|
joinPaths?: JoinPaths;
|
|
56
56
|
dboBuilder: DboBuilder;
|
|
57
57
|
config: TableDefinition<any> | undefined;
|
|
58
|
-
hooks: TableHooksDefinition | undefined;
|
|
58
|
+
hooks: TableHooksDefinition<AnyObject, TableHandlers, any> | undefined;
|
|
59
59
|
|
|
60
60
|
tx?: {
|
|
61
61
|
t: pgPromise.ITask<{}>;
|
|
@@ -83,7 +83,7 @@ export class ViewHandler {
|
|
|
83
83
|
tableOrViewInfo: TableSchema;
|
|
84
84
|
dboBuilder: DboBuilder;
|
|
85
85
|
config: TableDefinition<any> | undefined;
|
|
86
|
-
hooks: TableHooksDefinition | undefined;
|
|
86
|
+
hooks: TableHooksDefinition<AnyObject, TableHandlers, any> | undefined;
|
|
87
87
|
tx?: { t: pgPromise.ITask<{}>; dbTX: TableHandlers };
|
|
88
88
|
joinPaths?: JoinPaths;
|
|
89
89
|
}) {
|
package/lib/Logging.ts
CHANGED
package/lib/Prostgles.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type pgPromise from "pg-promise";
|
|
2
2
|
import { AuthHandler } from "./Auth/AuthHandler";
|
|
3
|
-
import type {
|
|
3
|
+
import type { SessionUser } from "./Auth/AuthTypes";
|
|
4
|
+
import type { ContextCleanup, OnInitReason } from "./initProstgles";
|
|
4
5
|
import { initProstgles } from "./initProstgles";
|
|
5
6
|
import type { SchemaWatch } from "./SchemaWatch/SchemaWatch";
|
|
6
7
|
import { getClientSchema } from "./WebsocketAPI/getClientSchema";
|
|
@@ -68,7 +69,7 @@ export class Prostgles {
|
|
|
68
69
|
* Used to manage concurrent prostgles connections to the same database
|
|
69
70
|
*/
|
|
70
71
|
readonly appId = randomUUID();
|
|
71
|
-
opts: ProstglesInitOptions = {
|
|
72
|
+
opts: ProstglesInitOptions<void, SessionUser, any> = {
|
|
72
73
|
DEBUG_MODE: false,
|
|
73
74
|
dbConnection: {
|
|
74
75
|
host: "localhost",
|
|
@@ -121,8 +122,8 @@ export class Prostgles {
|
|
|
121
122
|
return this.opts.fileTable?.tableName === tableName;
|
|
122
123
|
}
|
|
123
124
|
|
|
124
|
-
constructor(params: ProstglesInitOptions) {
|
|
125
|
-
const config: Record<keyof ProstglesInitOptions, 1> = {
|
|
125
|
+
constructor(params: ProstglesInitOptions<void, SessionUser, any>) {
|
|
126
|
+
const config: Record<keyof ProstglesInitOptions<void, SessionUser, any>, 1> = {
|
|
126
127
|
transactions: 1,
|
|
127
128
|
joins: 1,
|
|
128
129
|
tsGeneratedTypesDir: 1,
|
|
@@ -153,6 +154,7 @@ export class Prostgles {
|
|
|
153
154
|
restApi: 1,
|
|
154
155
|
testRulesOnConnect: 1,
|
|
155
156
|
modifyClientSchema: 1,
|
|
157
|
+
createContext: 1,
|
|
156
158
|
};
|
|
157
159
|
const unknownParams = Object.keys(params).filter(
|
|
158
160
|
(key: string) => !Object.keys(config).includes(key),
|
|
@@ -211,10 +213,55 @@ export class Prostgles {
|
|
|
211
213
|
}
|
|
212
214
|
}
|
|
213
215
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
216
|
+
context: unknown;
|
|
217
|
+
private contextCleanups: ContextCleanup[] = [];
|
|
218
|
+
|
|
219
|
+
cleanupContext = async () => {
|
|
220
|
+
const cleanups = this.contextCleanups.splice(0).reverse();
|
|
221
|
+
this.context = undefined;
|
|
222
|
+
for (const cleanup of cleanups) {
|
|
223
|
+
try {
|
|
224
|
+
await cleanup();
|
|
225
|
+
} catch (error) {
|
|
226
|
+
console.error("Prostgles: Context cleanup failed", error);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
};
|
|
230
|
+
|
|
231
|
+
createContext = async (reason: OnInitReason) => {
|
|
232
|
+
const createContext = this.opts.createContext;
|
|
233
|
+
if (!createContext) {
|
|
234
|
+
this.context = undefined;
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
if (!this.db || !this.dbo) throw new Error("Cannot create context before the DBO is ready");
|
|
238
|
+
|
|
239
|
+
const cleanups: ContextCleanup[] = [];
|
|
240
|
+
try {
|
|
241
|
+
const context = await createContext({
|
|
242
|
+
db: this.db,
|
|
243
|
+
dbo: this.dbo as any,
|
|
244
|
+
sql: this.dboBuilder.sql,
|
|
245
|
+
tables: this.dboBuilder.tables,
|
|
246
|
+
reason,
|
|
247
|
+
onCleanup: (cleanup) => cleanups.push(cleanup),
|
|
248
|
+
});
|
|
249
|
+
this.context = context;
|
|
250
|
+
this.contextCleanups = cleanups;
|
|
251
|
+
} catch (error) {
|
|
252
|
+
for (const cleanup of cleanups.reverse()) {
|
|
253
|
+
try {
|
|
254
|
+
await cleanup();
|
|
255
|
+
} catch (cleanupError) {
|
|
256
|
+
console.error("Prostgles: Context cleanup failed", cleanupError);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
throw error;
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
|
|
263
|
+
/** Rebuilds the DBO without changing the application context. */
|
|
264
|
+
rebuildDBO = async () => {
|
|
218
265
|
await this.opts.onLog?.({
|
|
219
266
|
type: "debug",
|
|
220
267
|
command: "refreshDBO.start",
|
|
@@ -236,6 +283,14 @@ export class Prostgles {
|
|
|
236
283
|
return this.dbo;
|
|
237
284
|
};
|
|
238
285
|
|
|
286
|
+
/** Rebuilds the DBO and replaces the application context. */
|
|
287
|
+
refreshDBO = async () => {
|
|
288
|
+
await this.cleanupContext();
|
|
289
|
+
const dbo = await this.rebuildDBO();
|
|
290
|
+
await this.createContext({ type: "dbo.refresh" });
|
|
291
|
+
return dbo;
|
|
292
|
+
};
|
|
293
|
+
|
|
239
294
|
initRestApi = () => {
|
|
240
295
|
this.restApi?.destroy();
|
|
241
296
|
this.restApi = this.opts.restApi && new RestApi({ prostgles: this, ...this.opts.restApi });
|