prostgles-server 4.2.553 → 4.2.555

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.
Files changed (46) hide show
  1. package/dist/DboBuilder/TableHandler/TableHandler.d.ts +11 -3
  2. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  3. package/dist/DboBuilder/TableHandler/TableHandler.js +48 -6
  4. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  5. package/dist/DboBuilder/TableHandler/delete.js +3 -3
  6. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  7. package/dist/DboBuilder/TableHandler/{executeHooksCheckAndPostValidation.d.ts → executeAfterHooksCheckAndPostValidation.d.ts} +2 -2
  8. package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.d.ts.map +1 -0
  9. package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js +96 -0
  10. package/dist/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.js.map +1 -0
  11. package/dist/DboBuilder/TableHandler/insert/insert.d.ts.map +1 -1
  12. package/dist/DboBuilder/TableHandler/insert/insert.js +11 -5
  13. package/dist/DboBuilder/TableHandler/insert/insert.js.map +1 -1
  14. package/dist/DboBuilder/TableHandler/isApplicableHook.d.ts +5 -0
  15. package/dist/DboBuilder/TableHandler/isApplicableHook.d.ts.map +1 -0
  16. package/dist/DboBuilder/TableHandler/isApplicableHook.js +17 -0
  17. package/dist/DboBuilder/TableHandler/isApplicableHook.js.map +1 -0
  18. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +2 -2
  19. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  20. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  21. package/dist/DboBuilder/TableHandler/update.js +4 -1
  22. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  23. package/dist/PublishParser/publishTypesAndUtils.d.ts +23 -1
  24. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  25. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  26. package/dist/TableConfig/TableConfig.d.ts +3 -2
  27. package/dist/TableConfig/TableConfig.d.ts.map +1 -1
  28. package/dist/TableConfig/TableConfig.js.map +1 -1
  29. package/dist/TableConfig/getCreateSchemaQueries.d.ts +2 -0
  30. package/dist/TableConfig/getCreateSchemaQueries.d.ts.map +1 -1
  31. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts +2 -0
  32. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts.map +1 -1
  33. package/lib/DboBuilder/TableHandler/TableHandler.ts +58 -5
  34. package/lib/DboBuilder/TableHandler/delete.ts +3 -3
  35. package/lib/DboBuilder/TableHandler/executeAfterHooksCheckAndPostValidation.ts +124 -0
  36. package/lib/DboBuilder/TableHandler/insert/insert.ts +21 -7
  37. package/lib/DboBuilder/TableHandler/isApplicableHook.ts +28 -0
  38. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +2 -2
  39. package/lib/DboBuilder/TableHandler/update.ts +5 -1
  40. package/lib/PublishParser/publishTypesAndUtils.ts +23 -1
  41. package/lib/TableConfig/TableConfig.ts +3 -2
  42. package/package.json +1 -1
  43. package/dist/DboBuilder/TableHandler/executeHooksCheckAndPostValidation.d.ts.map +0 -1
  44. package/dist/DboBuilder/TableHandler/executeHooksCheckAndPostValidation.js +0 -69
  45. package/dist/DboBuilder/TableHandler/executeHooksCheckAndPostValidation.js.map +0 -1
  46. package/lib/DboBuilder/TableHandler/executeHooksCheckAndPostValidation.ts +0 -88
@@ -5,7 +5,7 @@ import type { LocalParams } from "../DboBuilder";
5
5
  import { rejectWithPGClientError, withUserRLS } from "../DboBuilder";
6
6
  import type { TableHandler } from "./TableHandler";
7
7
  import { getSelectItemQuery } from "./TableHandler";
8
- import { executeHooksCheckAndPostValidation } from "./executeHooksCheckAndPostValidation";
8
+ import { executeAfterHooksCheckAndPostValidation } from "./executeAfterHooksCheckAndPostValidation";
9
9
 
10
10
  type RunInsertUpdateQueryArgs = {
11
11
  tableHandler: TableHandler;
@@ -126,7 +126,7 @@ export const runInsertUpdateQuery = async (args: RunInsertUpdateQueryArgs) => {
126
126
 
127
127
  const rows = result.modified ?? [];
128
128
 
129
- await executeHooksCheckAndPostValidation({
129
+ await executeAfterHooksCheckAndPostValidation({
130
130
  tableHandler,
131
131
  operation: command === "insert" ? { name: "insert", rule } : { name: "update", rule },
132
132
  localParams,
@@ -33,7 +33,7 @@ export async function update(
33
33
  ),
34
34
  );
35
35
  const rule = tableRules?.[ACTION];
36
- if (this.shouldWrapInTx({ name: ACTION, rule }, localParams).shouldWrap) {
36
+ if (this.shouldWrapInTx({ name: ACTION, rule }, localParams, [_newData]).shouldWrap) {
37
37
  return wrapInTx();
38
38
  }
39
39
 
@@ -76,6 +76,9 @@ export async function update(
76
76
  );
77
77
  }
78
78
 
79
+ const beforeResult = await this.beforeEach(newData, localParams, "update");
80
+ newData = beforeResult.row;
81
+
79
82
  const { data, allowedCols } = prepareNewData({
80
83
  row: newData,
81
84
  forcedData,
@@ -205,6 +208,7 @@ export async function update(
205
208
  data: { filter, _newData, params },
206
209
  duration: Date.now() - start,
207
210
  });
211
+ beforeResult.successCallbacks.forEach((cb) => cb());
208
212
  return result;
209
213
  } catch (e) {
210
214
  await this._log({
@@ -55,6 +55,12 @@ export type UpdateRequestData<R extends AnyObject = AnyObject> =
55
55
  | UpdateRequestDataOne<R>
56
56
  | UpdateRequestDataBatch<R>;
57
57
 
58
+ export type ValidateBeforeRowArgsCommon<R = AnyObject, DBX = DBHandlerServer> = {
59
+ dbx: DBX;
60
+ tx: pgPromise.ITask<{}> | DB;
61
+ command: "insert" | "update";
62
+ data: Partial<R>;
63
+ };
58
64
  export type ValidateRowArgsCommon<R = AnyObject, DBX = DBHandlerServer> = {
59
65
  row: R;
60
66
  dbx: DBX;
@@ -74,9 +80,25 @@ export type ValidateRowArgsCommon<R = AnyObject, DBX = DBHandlerServer> = {
74
80
  }
75
81
  );
76
82
 
83
+ export type BeforeEachTsTrigger<R, DBX> = {
84
+ commands: Partial<Record<"insert" | "update", 1>>;
85
+ /**
86
+ * Will only run this trigger if the insert/update provides non null values for these fields.
87
+ */
88
+ changedFields?: (keyof R)[];
89
+ validate: (
90
+ params: ValidateBeforeRowArgsCommon<R, DBX> & {
91
+ localParams: undefined | LocalParams;
92
+ },
93
+ ) => Promise<void | { row: R; onInserted?: () => void }>;
94
+ };
95
+
77
96
  export type AfterEachTsTrigger<R, DBX> = {
78
97
  commands: Partial<Record<"insert" | "update" | "delete", 1>>;
79
- changedFields?: string[];
98
+ /**
99
+ * Will only run this trigger if the insert/update provides non null values for these fields.
100
+ */
101
+ changedFields?: (keyof R)[];
80
102
  validate: (
81
103
  params: ValidateRowArgsCommon<R, DBX> & {
82
104
  localParams: undefined | LocalParams;
@@ -16,10 +16,10 @@ import type { DB, DBHandlerServer, Prostgles } from "../Prostgles";
16
16
  import type {
17
17
  AfterAllTsTrigger,
18
18
  AfterEachTsTrigger,
19
+ BeforeEachTsTrigger,
19
20
  InsertRule,
20
21
  SyncConfig,
21
22
  ValidateRowArgsCommon,
22
- ValidateRowsArgsCommon,
23
23
  } from "../PublishParser/PublishParser";
24
24
  import {
25
25
  DEFAULT_SYNC_BATCH_SIZE,
@@ -63,11 +63,12 @@ type BaseTableDefinition<R = AnyObject, DBX = DBHandlerServer> = {
63
63
  hooks?: {
64
64
  /**
65
65
  * Hook used to run custom logic before inserting a row.
66
- * The returned row must satisfy the table schema
66
+ * The returned row must satisfy the table schema.
67
67
  */
68
68
  getPreInsertRow?: (
69
69
  args: GetPreInsertRowArgs,
70
70
  ) => Promise<{ row: AnyObject; onInserted: Promise<void> }>;
71
+ beforeEach?: BeforeEachTsTrigger<R, DBX>[];
71
72
  afterEach?: AfterEachTsTrigger<R, DBX>[];
72
73
  afterAll?: AfterAllTsTrigger<R, DBX>[];
73
74
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prostgles-server",
3
- "version": "4.2.553",
3
+ "version": "4.2.555",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"executeHooksCheckAndPostValidation.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/TableHandler/executeHooksCheckAndPostValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAE5F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,eAAO,MAAM,kCAAkC,GAAU,uDAMtD;IACD,YAAY,EAAE,YAAY,CAAC;IAC3B,SAAS,EACL;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,GAChD;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,GAChD;QAAE,IAAI,EAAE,QAAQ,CAAC;QAAC,IAAI,EAAE,SAAS,GAAG,UAAU,CAAA;KAAE,CAAC;IACrD,WAAW,EAAE,WAAW,GAAG,SAAS,CAAC;IACrC,IAAI,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC;IAC9B,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB,kBAkEA,CAAC"}
@@ -1,69 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executeHooksCheckAndPostValidation = void 0;
4
- const utils_1 = require("../../utils/utils");
5
- const executeHooksCheckAndPostValidation = async ({ tableHandler, operation, data, localParams, rows, }) => {
6
- const command = operation.name;
7
- const transaction = tableHandler.getTransaction(localParams);
8
- const hooks = tableHandler.getHooksAndChecks(operation, localParams);
9
- let changedFieldsSet = undefined;
10
- const getChangedFieldsSet = () => {
11
- changedFieldsSet ??= new Set(((0, utils_1.isArray)(data) ? data : [data]).map((row) => Object.keys(row)).flat());
12
- return changedFieldsSet;
13
- };
14
- const applicableHooks = hooks.filter((hook) => {
15
- if (hook.type === "checkFilter")
16
- return false;
17
- if (hook.type === "postValidate")
18
- return true;
19
- const { commands, changedFields } = hook;
20
- return (commands[command] &&
21
- (!changedFields || changedFields.some((f) => getChangedFieldsSet().has(f))));
22
- });
23
- if (applicableHooks.length) {
24
- if (!transaction) {
25
- throw new Error("Unexpected: hooks/postValidate require a transaction dbo handler");
26
- }
27
- const txParams = {
28
- tx: transaction.t,
29
- dbx: transaction.dbTX,
30
- };
31
- for (const row of rows) {
32
- const commonParams = {
33
- row: row,
34
- ...txParams,
35
- command,
36
- data,
37
- };
38
- for (const hook of applicableHooks) {
39
- if (hook.type === "afterEach") {
40
- await hook.validate({
41
- ...commonParams,
42
- localParams,
43
- });
44
- }
45
- else if (hook.type === "postValidate") {
46
- if (!localParams)
47
- throw new Error("Unexpected: no localParams for postValidate");
48
- await hook.validate({
49
- ...commonParams,
50
- localParams,
51
- });
52
- }
53
- }
54
- }
55
- for (const hook of applicableHooks) {
56
- if (hook.type === "afterAll") {
57
- await hook.validate({
58
- ...txParams,
59
- command,
60
- data: Array.isArray(data) ? data : [data],
61
- rows,
62
- localParams,
63
- });
64
- }
65
- }
66
- }
67
- };
68
- exports.executeHooksCheckAndPostValidation = executeHooksCheckAndPostValidation;
69
- //# sourceMappingURL=executeHooksCheckAndPostValidation.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"executeHooksCheckAndPostValidation.js","sourceRoot":"","sources":["../../../lib/DboBuilder/TableHandler/executeHooksCheckAndPostValidation.ts"],"names":[],"mappings":"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"}
@@ -1,88 +0,0 @@
1
- import type { AnyObject } from "prostgles-types";
2
- import type { DeleteRule, InsertRule, UpdateRule } from "../../PublishParser/PublishParser";
3
- import { isArray } from "../../utils/utils";
4
- import type { LocalParams } from "../DboBuilder";
5
- import type { TableHandler } from "./TableHandler";
6
-
7
- export const executeHooksCheckAndPostValidation = async ({
8
- tableHandler,
9
- operation,
10
- data,
11
- localParams,
12
- rows,
13
- }: {
14
- tableHandler: TableHandler;
15
- operation:
16
- | { name: "delete"; rule: undefined | DeleteRule }
17
- | { name: "update"; rule: undefined | UpdateRule }
18
- | { name: "insert"; rule: undefined | InsertRule };
19
- localParams: LocalParams | undefined;
20
- data: AnyObject | AnyObject[];
21
- rows: AnyObject[];
22
- }) => {
23
- const command = operation.name;
24
- const transaction = tableHandler.getTransaction(localParams);
25
- const hooks = tableHandler.getHooksAndChecks(operation, localParams);
26
- let changedFieldsSet = undefined as undefined | Set<string>;
27
- const getChangedFieldsSet = () => {
28
- changedFieldsSet ??= new Set<string>(
29
- (isArray(data) ? data : [data]).map((row) => Object.keys(row)).flat(),
30
- );
31
- return changedFieldsSet;
32
- };
33
- const applicableHooks = hooks.filter((hook) => {
34
- if (hook.type === "checkFilter") return false;
35
- if (hook.type === "postValidate") return true;
36
- const { commands, changedFields } = hook;
37
- return (
38
- commands[command] &&
39
- (!changedFields || changedFields.some((f) => getChangedFieldsSet().has(f)))
40
- );
41
- });
42
-
43
- if (applicableHooks.length) {
44
- if (!transaction) {
45
- throw new Error("Unexpected: hooks/postValidate require a transaction dbo handler");
46
- }
47
-
48
- const txParams = {
49
- tx: transaction.t,
50
- dbx: transaction.dbTX,
51
- };
52
-
53
- for (const row of rows) {
54
- const commonParams = {
55
- row: row,
56
- ...txParams,
57
- command,
58
- data,
59
- } as const;
60
- for (const hook of applicableHooks) {
61
- if (hook.type === "afterEach") {
62
- await hook.validate({
63
- ...commonParams,
64
- localParams,
65
- });
66
- } else if (hook.type === "postValidate") {
67
- if (!localParams) throw new Error("Unexpected: no localParams for postValidate");
68
- await hook.validate({
69
- ...commonParams,
70
- localParams,
71
- });
72
- }
73
- }
74
- }
75
-
76
- for (const hook of applicableHooks) {
77
- if (hook.type === "afterAll") {
78
- await hook.validate({
79
- ...txParams,
80
- command,
81
- data: Array.isArray(data) ? data : [data],
82
- rows,
83
- localParams,
84
- });
85
- }
86
- }
87
- }
88
- };