prostgles-server 4.2.624 → 4.2.625

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 (135) hide show
  1. package/dist/Audit/AuditTable.d.ts +2 -1
  2. package/dist/Audit/AuditTable.d.ts.map +1 -1
  3. package/dist/Audit/AuditTable.js +3 -2
  4. package/dist/Audit/AuditTable.js.map +1 -1
  5. package/dist/Audit/getAuditTableRules.d.ts +7 -0
  6. package/dist/Audit/getAuditTableRules.d.ts.map +1 -0
  7. package/dist/Audit/getAuditTableRules.js +191 -0
  8. package/dist/Audit/getAuditTableRules.js.map +1 -0
  9. package/dist/Audit/getAuditTriggerConfig.d.ts.map +1 -1
  10. package/dist/Audit/getAuditTriggerConfig.js +14 -1
  11. package/dist/Audit/getAuditTriggerConfig.js.map +1 -1
  12. package/dist/DBSchemaBuilder/getDBGeneratedSchema.d.ts.map +1 -1
  13. package/dist/DBSchemaBuilder/getDBGeneratedSchema.js +1 -2
  14. package/dist/DBSchemaBuilder/getDBGeneratedSchema.js.map +1 -1
  15. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +10 -5
  16. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  17. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +90 -71
  18. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  19. package/dist/DboBuilder/QueryBuilder/getJoinQuery.d.ts.map +1 -1
  20. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js +3 -2
  21. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
  22. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts +2 -2
  23. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
  24. package/dist/DboBuilder/QueryBuilder/getNewQuery.js +53 -116
  25. package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
  26. package/dist/DboBuilder/QueryBuilder/getQuerySource.d.ts +18 -0
  27. package/dist/DboBuilder/QueryBuilder/getQuerySource.d.ts.map +1 -0
  28. package/dist/DboBuilder/QueryBuilder/getQuerySource.js +29 -0
  29. package/dist/DboBuilder/QueryBuilder/getQuerySource.js.map +1 -0
  30. package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
  31. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +6 -2
  32. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
  33. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts +13 -0
  34. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.d.ts.map +1 -0
  35. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js +57 -0
  36. package/dist/DboBuilder/QueryBuilder/parseJoinSelect.js.map +1 -0
  37. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  38. package/dist/DboBuilder/TableHandler/TableHandler.js +2 -1
  39. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  40. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  41. package/dist/DboBuilder/TableHandler/delete.js +2 -1
  42. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  43. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
  44. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +2 -1
  45. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  46. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  47. package/dist/DboBuilder/TableHandler/update.js +2 -1
  48. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  49. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +6 -16
  50. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  51. package/dist/DboBuilder/ViewHandler/ViewHandler.js +2 -7
  52. package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
  53. package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
  54. package/dist/DboBuilder/ViewHandler/find.js +1 -1
  55. package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
  56. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts +1 -1
  57. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
  58. package/dist/DboBuilder/ViewHandler/getExistsCondition.js +24 -13
  59. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  60. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts +4 -1
  61. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
  62. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +20 -14
  63. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
  64. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts +7 -3
  65. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
  66. package/dist/DboBuilder/ViewHandler/prepareWhere.js +30 -23
  67. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  68. package/dist/DboBuilder/getCondition.d.ts +2 -1
  69. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  70. package/dist/DboBuilder/getCondition.js +9 -8
  71. package/dist/DboBuilder/getCondition.js.map +1 -1
  72. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  73. package/dist/DboBuilder/getSubscribeRelatedTables.js +3 -2
  74. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  75. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  76. package/dist/DboBuilder/parseUpdateRules.js +3 -2
  77. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  78. package/dist/DboBuilder/schema/getTablesForSchemaPostgresSQL.d.ts +2 -2
  79. package/dist/Prostgles.d.ts.map +1 -1
  80. package/dist/Prostgles.js +2 -0
  81. package/dist/Prostgles.js.map +1 -1
  82. package/dist/ProstglesContext.spec.js +25 -0
  83. package/dist/ProstglesContext.spec.js.map +1 -1
  84. package/dist/PubSubManager/PubSubManager.d.ts +1 -1
  85. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  86. package/dist/PublishParser/PublishParser.js +15 -4
  87. package/dist/PublishParser/PublishParser.js.map +1 -1
  88. package/dist/PublishParser/applyScopeToTableRules.d.ts +0 -1
  89. package/dist/PublishParser/applyScopeToTableRules.d.ts.map +1 -1
  90. package/dist/PublishParser/applyScopeToTableRules.js +3 -7
  91. package/dist/PublishParser/applyScopeToTableRules.js.map +1 -1
  92. package/dist/PublishParser/getPublishedTableNames.d.ts.map +1 -1
  93. package/dist/PublishParser/getPublishedTableNames.js +16 -0
  94. package/dist/PublishParser/getPublishedTableNames.js.map +1 -1
  95. package/dist/PublishParser/publishTypesAndUtils.d.ts +0 -4
  96. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  97. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  98. package/dist/TableConfig/getColumnSQLDefinitionQuery.d.ts.map +1 -1
  99. package/dist/TableConfig/getColumnSQLDefinitionQuery.js +1 -2
  100. package/dist/TableConfig/getColumnSQLDefinitionQuery.js.map +1 -1
  101. package/dist/index.d.ts +1 -1
  102. package/dist/index.d.ts.map +1 -1
  103. package/dist/index.js +2 -1
  104. package/dist/index.js.map +1 -1
  105. package/lib/Audit/AuditTable.ts +4 -3
  106. package/lib/Audit/getAuditTableRules.ts +288 -0
  107. package/lib/Audit/getAuditTriggerConfig.ts +14 -1
  108. package/lib/DBSchemaBuilder/getDBGeneratedSchema.ts +1 -2
  109. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +118 -90
  110. package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +3 -2
  111. package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +111 -194
  112. package/lib/DboBuilder/QueryBuilder/getQuerySource.ts +55 -0
  113. package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +8 -2
  114. package/lib/DboBuilder/QueryBuilder/parseJoinSelect.ts +73 -0
  115. package/lib/DboBuilder/TableHandler/TableHandler.ts +3 -6
  116. package/lib/DboBuilder/TableHandler/delete.ts +2 -1
  117. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +2 -1
  118. package/lib/DboBuilder/TableHandler/update.ts +2 -1
  119. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +6 -12
  120. package/lib/DboBuilder/ViewHandler/find.ts +0 -1
  121. package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +35 -28
  122. package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +22 -14
  123. package/lib/DboBuilder/ViewHandler/prepareWhere.ts +48 -27
  124. package/lib/DboBuilder/getCondition.ts +11 -10
  125. package/lib/DboBuilder/getSubscribeRelatedTables.ts +3 -2
  126. package/lib/DboBuilder/parseUpdateRules.ts +3 -2
  127. package/lib/Prostgles.ts +1 -0
  128. package/lib/ProstglesContext.spec.ts +30 -0
  129. package/lib/PublishParser/PublishParser.ts +33 -8
  130. package/lib/PublishParser/applyScopeToTableRules.ts +1 -7
  131. package/lib/PublishParser/getPublishedTableNames.ts +22 -0
  132. package/lib/PublishParser/publishTypesAndUtils.ts +0 -5
  133. package/lib/TableConfig/getColumnSQLDefinitionQuery.ts +8 -2
  134. package/lib/index.ts +1 -0
  135. package/package.json +1 -1
@@ -26,5 +26,6 @@ export declare const AUDIT_TABLE_COLUMN_DEFINITIONS: {
26
26
  };
27
27
  };
28
28
  export type AuditTableRow = TableRowFromColumnDefinitions<typeof AUDIT_TABLE_COLUMN_DEFINITIONS>;
29
- export declare const AUDIT_TABLE_COLUMNS: (keyof AuditTableRow)[];
29
+ export declare const AUDIT_TABLE_COLUMN_NAMES: { [K in keyof AuditTableRow]: K; };
30
+ export declare const AUDIT_TABLE_COLUMNS: ("id" | "table_name" | "created_at" | "schema_name" | "operation" | "old_id" | "new_id" | "old_row" | "new_row" | "actor" | "db_context")[];
30
31
  //# sourceMappingURL=AuditTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuditTable.d.ts","sourceRoot":"","sources":["../../lib/Audit/AuditTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAElG,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;CAuBjC,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,6BAA6B,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACjG,eAAO,MAAM,mBAAmB,EAE3B,CAAC,MAAM,aAAa,CAAC,EAAE,CAAC"}
1
+ {"version":3,"file":"AuditTable.d.ts","sourceRoot":"","sources":["../../lib/Audit/AuditTable.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAElG,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;CAuBjC,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,6BAA6B,CAAC,OAAO,8BAA8B,CAAC,CAAC;AACjG,eAAO,MAAM,wBAAwB,EAEhC,GAAG,CAAC,IAAI,MAAM,aAAa,GAAG,CAAC,GAAE,CAAC;AACvC,eAAO,MAAM,mBAAmB,6IAA0C,CAAC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AUDIT_TABLE_COLUMNS = exports.AUDIT_TABLE_COLUMN_DEFINITIONS = void 0;
3
+ exports.AUDIT_TABLE_COLUMNS = exports.AUDIT_TABLE_COLUMN_NAMES = exports.AUDIT_TABLE_COLUMN_DEFINITIONS = void 0;
4
4
  exports.AUDIT_TABLE_COLUMN_DEFINITIONS = {
5
5
  id: "BIGSERIAL PRIMARY KEY",
6
6
  created_at: "TIMESTAMPTZ NOT NULL DEFAULT clock_timestamp()",
@@ -25,5 +25,6 @@ exports.AUDIT_TABLE_COLUMN_DEFINITIONS = {
25
25
  },
26
26
  },
27
27
  };
28
- exports.AUDIT_TABLE_COLUMNS = Object.keys(exports.AUDIT_TABLE_COLUMN_DEFINITIONS);
28
+ exports.AUDIT_TABLE_COLUMN_NAMES = Object.fromEntries(Object.keys(exports.AUDIT_TABLE_COLUMN_DEFINITIONS).map((columnName) => [columnName, columnName]));
29
+ exports.AUDIT_TABLE_COLUMNS = Object.values(exports.AUDIT_TABLE_COLUMN_NAMES);
29
30
  //# sourceMappingURL=AuditTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuditTable.js","sourceRoot":"","sources":["../../lib/Audit/AuditTable.ts"],"names":[],"mappings":";;;AAEa,QAAA,8BAA8B,GAAG;IAC5C,EAAE,EAAE,uBAAuB;IAC3B,UAAU,EAAE,gDAAgD;IAC5D,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,eAAe;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACnD,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE;QACV,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,cAAc,EAAE,QAAQ;gBACxB,sBAAsB,EAAE,QAAQ;gBAChC,oBAAoB,EAAE,QAAQ;gBAC9B,YAAY,EAAE,QAAQ;gBACtB,YAAY,EAAE,QAAQ;gBACtB,gBAAgB,EAAE,QAAQ;aAC3B;SACF;KACF;CACO,CAAC;AAGE,QAAA,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAC5C,sCAA8B,CACJ,CAAC"}
1
+ {"version":3,"file":"AuditTable.js","sourceRoot":"","sources":["../../lib/Audit/AuditTable.ts"],"names":[],"mappings":";;;AAEa,QAAA,8BAA8B,GAAG;IAC5C,EAAE,EAAE,uBAAuB;IAC3B,UAAU,EAAE,gDAAgD;IAC5D,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,eAAe;IAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE;IACnD,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,OAAO;IACf,OAAO,EAAE,OAAO;IAChB,OAAO,EAAE,OAAO;IAChB,KAAK,EAAE,OAAO;IACd,UAAU,EAAE;QACV,WAAW,EAAE;YACX,IAAI,EAAE;gBACJ,cAAc,EAAE,QAAQ;gBACxB,sBAAsB,EAAE,QAAQ;gBAChC,oBAAoB,EAAE,QAAQ;gBAC9B,YAAY,EAAE,QAAQ;gBACtB,YAAY,EAAE,QAAQ;gBACtB,gBAAgB,EAAE,QAAQ;aAC3B;SACF;KACF;CACO,CAAC;AAGE,QAAA,wBAAwB,GAAG,MAAM,CAAC,WAAW,CACxD,MAAM,CAAC,IAAI,CAAC,sCAA8B,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CACrD,CAAC;AAC1B,QAAA,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC,gCAAwB,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { AuthClientRequest, AuthResultWithSID } from "../Auth/AuthTypes";
2
+ import type { LocalParams } from "../DboBuilder/DboBuilder";
3
+ import type { PublishParser } from "../PublishParser/PublishParser";
4
+ import type { ParsedPublishTable, PublishObject } from "../PublishParser/publishTypesAndUtils";
5
+ import type { ResolvedAuditConfig } from "./AuditTypes";
6
+ export declare const getAuditTableRules: (this: PublishParser, audit: ResolvedAuditConfig, auditTablePublishRules: ParsedPublishTable | undefined, clientReq: AuthClientRequest | undefined, clientInfo: AuthResultWithSID | undefined, scope: LocalParams["scope"] | undefined, resolvedPublishObject: PublishObject | undefined) => Promise<ParsedPublishTable | undefined>;
7
+ //# sourceMappingURL=getAuditTableRules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAuditTableRules.d.ts","sourceRoot":"","sources":["../../lib/Audit/getAuditTableRules.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,KAAK,EAAU,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EACV,kBAAkB,EAClB,aAAa,EAEd,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,eAAO,MAAM,kBAAkB,GAC7B,MAAM,aAAa,EACnB,OAAO,mBAAmB,EAC1B,wBAAwB,kBAAkB,GAAG,SAAS,EACtD,WAAW,iBAAiB,GAAG,SAAS,EACxC,YAAY,iBAAiB,GAAG,SAAS,EACzC,OAAO,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,EACvC,uBAAuB,aAAa,GAAG,SAAS,KAC/C,OAAO,CAAC,kBAAkB,GAAG,SAAS,CA6FxC,CAAC"}
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAuditTableRules = void 0;
4
+ const pg_promise_1 = require("pg-promise");
5
+ const prostgles_types_1 = require("prostgles-types");
6
+ const getQuerySource_1 = require("../DboBuilder/QueryBuilder/getQuerySource");
7
+ const AuditTable_1 = require("./AuditTable");
8
+ const prepareWhere_1 = require("../DboBuilder/ViewHandler/prepareWhere");
9
+ const getAuditTableRules = async function (audit, auditTablePublishRules, clientReq, clientInfo, scope, resolvedPublishObject) {
10
+ if (auditTablePublishRules?.select) {
11
+ return auditTablePublishRules;
12
+ }
13
+ if (resolvedPublishObject && Object.hasOwn(resolvedPublishObject, audit.tableName)) {
14
+ return auditTablePublishRules;
15
+ }
16
+ const auditedTableNames = Object.keys(audit.tables).filter((tableName) => canSelect(resolvedPublishObject?.[tableName]) || this.dbo[tableName]?.is_media);
17
+ const auditTableHandler = this.dbo[audit.tableName];
18
+ const auditedTableRules = (await Promise.all(auditedTableNames.map(async (tableName) => {
19
+ const tableHandler = this.dbo[tableName];
20
+ if (!tableHandler)
21
+ return;
22
+ const rules = await this.getTableRules({
23
+ tableName,
24
+ clientReq,
25
+ clientInfo,
26
+ scope,
27
+ resolvedPublishObject,
28
+ });
29
+ if (!rules?.select) {
30
+ return;
31
+ }
32
+ return {
33
+ handler: tableHandler,
34
+ additionalForcedCondition: await getSourceAuditCondition(tableHandler, rules.select.forcedFilter),
35
+ tableColumnOverrides: getAuditRowColumnOverrides(tableHandler.parseFieldFilter(rules.select.fields), audit.tables[tableName].idColumns),
36
+ };
37
+ }))).filter(prostgles_types_1.isDefined);
38
+ if (!auditedTableRules.length) {
39
+ return auditTablePublishRules;
40
+ }
41
+ const validateRequest = (filter) => {
42
+ const requiredTableNameFilterValue = getRequiredStringFilter(filter, [AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.schema_name, AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.table_name], this.prostgles.keywords.$and);
43
+ if (!requiredTableNameFilterValue) {
44
+ throw new Error("Audit queries require an exact schema_name and table_name filter");
45
+ }
46
+ const { schema_name, table_name } = requiredTableNameFilterValue;
47
+ const [matchingAuditedTableRules, ...otherMatches] = auditedTableRules.filter(({ handler: { tableOrViewInfo } }) => {
48
+ const sourceName = tableOrViewInfo.qualifiedNameParts;
49
+ return sourceName.name === table_name && sourceName.schema === schema_name;
50
+ });
51
+ if (otherMatches.length) {
52
+ throw new Error("Invalid audit table filter: multiple matching rules found");
53
+ }
54
+ if (!matchingAuditedTableRules) {
55
+ throw new Error("Invalid audit table filter: no matching rules found");
56
+ }
57
+ const { additionalForcedCondition, tableColumnOverrides } = matchingAuditedTableRules;
58
+ const tableExpression = getTableExpression(auditTableHandler, tableColumnOverrides, additionalForcedCondition);
59
+ return { tableExpression };
60
+ };
61
+ const select = (0, getQuerySource_1.withTableExpression)({
62
+ fields: "*",
63
+ filterFields: "*",
64
+ orderByFields: "*",
65
+ disableMethods: { subscribe: 1, sync: 1 },
66
+ }, (request) => validateRequest(request.filter).tableExpression);
67
+ return { ...auditTablePublishRules, select };
68
+ };
69
+ exports.getAuditTableRules = getAuditTableRules;
70
+ const getAuditRowColumnOverrides = (allowedColumns, idColumns) => {
71
+ const getSnapshotExpression = (snapshotColumn, columns) => {
72
+ const snapshot = (0, prostgles_types_1.asName)(snapshotColumn);
73
+ const args = columns.flatMap((columnName) => [
74
+ pg_promise_1.as.text(columnName),
75
+ `${snapshot} -> ${pg_promise_1.as.text(columnName)}`,
76
+ ]);
77
+ return `CASE WHEN ${snapshot} IS NULL THEN NULL ELSE jsonb_build_object(${args.join(", ")}) END`;
78
+ };
79
+ return {
80
+ [AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.old_id]: getSnapshotExpression(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.old_id, idColumns.filter((columnName) => allowedColumns.includes(columnName))),
81
+ [AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.new_id]: getSnapshotExpression(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.new_id, idColumns.filter((columnName) => allowedColumns.includes(columnName))),
82
+ [AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.old_row]: getSnapshotExpression(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.old_row, allowedColumns),
83
+ [AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.new_row]: getSnapshotExpression(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.new_row, allowedColumns),
84
+ };
85
+ };
86
+ const getSourceAuditCondition = async (sourceHandler, forcedFilter) => {
87
+ const { schema, name } = sourceHandler.tableOrViewInfo.qualifiedNameParts;
88
+ const auditColumn = (columnName) => (0, prostgles_types_1.asName)(columnName);
89
+ const sourceCondition = [
90
+ `${auditColumn(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.schema_name)} = ${pg_promise_1.as.text(schema)}`,
91
+ `${auditColumn(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.table_name)} = ${pg_promise_1.as.text(name)}`,
92
+ ].join(" AND ");
93
+ if (!forcedFilter || !Object.keys(forcedFilter).length) {
94
+ return sourceCondition;
95
+ }
96
+ const getSnapshotCondition = async (snapshotColumn) => {
97
+ const alias = `prostgles_audit_${snapshotColumn}`;
98
+ const snapshot = auditColumn(snapshotColumn);
99
+ const { condition } = await (0, prepareWhere_1.prepareWhere)(sourceHandler, {
100
+ filter: forcedFilter,
101
+ select: undefined,
102
+ filterFields: "*",
103
+ addWhere: false,
104
+ tableAlias: { raw: alias, escaped: (0, prostgles_types_1.asName)(alias) },
105
+ localParams: undefined,
106
+ tableRule: undefined,
107
+ });
108
+ if (!condition)
109
+ return "TRUE";
110
+ const record = `NULL::${sourceHandler.escapedName}`;
111
+ return `(
112
+ ${snapshot} IS NULL OR EXISTS (
113
+ SELECT 1
114
+ FROM jsonb_populate_record(${record}, ${snapshot}) AS ${(0, prostgles_types_1.asName)(alias)}
115
+ WHERE ${condition}
116
+ )
117
+ )`;
118
+ };
119
+ const [oldRowCondition, newRowCondition] = await Promise.all([
120
+ getSnapshotCondition(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.old_row),
121
+ getSnapshotCondition(AuditTable_1.AUDIT_TABLE_COLUMN_NAMES.new_row),
122
+ ]);
123
+ /** Prevent updates that cross a forcedFilter boundary from exposing either snapshot. */
124
+ return `(${sourceCondition}) AND ${oldRowCondition} AND ${newRowCondition}`;
125
+ };
126
+ const canSelect = (rule) => {
127
+ return rule === "*" || rule === true || ((0, prostgles_types_1.isObject)(rule) && Boolean(rule.select));
128
+ };
129
+ const getRequiredStringFilter = (filter, fieldNames, andKey) => {
130
+ const values = getExactStringFilters(filter, fieldNames, andKey);
131
+ if (fieldNames.some((fieldName) => !values[fieldName]))
132
+ return;
133
+ return values;
134
+ };
135
+ const getExactStringFilters = (filter, fieldNames, andKey) => {
136
+ if (!(0, prostgles_types_1.isObject)(filter))
137
+ return {};
138
+ const filterRecord = filter;
139
+ const result = (0, prostgles_types_1.fromEntries)(fieldNames
140
+ .map((fieldName) => {
141
+ const value = filterRecord[fieldName];
142
+ if (typeof value === "string")
143
+ return [fieldName, value];
144
+ if (!(0, prostgles_types_1.isObject)(value))
145
+ return;
146
+ const entries = Object.entries(value);
147
+ const [operator, exactValue] = entries[0] ?? [];
148
+ if (entries.length === 1 &&
149
+ operator &&
150
+ ["=", "$eq"].includes(operator) &&
151
+ typeof exactValue === "string") {
152
+ return [fieldName, exactValue];
153
+ }
154
+ })
155
+ .filter(prostgles_types_1.isDefined));
156
+ const andFilters = filterRecord[andKey];
157
+ if (!Array.isArray(andFilters))
158
+ return result;
159
+ for (const andFilter of andFilters) {
160
+ const nestedValues = getExactStringFilters(andFilter, fieldNames, andKey);
161
+ for (const fieldName of fieldNames) {
162
+ const nestedValue = nestedValues[fieldName];
163
+ if (!nestedValue)
164
+ continue;
165
+ const existingValue = result[fieldName];
166
+ if (existingValue && existingValue !== nestedValue) {
167
+ throw new Error(`Conflicting exact ${fieldName} filters`);
168
+ }
169
+ result[fieldName] = nestedValue;
170
+ }
171
+ }
172
+ return result;
173
+ };
174
+ const getTableExpression = (auditTableHandler, columnOverrides, additionalCondition) => {
175
+ const overrides = columnOverrides && !(0, prostgles_types_1.isEmpty)(columnOverrides) ? columnOverrides : undefined;
176
+ if (!overrides && !additionalCondition)
177
+ return;
178
+ const invalidColumns = Object.keys(overrides ?? {}).filter((columnName) => !auditTableHandler.column_names.includes(columnName));
179
+ if (invalidColumns.length) {
180
+ throw new Error(`Invalid table column overrides: ${invalidColumns.join(", ")}`);
181
+ }
182
+ const columns = overrides ?
183
+ auditTableHandler.column_names.map((columnName) => {
184
+ const override = overrides[columnName];
185
+ return override ? `${override} AS ${(0, prostgles_types_1.asName)(columnName)}` : (0, prostgles_types_1.asName)(columnName);
186
+ })
187
+ : ["*"];
188
+ const where = additionalCondition ? ` WHERE ${additionalCondition}` : "";
189
+ return `(SELECT ${columns.join(", ")} FROM ${auditTableHandler.escapedName}${where})`;
190
+ };
191
+ //# sourceMappingURL=getAuditTableRules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getAuditTableRules.js","sourceRoot":"","sources":["../../lib/Audit/getAuditTableRules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"getAuditTriggerConfig.d.ts","sourceRoot":"","sources":["../../lib/Audit/getAuditTriggerConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD,eAAO,MAAM,qBAAqB,GAAI,OAAO,mBAAmB,KAAG,WA8ClE,CAAC"}
1
+ {"version":3,"file":"getAuditTriggerConfig.d.ts","sourceRoot":"","sources":["../../lib/Audit/getAuditTriggerConfig.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAIxD,eAAO,MAAM,qBAAqB,GAAI,OAAO,mBAAmB,KAAG,WA0DlE,CAAC"}
@@ -4,8 +4,21 @@ exports.getAuditTriggerConfig = void 0;
4
4
  const pg_promise_1 = require("pg-promise");
5
5
  const prostgles_types_1 = require("prostgles-types");
6
6
  const getAuditTableConfig_1 = require("./getAuditTableConfig");
7
+ const AuditTable_1 = require("./AuditTable");
7
8
  const getAuditTriggerConfig = (audit) => {
8
9
  const result = {};
10
+ const columns = AuditTable_1.AUDIT_TABLE_COLUMN_NAMES;
11
+ const insertColumns = [
12
+ columns.schema_name,
13
+ columns.table_name,
14
+ columns.operation,
15
+ columns.old_id,
16
+ columns.new_id,
17
+ columns.old_row,
18
+ columns.new_row,
19
+ columns.actor,
20
+ columns.db_context,
21
+ ].map((columnName) => (0, prostgles_types_1.asName)(columnName));
9
22
  for (const [name, options] of Object.entries(audit.tables)) {
10
23
  const { idColumns: ids, excludeColumns: excluded } = options;
11
24
  const functionName = (0, getAuditTableConfig_1.getAuditWriterName)(audit.tableName, name);
@@ -32,7 +45,7 @@ const getAuditTriggerConfig = (audit) => {
32
45
  after_row := after_row - excluded;
33
46
  END IF;
34
47
  IF TG_OP = 'UPDATE' AND before_row IS NOT DISTINCT FROM after_row THEN RETURN NULL; END IF;
35
- INSERT INTO ${(0, prostgles_types_1.asName)(audit.tableName)} (schema_name, table_name, operation, old_id, new_id, old_row, new_row, actor, db_context)
48
+ INSERT INTO ${(0, prostgles_types_1.asName)(audit.tableName)} (${insertColumns.join(", ")})
36
49
  VALUES (TG_TABLE_SCHEMA, TG_TABLE_NAME, TG_OP, before_id, after_id, before_row, after_row,
37
50
  nullif(current_setting('prostgles.user', true), '')::jsonb,
38
51
  jsonb_build_object(
@@ -1 +1 @@
1
- {"version":3,"file":"getAuditTriggerConfig.js","sourceRoot":"","sources":["../../lib/Audit/getAuditTriggerConfig.ts"],"names":[],"mappings":";;;AAAA,2CAAgC;AAChC,qDAAyC;AAGzC,+DAA+E;AAExE,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAe,EAAE;IAC/E,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC7D,MAAM,YAAY,GAAG,IAAA,wCAAkB,EAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE;gBACR,GAAG,IAAA,wCAAkB,EAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC;gBACpD,CAAC,YAAY,CAAC,EAAE;oBACd,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBACvC,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;;kCAEiB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;uCAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;0BAavD,IAAA,wBAAM,EAAC,KAAK,CAAC,SAAS,CAAC;;;;;;;;;;;;eAYlC;iBACN;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA9CW,QAAA,qBAAqB,yBA8ChC"}
1
+ {"version":3,"file":"getAuditTriggerConfig.js","sourceRoot":"","sources":["../../lib/Audit/getAuditTriggerConfig.ts"],"names":[],"mappings":";;;AAAA,2CAAgC;AAChC,qDAAyC;AAGzC,+DAA+E;AAC/E,6CAAwD;AAEjD,MAAM,qBAAqB,GAAG,CAAC,KAA0B,EAAe,EAAE;IAC/E,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,qCAAwB,CAAC;IACzC,MAAM,aAAa,GAAG;QACpB,OAAO,CAAC,WAAW;QACnB,OAAO,CAAC,UAAU;QAClB,OAAO,CAAC,SAAS;QACjB,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,MAAM;QACd,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,OAAO;QACf,OAAO,CAAC,KAAK;QACb,OAAO,CAAC,UAAU;KACnB,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,IAAA,wBAAM,EAAC,UAAU,CAAC,CAAC,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3D,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC7D,MAAM,YAAY,GAAG,IAAA,wCAAkB,EAAC,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC/D,MAAM,CAAC,IAAI,CAAC,GAAG;YACb,QAAQ,EAAE;gBACR,GAAG,IAAA,wCAAkB,EAAC,KAAK,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,CAAC;gBACpD,CAAC,YAAY,CAAC,EAAE;oBACd,IAAI,EAAE,OAAO;oBACb,OAAO,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC;oBACvC,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE;;kCAEiB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;uCAChC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,eAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;;0BAavD,IAAA,wBAAM,EAAC,KAAK,CAAC,SAAS,CAAC,KAAK,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;;;;;;;;;;;;eAY/D;iBACN;aACF;SACF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA1DW,QAAA,qBAAqB,yBA0DhC"}
@@ -1 +1 @@
1
- {"version":3,"file":"getDBGeneratedSchema.d.ts","sourceRoot":"","sources":["../../lib/DBSchemaBuilder/getDBGeneratedSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AAGvC,eAAO,MAAM,oBAAoB,GAAI,2CAIlC;IACD,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,KAAG,MAiFH,CAAC"}
1
+ {"version":3,"file":"getDBGeneratedSchema.d.ts","sourceRoot":"","sources":["../../lib/DBSchemaBuilder/getDBGeneratedSchema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,+BAA+B,CAAC;AAGvC,eAAO,MAAM,oBAAoB,GAAI,2CAIlC;IACD,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IAChC,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,oBAAoB,CAAC;CACtC,KAAG,MAiFH,CAAC"}
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getDBGeneratedSchema = void 0;
4
4
  const prostgles_types_1 = require("prostgles-types");
5
- const applyScopeToTableRules_1 = require("../PublishParser/applyScopeToTableRules");
6
5
  const utils_1 = require("../utils/utils");
7
6
  const constants_1 = require("./constants");
8
7
  const getClientDBGeneratedSchemas_1 = require("./getClientDBGeneratedSchemas");
@@ -19,7 +18,7 @@ const getDBGeneratedSchema = ({ config, tablesOrViews, clientSchemas, }) => {
19
18
  /**
20
19
  * E.g.: A "users" will have referencedBy: { user_posts: ["user_id"] }
21
20
  */
22
- const referencedBy = (0, applyScopeToTableRules_1.fromEntries)(tablesOrViews
21
+ const referencedBy = (0, prostgles_types_1.fromEntries)(tablesOrViews
23
22
  .map((refTable) => {
24
23
  const referencedCols = refTable.columns
25
24
  .map((refCol) => {
@@ -1 +1 @@
1
- {"version":3,"file":"getDBGeneratedSchema.js","sourceRoot":"","sources":["../../lib/DBSchemaBuilder/getDBGeneratedSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"getDBGeneratedSchema.js","sourceRoot":"","sources":["../../lib/DBSchemaBuilder/getDBGeneratedSchema.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,11 @@
1
- import type { ColumnInfo, JoinSelect, PG_COLUMN_UDT_DATA_TYPE, Select, ValidatedColumnInfo } from "prostgles-types";
1
+ import type { ColumnInfo, PG_COLUMN_UDT_DATA_TYPE, Select, ValidatedColumnInfo } from "prostgles-types";
2
2
  import type { PGIdentifier, SortItem } from "../DboBuilder";
3
+ import type { Awaitable } from "../../PublishParser/publishTypesAndUtils";
3
4
  import type { ParsedJoinPath } from "../ViewHandler/parseJoinPath";
4
- import type { ViewHandler } from "../ViewHandler/ViewHandler";
5
+ import type { WhereOptions } from "../ViewHandler/prepareWhere";
5
6
  import type { FieldSpec, FunctionSpec } from "./Functions/Functions";
7
+ import { type ParsedJoin } from "./parseJoinSelect";
8
+ import type { QuerySource } from "./getQuerySource";
6
9
  export type SelectItem = {
7
10
  getFields: (args: any[]) => string[] | "*";
8
11
  getQuery: (tableAliasRaw?: string) => string;
@@ -21,7 +24,6 @@ export type SelectItem = {
21
24
  export type SelectItemValidated = Omit<SelectItem, "getFields"> & {
22
25
  fields: string[];
23
26
  };
24
- export type WhereOptions = Awaited<ReturnType<ViewHandler["prepareWhere"]>>;
25
27
  export type NewQueryRoot = {
26
28
  /**
27
29
  * All fields from the table will be in nested SELECT and GROUP BY to allow order/filter by fields not in select
@@ -32,6 +34,7 @@ export type NewQueryRoot = {
32
34
  */
33
35
  select: SelectItemValidated[];
34
36
  table: PGIdentifier;
37
+ source: QuerySource;
35
38
  where: string;
36
39
  whereOpts: WhereOptions;
37
40
  orderByItems: SortItem[];
@@ -73,7 +76,9 @@ export declare class SelectItemBuilder {
73
76
  private checkField;
74
77
  private addItem;
75
78
  private addFunction;
76
- addColumn: (fieldName: string, selected: boolean) => void;
77
- parseUserSelect: (userSelect: Select, joinParse?: (key: string, val: JoinSelect, throwErr: (msg: string) => any) => any) => Promise<never[] | undefined>;
79
+ private addColumn;
80
+ parse: (userSelect: Select, joinParse?: (key: string, parsedJoin: ParsedJoin) => Awaitable<void>) => Promise<void>;
81
+ parseUserSelect: (userSelect: Select) => Promise<void>;
82
+ parseUserSelectWithJoins: (userSelect: Select, joinParse?: (key: string, parsedJoin: ParsedJoin) => Awaitable<void>) => Promise<void>;
78
83
  }
79
84
  //# sourceMappingURL=QueryBuilder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/QueryBuilder/QueryBuilder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"QueryBuilder.d.ts","sourceRoot":"","sources":["../../../lib/DboBuilder/QueryBuilder/QueryBuilder.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,10 @@
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.SelectItemBuilder = exports.parseFunctionObject = void 0;
8
8
  const prostgles_types_1 = require("prostgles-types");
9
+ const asNameAlias_1 = require("../../utils/asNameAlias");
9
10
  const COMPUTED_FIELDS_1 = require("./Functions/COMPUTED_FIELDS");
10
11
  const parseFunction_1 = require("./Functions/parseFunction");
11
- const asNameAlias_1 = require("../../utils/asNameAlias");
12
+ const parseJoinSelect_1 = require("./parseJoinSelect");
12
13
  const parseFunctionObject = (funcData) => {
13
14
  const makeErr = (msg) => `Function not specified correctly. Expecting { $funcName: ["columnName" | <value>, ...args] } object but got: ${JSON.stringify(funcData)} \n ${msg}`;
14
15
  if (!(0, prostgles_types_1.isObject)(funcData))
@@ -64,7 +65,7 @@ class SelectItemBuilder {
64
65
  /** Not selected items can be part of the orderBy fields */
65
66
  const allowedFields = isSelected ? allowedSelectedFields : allowedNonSelectedFields;
66
67
  if (!allowedFields.includes(f)) {
67
- throw ("Field " + f + " is invalid or dissallowed. \nAllowed fields: " + allowedFields.join(", "));
68
+ throw ("Field " + f + " is invalid or disallowed. \nAllowed fields: " + allowedFields.join(", "));
68
69
  }
69
70
  return f;
70
71
  };
@@ -130,96 +131,114 @@ class SelectItemBuilder {
130
131
  selected,
131
132
  });
132
133
  };
133
- parseUserSelect = async (userSelect, joinParse) => {
134
+ parse = async (userSelect, joinParse) => {
135
+ if (userSelect === "") {
136
+ return;
137
+ }
138
+ if (userSelect === "*") {
139
+ this.allowedFields.map((key) => this.addColumn(key, true));
140
+ return;
141
+ }
134
142
  /* [col1, col2, col3] */
135
143
  if (Array.isArray(userSelect)) {
136
144
  if (userSelect.find((key) => typeof key !== "string")) {
137
145
  throw "Invalid array select. Expecting an array of strings";
138
146
  }
139
147
  userSelect.map((key) => this.addColumn(key, true));
140
- /* Empty select */
148
+ return;
141
149
  }
142
- else if (userSelect === "") {
143
- return [];
150
+ if (!(0, prostgles_types_1.isObject)(userSelect)) {
151
+ throw "Unexpected select -> " + JSON.stringify(userSelect);
144
152
  }
145
- else if (userSelect === "*") {
146
- this.allowedFields.map((key) => this.addColumn(key, true));
153
+ if ((0, prostgles_types_1.isEmpty)(userSelect)) {
154
+ throw "Unexpected empty object select";
147
155
  }
148
- else if ((0, prostgles_types_1.isObject)(userSelect) && !(0, prostgles_types_1.isEmpty)(userSelect)) {
149
- const selectKeys = Object.keys(userSelect), selectValues = Object.values(userSelect);
150
- /* Cannot include and exclude at the same time */
151
- if (selectValues.filter((v) => [0, false].includes(v)).length) {
152
- if (selectValues.filter((v) => ![0, false].includes(v)).length) {
153
- throw "\nCannot include and exclude fields at the same time";
154
- }
155
- /* Exclude only */
156
- this.allowedFields
157
- .filter((f) => !selectKeys.includes(f))
158
- .map((key) => this.addColumn(key, true));
156
+ const selectKeys = Object.keys(userSelect), selectValues = Object.values(userSelect);
157
+ /* Cannot include and exclude at the same time */
158
+ if (selectValues.filter((v) => [0, false].includes(v)).length) {
159
+ if (selectValues.filter((v) => ![0, false].includes(v)).length) {
160
+ throw "\nCannot include and exclude fields at the same time";
159
161
  }
160
- else {
161
- await Promise.all(selectKeys.map(async (key) => {
162
- const val = userSelect[key];
163
- const throwErr = (extraErr = "") => {
164
- console.trace(extraErr);
165
- throw "Unexpected select -> " + JSON.stringify({ [key]: val }) + "\n" + extraErr;
166
- };
167
- /* Included fields */
168
- if ([1, true].includes(val)) {
169
- if (key === "*") {
170
- this.allowedFields.map((key) => this.addColumn(key, true));
171
- }
172
- else {
173
- this.addColumn(key, true);
174
- }
175
- /* Aggs and functions */
162
+ /* Exclude only */
163
+ this.allowedFields
164
+ .filter((f) => !selectKeys.includes(f))
165
+ .map((key) => this.addColumn(key, true));
166
+ }
167
+ else {
168
+ await Promise.all(selectKeys.map(async (key) => {
169
+ const val = userSelect[key];
170
+ const throwErr = (message) => {
171
+ console.trace(message);
172
+ throw "Unexpected select -> " + JSON.stringify({ [key]: val }) + "\n" + message;
173
+ };
174
+ /* Included fields */
175
+ if ([1, true].includes(val)) {
176
+ if (key === "*") {
177
+ this.allowedFields.map((key) => this.addColumn(key, true));
178
+ }
179
+ else {
180
+ this.addColumn(key, true);
176
181
  }
177
- else if (typeof val === "string" || (0, prostgles_types_1.isObject)(val)) {
178
- /* Function shorthand notation
179
- { id: "$max" } === { id: { $max: ["id"] } } === SELECT MAX(id) AS id
182
+ /* Aggregations and functions */
183
+ }
184
+ else if (typeof val === "string" || (0, prostgles_types_1.isObject)(val)) {
185
+ /* Function shorthand notation
186
+ { id: "$max" } === { id: { $max: ["id"] } } === SELECT MAX(id) AS id
180
187
  */
181
- if ((typeof val === "string" && val !== "*") ||
182
- ((0, prostgles_types_1.isObject)(val) &&
183
- Object.keys(val).length === 1 &&
184
- Array.isArray(Object.values(val)[0]))) {
185
- let funcName, args;
186
- if (typeof val === "string") {
187
- /* Shorthand notation -> it is expected that the key is the column name used as the only argument */
188
- try {
189
- this.checkField(key, true);
190
- }
191
- catch {
192
- throwErr(` Shorthand function notation error: the specifield column ( ${key} ) is invalid or dissallowed. \n Use correct column name or full aliased function notation, e.g.: -> { alias: { $func_name: ["column_name"] } } `);
193
- }
194
- funcName = val;
195
- args = [key];
196
- /** Function full notation { $funcName: ["colName", ...args] } */
188
+ if ((typeof val === "string" && val !== "*") ||
189
+ ((0, prostgles_types_1.isObject)(val) &&
190
+ Object.keys(val).length === 1 &&
191
+ Array.isArray(Object.values(val)[0]))) {
192
+ let funcName, args;
193
+ if (typeof val === "string") {
194
+ /* Shorthand notation -> it is expected that the key is the column name used as the only argument */
195
+ try {
196
+ this.checkField(key, true);
197
197
  }
198
- else {
199
- ({ funcName, args } = (0, exports.parseFunctionObject)(val));
198
+ catch {
199
+ throwErr(` Shorthand function notation error: the specified column ( ${key} ) is invalid or disallowed. \n Use correct column name or full aliased function notation, e.g.: -> { alias: { $func_name: ["column_name"] } } `);
200
200
  }
201
- this.addFunction(funcName, args, key);
202
- /* Join */
201
+ funcName = val;
202
+ args = [key];
203
+ /** Function full notation { $funcName: ["colName", ...args] } */
203
204
  }
204
205
  else {
205
- if (!joinParse) {
206
- throw "Joins disallowed";
207
- }
208
- await joinParse(key, val, throwErr);
206
+ ({ funcName, args } = (0, exports.parseFunctionObject)(val));
209
207
  }
208
+ this.addFunction(funcName, args, key);
209
+ /* Join */
210
210
  }
211
- else
212
- throwErr();
213
- }));
214
- }
211
+ else {
212
+ if (!joinParse) {
213
+ throw "Joins disallowed";
214
+ }
215
+ const joinSelect = val;
216
+ const parsedJoin = (0, parseJoinSelect_1.parseJoinSelect)(joinSelect);
217
+ if (typeof parsedJoin === "string") {
218
+ throwErr(parsedJoin);
219
+ }
220
+ await joinParse(key, parsedJoin);
221
+ }
222
+ }
223
+ else
224
+ throwErr("Invalid select value");
225
+ }));
215
226
  }
216
- else {
217
- if ((0, prostgles_types_1.isEmpty)(userSelect)) {
218
- throw "Unexpected empty object select";
227
+ if (!joinParse)
228
+ return;
229
+ /**
230
+ * Is this still needed?!!!
231
+ * Add non selected columns
232
+ * This ensures all fields are available for orderBy in case of nested select
233
+ * */
234
+ Array.from(new Set([...this.allowedFields, ...this.allowedOrderByFields])).map((columnName) => {
235
+ if (!this.select.find((s) => s.alias === columnName && s.type === "column")) {
236
+ this.addColumn(columnName, false);
219
237
  }
220
- throw "Unexpected select -> " + JSON.stringify(userSelect);
221
- }
238
+ });
222
239
  };
240
+ parseUserSelect = (userSelect) => this.parse(userSelect);
241
+ parseUserSelectWithJoins = this.parse;
223
242
  }
224
243
  exports.SelectItemBuilder = SelectItemBuilder;
225
244
  //# sourceMappingURL=QueryBuilder.js.map