prostgles-server 4.2.611 → 4.2.613

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 (68) hide show
  1. package/dist/Audit/AuditTable.d.ts +12 -1
  2. package/dist/Audit/AuditTable.d.ts.map +1 -1
  3. package/dist/Audit/AuditTable.js +12 -1
  4. package/dist/Audit/AuditTable.js.map +1 -1
  5. package/dist/Audit/AuditTypes.d.ts +1 -2
  6. package/dist/Audit/AuditTypes.d.ts.map +1 -1
  7. package/dist/Audit/getAuditTriggerConfig.d.ts.map +1 -1
  8. package/dist/Audit/getAuditTriggerConfig.js +12 -4
  9. package/dist/Audit/getAuditTriggerConfig.js.map +1 -1
  10. package/dist/Audit/parseAuditConfig.d.ts.map +1 -1
  11. package/dist/Audit/parseAuditConfig.js +0 -4
  12. package/dist/Audit/parseAuditConfig.js.map +1 -1
  13. package/dist/DboBuilder/DboBuilder.d.ts +1 -1
  14. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  15. package/dist/DboBuilder/DboBuilder.js +1 -1
  16. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  17. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +1 -1
  18. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  19. package/dist/DboBuilder/joins/getInferredJoins.d.ts +4 -0
  20. package/dist/DboBuilder/joins/getInferredJoins.d.ts.map +1 -0
  21. package/dist/DboBuilder/joins/getInferredJoins.js +55 -0
  22. package/dist/DboBuilder/joins/getInferredJoins.js.map +1 -0
  23. package/dist/DboBuilder/joins/prepareShortestJoinPaths.d.ts +12 -0
  24. package/dist/DboBuilder/joins/prepareShortestJoinPaths.d.ts.map +1 -0
  25. package/dist/DboBuilder/joins/prepareShortestJoinPaths.js +165 -0
  26. package/dist/DboBuilder/joins/prepareShortestJoinPaths.js.map +1 -0
  27. package/dist/DboBuilder/joins/prepareShortestJoinPaths.spec.d.ts.map +1 -0
  28. package/dist/DboBuilder/joins/prepareShortestJoinPaths.spec.js +67 -0
  29. package/dist/DboBuilder/joins/prepareShortestJoinPaths.spec.js.map +1 -0
  30. package/dist/DboBuilder/joins/shortestPath.d.ts.map +1 -0
  31. package/dist/{shortestPath.js → DboBuilder/joins/shortestPath.js} +11 -11
  32. package/dist/DboBuilder/joins/shortestPath.js.map +1 -0
  33. package/dist/ProstglesTypes.d.ts +4 -3
  34. package/dist/ProstglesTypes.d.ts.map +1 -1
  35. package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts +8 -0
  36. package/dist/TableConfig/TableRowFromColumnDefinitions.d.ts.map +1 -1
  37. package/dist/utils/utils.d.ts +1 -0
  38. package/dist/utils/utils.d.ts.map +1 -1
  39. package/dist/utils/utils.js +8 -3
  40. package/dist/utils/utils.js.map +1 -1
  41. package/lib/Audit/AuditTable.ts +12 -1
  42. package/lib/Audit/AuditTypes.ts +1 -2
  43. package/lib/Audit/getAuditTriggerConfig.ts +12 -4
  44. package/lib/Audit/parseAuditConfig.ts +0 -4
  45. package/lib/DboBuilder/DboBuilder.ts +13 -10
  46. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +1 -1
  47. package/lib/DboBuilder/joins/getInferredJoins.ts +59 -0
  48. package/lib/DboBuilder/joins/prepareShortestJoinPaths.spec.ts +72 -0
  49. package/lib/DboBuilder/joins/prepareShortestJoinPaths.ts +205 -0
  50. package/lib/{shortestPath.ts → DboBuilder/joins/shortestPath.ts} +14 -13
  51. package/lib/ProstglesTypes.ts +4 -3
  52. package/lib/TableConfig/TableRowFromColumnDefinitions.ts +18 -12
  53. package/lib/utils/utils.ts +6 -0
  54. package/package.json +1 -1
  55. package/tsconfig.json +1 -1
  56. package/dist/DboBuilder/prepareShortestJoinPaths.d.ts +0 -12
  57. package/dist/DboBuilder/prepareShortestJoinPaths.d.ts.map +0 -1
  58. package/dist/DboBuilder/prepareShortestJoinPaths.js +0 -186
  59. package/dist/DboBuilder/prepareShortestJoinPaths.js.map +0 -1
  60. package/dist/DboBuilder/prepareShortestJoinPaths.spec.d.ts.map +0 -1
  61. package/dist/DboBuilder/prepareShortestJoinPaths.spec.js +0 -30
  62. package/dist/DboBuilder/prepareShortestJoinPaths.spec.js.map +0 -1
  63. package/dist/shortestPath.d.ts.map +0 -1
  64. package/dist/shortestPath.js.map +0 -1
  65. package/lib/DboBuilder/prepareShortestJoinPaths.spec.ts +0 -29
  66. package/lib/DboBuilder/prepareShortestJoinPaths.ts +0 -225
  67. /package/dist/DboBuilder/{prepareShortestJoinPaths.spec.d.ts → joins/prepareShortestJoinPaths.spec.d.ts} +0 -0
  68. /package/dist/{shortestPath.d.ts → DboBuilder/joins/shortestPath.d.ts} +0 -0
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const strict_1 = __importDefault(require("node:assert/strict"));
7
+ const node_test_1 = __importDefault(require("node:test"));
8
+ const prepareShortestJoinPaths_1 = require("./prepareShortestJoinPaths");
9
+ void (0, node_test_1.default)("duplicate configured table pairs are rejected even during table configuration", () => {
10
+ const join = {
11
+ tables: ["conditions", "members"],
12
+ on: [{ project_id: "project_id" }],
13
+ type: "many-many",
14
+ };
15
+ for (const preparingTableConfig of [false, true]) {
16
+ for (const override of [false, true]) {
17
+ for (const tables of [join.tables, [...join.tables].reverse()]) {
18
+ const builder = {
19
+ prostgles: {
20
+ preparingTableConfig,
21
+ opts: { joins: [join, { ...join, tables, override }] },
22
+ },
23
+ tablesOrViews: [],
24
+ };
25
+ strict_1.default.throws(() => (0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder), /Duplicate configured join for table pair/);
26
+ }
27
+ }
28
+ }
29
+ });
30
+ void (0, node_test_1.default)("configured joins are deferred only during table configuration", () => {
31
+ const builder = {
32
+ prostgles: {
33
+ preparingTableConfig: true,
34
+ opts: {
35
+ joins: [
36
+ {
37
+ tables: ["conditions", "members"],
38
+ on: [{ project_id: "project_id" }],
39
+ type: "many-many",
40
+ },
41
+ ],
42
+ },
43
+ },
44
+ tablesOrViews: [],
45
+ };
46
+ strict_1.default.deepEqual((0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder).joins, []);
47
+ builder.prostgles.preparingTableConfig = false;
48
+ strict_1.default.throws(() => (0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder), (error) => typeof error === "string" && error.includes("Table not found: conditions"));
49
+ });
50
+ void (0, node_test_1.default)("existing configured joins remain available during table configuration", () => {
51
+ const join = {
52
+ tables: ["conditions", "members"],
53
+ on: [{ project_id: "project_id" }],
54
+ type: "many-many",
55
+ };
56
+ const builder = {
57
+ prostgles: { preparingTableConfig: true, opts: { joins: [join] } },
58
+ tablesOrViews: ["conditions", "members"].map((name) => ({
59
+ name,
60
+ columns: [{ name: "project_id" }],
61
+ })),
62
+ };
63
+ strict_1.default.deepEqual((0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder).joins, [join]);
64
+ builder.prostgles.preparingTableConfig = false;
65
+ strict_1.default.deepEqual((0, prepareShortestJoinPaths_1.prepareShortestJoinPaths)(builder).joins, [join]);
66
+ });
67
+ //# sourceMappingURL=prepareShortestJoinPaths.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepareShortestJoinPaths.spec.js","sourceRoot":"","sources":["../../../lib/DboBuilder/joins/prepareShortestJoinPaths.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortestPath.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/joins/shortestPath.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,KAAK,GAAG;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CAC1C,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,OAAO,KAAK,EACZ,WAAW,MAAM,EACjB,SAAS,MAAM,KACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAgEpC,CAAC"}
@@ -1,16 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.findShortestPath = void 0;
4
- const shortestDistanceNode = (distances, visited) => {
5
- let shortest = null;
6
- for (const node in distances) {
7
- const currentIsShortest = shortest === null || distances[node] < distances[shortest];
8
- if (currentIsShortest && !visited.includes(node)) {
9
- shortest = node;
10
- }
11
- }
12
- return shortest;
13
- };
14
4
  const findShortestPath = (graph, startNode, endNode) => {
15
5
  // establish object for recording distances from the start node
16
6
  let distances = {};
@@ -71,7 +61,17 @@ const findShortestPath = (graph, startNode, endNode) => {
71
61
  return results;
72
62
  };
73
63
  exports.findShortestPath = findShortestPath;
74
- /* Usage:
64
+ const shortestDistanceNode = (distances, visited) => {
65
+ let shortest = null;
66
+ for (const node in distances) {
67
+ const currentIsShortest = shortest === null || distances[node] < distances[shortest];
68
+ if (currentIsShortest && !visited.includes(node)) {
69
+ shortest = node;
70
+ }
71
+ }
72
+ return shortest;
73
+ };
74
+ /* Example:
75
75
 
76
76
  const graph = {
77
77
  start: { A: 5, B: 2 },
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shortestPath.js","sourceRoot":"","sources":["../../../lib/DboBuilder/joins/shortestPath.ts"],"names":[],"mappings":"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"}
@@ -81,6 +81,8 @@ export type Join = {
81
81
  [key: string]: string;
82
82
  }[];
83
83
  type: (typeof JOIN_TYPES)[number];
84
+ /** Replace inferred joins for this table pair. Defaults to false. */
85
+ override?: boolean;
84
86
  };
85
87
  type Joins = Join[] | "inferred";
86
88
  type ModifyClientSchema<SUser extends SessionUser = SessionUser> = (table: DBSchemaTable, tableConfig: TableConfig[string] | undefined, userData: AuthResultWithSID<SUser> | undefined, resolvedAuditConfig: ResolvedAuditConfig | undefined) => MaybePromise<DBSchemaTable>;
@@ -168,9 +170,8 @@ export type ProstglesInitOptions<S = void, SUser extends SessionUser = SessionUs
168
170
  */
169
171
  testRulesOnConnect?: boolean;
170
172
  /**
171
- * Allows defining table relationships that can then be used in filters and data inserts:
172
- * - `inferred` - uses the foreign keys to infer the joins
173
- * - `Join[]` - specifies the joins manually
173
+ * Allows defining custom table relationships that can then be used in filters and data inserts.
174
+ * By default FKs are used to infer the joins.
174
175
  */
175
176
  joins?: Joins;
176
177
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ProstglesTypes.d.ts","sourceRoot":"","sources":["../lib/ProstglesTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProstglesTypes.d.ts","sourceRoot":"","sources":["../lib/ProstglesTypes.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,17 @@
1
+ import type { JSONB } from "prostgles-types";
1
2
  /** Row types for the column definitions used by managed tables. */
2
3
  export type TableRowFromColumnDefinitions<T extends Record<string, string | {
3
4
  enum: readonly (string | number)[];
4
5
  nullable?: boolean;
6
+ } | {
7
+ jsonbSchema: JSONB.JSONBSchema;
8
+ nullable?: boolean;
5
9
  }>> = {
6
10
  [K in keyof T]: T[K] extends {
11
+ jsonbSchema: infer S extends JSONB.JSONBSchema;
12
+ } ? JSONB.GetType<S> | (T[K] extends {
13
+ nullable: true;
14
+ } ? null : never) : T[K] extends {
7
15
  enum: readonly (infer V)[];
8
16
  } ? V | (T[K] extends {
9
17
  nullable: true;
@@ -1 +1 @@
1
- {"version":3,"file":"TableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/TableRowFromColumnDefinitions.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,MAAM,MAAM,6BAA6B,CACvC,CAAC,SAAS,MAAM,CACd,MAAM,EACN,MAAM,GAAG;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CACpE,IACC;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;KAAE,GACvD,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GAClD,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC1B,MAAM,GACN,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,MAAM,CAAC,GACb,CAAC,CAAC,CAAC,CAAC,CAAC,SACH,GAAG,MAAM,YAAY,MAAM,EAAE,GAAG,GAAG,MAAM,cAAc,MAAM,EAAE,GAC7D,KAAK,GACL,IAAI,CAAC;CAChB,CAAC"}
1
+ {"version":3,"file":"TableRowFromColumnDefinitions.d.ts","sourceRoot":"","sources":["../../lib/TableConfig/TableRowFromColumnDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,mEAAmE;AACnE,MAAM,MAAM,6BAA6B,CACvC,CAAC,SAAS,MAAM,CACd,MAAM,EACJ,MAAM,GACN;IAAE,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAC1D;IAAE,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CACzD,IACC;KACD,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,WAAW,EAAE,MAAM,CAAC,SAAS,KAAK,CAAC,WAAW,CAAA;KAAE,GAC3E,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GACnE,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,CAAA;KAAE,GACzC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,QAAQ,EAAE,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,KAAK,CAAC,GAClD,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC1B,MAAM,GACN,CAAC,CAAC,CAAC,CAAC,SAAS,QAAQ,MAAM,EAAE,GAC3B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvB,MAAM,CAAC,GACb,CAAC,CAAC,CAAC,CAAC,CAAC,SACH,GAAG,MAAM,YAAY,MAAM,EAAE,GAAG,GAAG,MAAM,cAAc,MAAM,EAAE,GAC7D,KAAK,GACL,IAAI,CAAC;CAClB,CAAC"}
@@ -3,4 +3,5 @@ export declare const clone: <T extends any[] | Record<string, any>>(obj: T) => T
3
3
  export declare const sleep: (ms: number) => Promise<unknown>;
4
4
  export declare const escapeTSNames: (str: string, capitalize?: boolean) => string;
5
5
  export declare const isArray: <T>(data: T) => data is Extract<T, readonly unknown[]>;
6
+ export declare const sortedArraysMatch: (a: string[], b: string[]) => boolean;
6
7
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAMrE,CAAC;AAEF,eAAO,MAAM,KAAK,GAAa,IAAI,MAAM,qBAIxC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,oBAAkB,WAK5D,CAAC;AAQF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAwB,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AACtC,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,GAAG,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,KAAK,CAAC,KAAG,CAMrE,CAAC;AAEF,eAAO,MAAM,KAAK,GAAa,IAAI,MAAM,qBAIxC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,KAAK,MAAM,EAAE,oBAAkB,WAK5D,CAAC;AAQF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,MAAM,CAAC,KAAG,IAAI,IAAI,OAAO,CAAC,CAAC,EAAE,SAAS,OAAO,EAAE,CAAwB,CAAC;AAEnG,eAAO,MAAM,iBAAiB,GAAI,GAAG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,KAAG,OAE5D,CAAC"}
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isArray = exports.escapeTSNames = exports.sleep = exports.clone = exports.get = void 0;
4
- var prostgles_types_1 = require("prostgles-types");
5
- Object.defineProperty(exports, "get", { enumerable: true, get: function () { return prostgles_types_1.get; } });
3
+ exports.sortedArraysMatch = exports.isArray = exports.escapeTSNames = exports.sleep = exports.clone = exports.get = void 0;
4
+ const prostgles_types_1 = require("prostgles-types");
5
+ var prostgles_types_2 = require("prostgles-types");
6
+ Object.defineProperty(exports, "get", { enumerable: true, get: function () { return prostgles_types_2.get; } });
6
7
  const clone = (obj) => {
7
8
  if (typeof structuredClone !== "undefined") {
8
9
  return structuredClone(obj);
@@ -33,4 +34,8 @@ const canBeUsedAsIsInTypescript = (str) => {
33
34
  };
34
35
  const isArray = (data) => Array.isArray(data);
35
36
  exports.isArray = isArray;
37
+ const sortedArraysMatch = (a, b) => {
38
+ return (0, prostgles_types_1.isEqual)(a.toSorted(), b.toSorted());
39
+ };
40
+ exports.sortedArraysMatch = sortedArraysMatch;
36
41
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":";;;AAAA,mDAAsC;AAA7B,sGAAA,GAAG,OAAA;AACL,MAAM,KAAK,GAAG,CAAwC,GAAM,EAAK,EAAE;IACxE,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAM,CAAC;AAC9C,CAAC,CAAC;AANW,QAAA,KAAK,SAMhB;AAEK,MAAM,KAAK,GAAG,UAAU,EAAU;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAJW,QAAA,KAAK,SAIhB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;IAC/D,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AACF,MAAM,yBAAyB,GAAG,CAAC,GAAW,EAAW,EAAE;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,yBAAyB,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,yBAAyB,IAAI,0BAA0B,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEK,MAAM,OAAO,GAAG,CAAI,IAAO,EAA0C,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAAtF,QAAA,OAAO,WAA+E"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../lib/utils/utils.ts"],"names":[],"mappings":";;;AAAA,qDAA0C;AAE1C,mDAAsC;AAA7B,sGAAA,GAAG,OAAA;AACL,MAAM,KAAK,GAAG,CAAwC,GAAM,EAAK,EAAE;IACxE,IAAI,OAAO,eAAe,KAAK,WAAW,EAAE,CAAC;QAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAM,CAAC;AAC9C,CAAC,CAAC;AANW,QAAA,KAAK,SAMhB;AAEK,MAAM,KAAK,GAAG,UAAU,EAAU;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAJW,QAAA,KAAK,SAIhB;AAEK,MAAM,aAAa,GAAG,CAAC,GAAW,EAAE,UAAU,GAAG,KAAK,EAAE,EAAE;IAC/D,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnE,IAAI,yBAAyB,CAAC,GAAG,CAAC;QAAE,OAAO,GAAG,CAAC;IAC/C,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC,CAAC;AALW,QAAA,aAAa,iBAKxB;AACF,MAAM,yBAAyB,GAAG,CAAC,GAAW,EAAW,EAAE;IACzD,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,MAAM,yBAAyB,GAAG,GAAG,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC7D,MAAM,0BAA0B,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC/D,OAAO,OAAO,CAAC,yBAAyB,IAAI,0BAA0B,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEK,MAAM,OAAO,GAAG,CAAI,IAAO,EAA0C,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAAtF,QAAA,OAAO,WAA+E;AAE5F,MAAM,iBAAiB,GAAG,CAAC,CAAW,EAAE,CAAW,EAAW,EAAE;IACrE,OAAO,IAAA,yBAAO,EAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B"}
@@ -5,13 +5,24 @@ export const AUDIT_TABLE_COLUMN_DEFINITIONS = {
5
5
  created_at: "TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()",
6
6
  schema_name: "TEXT NOT NULL",
7
7
  table_name: "TEXT NOT NULL",
8
- entity_type: "TEXT NOT NULL",
9
8
  operation: { enum: ["INSERT", "UPDATE", "DELETE"] },
10
9
  old_id: "JSONB",
11
10
  new_id: "JSONB",
12
11
  old_row: "JSONB",
13
12
  new_row: "JSONB",
14
13
  actor: "JSONB",
14
+ db_context: {
15
+ jsonbSchema: {
16
+ type: {
17
+ transaction_id: "string",
18
+ transaction_started_at: "string",
19
+ statement_started_at: "string",
20
+ current_role: "string",
21
+ session_user: "string",
22
+ application_name: "string",
23
+ },
24
+ },
25
+ },
15
26
  } as const;
16
27
 
17
28
  export type AuditTableRow = TableRowFromColumnDefinitions<typeof AUDIT_TABLE_COLUMN_DEFINITIONS>;
@@ -15,7 +15,6 @@ export type SchemaConfigAuditTableOptions<
15
15
  S,
16
16
  T extends SchemaConfigTableName<S>,
17
17
  > = {
18
- entityType?: string;
19
18
  /** Defaults to all primary-key columns. Required for tables without a primary key. */
20
19
  idColumns?: readonly SchemaConfigColumnName<S, T>[];
21
20
  excludeColumns?: readonly SchemaConfigColumnName<S, T>[];
@@ -34,7 +33,7 @@ export type SchemaConfigAudit<S = void> = {
34
33
  SchemaConfigAuditIncludedTables<S> | SchemaConfigAuditExcludedTables<S>;
35
34
  };
36
35
 
37
- /** Validated audit targets with all column and entity defaults resolved. */
36
+ /** Validated audit targets with all column defaults resolved. */
38
37
  export type ResolvedAuditConfig = {
39
38
  tableName: string;
40
39
  tables: Record<string, Required<SchemaConfigAuditTableOptions<void, string>>>;
@@ -7,7 +7,7 @@ import { getAuditProtection, getAuditWriterName } from "./getAuditTableConfig";
7
7
  export const getAuditTriggerConfig = (audit: ResolvedAuditConfig): TableConfig => {
8
8
  const result: TableConfig = {};
9
9
  for (const [name, options] of Object.entries(audit.tables)) {
10
- const { entityType, idColumns: ids, excludeColumns: excluded } = options;
10
+ const { idColumns: ids, excludeColumns: excluded } = options;
11
11
  const functionName = getAuditWriterName(audit.tableName, name);
12
12
  result[name] = {
13
13
  triggers: {
@@ -32,9 +32,17 @@ export const getAuditTriggerConfig = (audit: ResolvedAuditConfig): TableConfig =
32
32
  after_row := after_row - excluded;
33
33
  END IF;
34
34
  IF TG_OP = 'UPDATE' AND before_row IS NOT DISTINCT FROM after_row THEN RETURN NULL; END IF;
35
- INSERT INTO ${asName(audit.tableName)} (schema_name, table_name, entity_type, operation, old_id, new_id, old_row, new_row, actor)
36
- VALUES (TG_TABLE_SCHEMA, TG_TABLE_NAME, ${as.text(entityType)}, TG_OP, before_id, after_id, before_row, after_row,
37
- nullif(current_setting('prostgles.user', true), '')::jsonb);
35
+ INSERT INTO ${asName(audit.tableName)} (schema_name, table_name, operation, old_id, new_id, old_row, new_row, actor, db_context)
36
+ VALUES (TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP, before_id, after_id, before_row, after_row,
37
+ nullif(current_setting('prostgles.user', true), '')::jsonb,
38
+ jsonb_build_object(
39
+ 'transaction_id', pg_current_xact_id()::text,
40
+ 'transaction_started_at', transaction_timestamp(),
41
+ 'statement_started_at', statement_timestamp(),
42
+ 'current_role', current_role,
43
+ 'session_user', session_user,
44
+ 'application_name', current_setting('application_name')
45
+ ));
38
46
  RETURN NULL;
39
47
  END;`,
40
48
  },
@@ -58,11 +58,7 @@ export const parseAuditConfig = (prgl: Prostgles): ResolvedAuditConfig | undefin
58
58
  if (ids.some((c) => excluded.includes(c))) {
59
59
  throw new Error(`Audit identity columns cannot be excluded: ${table.name}`);
60
60
  }
61
- if (options.entityType !== undefined && !options.entityType) {
62
- throw new Error(`Invalid audit entityType for ${table.name}`);
63
- }
64
61
  result[table.name] = {
65
- entityType: options.entityType ?? table.name,
66
62
  idColumns: [...ids],
67
63
  excludeColumns: [...excluded],
68
64
  };
@@ -11,7 +11,7 @@ import type { PublishParser } from "../PublishParser/PublishParser";
11
11
  import type { OnCommitCallback } from "../PublishParser/publishTypesAndUtils";
12
12
  import type { ServerFunctionDefinition } from "../PublishParser/defineServerFunction";
13
13
  import { getQueryErrorPositionInfo } from "../TableConfig/runSQLFile";
14
- import type { Graph } from "../shortestPath";
14
+ import type { Graph } from "./joins/shortestPath";
15
15
  import { clone } from "../utils/utils";
16
16
  import type {
17
17
  DBHandlerServer,
@@ -31,7 +31,7 @@ import {
31
31
  getConstraints,
32
32
  getSerializedClientErrorFromPGError,
33
33
  } from "./dboBuilderUtils";
34
- import { prepareShortestJoinPaths } from "./prepareShortestJoinPaths";
34
+ import { prepareShortestJoinPaths } from "./joins/prepareShortestJoinPaths";
35
35
  import { cacheDBTypes, runSQL } from "./runSql/runSQL";
36
36
  import { getDetailedFieldInfo, type getDbTypes } from "./runSql/runSqlUtils";
37
37
  import { getTablesForSchemaPostgresSQL } from "./schema/getTablesForSchemaPostgresSQL";
@@ -140,10 +140,7 @@ export class DboBuilder {
140
140
 
141
141
  onSchemaChange?: (event: { command: string; query: string }) => void;
142
142
 
143
- private readonly onCommitCallbacksByTransaction = new WeakMap<
144
- object,
145
- OnCommitCallback[]
146
- >();
143
+ private readonly onCommitCallbacksByTransaction = new WeakMap<object, OnCommitCallback[]>();
147
144
 
148
145
  registerOnCommitCallback = (transaction: object, callback: OnCommitCallback) => {
149
146
  const callbacks = this.onCommitCallbacksByTransaction.get(transaction);
@@ -250,9 +247,12 @@ export class DboBuilder {
250
247
  this.checkingCanSubscribe = false;
251
248
  }
252
249
  const start = Date.now();
253
- const tablesOrViewsReq = await getTablesForSchemaPostgresSQL({ db: this.prostgles.dbForSchema! }, {
254
- schemaFilter: this.prostgles.opts.schemaFilter,
255
- });
250
+ const tablesOrViewsReq = await getTablesForSchemaPostgresSQL(
251
+ { db: this.prostgles.dbForSchema! },
252
+ {
253
+ schemaFilter: this.prostgles.opts.schemaFilter,
254
+ },
255
+ );
256
256
  await this.prostgles.opts.onLog?.({
257
257
  type: "debug",
258
258
  command: "DboBuilder.getTablesForSchemaPostgresSQL",
@@ -262,7 +262,10 @@ export class DboBuilder {
262
262
  const tablesOrViews = tablesOrViewsReq.result;
263
263
  this.tablesOrViews = tablesOrViews;
264
264
 
265
- this.constraints = await getConstraints(this.prostgles.dbForSchema!, this.prostgles.opts.schemaFilter);
265
+ this.constraints = await getConstraints(
266
+ this.prostgles.dbForSchema!,
267
+ this.prostgles.opts.schemaFilter,
268
+ );
266
269
  await this.prepareShortestJoinPaths();
267
270
 
268
271
  this.dbo = {};
@@ -13,7 +13,7 @@ import type { TableEvent } from "../../Logging";
13
13
  import type { DB } from "../../Prostgles";
14
14
  import type { Join } from "../../ProstglesTypes";
15
15
  import type { ParsedTableRule } from "../../PublishParser/PublishParser";
16
- import type { Graph } from "../../shortestPath";
16
+ import type { Graph } from "../joins/shortestPath";
17
17
  import type { DboBuilder, Filter, LocalParams, TableHandlers } from "../DboBuilder";
18
18
  import { getSerializedClientErrorFromPGError } from "../DboBuilder";
19
19
  import type { TableSchema } from "../DboBuilderTypes";
@@ -0,0 +1,59 @@
1
+ import type { TableSchema } from "../DboBuilderTypes";
2
+ import type { Join } from "../../ProstglesTypes";
3
+ import { sortedArraysMatch } from "../../utils/utils";
4
+ import { isEqual } from "prostgles-types";
5
+
6
+ export const getInferredJoins = (schema: TableSchema[]): Join[] => {
7
+ const joins: Join[] = [];
8
+ const upsertJoin = (
9
+ t1: string,
10
+ t2: string,
11
+ cols: { col1: string; col2: string }[],
12
+ type: Join["type"],
13
+ ) => {
14
+ const existingIdx = joins.findIndex((j) => sortedArraysMatch(j.tables, [t1, t2]));
15
+ const existing = joins[existingIdx];
16
+ const normalCond = cols.reduce((a, v) => ({ ...a, [v.col1]: v.col2 }), {});
17
+ const revertedCond = cols.reduce((a, v) => ({ ...a, [v.col2]: v.col1 }), {});
18
+ if (existing) {
19
+ const isLTR = existing.tables[0] === t1;
20
+ const cond = isLTR ? normalCond : revertedCond;
21
+
22
+ /** At some point we should add relationship type to EACH JOIN CONDITION GROUP */
23
+ // const fixedType = isLTR? type : type.split("").reverse().join("") as Join["type"];
24
+
25
+ /** Avoid duplicates */
26
+ if (!existing.on.some((existingOnCondition) => isEqual(existingOnCondition, cond))) {
27
+ existing.on.push(cond);
28
+ joins[existingIdx] = existing;
29
+ }
30
+ } else {
31
+ joins.push({
32
+ tables: [t1, t2],
33
+ on: [normalCond],
34
+ type,
35
+ });
36
+ }
37
+ };
38
+ schema.map((tov) => {
39
+ tov.columns.map((col) => {
40
+ if (col.references) {
41
+ col.references.forEach((r) => {
42
+ const joinCols = r.cols.map((c, i) => ({
43
+ col1: c,
44
+ col2: r.fcols[i]!,
45
+ }));
46
+ let type: Join["type"] = "one-many";
47
+ const ftablePKeys = schema
48
+ .find(({ name }) => name === r.ftable)
49
+ ?.columns.filter((fcol) => fcol.is_pkey);
50
+ if (ftablePKeys?.length && ftablePKeys.every((fkey) => r.fcols.includes(fkey.name))) {
51
+ type = "one-one";
52
+ }
53
+ upsertJoin(tov.name, r.ftable, joinCols, type);
54
+ });
55
+ }
56
+ });
57
+ });
58
+ return joins;
59
+ };
@@ -0,0 +1,72 @@
1
+ import assert from "node:assert/strict";
2
+ import test from "node:test";
3
+ import type { DboBuilder } from "../DboBuilder";
4
+ import { prepareShortestJoinPaths } from "./prepareShortestJoinPaths";
5
+ import type { Join } from "../../ProstglesTypes";
6
+
7
+ void test("duplicate configured table pairs are rejected even during table configuration", () => {
8
+ const join: Join = {
9
+ tables: ["conditions", "members"],
10
+ on: [{ project_id: "project_id" }],
11
+ type: "many-many",
12
+ };
13
+ for (const preparingTableConfig of [false, true]) {
14
+ for (const override of [false, true]) {
15
+ for (const tables of [join.tables, [...join.tables].reverse() as Join["tables"]]) {
16
+ const builder = {
17
+ prostgles: {
18
+ preparingTableConfig,
19
+ opts: { joins: [join, { ...join, tables, override }] },
20
+ },
21
+ tablesOrViews: [],
22
+ } as unknown as DboBuilder;
23
+ assert.throws(
24
+ () => prepareShortestJoinPaths(builder),
25
+ /Duplicate configured join for table pair/,
26
+ );
27
+ }
28
+ }
29
+ }
30
+ });
31
+
32
+ void test("configured joins are deferred only during table configuration", () => {
33
+ const builder = {
34
+ prostgles: {
35
+ preparingTableConfig: true,
36
+ opts: {
37
+ joins: [
38
+ {
39
+ tables: ["conditions", "members"],
40
+ on: [{ project_id: "project_id" }],
41
+ type: "many-many",
42
+ },
43
+ ],
44
+ },
45
+ },
46
+ tablesOrViews: [],
47
+ } as unknown as DboBuilder;
48
+ assert.deepEqual(prepareShortestJoinPaths(builder).joins, []);
49
+ builder.prostgles.preparingTableConfig = false;
50
+ assert.throws(
51
+ () => prepareShortestJoinPaths(builder),
52
+ (error: unknown) => typeof error === "string" && error.includes("Table not found: conditions"),
53
+ );
54
+ });
55
+
56
+ void test("existing configured joins remain available during table configuration", () => {
57
+ const join = {
58
+ tables: ["conditions", "members"],
59
+ on: [{ project_id: "project_id" }],
60
+ type: "many-many",
61
+ };
62
+ const builder = {
63
+ prostgles: { preparingTableConfig: true, opts: { joins: [join] } },
64
+ tablesOrViews: ["conditions", "members"].map((name) => ({
65
+ name,
66
+ columns: [{ name: "project_id" }],
67
+ })),
68
+ } as unknown as DboBuilder;
69
+ assert.deepEqual(prepareShortestJoinPaths(builder).joins, [join]);
70
+ builder.prostgles.preparingTableConfig = false;
71
+ assert.deepEqual(prepareShortestJoinPaths(builder).joins, [join]);
72
+ });