prostgles-server 4.2.183 → 4.2.185

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 (432) hide show
  1. package/.github/workflows/main.yml +15 -15
  2. package/.prettierignore +2 -0
  3. package/README.md +1 -1
  4. package/dist/Auth/AuthHandler.d.ts +1 -1
  5. package/dist/Auth/AuthHandler.d.ts.map +1 -1
  6. package/dist/Auth/AuthHandler.js +64 -32
  7. package/dist/Auth/AuthHandler.js.map +1 -1
  8. package/dist/Auth/AuthTypes.d.ts +15 -1
  9. package/dist/Auth/AuthTypes.d.ts.map +1 -1
  10. package/dist/Auth/getSafeReturnURL.d.ts.map +1 -1
  11. package/dist/Auth/getSafeReturnURL.js.map +1 -1
  12. package/dist/Auth/sendEmail.d.ts.map +1 -1
  13. package/dist/Auth/sendEmail.js +6 -6
  14. package/dist/Auth/sendEmail.js.map +1 -1
  15. package/dist/Auth/setAuthProviders.d.ts +1 -1
  16. package/dist/Auth/setAuthProviders.d.ts.map +1 -1
  17. package/dist/Auth/setAuthProviders.js +15 -8
  18. package/dist/Auth/setAuthProviders.js.map +1 -1
  19. package/dist/Auth/setEmailProvider.d.ts.map +1 -1
  20. package/dist/Auth/setEmailProvider.js +23 -4
  21. package/dist/Auth/setEmailProvider.js.map +1 -1
  22. package/dist/Auth/setupAuthRoutes.d.ts.map +1 -1
  23. package/dist/Auth/setupAuthRoutes.js +27 -9
  24. package/dist/Auth/setupAuthRoutes.js.map +1 -1
  25. package/dist/DBEventsManager.d.ts.map +1 -1
  26. package/dist/DBEventsManager.js +24 -19
  27. package/dist/DBEventsManager.js.map +1 -1
  28. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  29. package/dist/DBSchemaBuilder.js +18 -5
  30. package/dist/DBSchemaBuilder.js.map +1 -1
  31. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  32. package/dist/DboBuilder/DboBuilder.js +7 -2
  33. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  34. package/dist/DboBuilder/DboBuilderTypes.d.ts +4 -4
  35. package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
  36. package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
  37. package/dist/DboBuilder/QueryBuilder/Functions.d.ts +2 -2
  38. package/dist/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
  39. package/dist/DboBuilder/QueryBuilder/Functions.js +293 -173
  40. package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
  41. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts +2 -2
  42. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  43. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +52 -29
  44. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  45. package/dist/DboBuilder/QueryBuilder/getJoinQuery.d.ts.map +1 -1
  46. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js +51 -32
  47. package/dist/DboBuilder/QueryBuilder/getJoinQuery.js.map +1 -1
  48. package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
  49. package/dist/DboBuilder/QueryBuilder/getNewQuery.js +48 -25
  50. package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
  51. package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts +1 -1
  52. package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
  53. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +32 -23
  54. package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
  55. package/dist/DboBuilder/QueryStreamer.d.ts +2 -2
  56. package/dist/DboBuilder/QueryStreamer.d.ts.map +1 -1
  57. package/dist/DboBuilder/QueryStreamer.js +68 -23
  58. package/dist/DboBuilder/QueryStreamer.js.map +1 -1
  59. package/dist/DboBuilder/TableHandler/DataValidator.d.ts +1 -1
  60. package/dist/DboBuilder/TableHandler/DataValidator.d.ts.map +1 -1
  61. package/dist/DboBuilder/TableHandler/DataValidator.js +79 -43
  62. package/dist/DboBuilder/TableHandler/DataValidator.js.map +1 -1
  63. package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
  64. package/dist/DboBuilder/TableHandler/TableHandler.js +39 -15
  65. package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
  66. package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
  67. package/dist/DboBuilder/TableHandler/delete.js +44 -13
  68. package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
  69. package/dist/DboBuilder/TableHandler/insert.d.ts.map +1 -1
  70. package/dist/DboBuilder/TableHandler/insert.js +81 -22
  71. package/dist/DboBuilder/TableHandler/insert.js.map +1 -1
  72. package/dist/DboBuilder/TableHandler/insertTest.d.ts.map +1 -1
  73. package/dist/DboBuilder/TableHandler/insertTest.js.map +1 -1
  74. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts +1 -1
  75. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.d.ts.map +1 -1
  76. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js +7 -4
  77. package/dist/DboBuilder/TableHandler/onDeleteFromFileTable.js.map +1 -1
  78. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
  79. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +24 -5
  80. package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
  81. package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
  82. package/dist/DboBuilder/TableHandler/update.js +16 -4
  83. package/dist/DboBuilder/TableHandler/update.js.map +1 -1
  84. package/dist/DboBuilder/TableHandler/updateBatch.d.ts.map +1 -1
  85. package/dist/DboBuilder/TableHandler/updateBatch.js +33 -10
  86. package/dist/DboBuilder/TableHandler/updateBatch.js.map +1 -1
  87. package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
  88. package/dist/DboBuilder/TableHandler/updateFile.js +24 -6
  89. package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
  90. package/dist/DboBuilder/TableHandler/upsert.d.ts.map +1 -1
  91. package/dist/DboBuilder/TableHandler/upsert.js +22 -6
  92. package/dist/DboBuilder/TableHandler/upsert.js.map +1 -1
  93. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts +5 -5
  94. package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
  95. package/dist/DboBuilder/ViewHandler/ViewHandler.js +64 -36
  96. package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
  97. package/dist/DboBuilder/ViewHandler/count.d.ts.map +1 -1
  98. package/dist/DboBuilder/ViewHandler/count.js +21 -7
  99. package/dist/DboBuilder/ViewHandler/count.js.map +1 -1
  100. package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
  101. package/dist/DboBuilder/ViewHandler/find.js +76 -22
  102. package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
  103. package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
  104. package/dist/DboBuilder/ViewHandler/getExistsCondition.js +19 -10
  105. package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
  106. package/dist/DboBuilder/ViewHandler/getExistsFilters.d.ts.map +1 -1
  107. package/dist/DboBuilder/ViewHandler/getExistsFilters.js +12 -5
  108. package/dist/DboBuilder/ViewHandler/getExistsFilters.js.map +1 -1
  109. package/dist/DboBuilder/ViewHandler/getInfo.d.ts.map +1 -1
  110. package/dist/DboBuilder/ViewHandler/getInfo.js +27 -9
  111. package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
  112. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts +2 -2
  113. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
  114. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +42 -23
  115. package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
  116. package/dist/DboBuilder/ViewHandler/parseComplexFilter.d.ts.map +1 -1
  117. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js +22 -9
  118. package/dist/DboBuilder/ViewHandler/parseComplexFilter.js.map +1 -1
  119. package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts +4 -4
  120. package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts.map +1 -1
  121. package/dist/DboBuilder/ViewHandler/parseFieldFilter.js +13 -11
  122. package/dist/DboBuilder/ViewHandler/parseFieldFilter.js.map +1 -1
  123. package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts +1 -1
  124. package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts.map +1 -1
  125. package/dist/DboBuilder/ViewHandler/parseJoinPath.js +44 -29
  126. package/dist/DboBuilder/ViewHandler/parseJoinPath.js.map +1 -1
  127. package/dist/DboBuilder/ViewHandler/prepareSortItems.d.ts.map +1 -1
  128. package/dist/DboBuilder/ViewHandler/prepareSortItems.js +36 -27
  129. package/dist/DboBuilder/ViewHandler/prepareSortItems.js.map +1 -1
  130. package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
  131. package/dist/DboBuilder/ViewHandler/prepareWhere.js +16 -12
  132. package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
  133. package/dist/DboBuilder/ViewHandler/size.d.ts.map +1 -1
  134. package/dist/DboBuilder/ViewHandler/size.js +24 -7
  135. package/dist/DboBuilder/ViewHandler/size.js.map +1 -1
  136. package/dist/DboBuilder/ViewHandler/subscribe.d.ts.map +1 -1
  137. package/dist/DboBuilder/ViewHandler/subscribe.js +40 -12
  138. package/dist/DboBuilder/ViewHandler/subscribe.js.map +1 -1
  139. package/dist/DboBuilder/ViewHandler/validateViewRules.d.ts.map +1 -1
  140. package/dist/DboBuilder/ViewHandler/validateViewRules.js +20 -5
  141. package/dist/DboBuilder/ViewHandler/validateViewRules.js.map +1 -1
  142. package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
  143. package/dist/DboBuilder/dboBuilderUtils.js +18 -7
  144. package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
  145. package/dist/DboBuilder/getColumns.d.ts.map +1 -1
  146. package/dist/DboBuilder/getColumns.js +22 -7
  147. package/dist/DboBuilder/getColumns.js.map +1 -1
  148. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  149. package/dist/DboBuilder/getCondition.js +43 -30
  150. package/dist/DboBuilder/getCondition.js.map +1 -1
  151. package/dist/DboBuilder/getSubscribeRelatedTables.d.ts.map +1 -1
  152. package/dist/DboBuilder/getSubscribeRelatedTables.js +38 -27
  153. package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
  154. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
  155. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js +9 -9
  156. package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
  157. package/dist/DboBuilder/insertNestedRecords.d.ts +3 -3
  158. package/dist/DboBuilder/insertNestedRecords.d.ts.map +1 -1
  159. package/dist/DboBuilder/insertNestedRecords.js +79 -44
  160. package/dist/DboBuilder/insertNestedRecords.js.map +1 -1
  161. package/dist/DboBuilder/parseUpdateRules.d.ts.map +1 -1
  162. package/dist/DboBuilder/parseUpdateRules.js +38 -14
  163. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  164. package/dist/DboBuilder/prepareShortestJoinPaths.d.ts.map +1 -1
  165. package/dist/DboBuilder/prepareShortestJoinPaths.js +56 -31
  166. package/dist/DboBuilder/prepareShortestJoinPaths.js.map +1 -1
  167. package/dist/DboBuilder/runSQL.d.ts.map +1 -1
  168. package/dist/DboBuilder/runSQL.js +41 -21
  169. package/dist/DboBuilder/runSQL.js.map +1 -1
  170. package/dist/DboBuilder/runTransaction.d.ts +1 -1
  171. package/dist/DboBuilder/runTransaction.d.ts.map +1 -1
  172. package/dist/DboBuilder/runTransaction.js +2 -2
  173. package/dist/DboBuilder/runTransaction.js.map +1 -1
  174. package/dist/DboBuilder/sqlErrCodeToMsg.d.ts.map +1 -1
  175. package/dist/DboBuilder/sqlErrCodeToMsg.js +297 -38
  176. package/dist/DboBuilder/sqlErrCodeToMsg.js.map +1 -1
  177. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  178. package/dist/DboBuilder/uploadFile.js +33 -9
  179. package/dist/DboBuilder/uploadFile.js.map +1 -1
  180. package/dist/Event_Trigger_Tags.d.ts +1 -1
  181. package/dist/Event_Trigger_Tags.d.ts.map +1 -1
  182. package/dist/Event_Trigger_Tags.js +1 -1
  183. package/dist/Event_Trigger_Tags.js.map +1 -1
  184. package/dist/FileManager/FileManager.d.ts.map +1 -1
  185. package/dist/FileManager/FileManager.js +6 -3
  186. package/dist/FileManager/FileManager.js.map +1 -1
  187. package/dist/FileManager/getValidatedFileType.d.ts.map +1 -1
  188. package/dist/FileManager/getValidatedFileType.js +18 -16
  189. package/dist/FileManager/getValidatedFileType.js.map +1 -1
  190. package/dist/FileManager/initFileManager.d.ts.map +1 -1
  191. package/dist/FileManager/initFileManager.js +7 -1
  192. package/dist/FileManager/initFileManager.js.map +1 -1
  193. package/dist/FileManager/upload.d.ts +1 -1
  194. package/dist/FileManager/upload.d.ts.map +1 -1
  195. package/dist/FileManager/upload.js +3 -3
  196. package/dist/FileManager/upload.js.map +1 -1
  197. package/dist/FileManager/uploadStream.d.ts +1 -1
  198. package/dist/FileManager/uploadStream.d.ts.map +1 -1
  199. package/dist/FileManager/uploadStream.js +6 -7
  200. package/dist/FileManager/uploadStream.js.map +1 -1
  201. package/dist/Filtering.d.ts +3 -3
  202. package/dist/Filtering.d.ts.map +1 -1
  203. package/dist/Filtering.js +70 -37
  204. package/dist/Filtering.js.map +1 -1
  205. package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
  206. package/dist/JSONBValidation/validate_jsonb_schema_sql.js +1 -4
  207. package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -1
  208. package/dist/JSONBValidation/validation.d.ts.map +1 -1
  209. package/dist/JSONBValidation/validation.js +46 -24
  210. package/dist/JSONBValidation/validation.js.map +1 -1
  211. package/dist/Logging.d.ts +2 -2
  212. package/dist/Logging.d.ts.map +1 -1
  213. package/dist/PostgresNotifListenManager.d.ts.map +1 -1
  214. package/dist/PostgresNotifListenManager.js +20 -22
  215. package/dist/PostgresNotifListenManager.js.map +1 -1
  216. package/dist/Prostgles.d.ts +1 -1
  217. package/dist/Prostgles.d.ts.map +1 -1
  218. package/dist/Prostgles.js +37 -11
  219. package/dist/Prostgles.js.map +1 -1
  220. package/dist/ProstglesTypes.d.ts.map +1 -1
  221. package/dist/ProstglesTypes.js +6 -1
  222. package/dist/ProstglesTypes.js.map +1 -1
  223. package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
  224. package/dist/PubSubManager/PubSubManager.js +10 -5
  225. package/dist/PubSubManager/PubSubManager.js.map +1 -1
  226. package/dist/PubSubManager/addSub.d.ts.map +1 -1
  227. package/dist/PubSubManager/addSub.js +4 -6
  228. package/dist/PubSubManager/addSub.js.map +1 -1
  229. package/dist/PubSubManager/addSync.d.ts.map +1 -1
  230. package/dist/PubSubManager/addSync.js +10 -6
  231. package/dist/PubSubManager/addSync.js.map +1 -1
  232. package/dist/PubSubManager/getCreatePubSubManagerError.d.ts.map +1 -1
  233. package/dist/PubSubManager/getCreatePubSubManagerError.js +3 -1
  234. package/dist/PubSubManager/getCreatePubSubManagerError.js.map +1 -1
  235. package/dist/PubSubManager/getPubSubManagerInitQuery.d.ts.map +1 -1
  236. package/dist/PubSubManager/getPubSubManagerInitQuery.js +8 -8
  237. package/dist/PubSubManager/getPubSubManagerInitQuery.js.map +1 -1
  238. package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
  239. package/dist/PubSubManager/initPubSubManager.js +7 -9
  240. package/dist/PubSubManager/initPubSubManager.js.map +1 -1
  241. package/dist/PubSubManager/notifListener.d.ts.map +1 -1
  242. package/dist/PubSubManager/notifListener.js +23 -12
  243. package/dist/PubSubManager/notifListener.js.map +1 -1
  244. package/dist/PubSubManager/orphanTriggerCheck.d.ts.map +1 -1
  245. package/dist/PubSubManager/orphanTriggerCheck.js.map +1 -1
  246. package/dist/PubSubManager/pushSubData.d.ts.map +1 -1
  247. package/dist/PubSubManager/pushSubData.js +1 -1
  248. package/dist/PubSubManager/pushSubData.js.map +1 -1
  249. package/dist/PublishParser/PublishParser.d.ts +1 -1
  250. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  251. package/dist/PublishParser/PublishParser.js +25 -14
  252. package/dist/PublishParser/PublishParser.js.map +1 -1
  253. package/dist/PublishParser/getFileTableRules.d.ts.map +1 -1
  254. package/dist/PublishParser/getFileTableRules.js +23 -16
  255. package/dist/PublishParser/getFileTableRules.js.map +1 -1
  256. package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
  257. package/dist/PublishParser/getSchemaFromPublish.js +39 -16
  258. package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
  259. package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts.map +1 -1
  260. package/dist/PublishParser/getTableRulesWithoutFileTable.js +42 -22
  261. package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
  262. package/dist/PublishParser/publishTypesAndUtils.d.ts.map +1 -1
  263. package/dist/PublishParser/publishTypesAndUtils.js +5 -1
  264. package/dist/PublishParser/publishTypesAndUtils.js.map +1 -1
  265. package/dist/RestApi.d.ts +1 -1
  266. package/dist/RestApi.d.ts.map +1 -1
  267. package/dist/RestApi.js +1 -1
  268. package/dist/RestApi.js.map +1 -1
  269. package/dist/SchemaWatch/SchemaWatch.d.ts +2 -2
  270. package/dist/SchemaWatch/SchemaWatch.d.ts.map +1 -1
  271. package/dist/SchemaWatch/SchemaWatch.js +11 -9
  272. package/dist/SchemaWatch/SchemaWatch.js.map +1 -1
  273. package/dist/SchemaWatch/getValidatedWatchSchemaType.d.ts.map +1 -1
  274. package/dist/SchemaWatch/getValidatedWatchSchemaType.js +3 -3
  275. package/dist/SchemaWatch/getValidatedWatchSchemaType.js.map +1 -1
  276. package/dist/SchemaWatch/getWatchSchemaTagList.d.ts.map +1 -1
  277. package/dist/SchemaWatch/getWatchSchemaTagList.js +12 -6
  278. package/dist/SchemaWatch/getWatchSchemaTagList.js.map +1 -1
  279. package/dist/SyncReplication.d.ts.map +1 -1
  280. package/dist/SyncReplication.js +84 -42
  281. package/dist/SyncReplication.js.map +1 -1
  282. package/dist/TableConfig/TableConfig.d.ts +5 -5
  283. package/dist/TableConfig/TableConfig.d.ts.map +1 -1
  284. package/dist/TableConfig/TableConfig.js +18 -5
  285. package/dist/TableConfig/TableConfig.js.map +1 -1
  286. package/dist/TableConfig/getColumnDefinitionQuery.d.ts +2 -2
  287. package/dist/TableConfig/getColumnDefinitionQuery.d.ts.map +1 -1
  288. package/dist/TableConfig/getColumnDefinitionQuery.js +20 -9
  289. package/dist/TableConfig/getColumnDefinitionQuery.js.map +1 -1
  290. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +3 -3
  291. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
  292. package/dist/TableConfig/getConstraintDefinitionQueries.js +12 -7
  293. package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
  294. package/dist/TableConfig/getFutureTableSchema.d.ts +1 -1
  295. package/dist/TableConfig/getFutureTableSchema.d.ts.map +1 -1
  296. package/dist/TableConfig/getFutureTableSchema.js +6 -4
  297. package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
  298. package/dist/TableConfig/getPGIndexes.d.ts.map +1 -1
  299. package/dist/TableConfig/getPGIndexes.js.map +1 -1
  300. package/dist/TableConfig/getTableColumnQueries.d.ts +1 -1
  301. package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
  302. package/dist/TableConfig/getTableColumnQueries.js +38 -19
  303. package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
  304. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  305. package/dist/TableConfig/initTableConfig.js +91 -43
  306. package/dist/TableConfig/initTableConfig.js.map +1 -1
  307. package/dist/index.d.ts.map +1 -1
  308. package/dist/index.js.map +1 -1
  309. package/dist/initProstgles.d.ts.map +1 -1
  310. package/dist/initProstgles.js +14 -10
  311. package/dist/initProstgles.js.map +1 -1
  312. package/dist/onSocketConnected.d.ts.map +1 -1
  313. package/dist/onSocketConnected.js +38 -16
  314. package/dist/onSocketConnected.js.map +1 -1
  315. package/dist/runClientRequest.d.ts.map +1 -1
  316. package/dist/runClientRequest.js +33 -14
  317. package/dist/runClientRequest.js.map +1 -1
  318. package/dist/shortestPath.d.ts.map +1 -1
  319. package/dist/shortestPath.js +1 -1
  320. package/dist/shortestPath.js.map +1 -1
  321. package/dist/typeTests/dboTypeCheck.js.map +1 -1
  322. package/examples/full-example-typescript/DBoGenerated.d.ts +112 -54
  323. package/examples/full-example-typescript/DBoGenerated.js +3 -3
  324. package/examples/full-example-typescript/home.html +28 -26
  325. package/examples/full-example-typescript/index.d.ts +1 -1
  326. package/examples/full-example-typescript/index.js +80 -53
  327. package/examples/full-example-vanilla/home.html +151 -125
  328. package/examples/server/javascript/index.js +17 -19
  329. package/lib/Auth/AuthHandler.ts +234 -155
  330. package/lib/Auth/AuthTypes.ts +27 -4
  331. package/lib/Auth/getSafeReturnURL.ts +35 -21
  332. package/lib/Auth/sendEmail.ts +34 -31
  333. package/lib/Auth/setAuthProviders.ts +94 -71
  334. package/lib/Auth/setEmailProvider.ts +45 -27
  335. package/lib/Auth/setupAuthRoutes.ts +164 -100
  336. package/lib/DBEventsManager.ts +87 -65
  337. package/lib/DBSchemaBuilder.ts +62 -28
  338. package/lib/DboBuilder/DboBuilder.ts +45 -21
  339. package/lib/DboBuilder/DboBuilderTypes.ts +99 -95
  340. package/lib/DboBuilder/QueryBuilder/Functions.ts +862 -580
  341. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +202 -141
  342. package/lib/DboBuilder/QueryBuilder/getJoinQuery.ts +199 -124
  343. package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +209 -148
  344. package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +101 -75
  345. package/lib/DboBuilder/QueryBuilder/prepareHaving.ts +10 -5
  346. package/lib/DboBuilder/QueryStreamer.ts +207 -100
  347. package/lib/DboBuilder/TableHandler/DataValidator.ts +253 -148
  348. package/lib/DboBuilder/TableHandler/TableHandler.ts +155 -60
  349. package/lib/DboBuilder/TableHandler/delete.ts +82 -29
  350. package/lib/DboBuilder/TableHandler/insert.ts +177 -81
  351. package/lib/DboBuilder/TableHandler/insertTest.ts +13 -7
  352. package/lib/DboBuilder/TableHandler/onDeleteFromFileTable.ts +35 -21
  353. package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +95 -45
  354. package/lib/DboBuilder/TableHandler/update.ts +54 -14
  355. package/lib/DboBuilder/TableHandler/updateBatch.ts +59 -21
  356. package/lib/DboBuilder/TableHandler/updateFile.ts +57 -26
  357. package/lib/DboBuilder/TableHandler/upsert.ts +58 -13
  358. package/lib/DboBuilder/ViewHandler/ViewHandler.ts +264 -121
  359. package/lib/DboBuilder/ViewHandler/count.ts +56 -25
  360. package/lib/DboBuilder/ViewHandler/find.ts +153 -68
  361. package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +59 -32
  362. package/lib/DboBuilder/ViewHandler/getExistsFilters.ts +31 -19
  363. package/lib/DboBuilder/ViewHandler/getInfo.ts +47 -16
  364. package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +91 -57
  365. package/lib/DboBuilder/ViewHandler/parseComplexFilter.ts +51 -29
  366. package/lib/DboBuilder/ViewHandler/parseFieldFilter.ts +35 -29
  367. package/lib/DboBuilder/ViewHandler/parseJoinPath.ts +130 -76
  368. package/lib/DboBuilder/ViewHandler/prepareSortItems.ts +140 -92
  369. package/lib/DboBuilder/ViewHandler/prepareWhere.ts +66 -26
  370. package/lib/DboBuilder/ViewHandler/size.ts +56 -22
  371. package/lib/DboBuilder/ViewHandler/subscribe.ts +122 -46
  372. package/lib/DboBuilder/ViewHandler/validateViewRules.ts +39 -14
  373. package/lib/DboBuilder/dboBuilderUtils.ts +41 -18
  374. package/lib/DboBuilder/getColumns.ts +44 -12
  375. package/lib/DboBuilder/getCondition.ts +120 -79
  376. package/lib/DboBuilder/getSubscribeRelatedTables.ts +144 -83
  377. package/lib/DboBuilder/getTablesForSchemaPostgresSQL.ts +61 -44
  378. package/lib/DboBuilder/insertNestedRecords.ts +370 -235
  379. package/lib/DboBuilder/parseUpdateRules.ts +117 -61
  380. package/lib/DboBuilder/prepareShortestJoinPaths.ts +115 -56
  381. package/lib/DboBuilder/runSQL.ts +135 -74
  382. package/lib/DboBuilder/runTransaction.ts +27 -16
  383. package/lib/DboBuilder/sqlErrCodeToMsg.ts +502 -244
  384. package/lib/DboBuilder/uploadFile.ts +67 -31
  385. package/lib/Event_Trigger_Tags.ts +6 -4
  386. package/lib/FileManager/FileManager.ts +53 -21
  387. package/lib/FileManager/getValidatedFileType.ts +79 -35
  388. package/lib/FileManager/initFileManager.ts +21 -9
  389. package/lib/FileManager/upload.ts +21 -19
  390. package/lib/FileManager/uploadStream.ts +33 -34
  391. package/lib/Filtering.ts +249 -197
  392. package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +2 -7
  393. package/lib/JSONBValidation/validation.ts +147 -82
  394. package/lib/Logging.ts +107 -97
  395. package/lib/PostgresNotifListenManager.ts +96 -63
  396. package/lib/Prostgles.ts +106 -35
  397. package/lib/ProstglesTypes.ts +31 -9
  398. package/lib/PubSubManager/PubSubManager.ts +62 -27
  399. package/lib/PubSubManager/addSub.ts +56 -37
  400. package/lib/PubSubManager/addSync.ts +50 -33
  401. package/lib/PubSubManager/getCreatePubSubManagerError.ts +29 -21
  402. package/lib/PubSubManager/getPubSubManagerInitQuery.ts +45 -27
  403. package/lib/PubSubManager/initPubSubManager.ts +27 -18
  404. package/lib/PubSubManager/notifListener.ts +77 -59
  405. package/lib/PubSubManager/orphanTriggerCheck.ts +5 -4
  406. package/lib/PubSubManager/pushSubData.ts +11 -9
  407. package/lib/PublishParser/PublishParser.ts +102 -44
  408. package/lib/PublishParser/getFileTableRules.ts +97 -54
  409. package/lib/PublishParser/getSchemaFromPublish.ts +146 -74
  410. package/lib/PublishParser/getTableRulesWithoutFileTable.ts +101 -51
  411. package/lib/PublishParser/publishTypesAndUtils.ts +74 -23
  412. package/lib/RestApi.ts +10 -2
  413. package/lib/SchemaWatch/SchemaWatch.ts +52 -34
  414. package/lib/SchemaWatch/createSchemaWatchEventTrigger.ts +1 -1
  415. package/lib/SchemaWatch/getValidatedWatchSchemaType.ts +32 -22
  416. package/lib/SchemaWatch/getWatchSchemaTagList.ts +24 -16
  417. package/lib/SyncReplication.ts +376 -190
  418. package/lib/TableConfig/TableConfig.ts +200 -136
  419. package/lib/TableConfig/getColumnDefinitionQuery.ts +65 -44
  420. package/lib/TableConfig/getConstraintDefinitionQueries.ts +41 -25
  421. package/lib/TableConfig/getFutureTableSchema.ts +31 -21
  422. package/lib/TableConfig/getPGIndexes.ts +7 -4
  423. package/lib/TableConfig/getTableColumnQueries.ts +101 -54
  424. package/lib/TableConfig/initTableConfig.ts +192 -101
  425. package/lib/index.ts +6 -5
  426. package/lib/initProstgles.ts +57 -51
  427. package/lib/onSocketConnected.ts +75 -40
  428. package/lib/runClientRequest.ts +148 -79
  429. package/lib/shortestPath.ts +80 -76
  430. package/lib/typeTests/DBoGenerated.d.ts +5 -1
  431. package/lib/typeTests/dboTypeCheck.ts +8 -8
  432. package/package.json +1 -1
package/lib/Filtering.ts CHANGED
@@ -1,33 +1,31 @@
1
-
2
-
3
1
  import {
4
2
  BetweenFilterKeys,
5
3
  CompareFilterKeys,
6
4
  CompareInFilterKeys,
7
5
  FilterDataType,
8
6
  FullFilter,
9
- GeomFilterKeys, GeomFilter_Funcs,
7
+ GeomFilterKeys,
8
+ GeomFilter_Funcs,
10
9
  JsonbFilterKeys,
11
10
  TextFilterKeys,
12
11
  TextFilter_FullTextSearchFilterKeys,
13
12
  getKeys,
14
13
  isEmpty,
15
- isObject
14
+ isObject,
16
15
  } from "prostgles-types";
17
16
  import { SelectItem } from "./DboBuilder/QueryBuilder/QueryBuilder";
18
17
  import { pgp } from "./DboBuilder/DboBuilderTypes";
19
18
 
20
-
21
19
  export const FILTER_OPERANDS = [
22
20
  ...TextFilterKeys,
23
21
  ...JsonbFilterKeys,
24
22
  ...CompareFilterKeys,
25
23
  ...BetweenFilterKeys,
26
- ...CompareInFilterKeys
24
+ ...CompareInFilterKeys,
27
25
  ] as const;
28
26
 
29
27
  export const FILTER_OPERAND_TO_SQL_OPERAND = Object.fromEntries(
30
- FILTER_OPERANDS.map(filterOperand => {
28
+ FILTER_OPERANDS.map((filterOperand) => {
31
29
  let sqlOperand = filterOperand as string;
32
30
  if (filterOperand === "$eq") sqlOperand = "=";
33
31
  else if (filterOperand === "$gt") sqlOperand = ">";
@@ -43,18 +41,20 @@ export const FILTER_OPERAND_TO_SQL_OPERAND = Object.fromEntries(
43
41
  else if (filterOperand === "$nin") sqlOperand = "NOT IN";
44
42
  else if (filterOperand === "$between") sqlOperand = "BETWEEN";
45
43
  else if (filterOperand === "$notBetween") sqlOperand = "NOT BETWEEN";
46
- else if (filterOperand === "$isDistinctFrom") sqlOperand = "IS DISTINCT FROM";
47
- else if (filterOperand === "$isNotDistinctFrom") sqlOperand = "IS NOT DISTINCT FROM";
44
+ else if (filterOperand === "$isDistinctFrom")
45
+ sqlOperand = "IS DISTINCT FROM";
46
+ else if (filterOperand === "$isNotDistinctFrom")
47
+ sqlOperand = "IS NOT DISTINCT FROM";
48
48
  return [filterOperand, sqlOperand];
49
- })
50
- ) as Record<typeof FILTER_OPERANDS[number], string>;
49
+ }),
50
+ ) as Record<(typeof FILTER_OPERANDS)[number], string>;
51
51
 
52
52
  /**
53
- * Parse a single filter
54
- * Ensure only single key objects reach this point
55
- */
56
- type ParseFilterItemArgs = {
57
- filter: FullFilter<void, void>;
53
+ * Parse a single filter
54
+ * Ensure only single key objects reach this point
55
+ */
56
+ type ParseFilterItemArgs = {
57
+ filter: FullFilter<void, void>;
58
58
  select: SelectItem[] | undefined;
59
59
  tableAlias: string | undefined;
60
60
  allowedColumnNames: string[];
@@ -63,401 +63,453 @@ type ParseFilterItemArgs = {
63
63
  export const parseFilterItem = (args: ParseFilterItemArgs): string => {
64
64
  const { filter: _f, select, tableAlias, allowedColumnNames } = args;
65
65
 
66
- if(!_f || isEmpty(_f)) return "";
66
+ if (!_f || isEmpty(_f)) return "";
67
67
 
68
68
  const mErr = (msg: string) => {
69
- throw `${msg}: ${JSON.stringify(_f, null, 2)}`
69
+ throw `${msg}: ${JSON.stringify(_f, null, 2)}`;
70
70
  };
71
71
  const asValue = (v: any) => pgp.as.format("$1", [v]);
72
72
 
73
- const fKeys = getKeys(_f)
74
- if(fKeys.length === 0){
73
+ const fKeys = getKeys(_f);
74
+ if (fKeys.length === 0) {
75
75
  return "";
76
-
77
- /**
78
- * { field1: cond1, field2: cond2 }
79
- */
80
- } else if(fKeys.length > 1){
81
- return fKeys.map(fk => parseFilterItem({
82
- filter: { [fk]: _f[fk] },
83
- select,
84
- tableAlias,
85
- allowedColumnNames,
86
- }))
87
- .sort() /* sorted to ensure duplicate subscription channels are not created due to different condition order */
88
- .join(" AND ")
76
+
77
+ /**
78
+ * { field1: cond1, field2: cond2 }
79
+ */
80
+ } else if (fKeys.length > 1) {
81
+ return fKeys
82
+ .map((fk) =>
83
+ parseFilterItem({
84
+ filter: { [fk]: _f[fk] },
85
+ select,
86
+ tableAlias,
87
+ allowedColumnNames,
88
+ }),
89
+ )
90
+ .sort() /* sorted to ensure duplicate subscription channels are not created due to different condition order */
91
+ .join(" AND ");
89
92
  }
90
93
 
91
94
  const fKey: string = fKeys[0]!;
92
95
 
93
96
  let selItem: SelectItem | undefined;
94
- if(select) {
95
- selItem = select.find(s => fKey === s.alias);
97
+ if (select) {
98
+ selItem = select.find((s) => fKey === s.alias);
96
99
  }
97
100
  let rightF: FilterDataType<any> = (_f as any)[fKey];
98
101
 
99
102
  const validateSelectedItemFilter = (selectedItem: SelectItem | undefined) => {
100
103
  const fields = selectedItem?.getFields();
101
- if(Array.isArray(fields) && fields.length > 1) {
102
- const dissallowedFields = fields.filter(fname => !allowedColumnNames.includes(fname));
103
- if(dissallowedFields.length){
104
- throw new Error(`Invalid/disallowed columns found in filter: ${dissallowedFields}`)
104
+ if (Array.isArray(fields) && fields.length > 1) {
105
+ const dissallowedFields = fields.filter(
106
+ (fname) => !allowedColumnNames.includes(fname),
107
+ );
108
+ if (dissallowedFields.length) {
109
+ throw new Error(
110
+ `Invalid/disallowed columns found in filter: ${dissallowedFields}`,
111
+ );
105
112
  }
106
113
  }
107
- }
114
+ };
108
115
  const getLeftQ = (selItm: SelectItem) => {
109
116
  validateSelectedItemFilter(selItem);
110
- if(selItm.type === "function" || selItm.type === "aggregation") return selItm.getQuery();
117
+ if (selItm.type === "function" || selItm.type === "aggregation")
118
+ return selItm.getQuery();
111
119
  return selItm.getQuery(tableAlias);
112
- }
120
+ };
113
121
 
114
122
  /**
115
- * Parsed left side of the query
116
- */
117
- let leftQ: string | undefined;// = asName(selItem.alias);
123
+ * Parsed left side of the query
124
+ */
125
+ let leftQ: string | undefined; // = asName(selItem.alias);
118
126
 
119
127
  /*
120
128
  Select item not found.
121
129
  Check if dot/json notation. Build obj if necessary
122
130
  */
123
131
  const dot_notation_delims = ["->", "."];
124
- if(!selItem){
125
-
132
+ if (!selItem) {
126
133
  /* See if dot notation. Pick the best matching starting string */
127
- if(select){
128
- selItem = select.find(s =>
129
- dot_notation_delims.find(delimiter => fKey.startsWith(s.alias + delimiter))
134
+ if (select) {
135
+ selItem = select.find((s) =>
136
+ dot_notation_delims.find((delimiter) =>
137
+ fKey.startsWith(s.alias + delimiter),
138
+ ),
130
139
  );
131
140
  validateSelectedItemFilter(selItem);
132
141
  }
133
- if(!selItem) {
134
- return mErr("Bad filter. Could not match to a column or alias or dot notation" + select?.map(s => s.alias));
142
+ if (!selItem) {
143
+ return mErr(
144
+ "Bad filter. Could not match to a column or alias or dot notation" +
145
+ select?.map((s) => s.alias),
146
+ );
135
147
  }
136
148
 
137
149
  let remainingStr = fKey.slice(selItem.alias.length);
138
150
 
139
151
  /* Is json path spec */
140
- if(remainingStr.startsWith("->")){
141
-
152
+ if (remainingStr.startsWith("->")) {
142
153
  /** Has shorthand operand 'col->>key.<>' */
143
- const matchingOperand = CompareFilterKeys.find(operand => remainingStr.endsWith(`.${operand}`));
144
- if(matchingOperand){
145
- remainingStr = remainingStr.slice(0, -matchingOperand.length - 1)
146
- rightF = { [matchingOperand]: rightF }
154
+ const matchingOperand = CompareFilterKeys.find((operand) =>
155
+ remainingStr.endsWith(`.${operand}`),
156
+ );
157
+ if (matchingOperand) {
158
+ remainingStr = remainingStr.slice(0, -matchingOperand.length - 1);
159
+ rightF = { [matchingOperand]: rightF };
147
160
  }
148
161
 
149
162
  leftQ = getLeftQ(selItem);
150
-
163
+
151
164
  /**
152
- * get json path separators. Expecting -> to come first
153
- */
154
- type GetSepRes = { idx: number; sep: string } | undefined
165
+ * get json path separators. Expecting -> to come first
166
+ */
167
+ type GetSepRes = { idx: number; sep: string } | undefined;
155
168
  const getSep = (fromIdx = 0): GetSepRes => {
156
- const strPart = remainingStr.slice(fromIdx)
169
+ const strPart = remainingStr.slice(fromIdx);
157
170
  let idx = strPart.indexOf("->");
158
171
  const idxx = strPart.indexOf("->>");
159
- if(idx > -1) {
172
+ if (idx > -1) {
160
173
  /* if -> matches then check if it's the last separator */
161
- if(idx === idxx) return { idx: idx + fromIdx, sep: "->>" }
162
- return { idx: idx + fromIdx, sep: "->" }
174
+ if (idx === idxx) return { idx: idx + fromIdx, sep: "->>" };
175
+ return { idx: idx + fromIdx, sep: "->" };
163
176
  }
164
177
  idx = strPart.indexOf("->>");
165
- if(idx > -1) {
166
- return { idx: idx + fromIdx, sep: "->>" }
178
+ if (idx > -1) {
179
+ return { idx: idx + fromIdx, sep: "->>" };
167
180
  }
168
181
 
169
182
  return undefined;
170
- }
171
-
183
+ };
172
184
 
173
185
  let currSep = getSep();
174
- while(currSep){
186
+ while (currSep) {
175
187
  let nextSep = getSep(currSep.idx + currSep.sep.length);
176
188
 
177
- let nextIdx = nextSep? nextSep.idx : remainingStr.length;
189
+ let nextIdx = nextSep ? nextSep.idx : remainingStr.length;
178
190
 
179
191
  /* If ending in set then add set as well into key */
180
- if(nextSep && nextIdx + nextSep.sep.length === remainingStr.length) {
192
+ if (nextSep && nextIdx + nextSep.sep.length === remainingStr.length) {
181
193
  nextIdx = remainingStr.length;
182
- nextSep = undefined;
194
+ nextSep = undefined;
183
195
  }
184
196
 
185
- leftQ += currSep.sep + asValue(remainingStr.slice(currSep.idx + currSep.sep.length, nextIdx));
197
+ leftQ +=
198
+ currSep.sep +
199
+ asValue(
200
+ remainingStr.slice(currSep.idx + currSep.sep.length, nextIdx),
201
+ );
186
202
  currSep = nextSep;
187
203
  }
188
204
 
189
- /*
205
+ /*
190
206
  Is collapsed filter spec e.g. { "col.$ilike": 'text' }
191
207
  will transform into { col: { $ilike: ['text'] } }
192
208
  */
193
- } else if(remainingStr.startsWith(".")){
209
+ } else if (remainingStr.startsWith(".")) {
194
210
  leftQ = getLeftQ(selItem);
195
211
 
196
212
  const getSep = (fromIdx = 0) => {
197
213
  const idx = remainingStr.slice(fromIdx).indexOf(".");
198
- if(idx > -1) return fromIdx + idx;
199
- return idx;
200
- }
214
+ if (idx > -1) return fromIdx + idx;
215
+ return idx;
216
+ };
201
217
  let currIdx = getSep();
202
218
  const res: any = {};
203
219
  let curObj = res;
204
220
 
205
- while(currIdx > -1){
221
+ while (currIdx > -1) {
206
222
  let nextIdx = getSep(currIdx + 1);
207
- let nIdx = nextIdx > -1? nextIdx : remainingStr.length;
223
+ let nIdx = nextIdx > -1 ? nextIdx : remainingStr.length;
208
224
 
209
225
  /* If ending in dot then add dot as well into key */
210
- if(nextIdx + 1 === remainingStr.length) {
226
+ if (nextIdx + 1 === remainingStr.length) {
211
227
  nIdx = remainingStr.length;
212
228
  nextIdx = -1;
213
229
  }
214
230
 
215
231
  const key = remainingStr.slice(currIdx + 1, nIdx);
216
- curObj[key] = nextIdx > -1? {} : (_f as any)[fKey];
232
+ curObj[key] = nextIdx > -1 ? {} : (_f as any)[fKey];
217
233
  curObj = curObj[key];
218
234
 
219
235
  currIdx = nextIdx;
220
236
  }
221
-
237
+
222
238
  rightF = res;
223
239
  } else {
224
240
  // console.trace(141, select, selItem, remainingStr)
225
- mErr("Bad filter. Could not find the valid col name or alias or col json path")
241
+ mErr(
242
+ "Bad filter. Could not find the valid col name or alias or col json path",
243
+ );
226
244
  }
227
-
228
245
  } else {
229
246
  leftQ = getLeftQ(selItem);
230
247
  }
231
248
 
232
- if(!leftQ) mErr("Internal error: leftQ missing?!");
249
+ if (!leftQ) mErr("Internal error: leftQ missing?!");
233
250
 
234
- const parseRightVal = (val: any, expect?: "csv" | "array" | "json" | "jsonb") => {
251
+ const parseRightVal = (
252
+ val: any,
253
+ expect?: "csv" | "array" | "json" | "jsonb",
254
+ ) => {
235
255
  try {
236
256
  return parseFilterRightValue(val, { selectItem: selItem, expect });
237
- } catch(e: any){
257
+ } catch (e: any) {
238
258
  return mErr(e);
239
259
  }
240
- }
260
+ };
241
261
 
242
262
  /* Matching sel item */
243
- if(isObject(rightF)){
244
-
263
+ if (isObject(rightF)) {
245
264
  const filterKeys = Object.keys(rightF);
246
- let filterOperand: typeof FILTER_OPERANDS[number] = filterKeys[0] as any;
265
+ let filterOperand: (typeof FILTER_OPERANDS)[number] = filterKeys[0] as any;
247
266
 
248
267
  /** JSON cannot be compared so we'll cast it to TEXT */
249
- if(selItem?.column_udt_type === "json" || TextFilterKeys.includes(filterOperand as any)){
250
- leftQ += "::TEXT "
268
+ if (
269
+ selItem?.column_udt_type === "json" ||
270
+ TextFilterKeys.includes(filterOperand as any)
271
+ ) {
272
+ leftQ += "::TEXT ";
251
273
  }
252
274
 
253
275
  /** It's an object key which means it's an equality comparison against a json object */
254
- if(selItem?.column_udt_type?.startsWith("json") && !FILTER_OPERANDS.includes(filterOperand)){
276
+ if (
277
+ selItem?.column_udt_type?.startsWith("json") &&
278
+ !FILTER_OPERANDS.includes(filterOperand)
279
+ ) {
255
280
  return leftQ + " = " + parseRightVal(rightF);
256
- }
281
+ }
257
282
 
258
283
  let filterValue = rightF[filterOperand];
259
- const ALLOWED_FUNCS = [ ...GeomFilter_Funcs, ...TextFilter_FullTextSearchFilterKeys] as const;
260
- let funcName: undefined | typeof ALLOWED_FUNCS[number];
284
+ const ALLOWED_FUNCS = [
285
+ ...GeomFilter_Funcs,
286
+ ...TextFilter_FullTextSearchFilterKeys,
287
+ ] as const;
288
+ let funcName: undefined | (typeof ALLOWED_FUNCS)[number];
261
289
  let funcArgs: undefined | any[];
262
290
 
263
- if(selItem.column_udt_type === "interval" && isObject(rightF) && Object.values(rightF).every(v => Number.isFinite(v))){
291
+ if (
292
+ selItem.column_udt_type === "interval" &&
293
+ isObject(rightF) &&
294
+ Object.values(rightF).every((v) => Number.isFinite(v))
295
+ ) {
264
296
  filterOperand = "=";
265
- filterValue = Object.entries(rightF).map(([k, v]) => `${v}${k}`).join(" ");
266
-
267
- } else if(filterKeys.length !== 1 && selItem.column_udt_type !== "jsonb") {
297
+ filterValue = Object.entries(rightF)
298
+ .map(([k, v]) => `${v}${k}`)
299
+ .join(" ");
300
+ } else if (filterKeys.length !== 1 && selItem.column_udt_type !== "jsonb") {
268
301
  return mErr("Bad filter. Expecting one key only");
269
-
270
- } else if(isObject(filterValue) && !(filterValue instanceof Date)){
271
-
302
+ } else if (isObject(filterValue) && !(filterValue instanceof Date)) {
272
303
  /**
273
304
  * Filter notation
274
305
  * geom && st_makeenvelope(funcArgs)
275
306
  */
276
307
  const filterValueKeys = Object.keys(filterValue);
277
308
  funcName = filterValueKeys[0] as any;
278
- if(ALLOWED_FUNCS.includes(funcName as any)){
309
+ if (ALLOWED_FUNCS.includes(funcName as any)) {
279
310
  funcArgs = filterValue[funcName as any];
280
311
  } else {
281
312
  funcName = undefined;
282
313
  }
283
- }
314
+ }
284
315
 
285
316
  /** st_makeenvelope */
286
- if(GeomFilterKeys.includes(filterOperand as any) && funcName && GeomFilter_Funcs.includes(funcName as any)){
287
-
288
- /**
317
+ if (
318
+ GeomFilterKeys.includes(filterOperand as any) &&
319
+ funcName &&
320
+ GeomFilter_Funcs.includes(funcName as any)
321
+ ) {
322
+ /**
289
323
  * If leftQ is geography then:
290
- * - err can happen: 'Antipodal (180 degrees long) edge detected!'
324
+ * - err can happen: 'Antipodal (180 degrees long) edge detected!'
291
325
  * - inacurrate results at large envelopes due to the curvature of the earth
292
326
  * https://gis.stackexchange.com/questions/78816/maximum-size-on-the-bounding-box-with-st-makeenvelope-and-and-geography-colum
293
- */
294
- if(funcName.toLowerCase() === "st_makeenvelope") {
327
+ */
328
+ if (funcName.toLowerCase() === "st_makeenvelope") {
295
329
  leftQ += "::geometry";
296
330
  }
297
331
 
298
332
  return `${leftQ} ${filterOperand} ${funcName}${parseRightVal(funcArgs, "csv")}`;
299
-
300
- } else if(["=", "$eq"].includes(filterOperand) && !funcName){
301
- if(filterValue === null) return leftQ + " IS NULL ";
333
+ } else if (["=", "$eq"].includes(filterOperand) && !funcName) {
334
+ if (filterValue === null) return leftQ + " IS NULL ";
302
335
  return leftQ + " = " + parseRightVal(filterValue);
303
-
304
- } else if(["<>", "$ne"].includes(filterOperand)){
305
- if(filterValue === null) return leftQ + " IS NOT NULL ";
336
+ } else if (["<>", "$ne"].includes(filterOperand)) {
337
+ if (filterValue === null) return leftQ + " IS NOT NULL ";
306
338
  return leftQ + " <> " + parseRightVal(filterValue);
307
-
308
- } else if([">", "$gt"].includes(filterOperand)){
339
+ } else if ([">", "$gt"].includes(filterOperand)) {
309
340
  return leftQ + " > " + parseRightVal(filterValue);
310
-
311
- } else if(["<", "$lt"].includes(filterOperand)){
341
+ } else if (["<", "$lt"].includes(filterOperand)) {
312
342
  return leftQ + " < " + parseRightVal(filterValue);
313
-
314
- } else if([">=", "$gte"].includes(filterOperand)){
343
+ } else if ([">=", "$gte"].includes(filterOperand)) {
315
344
  return leftQ + " >= " + parseRightVal(filterValue);
316
-
317
- } else if(["<=", "$lte"].includes(filterOperand)){
345
+ } else if (["<=", "$lte"].includes(filterOperand)) {
318
346
  return leftQ + " <= " + parseRightVal(filterValue);
319
-
320
- } else if(["$in"].includes(filterOperand)){
321
- if(!filterValue?.length) {
347
+ } else if (["$in"].includes(filterOperand)) {
348
+ if (!filterValue?.length) {
322
349
  return " FALSE ";
323
350
  }
324
351
 
325
- const filterNonNullValues: any[] = filterValue.filter((v: any) => v !== null);
326
- let c1 = "", c2 = "";
327
- if(filterNonNullValues.length) {
352
+ const filterNonNullValues: any[] = filterValue.filter(
353
+ (v: any) => v !== null,
354
+ );
355
+ let c1 = "",
356
+ c2 = "";
357
+ if (filterNonNullValues.length) {
328
358
  c1 = leftQ + " IN " + parseRightVal(filterNonNullValues, "csv");
329
359
  }
330
- if(filterValue.includes(null)) {
360
+ if (filterValue.includes(null)) {
331
361
  c2 = ` ${leftQ} IS NULL `;
332
362
  }
333
- return [c1, c2].filter(c => c).join(" OR ");
334
-
335
- } else if(["$nin"].includes(filterOperand)){
336
- if(!filterValue?.length) {
363
+ return [c1, c2].filter((c) => c).join(" OR ");
364
+ } else if (["$nin"].includes(filterOperand)) {
365
+ if (!filterValue?.length) {
337
366
  return " TRUE ";
338
367
  }
339
368
 
340
- const nonNullFilterValues: any[] = filterValue.filter((v: any) => v !== null);
341
- let c1 = "", c2 = "";
342
- if(nonNullFilterValues.length) c1 = leftQ + " NOT IN " + parseRightVal(nonNullFilterValues, "csv");
343
- if(filterValue.includes(null)) c2 = ` ${leftQ} IS NOT NULL `;
344
- return [c1, c2].filter(c => c).join(" AND ");
345
-
346
- } else if(["$between"].includes(filterOperand)){
347
- if(!Array.isArray(filterValue) || filterValue.length !== 2){
369
+ const nonNullFilterValues: any[] = filterValue.filter(
370
+ (v: any) => v !== null,
371
+ );
372
+ let c1 = "",
373
+ c2 = "";
374
+ if (nonNullFilterValues.length)
375
+ c1 = leftQ + " NOT IN " + parseRightVal(nonNullFilterValues, "csv");
376
+ if (filterValue.includes(null)) c2 = ` ${leftQ} IS NOT NULL `;
377
+ return [c1, c2].filter((c) => c).join(" AND ");
378
+ } else if (["$between"].includes(filterOperand)) {
379
+ if (!Array.isArray(filterValue) || filterValue.length !== 2) {
348
380
  return mErr("Between filter expects an array of two values");
349
381
  }
350
- return leftQ + " BETWEEN " + asValue(filterValue[0]) + " AND " + asValue(filterValue[1]);
351
-
352
- } else if(["$ilike"].includes(filterOperand)){
382
+ return (
383
+ leftQ +
384
+ " BETWEEN " +
385
+ asValue(filterValue[0]) +
386
+ " AND " +
387
+ asValue(filterValue[1])
388
+ );
389
+ } else if (["$ilike"].includes(filterOperand)) {
353
390
  return leftQ + " ILIKE " + asValue(filterValue);
354
-
355
- } else if(["$like"].includes(filterOperand)){
391
+ } else if (["$like"].includes(filterOperand)) {
356
392
  return leftQ + " LIKE " + asValue(filterValue);
357
-
358
- } else if(["$nilike"].includes(filterOperand)){
393
+ } else if (["$nilike"].includes(filterOperand)) {
359
394
  return leftQ + " NOT ILIKE " + asValue(filterValue);
360
-
361
- } else if(["$nlike"].includes(filterOperand)){
395
+ } else if (["$nlike"].includes(filterOperand)) {
362
396
  return leftQ + " NOT LIKE " + asValue(filterValue);
363
-
364
- } else if(filterOperand === "$isDistinctFrom" || filterOperand === "$isNotDistinctFrom"){
397
+ } else if (
398
+ filterOperand === "$isDistinctFrom" ||
399
+ filterOperand === "$isNotDistinctFrom"
400
+ ) {
365
401
  const operator = FILTER_OPERAND_TO_SQL_OPERAND[filterOperand];
366
402
  return leftQ + ` ${operator} ` + asValue(filterValue);
367
403
 
368
- /* MAYBE TEXT OR MAYBE ARRAY */
369
- } else if(["@>", "<@", "$contains", "$containedBy", "$overlaps", "&&", "@@"].includes(filterOperand)){
370
- const operand = filterOperand === "@@"? "@@":
371
- ["@>", "$contains"].includes(filterOperand)? "@>" :
372
- ["&&", "$overlaps"].includes(filterOperand)? "&&" :
373
- "<@";
404
+ /* MAYBE TEXT OR MAYBE ARRAY */
405
+ } else if (
406
+ [
407
+ "@>",
408
+ "<@",
409
+ "$contains",
410
+ "$containedBy",
411
+ "$overlaps",
412
+ "&&",
413
+ "@@",
414
+ ].includes(filterOperand)
415
+ ) {
416
+ const operand =
417
+ filterOperand === "@@"
418
+ ? "@@"
419
+ : ["@>", "$contains"].includes(filterOperand)
420
+ ? "@>"
421
+ : ["&&", "$overlaps"].includes(filterOperand)
422
+ ? "&&"
423
+ : "<@";
374
424
 
375
425
  /* Array for sure */
376
- if(Array.isArray(filterValue)){
426
+ if (Array.isArray(filterValue)) {
377
427
  return leftQ + operand + parseRightVal(filterValue, "array");
378
-
379
- /* FTSQuery */
380
- } else if(["@@"].includes(filterOperand) && TextFilter_FullTextSearchFilterKeys.includes(funcName! as any)) {
428
+
429
+ /* FTSQuery */
430
+ } else if (
431
+ ["@@"].includes(filterOperand) &&
432
+ TextFilter_FullTextSearchFilterKeys.includes(funcName! as any)
433
+ ) {
381
434
  let lq = `to_tsvector(${leftQ}::text)`;
382
- if(selItem && selItem.columnPGDataType === "tsvector") lq = leftQ!;
435
+ if (selItem && selItem.columnPGDataType === "tsvector") lq = leftQ!;
383
436
 
384
- const res = `${lq} ${operand} ` + `${funcName}${parseRightVal(funcArgs, "csv")}`;
437
+ const res =
438
+ `${lq} ${operand} ` + `${funcName}${parseRightVal(funcArgs, "csv")}`;
385
439
 
386
440
  return res;
387
441
  } else {
388
442
  return mErr("Unrecognised filter operand: " + filterOperand + " ");
389
443
  }
390
-
391
444
  } else {
392
-
393
445
  return mErr("Unrecognised filter operand: " + filterOperand + " ");
394
446
  }
395
-
396
-
397
447
  } else {
398
-
399
448
  /* Is an equal filter */
400
- if(rightF === null){
449
+ if (rightF === null) {
401
450
  return leftQ + " IS NULL ";
402
451
  } else {
403
-
404
452
  /**
405
453
  * Ensure that when comparing an array to a json column, the array is cast to json
406
454
  */
407
455
  let valueStr = asValue(rightF);
408
- if(selItem?.column_udt_type?.startsWith("json") && Array.isArray(rightF)){
456
+ if (
457
+ selItem?.column_udt_type?.startsWith("json") &&
458
+ Array.isArray(rightF)
459
+ ) {
409
460
  valueStr = pgp.as.format(`$1::jsonb`, [JSON.stringify(rightF)]);
410
- }
461
+ }
411
462
  return `${leftQ} = ${valueStr}`;
412
463
  }
413
464
  }
414
- }
465
+ };
415
466
 
416
467
  type ParseRightValOpts = {
417
468
  expect?: "csv" | "array" | "json" | "jsonb";
418
469
  selectItem: SelectItem | undefined;
419
- }
420
- export const parseFilterRightValue = (val: any, { expect, selectItem }: ParseRightValOpts) => {
470
+ };
471
+ export const parseFilterRightValue = (
472
+ val: any,
473
+ { expect, selectItem }: ParseRightValOpts,
474
+ ) => {
421
475
  const asValue = (v: any) => pgp.as.format("$1", [v]);
422
476
  const checkIfArr = () => {
423
- if(!Array.isArray(val)) {
477
+ if (!Array.isArray(val)) {
424
478
  throw "This type of filter/column expects an Array of items";
425
479
  }
426
- }
427
- if(expect === "csv" || expect?.startsWith("json")){
480
+ };
481
+ if (expect === "csv" || expect?.startsWith("json")) {
428
482
  checkIfArr();
429
483
  return pgp.as.format(`($1:${expect})`, [val]);
430
-
431
- } else if(expect === "array" || selectItem?.columnPGDataType === "ARRAY"){
432
- checkIfArr();
484
+ } else if (expect === "array" || selectItem?.columnPGDataType === "ARRAY") {
485
+ checkIfArr();
433
486
  return pgp.as.format(" ARRAY[$1:csv]", [val]);
434
-
435
487
  }
436
488
 
437
489
  return asValue(val);
438
- }
490
+ };
439
491
 
440
492
  // ensure pgp is not NULL!!!
441
493
  // const asValue = v => v;// pgp.as.value;
442
494
 
443
495
  // const filters: FilterSpec[] = [
444
- // ...(["ilike", "like"].map(op => ({
496
+ // ...(["ilike", "like"].map(op => ({
445
497
  // operands: ["$" + op],
446
498
  // tsDataTypes: ["any"] as TSDataType[],
447
499
  // tsDefinition: ` { $${op}: string } `,
448
- // // data_types:
500
+ // // data_types:
449
501
  // getQuery: (leftQuery: string, rightVal: any) => {
450
- // return `${leftQuery}::text ${op.toUpperCase()} ${asValue(rightVal)}::text`
502
+ // return `${leftQuery}::text ${op.toUpperCase()} ${asValue(rightVal)}::text`
451
503
  // }
452
504
  // }))),
453
- // {
505
+ // {
454
506
  // operands: ["", "="],
455
507
  // tsDataTypes: ["any"],
456
508
  // tsDefinition: ` { "=": any } | any `,
457
- // // data_types:
509
+ // // data_types:
458
510
  // getQuery: (leftQuery: string, rightVal: any) => {
459
511
  // if(rightVal === null) return`${leftQuery} IS NULL `;
460
512
  // return `${leftQuery} = ${asValue(rightVal)}`;
461
513
  // }
462
514
  // }
463
- // ];
515
+ // ];