prostgles-server 3.0.86 → 3.0.88

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 (216) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.json +30 -0
  3. package/dist/DBEventsManager.js +1 -1
  4. package/dist/DBEventsManager.js.map +1 -1
  5. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  6. package/dist/DBSchemaBuilder.js +6 -6
  7. package/dist/DBSchemaBuilder.js.map +1 -1
  8. package/dist/DboBuilder/QueryBuilder/Functions.js +9 -9
  9. package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
  10. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  11. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
  12. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  13. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
  14. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
  15. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -1
  16. package/dist/DboBuilder/TableHandler.d.ts.map +1 -1
  17. package/dist/DboBuilder/TableHandler.js +18 -20
  18. package/dist/DboBuilder/TableHandler.js.map +1 -1
  19. package/dist/DboBuilder/ViewHandler.d.ts +0 -10
  20. package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
  21. package/dist/DboBuilder/ViewHandler.js +50 -63
  22. package/dist/DboBuilder/ViewHandler.js.map +1 -1
  23. package/dist/DboBuilder/delete.js +0 -1
  24. package/dist/DboBuilder/delete.js.map +1 -1
  25. package/dist/DboBuilder/getColumns.js +5 -4
  26. package/dist/DboBuilder/getColumns.js.map +1 -1
  27. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  28. package/dist/DboBuilder/getCondition.js +6 -6
  29. package/dist/DboBuilder/getCondition.js.map +1 -1
  30. package/dist/DboBuilder/insert.js +15 -16
  31. package/dist/DboBuilder/insert.js.map +1 -1
  32. package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
  33. package/dist/DboBuilder/insertDataParse.js +9 -10
  34. package/dist/DboBuilder/insertDataParse.js.map +1 -1
  35. package/dist/DboBuilder/parseUpdateRules.js +2 -2
  36. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  37. package/dist/DboBuilder/runSQL.d.ts.map +1 -1
  38. package/dist/DboBuilder/runSQL.js +5 -5
  39. package/dist/DboBuilder/runSQL.js.map +1 -1
  40. package/dist/DboBuilder/subscribe.js +3 -3
  41. package/dist/DboBuilder/subscribe.js.map +1 -1
  42. package/dist/DboBuilder/update.js +5 -6
  43. package/dist/DboBuilder/update.js.map +1 -1
  44. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  45. package/dist/DboBuilder/uploadFile.js +1 -1
  46. package/dist/DboBuilder/uploadFile.js.map +1 -1
  47. package/dist/DboBuilder.d.ts.map +1 -1
  48. package/dist/DboBuilder.js +13 -14
  49. package/dist/DboBuilder.js.map +1 -1
  50. package/dist/FileManager.d.ts.map +1 -1
  51. package/dist/FileManager.js +3 -5
  52. package/dist/FileManager.js.map +1 -1
  53. package/dist/Filtering.js +7 -7
  54. package/dist/Filtering.js.map +1 -1
  55. package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
  56. package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
  57. package/dist/JSONBValidation/validate_jsonb_schema_sql.js +295 -0
  58. package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -0
  59. package/dist/JSONBValidation/validation.d.ts +108 -0
  60. package/dist/JSONBValidation/validation.d.ts.map +1 -0
  61. package/dist/JSONBValidation/validation.js +222 -0
  62. package/dist/JSONBValidation/validation.js.map +1 -0
  63. package/dist/PostgresNotifListenManager.js +1 -1
  64. package/dist/PostgresNotifListenManager.js.map +1 -1
  65. package/dist/Prostgles.d.ts.map +1 -1
  66. package/dist/Prostgles.js +20 -20
  67. package/dist/Prostgles.js.map +1 -1
  68. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  69. package/dist/PubSubManager/PubSubManager.js +10 -8
  70. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  71. package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
  72. package/dist/PubSubManager/initPubSubManager.js +10 -7
  73. package/dist/PubSubManager/initPubSubManager.js.map +1 -1
  74. package/dist/PublishParser.d.ts.map +1 -1
  75. package/dist/PublishParser.js +122 -125
  76. package/dist/PublishParser.js.map +1 -1
  77. package/dist/SyncReplication.d.ts.map +1 -1
  78. package/dist/SyncReplication.js +19 -16
  79. package/dist/SyncReplication.js.map +1 -1
  80. package/dist/TableConfig.d.ts +9 -5
  81. package/dist/TableConfig.d.ts.map +1 -1
  82. package/dist/TableConfig.js +33 -12
  83. package/dist/TableConfig.js.map +1 -1
  84. package/dist/index.js +1 -1
  85. package/dist/index.js.map +1 -1
  86. package/dist/shortestPath.js +11 -11
  87. package/dist/shortestPath.js.map +1 -1
  88. package/dist/validation.d.ts +50 -24
  89. package/dist/validation.d.ts.map +1 -1
  90. package/dist/validation.js +177 -53
  91. package/dist/validation.js.map +1 -1
  92. package/lib/AuthHandler.d.ts +11 -11
  93. package/lib/AuthHandler.d.ts.map +1 -1
  94. package/lib/DBEventsManager.js +1 -1
  95. package/lib/DBEventsManager.ts +1 -1
  96. package/lib/DBSchemaBuilder.d.ts +3 -3
  97. package/lib/DBSchemaBuilder.d.ts.map +1 -1
  98. package/lib/DBSchemaBuilder.js +6 -6
  99. package/lib/DBSchemaBuilder.ts +10 -9
  100. package/lib/DboBuilder/QueryBuilder/Functions.d.ts +3 -3
  101. package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
  102. package/lib/DboBuilder/QueryBuilder/Functions.js +9 -9
  103. package/lib/DboBuilder/QueryBuilder/Functions.ts +13 -13
  104. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +3 -3
  105. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  106. package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
  107. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +12 -12
  108. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
  109. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
  110. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +5 -5
  111. package/lib/DboBuilder/TableHandler.d.ts +1 -1
  112. package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
  113. package/lib/DboBuilder/TableHandler.js +18 -20
  114. package/lib/DboBuilder/TableHandler.ts +21 -20
  115. package/lib/DboBuilder/ViewHandler.d.ts +1 -11
  116. package/lib/DboBuilder/ViewHandler.d.ts.map +1 -1
  117. package/lib/DboBuilder/ViewHandler.js +50 -63
  118. package/lib/DboBuilder/ViewHandler.ts +68 -97
  119. package/lib/DboBuilder/delete.js +0 -1
  120. package/lib/DboBuilder/delete.ts +1 -1
  121. package/lib/DboBuilder/getColumns.js +5 -4
  122. package/lib/DboBuilder/getColumns.ts +5 -5
  123. package/lib/DboBuilder/getCondition.d.ts.map +1 -1
  124. package/lib/DboBuilder/getCondition.js +6 -6
  125. package/lib/DboBuilder/getCondition.ts +7 -7
  126. package/lib/DboBuilder/insert.js +15 -16
  127. package/lib/DboBuilder/insert.ts +18 -18
  128. package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
  129. package/lib/DboBuilder/insertDataParse.js +9 -10
  130. package/lib/DboBuilder/insertDataParse.ts +42 -43
  131. package/lib/DboBuilder/parseUpdateRules.js +2 -2
  132. package/lib/DboBuilder/parseUpdateRules.ts +2 -2
  133. package/lib/DboBuilder/runSQL.d.ts.map +1 -1
  134. package/lib/DboBuilder/runSQL.js +5 -5
  135. package/lib/DboBuilder/runSQL.ts +6 -6
  136. package/lib/DboBuilder/subscribe.d.ts +1 -1
  137. package/lib/DboBuilder/subscribe.d.ts.map +1 -1
  138. package/lib/DboBuilder/subscribe.js +3 -3
  139. package/lib/DboBuilder/subscribe.ts +3 -3
  140. package/lib/DboBuilder/update.js +5 -6
  141. package/lib/DboBuilder/update.ts +6 -6
  142. package/lib/DboBuilder/uploadFile.d.ts.map +1 -1
  143. package/lib/DboBuilder/uploadFile.js +1 -1
  144. package/lib/DboBuilder/uploadFile.ts +2 -2
  145. package/lib/DboBuilder.d.ts +22 -22
  146. package/lib/DboBuilder.d.ts.map +1 -1
  147. package/lib/DboBuilder.js +13 -14
  148. package/lib/DboBuilder.ts +19 -19
  149. package/lib/FileManager.d.ts +6 -6
  150. package/lib/FileManager.d.ts.map +1 -1
  151. package/lib/FileManager.js +3 -5
  152. package/lib/FileManager.ts +7 -6
  153. package/lib/Filtering.d.ts +1 -1
  154. package/lib/Filtering.d.ts.map +1 -1
  155. package/lib/Filtering.js +7 -7
  156. package/lib/Filtering.ts +7 -7
  157. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
  158. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
  159. package/lib/JSONBValidation/validate_jsonb_schema_sql.js +294 -0
  160. package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +293 -0
  161. package/lib/JSONBValidation/validation.d.ts +108 -0
  162. package/lib/JSONBValidation/validation.d.ts.map +1 -0
  163. package/lib/JSONBValidation/validation.js +221 -0
  164. package/lib/JSONBValidation/validation.ts +332 -0
  165. package/lib/PostgresNotifListenManager.d.ts +1 -1
  166. package/lib/PostgresNotifListenManager.d.ts.map +1 -1
  167. package/lib/PostgresNotifListenManager.js +1 -1
  168. package/lib/PostgresNotifListenManager.ts +1 -1
  169. package/lib/Prostgles.d.ts +14 -14
  170. package/lib/Prostgles.d.ts.map +1 -1
  171. package/lib/Prostgles.js +20 -19
  172. package/lib/Prostgles.ts +22 -21
  173. package/lib/PubSubManager/PubSubManager.d.ts +7 -7
  174. package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
  175. package/lib/PubSubManager/PubSubManager.js +10 -8
  176. package/lib/PubSubManager/PubSubManager.ts +13 -8
  177. package/lib/PubSubManager/initPubSubManager.d.ts.map +1 -1
  178. package/lib/PubSubManager/initPubSubManager.js +10 -7
  179. package/lib/PubSubManager/initPubSubManager.ts +12 -7
  180. package/lib/PublishParser.d.ts +32 -32
  181. package/lib/PublishParser.d.ts.map +1 -1
  182. package/lib/PublishParser.js +121 -124
  183. package/lib/PublishParser.ts +125 -127
  184. package/lib/SchemaWatch.d.ts +1 -1
  185. package/lib/SchemaWatch.d.ts.map +1 -1
  186. package/lib/SyncReplication.d.ts +5 -5
  187. package/lib/SyncReplication.d.ts.map +1 -1
  188. package/lib/SyncReplication.js +19 -16
  189. package/lib/SyncReplication.ts +470 -471
  190. package/lib/TableConfig.d.ts +28 -24
  191. package/lib/TableConfig.d.ts.map +1 -1
  192. package/lib/TableConfig.js +33 -12
  193. package/lib/TableConfig.ts +55 -21
  194. package/lib/index.js +1 -1
  195. package/lib/index.ts +1 -1
  196. package/lib/shortestPath.d.ts +1 -1
  197. package/lib/shortestPath.d.ts.map +1 -1
  198. package/lib/shortestPath.js +11 -11
  199. package/lib/shortestPath.ts +11 -11
  200. package/package.json +10 -6
  201. package/tests/client/PID.txt +1 -1
  202. package/tests/client/package-lock.json +53 -31
  203. package/tests/client/package.json +4 -1
  204. package/tests/isomorphic_queries.d.ts.map +1 -1
  205. package/tests/isomorphic_queries.js +28 -26
  206. package/tests/isomorphic_queries.ts +30 -29
  207. package/tests/server/DBoGenerated.d.ts +1 -1
  208. package/tests/server/index.js +8 -7
  209. package/tests/server/index.ts +10 -8
  210. package/tests/server/package-lock.json +76 -58
  211. package/tests/server/package.json +2 -2
  212. package/tests/server/server.ts +2 -3
  213. package/lib/validation.d.ts +0 -100
  214. package/lib/validation.d.ts.map +0 -1
  215. package/lib/validation.js +0 -280
  216. package/lib/validation.ts +0 -360
@@ -2,7 +2,7 @@ import { makeSelectQuery } from "../DboBuilder/QueryBuilder/makeSelectQuery";
2
2
  import { getCondition } from "./getCondition";
3
3
 
4
4
  import * as pgPromise from 'pg-promise';
5
- import { canRunSQL, runSQL } from "../DboBuilder/runSQL";
5
+ import { canRunSQL } from "../DboBuilder/runSQL";
6
6
  import {
7
7
  ColumnInfo, FieldFilter, SelectParams,
8
8
  OrderBy,
@@ -21,9 +21,9 @@ import {
21
21
  } from "../DboBuilder";
22
22
  import { Graph } from "../shortestPath";
23
23
  import { TableRule, UpdateRule, ValidateRow } from "../PublishParser";
24
- import { asValue, omitKeys } from "../PubSubManager/PubSubManager";
24
+ import { asValue } from "../PubSubManager/PubSubManager";
25
25
  import { TableHandler } from "./TableHandler";
26
- import { asNameAlias, getNewQuery, parseFunctionObject, SelectItem, SelectItemValidated } from "./QueryBuilder/QueryBuilder";
26
+ import { asNameAlias, getNewQuery, SelectItem, SelectItemValidated } from "./QueryBuilder/QueryBuilder";
27
27
  import { COMPUTED_FIELDS, FieldSpec } from "./QueryBuilder/Functions";
28
28
  import { getColumns } from "./getColumns";
29
29
  import { LocalFunc, subscribe } from "./subscribe";
@@ -67,7 +67,7 @@ class ColSet {
67
67
  /**
68
68
  * Add conversion functions for PostGIS data
69
69
  */
70
- let escapedVal: string = "";
70
+ let escapedVal = "";
71
71
  if (["geometry", "geography"].includes(col.udt_name) && row[key] && isPlainObject(row[key])) {
72
72
 
73
73
  const basicFunc = (args: any[]) => {
@@ -159,11 +159,11 @@ export class ViewHandler {
159
159
  t?: pgPromise.ITask<{}>;
160
160
  dbTX?: TableHandlers;
161
161
 
162
- is_view: boolean = true;
163
- filterDef: string = "";
162
+ is_view = true;
163
+ filterDef = "";
164
164
 
165
165
  // pubSubManager: PubSubManager;
166
- is_media: boolean = false;
166
+ is_media = false;
167
167
  constructor(db: DB, tableOrViewInfo: TableSchema, dboBuilder: DboBuilder, t?: pgPromise.ITask<{}>, dbTX?: TableHandlers, joinPaths?: JoinPaths) {
168
168
  if (!db || !tableOrViewInfo) throw "";
169
169
 
@@ -189,7 +189,7 @@ export class ViewHandler {
189
189
  // and also make hot schema reload over ws
190
190
  this.colSet = new ColSet(this.columns, this.name);
191
191
 
192
- const { $and: $and_key, $or: $or_key } = this.dboBuilder.prostgles.keywords;
192
+ // const { $and: $and_key, $or: $or_key } = this.dboBuilder.prostgles.keywords;
193
193
 
194
194
  // this.tsDataName = snakify(this.name, true);
195
195
  // if(this.tsDataName === "T") this.tsDataName = this.tsDataName + "_";
@@ -297,7 +297,7 @@ export class ViewHandler {
297
297
  return true;
298
298
  }
299
299
 
300
- getShortestJoin(table1: string, table2: string, startAlias: number, isInner: boolean = false): { query: string, toOne: boolean } {
300
+ getShortestJoin(table1: string, table2: string, startAlias: number, isInner = false): { query: string, toOne: boolean } {
301
301
  // let searchedTables = [], result;
302
302
  // while (!result && searchedTables.length <= this.joins.length * 2){
303
303
 
@@ -307,8 +307,8 @@ export class ViewHandler {
307
307
  return on.map(cond => Object.keys(cond).map(lKey => `${leftTable}.${lKey} = ${rightTable}.${cond[lKey]}`).join("\nAND ")).join(" OR ")
308
308
  }
309
309
 
310
- let toOne = true,
311
- query = this.joins.map(({ tables, on, type }, i) => {
310
+ let toOne = true;
311
+ const query = this.joins.map(({ tables, on, type }, i) => {
312
312
  if (type.split("-")[1] === "many") {
313
313
  toOne = false;
314
314
  }
@@ -375,10 +375,10 @@ export class ViewHandler {
375
375
  const jo = this.joins.find(j => j.tables.includes(t1) && j.tables.includes(t2));
376
376
  if (!jo) throw `Joining ${t1} <-> ${t2} dissallowed or missing`;;
377
377
 
378
- let on: [string, string][][] = [];
378
+ const on: [string, string][][] = [];
379
379
 
380
380
  jo.on.map(cond => {
381
- let condArr: [string, string][] = [];
381
+ const condArr: [string, string][] = [];
382
382
  Object.keys(cond).map(leftKey => {
383
383
  const rightKey = cond[leftKey];
384
384
 
@@ -403,7 +403,7 @@ export class ViewHandler {
403
403
  on
404
404
  };
405
405
  });
406
- let expectOne = false;
406
+ const expectOne = false;
407
407
  // paths.map(({ source, target, on }, i) => {
408
408
  // if(expectOne && on.length === 1){
409
409
  // const sourceCol = on[0][1];
@@ -508,7 +508,7 @@ export class ViewHandler {
508
508
 
509
509
  if (tableRules) {
510
510
  if (isEmpty(tableRules)) throw "INTERNAL ERROR: Unexpected case -> Empty table rules for " + this.name;
511
- const throwFieldsErr = (command: "select" | "update" | "delete" | "insert", fieldType: string = "fields") => {
511
+ const throwFieldsErr = (command: "select" | "update" | "delete" | "insert", fieldType = "fields") => {
512
512
  throw `Invalid publish.${this.name}.${command} rule -> ${fieldType} setting is missing.\nPlease specify allowed ${fieldType} in this format: "*" | { col_name: false } | { col1: true, col2: true }`;
513
513
  },
514
514
  getFirstSpecified = (...fieldParams: (FieldFilter | undefined)[]): string[] => {
@@ -516,7 +516,7 @@ export class ViewHandler {
516
516
  return this.parseFieldFilter(firstValid)
517
517
  };
518
518
 
519
- let res: ValidatedTableRules = {
519
+ const res: ValidatedTableRules = {
520
520
  allColumns,
521
521
  getColumns: tableRules?.getColumns ?? true,
522
522
  getInfo: tableRules?.getColumns ?? true,
@@ -639,25 +639,18 @@ export class ViewHandler {
639
639
  }
640
640
 
641
641
  /* Validate publish */
642
- if (tableRules) {
643
-
644
- let fields: FieldFilter,
645
- filterFields: FieldFilter | undefined,
646
- forcedFilter: AnyObject | undefined,
647
- maxLimit: number | undefined | null;
642
+ if (tableRules) {
648
643
 
649
644
  if (!tableRules.select) throw "select rules missing for " + this.name;
650
- fields = tableRules.select.fields;
651
- forcedFilter = tableRules.select.forcedFilter;
652
- filterFields = tableRules.select.filterFields;
653
- maxLimit = tableRules.select.maxLimit;
645
+ const fields = tableRules.select.fields;
646
+ const maxLimit = tableRules.select.maxLimit;
654
647
 
655
648
  if (<any>tableRules.select !== "*" && typeof tableRules.select !== "boolean" && !isPlainObject(tableRules.select)) throw `\nINVALID publish.${this.name}.select\nExpecting any of: "*" | { fields: "*" } | true | false`
656
649
  if (!fields) throw ` invalid ${this.name}.select rule -> fields (required) setting missing.\nExpecting any of: "*" | { col_name: false } | { col1: true, col2: true }`;
657
650
  if (maxLimit && !Number.isInteger(maxLimit)) throw ` invalid publish.${this.name}.select.maxLimit -> expecting integer but got ` + maxLimit;
658
651
  }
659
652
 
660
- let q = await getNewQuery(this as unknown as TableHandler, filter, selectParams, param3_unused, tableRules, localParams, this.columns),
653
+ const q = await getNewQuery(this as unknown as TableHandler, filter, selectParams, param3_unused, tableRules, localParams, this.columns),
661
654
  _query = makeSelectQuery(this as unknown as TableHandler, q, undefined, undefined, selectParams);
662
655
  // console.log(_query, JSON.stringify(q, null, 2))
663
656
  if (testRule) {
@@ -731,7 +724,7 @@ export class ViewHandler {
731
724
  Promise<string | { unsubscribe: () => any }> {
732
725
 
733
726
  //@ts-ignore
734
- let func = localParams? undefined : (rows: AnyObject[]) => localFunc(rows[0]);
727
+ const func = localParams? undefined : (rows: AnyObject[]) => localFunc(rows[0]);
735
728
  //@ts-ignore
736
729
  return this.subscribe(filter, { ...params, limit: 2 }, func, table_rules, localParams);
737
730
  }
@@ -740,10 +733,10 @@ export class ViewHandler {
740
733
  filter = filter || {};
741
734
  try {
742
735
  return await this.find(filter, { select: "", limit: 0 }, undefined, table_rules, localParams)
743
- .then(async allowed => {
736
+ .then(async _allowed => {
744
737
  const { filterFields, forcedFilter } = table_rules?.select || {};
745
738
  const where = (await this.prepareWhere({ filter, forcedFilter, filterFields, addKeywords: true, localParams, tableRule: table_rules })).where;
746
- let query = "SELECT COUNT(*) FROM " + this.escapedName + " " + where;
739
+ const query = "SELECT COUNT(*) FROM " + this.escapedName + " " + where;
747
740
  return (this.t || this.db).one(query, { _psqlWS_tableName: this.name }).then(({ count }) => +count);
748
741
  });
749
742
  } catch (e) {
@@ -782,9 +775,9 @@ export class ViewHandler {
782
775
  }
783
776
  }
784
777
 
785
- getAllowedSelectFields(selectParams: FieldFilter = "*", allowed_cols: FieldFilter, allow_empty: boolean = true): string[] {
786
- let all_columns = this.column_names.slice(0),
787
- allowedFields = all_columns.slice(0),
778
+ getAllowedSelectFields(selectParams: FieldFilter = "*", allowed_cols: FieldFilter, allow_empty = true): string[] {
779
+ const all_columns = this.column_names.slice(0);
780
+ let allowedFields = all_columns.slice(0),
788
781
  resultFields: string[] = [];
789
782
 
790
783
  if (selectParams) {
@@ -801,42 +794,25 @@ export class ViewHandler {
801
794
  return col_names;
802
795
  }
803
796
 
804
- prepareColumnSet(selectParams: FieldFilter = "*", allowed_cols: FieldFilter, allow_empty: boolean = true, onlyNames: boolean = true): string | pgPromise.ColumnSet {
805
- let all_columns = this.column_names.slice(0);
797
+ prepareColumnSet(selectParams: FieldFilter = "*", allowed_cols: FieldFilter, allow_empty = true, onlyNames = true): string | pgPromise.ColumnSet {
798
+ const all_columns = this.column_names.slice(0);
806
799
  let col_names = this.getAllowedSelectFields(selectParams, all_columns, allow_empty);
807
800
  /** Ensure order is maintained */
808
801
  if (selectParams && Array.isArray(selectParams) && typeof selectParams[0] === "string") {
809
802
  col_names = col_names.sort((a, b) => selectParams.indexOf(a) - selectParams.indexOf(b))
810
- }
811
- try {
812
- let colSet = new pgp.helpers.ColumnSet(col_names);
813
- return onlyNames ? colSet.names : colSet;
814
- } catch (e) {
815
- throw e;
816
- }
803
+ }
804
+ const colSet = new pgp.helpers.ColumnSet(col_names);
805
+ return onlyNames ? colSet.names : colSet;
817
806
  }
818
807
 
819
- prepareSelect(selectParams: FieldFilter = "*", allowed_cols: FieldFilter, allow_empty: boolean = true, tableAlias?: string): string {
808
+ prepareSelect(selectParams: FieldFilter = "*", allowed_cols: FieldFilter, allow_empty = true, tableAlias?: string): string {
820
809
  if (tableAlias) {
821
- let cs = <pgPromise.ColumnSet>this.prepareColumnSet(selectParams, allowed_cols, true, false);
810
+ const cs = <pgPromise.ColumnSet>this.prepareColumnSet(selectParams, allowed_cols, true, false);
822
811
  return cs.columns.map(col => `${this.escapedName}.${asName(col.name)}`).join(", ");
823
812
  } else {
824
813
  return <string>this.prepareColumnSet(selectParams, allowed_cols, true, true);
825
814
  }
826
- }
827
-
828
- async prepareHaving(params: {
829
- having: Filter;
830
- select: SelectItem[];
831
- forcedFilter: object;
832
- filterFields: FieldFilter;
833
- addKeywords?: boolean;
834
- tableAlias?: string,
835
- localParams: LocalParams,
836
- tableRule: TableRule
837
- }): Promise<string> {
838
- return ""
839
- }
815
+ }
840
816
 
841
817
  /**
842
818
  * Parses group or simple filter
@@ -861,7 +837,7 @@ export class ViewHandler {
861
837
  const parseFullFilter = async (f: any, parentFilter: any = null, isForcedFilterBypass: boolean): Promise<string> => {
862
838
  if (!f) throw "Invalid/missing group filter provided";
863
839
  let result = "";
864
- let keys = getKeys(f);
840
+ const keys = getKeys(f);
865
841
  if (!keys.length) return result;
866
842
  if ((keys.includes($and_key) || keys.includes($or_key))) {
867
843
  if (keys.length > 1) throw `\ngroup filter must contain only one array property. e.g.: { ${$and_key}: [...] } OR { ${$or_key}: [...] } `;
@@ -873,7 +849,7 @@ export class ViewHandler {
873
849
 
874
850
  if (group && group.length) {
875
851
  const operand = $and ? " AND " : " OR ";
876
- let conditions = (await Promise.all(group.map(async gf => await parseFullFilter(gf, group, isForcedFilterBypass)))).filter(c => c);
852
+ const conditions = (await Promise.all(group.map(async gf => await parseFullFilter(gf, group, isForcedFilterBypass)))).filter(c => c);
877
853
  if (conditions && conditions.length) {
878
854
  if (conditions.length === 1) return conditions.join(operand);
879
855
  else return ` ( ${conditions.sort().join(operand)} ) `;
@@ -916,8 +892,8 @@ export class ViewHandler {
916
892
  const thisTable = this.name;
917
893
  const isNotExists = ["$notExists", "$notExistsJoined"].includes(eConfig.existType);
918
894
 
919
- let { f2, tables, isJoined } = eConfig;
920
- let t2 = tables[tables.length - 1];
895
+ const { f2, tables, isJoined } = eConfig;
896
+ const t2 = tables[tables.length - 1];
921
897
 
922
898
  tables.forEach(t => {
923
899
  if (!this.dboBuilder.dbo[t]) throw { stack: ["prepareExistCondition()"], message: `Invalid or dissallowed table: ${t}` };
@@ -934,7 +910,7 @@ export class ViewHandler {
934
910
  let joinPaths: JoinInfo["paths"] = [];
935
911
  let expectOne = true;
936
912
  tables.map((t2, depth) => {
937
- let t1 = depth ? tables[depth - 1] : thisTable;
913
+ const t1 = depth ? tables[depth - 1] : thisTable;
938
914
  let exactPaths: string[] | undefined = [t1, t2];
939
915
 
940
916
  if (!depth && eConfig.shortestJoin) exactPaths = undefined;
@@ -943,7 +919,7 @@ export class ViewHandler {
943
919
  joinPaths = joinPaths.concat(jinf.paths);
944
920
  });
945
921
 
946
- let r = makeJoin({ paths: joinPaths, expectOne }, 0);
922
+ const r = makeJoin({ paths: joinPaths, expectOne }, 0);
947
923
  return r;
948
924
 
949
925
  function makeJoin(joinInfo: JoinInfo, ji: number) {
@@ -951,11 +927,11 @@ export class ViewHandler {
951
927
  const jp = paths[ji];
952
928
 
953
929
  // let prevTable = ji? paths[ji - 1].table : jp.source;
954
- let table = paths[ji].table;
955
- let tableAlias = asName(ji < paths.length - 1 ? `jd${ji}` : table);
956
- let prevTableAlias = asName(ji ? `jd${ji - 1}` : thisTable);
930
+ const table = paths[ji].table;
931
+ const tableAlias = asName(ji < paths.length - 1 ? `jd${ji}` : table);
932
+ const prevTableAlias = asName(ji ? `jd${ji - 1}` : thisTable);
957
933
 
958
- let cond = `${jp.on.map(c => {
934
+ const cond = `${jp.on.map(c => {
959
935
  return c.map(([c1, c2]) => `${prevTableAlias}.${asName(c1)} = ${tableAlias}.${asName(c2)}`).join(" AND ")
960
936
  }).join("\n OR ")
961
937
  }`;
@@ -978,7 +954,7 @@ export class ViewHandler {
978
954
 
979
955
  j = indent(j, ji + 1);
980
956
 
981
- let res = `${isNotExists ? " NOT " : " "} EXISTS ( \n` +
957
+ const res = `${isNotExists ? " NOT " : " "} EXISTS ( \n` +
982
958
  j +
983
959
  `) \n`;
984
960
  return indent(res, ji);
@@ -1002,20 +978,15 @@ export class ViewHandler {
1002
978
  ({ forcedFilter, filterFields } = t2Rules.select);
1003
979
  }
1004
980
 
1005
- try {
1006
- finalWhere = (await (this.dboBuilder.dbo[t2] as TableHandler).prepareWhere({
1007
- filter: f2,
1008
- forcedFilter,
1009
- filterFields,
1010
- addKeywords: false,
1011
- tableAlias,
1012
- localParams,
1013
- tableRule: t2Rules
1014
- })).where
1015
- } catch (err) {
1016
- // console.trace(err)
1017
- throw err
1018
- }
981
+ finalWhere = (await (this.dboBuilder.dbo[t2] as TableHandler).prepareWhere({
982
+ filter: f2,
983
+ forcedFilter,
984
+ filterFields,
985
+ addKeywords: false,
986
+ tableAlias,
987
+ localParams,
988
+ tableRule: t2Rules
989
+ })).where
1019
990
 
1020
991
  if (!isJoined) {
1021
992
  res = `${isNotExists ? " NOT " : " "} EXISTS (SELECT 1 \nFROM ${asName(t2)} \n${finalWhere ? `WHERE ${finalWhere}` : ""}) `
@@ -1085,7 +1056,7 @@ export class ViewHandler {
1085
1056
  } else if (Array.isArray(orderBy)) {
1086
1057
 
1087
1058
  /* Order by is formed of a list of ascending field names */
1088
- let _orderBy = (orderBy as any[]);
1059
+ const _orderBy = (orderBy as any[]);
1089
1060
  if (_orderBy && !_orderBy.find(v => typeof v !== "string")) {
1090
1061
  /* [string] */
1091
1062
  _ob = _orderBy.map(key => ({ key, asc: true }));
@@ -1101,7 +1072,7 @@ export class ViewHandler {
1101
1072
  (!s.fields.length || s.fields.every(f => allowed_cols.includes(f)))
1102
1073
  ).map(s => s.alias)
1103
1074
 
1104
- let bad_param = _ob.find(({ key }) =>
1075
+ const bad_param = _ob.find(({ key }) =>
1105
1076
  !(validatedAggAliases || []).includes(key) &&
1106
1077
  !allowed_cols.includes(key)
1107
1078
  );
@@ -1178,7 +1149,7 @@ export class ViewHandler {
1178
1149
  }
1179
1150
 
1180
1151
 
1181
- intersectColumns(allowedFields: FieldFilter, dissallowedFields: FieldFilter, fixIssues: boolean = false): string[] {
1152
+ intersectColumns(allowedFields: FieldFilter, dissallowedFields: FieldFilter, fixIssues = false): string[] {
1182
1153
  let result: string[] = [];
1183
1154
  if (allowedFields) {
1184
1155
  result = this.parseFieldFilter(allowedFields);
@@ -1206,16 +1177,16 @@ export class ViewHandler {
1206
1177
  * @param {string[]} allowed_cols - allowed columns (excluding forcedData) from table rules
1207
1178
  */
1208
1179
  prepareFieldValues(obj: Record<string, any> = {}, forcedData: object = {}, allowed_cols: FieldFilter | undefined, fixIssues = false): AnyObject {
1209
- let column_names = this.column_names.slice(0);
1180
+ const column_names = this.column_names.slice(0);
1210
1181
  if (!column_names || !column_names.length) throw "table column_names mising";
1211
1182
  let _allowed_cols = column_names.slice(0);
1212
- let _obj = { ...obj };
1183
+ const _obj = { ...obj };
1213
1184
 
1214
1185
  if (allowed_cols) {
1215
1186
  _allowed_cols = this.parseFieldFilter(allowed_cols, false);
1216
1187
  }
1217
- let final_filter = { ..._obj },
1218
- filter_keys: Array<keyof typeof final_filter> = Object.keys(final_filter);
1188
+ let final_filter = { ..._obj };
1189
+ const filter_keys: Array<keyof typeof final_filter> = Object.keys(final_filter);
1219
1190
 
1220
1191
  if (fixIssues && filter_keys.length) {
1221
1192
  final_filter = {};
@@ -1240,7 +1211,7 @@ export class ViewHandler {
1240
1211
  }
1241
1212
 
1242
1213
 
1243
- parseFieldFilter(fieldParams: FieldFilter = "*", allow_empty: boolean = true, allowed_cols?: string[]): string[] {
1214
+ parseFieldFilter(fieldParams: FieldFilter = "*", allow_empty = true, allowed_cols?: string[]): string[] {
1244
1215
  return ViewHandler._parseFieldFilter(fieldParams, allow_empty, allowed_cols || this.column_names.slice(0))
1245
1216
  }
1246
1217
 
@@ -1249,11 +1220,11 @@ export class ViewHandler {
1249
1220
  * @param {FieldFilter} fieldParams - { col1: 0, col2: 0 } | { col1: true, col2: true } | "*" | ["key1", "key2"] | []
1250
1221
  * @param {boolean} allow_empty - allow empty select. defaults to true
1251
1222
  */
1252
- static _parseFieldFilter<AllowedKeys extends string[]>(fieldParams: FieldFilter<Record<AllowedKeys[number], any>> = "*", allow_empty: boolean = true, all_cols: AllowedKeys): AllowedKeys | [""] {
1223
+ static _parseFieldFilter<AllowedKeys extends string[]>(fieldParams: FieldFilter<Record<AllowedKeys[number], any>> = "*", allow_empty = true, all_cols: AllowedKeys): AllowedKeys | [""] {
1253
1224
  if (!all_cols) throw "all_cols missing"
1254
1225
  const all_fields = all_cols;// || this.column_names.slice(0);
1255
- let colNames: AllowedKeys = [] as any,
1256
- initialParams = JSON.stringify(fieldParams);
1226
+ let colNames: AllowedKeys = [] as any;
1227
+ const initialParams = JSON.stringify(fieldParams);
1257
1228
 
1258
1229
  if (fieldParams) {
1259
1230
 
@@ -1298,7 +1269,7 @@ export class ViewHandler {
1298
1269
  return [] as unknown as typeof all_fields; //all_fields.slice(0) as typeof all_fields;
1299
1270
  }
1300
1271
 
1301
- let keys = getKeys(fieldParams as {
1272
+ const keys = getKeys(fieldParams as {
1302
1273
  [key: string]: boolean | 0 | 1;
1303
1274
  }) as AllowedKeys;
1304
1275
  if (keys[0] === "") {
@@ -1316,7 +1287,7 @@ export class ViewHandler {
1316
1287
  if (!allowedVals.includes((fieldParams as any)[key])) throw `Invalid field selection value for: { ${key}: ${(fieldParams as any)[key]} }. \n Allowed values: ${allowedVals.join(" OR ")}`
1317
1288
  })
1318
1289
 
1319
- let allowed = keys.filter(key => (fieldParams as any)[key]),
1290
+ const allowed = keys.filter(key => (fieldParams as any)[key]),
1320
1291
  disallowed = keys.filter(key => !(fieldParams as any)[key]);
1321
1292
 
1322
1293
 
@@ -1335,7 +1306,7 @@ export class ViewHandler {
1335
1306
  return colNames as any;
1336
1307
 
1337
1308
  function validate(cols: AllowedKeys) {
1338
- let bad_keys = cols.filter(col => !all_fields.includes(col));
1309
+ const bad_keys = cols.filter(col => !all_fields.includes(col));
1339
1310
  if (bad_keys && bad_keys.length) {
1340
1311
  throw "\nUnrecognised or illegal fields: " + bad_keys.join(", ");
1341
1312
  }
@@ -122,4 +122,3 @@ async function _delete(filter, params, param3_unused, table_rules, localParams)
122
122
  }
123
123
  }
124
124
  exports._delete = _delete;
125
- ;
@@ -130,4 +130,4 @@ export async function _delete(this: TableHandler, filter?: Filter, params?: Dele
130
130
  if (localParams && localParams.testRule) throw e;
131
131
  throw parseError(e, `dbo.${this.name}.delete(${JSON.stringify(filter || {}, null, 2)}, ${JSON.stringify(params || {}, null, 2)})`);
132
132
  }
133
- };
133
+ }
@@ -38,9 +38,10 @@ async function getColumns(lang, params, _param3, tableRules, localParams) {
38
38
  ].includes(c.name);
39
39
  })
40
40
  .map(_c => {
41
- let c = { ..._c };
42
- let label = c.comment || capitalizeFirstLetter(c.name, " ");
43
- let select = c.privileges.some(p => p.privilege_type === "SELECT"), insert = c.privileges.some(p => p.privilege_type === "INSERT"), update = c.privileges.some(p => p.privilege_type === "UPDATE"), _delete = this.tableOrViewInfo.privileges.delete; // c.privileges.some(p => p.privilege_type === "DELETE");
41
+ const c = { ..._c };
42
+ const label = c.comment || capitalizeFirstLetter(c.name, " ");
43
+ const select = c.privileges.some(p => p.privilege_type === "SELECT"), insert = c.privileges.some(p => p.privilege_type === "INSERT"), _delete = this.tableOrViewInfo.privileges.delete; // c.privileges.some(p => p.privilege_type === "DELETE");
44
+ let update = c.privileges.some(p => p.privilege_type === "UPDATE");
44
45
  delete c.privileges;
45
46
  const prostgles = this.dboBuilder?.prostgles;
46
47
  const fileConfig = prostgles.fileManager?.getColInfo({ colName: c.name, tableName: this.name });
@@ -49,7 +50,7 @@ async function getColumns(lang, params, _param3, tableRules, localParams) {
49
50
  update = false;
50
51
  }
51
52
  const nonOrderableUD_Types = [...prostgles_types_1._PG_geometric, "xml"];
52
- let result = {
53
+ const result = {
53
54
  ...c,
54
55
  label,
55
56
  tsDataType: (0, DboBuilder_1.postgresToTsType)(c.udt_name),
@@ -58,14 +58,14 @@ export async function getColumns(
58
58
  ].includes(c.name)
59
59
  })
60
60
  .map(_c => {
61
- let c = { ..._c };
61
+ const c = { ..._c };
62
62
 
63
- let label = c.comment || capitalizeFirstLetter(c.name, " ");
63
+ const label = c.comment || capitalizeFirstLetter(c.name, " ");
64
64
 
65
- let select = c.privileges.some(p => p.privilege_type === "SELECT"),
65
+ const select = c.privileges.some(p => p.privilege_type === "SELECT"),
66
66
  insert = c.privileges.some(p => p.privilege_type === "INSERT"),
67
- update = c.privileges.some(p => p.privilege_type === "UPDATE"),
68
67
  _delete = this.tableOrViewInfo.privileges.delete;// c.privileges.some(p => p.privilege_type === "DELETE");
68
+ let update = c.privileges.some(p => p.privilege_type === "UPDATE");
69
69
 
70
70
  delete (c as any).privileges;
71
71
 
@@ -79,7 +79,7 @@ export async function getColumns(
79
79
 
80
80
  const nonOrderableUD_Types: PG_COLUMN_UDT_DATA_TYPE[] = [..._PG_geometric, "xml" as any];
81
81
 
82
- let result: ValidatedColumnInfo = {
82
+ const result: ValidatedColumnInfo = {
83
83
  ...c,
84
84
  label,
85
85
  tsDataType: postgresToTsType(c.udt_name),
@@ -1 +1 @@
1
- {"version":3,"file":"getCondition.d.ts","sourceRoot":"","sources":["getCondition.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAA6B,MAAM,eAAe,CAAC;AAC3F,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAoC,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM1C;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE,mBAsQvM"}
1
+ {"version":3,"file":"getCondition.d.ts","sourceRoot":"","sources":["getCondition.ts"],"names":[],"mappings":"AACA,OAAO,EAAsB,WAAW,EAAO,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAG7C,OAAO,EAAoC,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAM1C;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IAAC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,WAAW,CAAC;IAAC,UAAU,CAAC,EAAE,SAAS,CAAA;CAAE,mBAsQvM"}
@@ -16,11 +16,11 @@ const FILTER_FUNCS = Functions_1.FUNCTIONS.filter(f => f.canBeUsedForFilter);
16
16
  */
17
17
  async function getCondition(params) {
18
18
  const { filter: rawFilter, select, allowed_colnames, tableAlias, localParams, tableRules } = params;
19
- let filter = { ...rawFilter };
19
+ const filter = { ...rawFilter };
20
20
  /* Exists join filter */
21
21
  const ERR = "Invalid exists filter. \nExpecting somethibng like: \n | { $exists: { tableName.tableName2: Filter } } \n | { $exists: { \"**.tableName3\": Filter } }\n | { path: string[]; filter: AnyObject }";
22
22
  const SP_WILDCARD = "**";
23
- let existsKeys = (0, prostgles_types_1.getKeys)(filter)
23
+ const existsKeys = (0, prostgles_types_1.getKeys)(filter)
24
24
  .filter(k => prostgles_types_1.EXISTS_KEYS.includes(k) && Object.keys(filter[k] ?? {}).length)
25
25
  .map(key => {
26
26
  const isJoined = key.toLowerCase().includes("join");
@@ -38,7 +38,7 @@ async function getCondition(params) {
38
38
  */
39
39
  const firstKeyIsATable = !!this.dboBuilder.dbo[firstKey];
40
40
  let tables = isDetailed ? filterValue.path : (firstKeyIsATable ? [firstKey] : firstKey.split("."));
41
- let f2 = isDetailed ? filterValue.filter : filterValue[firstKey];
41
+ const f2 = isDetailed ? filterValue.filter : filterValue[firstKey];
42
42
  let shortestJoin = false;
43
43
  if (!isJoined) {
44
44
  if (tables.length !== 1)
@@ -74,7 +74,7 @@ async function getCondition(params) {
74
74
  // });
75
75
  // }
76
76
  // });
77
- let funcConds = [];
77
+ const funcConds = [];
78
78
  const funcFilter = FILTER_FUNCS.filter(f => f.name in filter);
79
79
  funcFilter.map(f => {
80
80
  const funcArgs = filter[f.name];
@@ -95,7 +95,7 @@ async function getCondition(params) {
95
95
  /* Computed field queries */
96
96
  const p = this.getValidatedRules(tableRules, localParams);
97
97
  const computedFields = p.allColumns.filter(c => c.type === "computed");
98
- let computedColConditions = [];
98
+ const computedColConditions = [];
99
99
  Object.keys(filter || {}).map(key => {
100
100
  const compCol = computedFields.find(cf => cf.name === key);
101
101
  if (compCol) {
@@ -196,7 +196,7 @@ async function getCondition(params) {
196
196
  { $joinFilter: { $ST_DWithin: [table.col, foreignTable.col, distance] }
197
197
  will make an exists filter
198
198
  */
199
- let filterKeys = Object.keys(filter).filter(k => k !== complexFilterKey && !funcFilter.find(ek => ek.name === k) && !computedFields.find(cf => cf.name === k) && !existsKeys.find(ek => ek.key === k));
199
+ const filterKeys = Object.keys(filter).filter(k => k !== complexFilterKey && !funcFilter.find(ek => ek.name === k) && !computedFields.find(cf => cf.name === k) && !existsKeys.find(ek => ek.key === k));
200
200
  // if(allowed_colnames){
201
201
  // const aliasedColumns = (select || []).filter(s =>
202
202
  // ["function", "computed", "column"].includes(s.type) && allowed_colnames.includes(s.alias) ||
@@ -1,5 +1,5 @@
1
1
  import { AnyObject, EXISTS_KEY, EXISTS_KEYS, getKeys, isObject, pickKeys } from "prostgles-types";
2
- import { ExistsFilterConfig, LocalParams, makeErrorFromPGError, pgp } from "../DboBuilder";
2
+ import { ExistsFilterConfig, LocalParams, pgp } from "../DboBuilder";
3
3
  import { TableRule } from "../PublishParser";
4
4
  import { asValue } from "../PubSubManager/PubSubManager";
5
5
  import { FUNCTIONS, parseFunction } from "./QueryBuilder/Functions";
@@ -20,12 +20,12 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
20
20
  const { filter: rawFilter, select, allowed_colnames, tableAlias, localParams, tableRules } = params;
21
21
 
22
22
 
23
- let filter = { ... (rawFilter as any) } as any;
23
+ const filter = { ... (rawFilter as any) } as any;
24
24
 
25
25
  /* Exists join filter */
26
26
  const ERR = "Invalid exists filter. \nExpecting somethibng like: \n | { $exists: { tableName.tableName2: Filter } } \n | { $exists: { \"**.tableName3\": Filter } }\n | { path: string[]; filter: AnyObject }"
27
27
  const SP_WILDCARD = "**";
28
- let existsKeys: ExistsFilterConfig[] = getKeys(filter)
28
+ const existsKeys: ExistsFilterConfig[] = getKeys(filter)
29
29
  .filter(k => EXISTS_KEYS.includes(k as EXISTS_KEY) && Object.keys(filter[k] ?? {}).length)
30
30
  .map(key => {
31
31
 
@@ -47,7 +47,7 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
47
47
  */
48
48
  const firstKeyIsATable = !!this.dboBuilder.dbo[firstKey];
49
49
  let tables = isDetailed? filterValue.path : (firstKeyIsATable? [firstKey] : firstKey.split("."));
50
- let f2 = isDetailed? filterValue.filter : filterValue[firstKey];
50
+ const f2 = isDetailed? filterValue.filter : filterValue[firstKey];
51
51
  let shortestJoin = false;
52
52
 
53
53
  if (!isJoined) {
@@ -86,7 +86,7 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
86
86
  // }
87
87
  // });
88
88
 
89
- let funcConds: string[] = [];
89
+ const funcConds: string[] = [];
90
90
  const funcFilter = FILTER_FUNCS.filter(f => f.name in filter);
91
91
 
92
92
  funcFilter.map(f => {
@@ -112,7 +112,7 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
112
112
  /* Computed field queries */
113
113
  const p = this.getValidatedRules(tableRules, localParams);
114
114
  const computedFields = p.allColumns.filter(c => c.type === "computed");
115
- let computedColConditions: string[] = [];
115
+ const computedColConditions: string[] = [];
116
116
  Object.keys(filter || {}).map(key => {
117
117
  const compCol = computedFields.find(cf => cf.name === key);
118
118
  if (compCol) {
@@ -231,7 +231,7 @@ const FILTER_FUNCS = FUNCTIONS.filter(f => f.canBeUsedForFilter);
231
231
  will make an exists filter
232
232
  */
233
233
 
234
- let filterKeys = Object.keys(filter).filter(k => k !== complexFilterKey && !funcFilter.find(ek => ek.name === k) && !computedFields.find(cf => cf.name === k) && !existsKeys.find(ek => ek.key === k));
234
+ const filterKeys = Object.keys(filter).filter(k => k !== complexFilterKey && !funcFilter.find(ek => ek.name === k) && !computedFields.find(cf => cf.name === k) && !existsKeys.find(ek => ek.key === k));
235
235
  // if(allowed_colnames){
236
236
  // const aliasedColumns = (select || []).filter(s =>
237
237
  // ["function", "computed", "column"].includes(s.type) && allowed_colnames.includes(s.alias) ||