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
@@ -1,11 +1,17 @@
1
- import { AnyObject, getKeys, InsertParams, isDefined, isObject } from "prostgles-types";
1
+ import {
2
+ AnyObject,
3
+ getKeys,
4
+ InsertParams,
5
+ isDefined,
6
+ isObject,
7
+ } from "prostgles-types";
2
8
  import { LocalParams, TableHandlers } from "./DboBuilder";
3
9
  import { TableRule } from "../PublishParser/PublishParser";
4
10
  import { omitKeys } from "../PubSubManager/PubSubManager";
5
11
  import { TableHandler } from "./TableHandler/TableHandler";
6
12
 
7
13
  type InsertNestedRecordsArgs = {
8
- data: (AnyObject | AnyObject[]);
14
+ data: AnyObject | AnyObject[];
9
15
  param2?: InsertParams;
10
16
  tableRules?: TableRule;
11
17
  localParams?: LocalParams;
@@ -16,34 +22,29 @@ type InsertNestedRecordsArgs = {
16
22
  */
17
23
  export async function insertNestedRecords(
18
24
  this: TableHandler,
19
- {
20
- data,
21
- param2,
22
- tableRules,
23
- localParams = {},
24
- }: InsertNestedRecordsArgs
25
+ { data, param2, tableRules, localParams = {} }: InsertNestedRecordsArgs,
25
26
  ): Promise<{
26
27
  data?: AnyObject | AnyObject[];
27
28
  insertResult?: AnyObject | AnyObject[];
28
- }> {
29
+ }> {
29
30
  const MEDIA_COL_NAMES = ["data", "name"];
30
31
 
31
- const getExtraKeys = (row: AnyObject) => getKeys(row).filter(fieldName => {
32
- /* If media then use file insert columns */
33
- if (this.is_media) {
34
- return !this.column_names.concat(MEDIA_COL_NAMES).includes(fieldName)
35
- } else if (!this.columns.find(c => c.name === fieldName)) {
36
- if (!isObject(row[fieldName]) && !Array.isArray(row[fieldName])) {
37
- throw new Error("Invalid/Dissalowed field in data: " + fieldName)
38
- } else if (!this.dboBuilder.dbo[fieldName]) {
39
- return false;
40
- // throw new Error("Invalid/Dissalowed nested insert table name in data: " + fieldName)
32
+ const getExtraKeys = (row: AnyObject) =>
33
+ getKeys(row).filter((fieldName) => {
34
+ /* If media then use file insert columns */
35
+ if (this.is_media) {
36
+ return !this.column_names.concat(MEDIA_COL_NAMES).includes(fieldName);
37
+ } else if (!this.columns.find((c) => c.name === fieldName)) {
38
+ if (!isObject(row[fieldName]) && !Array.isArray(row[fieldName])) {
39
+ throw new Error("Invalid/Dissalowed field in data: " + fieldName);
40
+ } else if (!this.dboBuilder.dbo[fieldName]) {
41
+ return false;
42
+ // throw new Error("Invalid/Dissalowed nested insert table name in data: " + fieldName)
43
+ }
44
+ return true;
41
45
  }
42
- return true;
43
- }
44
- return false;
45
- });
46
-
46
+ return false;
47
+ });
47
48
 
48
49
  /**
49
50
  * True when: nested table data is provided within
@@ -51,10 +52,15 @@ export async function insertNestedRecords(
51
52
  * OR
52
53
  * [referencing_column] property key
53
54
  * If true then will do the full insert within this function
54
- * Nested insert is not allowed for the file table
55
+ * Nested insert is not allowed for the file table
55
56
  * */
56
57
  const isMultiInsert = Array.isArray(data);
57
- const hasNestedInserts = this.is_media ? false : (isMultiInsert ? data : [data]).some(d => getExtraKeys(d).length || getReferenceColumnInserts(this, d).length);
58
+ const hasNestedInserts = this.is_media
59
+ ? false
60
+ : (isMultiInsert ? data : [data]).some(
61
+ (d) =>
62
+ getExtraKeys(d).length || getReferenceColumnInserts(this, d).length,
63
+ );
58
64
 
59
65
  /**
60
66
  * Make sure nested insert uses a transaction
@@ -69,242 +75,363 @@ export async function insertNestedRecords(
69
75
  param2,
70
76
  undefined,
71
77
  tableRules,
72
- { tx: { dbTX, t: _t }, ...localParams }
73
- )
74
- )
75
- }
78
+ { tx: { dbTX, t: _t }, ...localParams },
79
+ ),
80
+ ),
81
+ };
76
82
  }
77
-
78
-
79
- const _data = await Promise.all((isMultiInsert ? data : [data]).map(async row => {
80
- // const { preValidate, validate } = tableRules?.insert ?? {};
81
- // const { tableConfigurator } = this.dboBuilder.prostgles;
82
- // if(!tableConfigurator) throw "tableConfigurator missing";
83
- // let row = await tableConfigurator.getPreInsertRow(this, { dbx: this.getFinalDbo(localParams), validate, localParams, row: _row })
84
- // if (preValidate) {
85
- // row = await preValidate({ row, dbx: this.tx?.dbTX || this.dboBuilder.dbo, localParams });
86
- // }
87
-
88
- /* Potentially a nested join */
89
- if (hasNestedInserts) {
90
- const extraKeys = getExtraKeys(row);
91
- const colInserts = getReferenceColumnInserts(this, row);
92
-
93
- /* Ensure we're using the same transaction */
94
- const _this = this.tx ? this : dbTX![this.name] as TableHandler;
95
-
96
- const omitedKeys = extraKeys.concat(colInserts.map(c => c.col));
97
-
98
- const rootData: AnyObject = omitKeys(row, omitedKeys);
99
-
100
- let insertedChildren: AnyObject[];
101
- let targetTableRules: TableRule;
102
-
103
- const colInsertsResult = colInserts.map(ci => ({
104
- ...ci,
105
- inserted: undefined as AnyObject[] | undefined
106
- }));
107
- /** Insert referenced first and then populate root data with referenced keys */
108
- if (colInserts.length) {
109
- for await (const colInsert of colInsertsResult) {
110
- const newLocalParams: LocalParams = {
111
- ...(localParams ?? {}),
112
- nestedInsert: {
113
- depth: (localParams.nestedInsert?.depth ?? 0) + 1,
114
- previousData: rootData,
115
- previousTable: this.name,
116
- referencingColumn: colInsert.col
117
- }
118
- }
119
- const colRows = await referencedInsert(_this, dbTX, newLocalParams, colInsert.tableName, row[colInsert.col]);
120
- if (!Array.isArray(colRows) || colRows.length !== 1 || [null, undefined].includes(colRows[0]![colInsert.fcol])) {
121
- throw new Error("Could not do nested column insert: Unexpected return " + JSON.stringify(colRows))
122
- }
123
- colInsert.inserted = colRows;
124
-
125
- const foreignKey = colRows[0]![colInsert.fcol];
126
- rootData[colInsert.col] = foreignKey;
127
- }
128
- }
129
-
130
- const fullRootResult = await _this.insert(rootData, { returning: "*" }, undefined, tableRules, localParams);
131
- let returnData: AnyObject | undefined;
132
- const returning = param2?.returning;
133
- if (returning) {
134
- returnData = {}
135
- const returningItems = await this.prepareReturning(returning, this.parseFieldFilter(tableRules?.insert?.returningFields));
136
- returningItems.filter(s => s.selected).map(rs => {
137
- const colInsertResult = colInsertsResult.find(({ col }) => col === rs.columnName);
138
- const inserted = colInsertResult?.singleInsert? colInsertResult.inserted?.[0] : colInsertResult?.inserted;
139
- returnData![rs.alias] = inserted ?? fullRootResult[rs.alias];
140
- })
141
- }
142
-
143
- await Promise.all(extraKeys.map(async targetTable => {
144
- const childDataItems = Array.isArray(row[targetTable]) ? row[targetTable] : [row[targetTable]];
145
-
146
- const childInsert = async (cdata: AnyObject | AnyObject[], tableName: string) => {
147
-
148
- return referencedInsert(this, dbTX, localParams, tableName, cdata);
149
- }
150
-
151
- const joinPath = await getJoinPath(this, targetTable);
152
83
 
153
- const { path } = joinPath;
154
- const [tbl1, tbl2, tbl3] = path;
155
- targetTableRules = await getInsertTableRules(this, targetTable, localParams); // tbl3
156
-
157
- const cols2 = this.dboBuilder.dbo[tbl2!]!.columns || [];
158
- if (!this.dboBuilder.dbo[tbl2!]) throw "Invalid/disallowed table: " + tbl2;
159
- const colsRefT1 = cols2?.filter(c => c.references?.some(rc => rc.cols.length === 1 && rc.ftable === tbl1));
160
-
161
-
162
- if (!path.length) {
163
- throw "Nested inserts join path not found for " + [this.name, targetTable];
164
- } else if (path.length === 2) {
165
- if (targetTable !== tbl2) throw "Did not expect this";
166
-
167
- if (!colsRefT1.length) {
168
- throw `Target table ${tbl2} does not reference any columns from the root table ${this.name}. Cannot insert nested data`;
169
- }
170
-
171
- insertedChildren = await childInsert(
172
- childDataItems.map((d: AnyObject) => {
173
- const result = { ...d };
174
- colsRefT1.map(col => {
175
- result[col.references![0]!.cols[0]!] = fullRootResult[col.references![0]!.fcols[0]!]
176
- })
177
- return result;
178
- }),
179
- targetTable
180
- );
181
-
182
- } else if (path.length === 3) {
183
- if (targetTable !== tbl3) throw "Did not expect this";
184
- const colsRefT3 = cols2?.filter(c => c.references?.some(rc => rc.cols.length === 1 && rc.ftable === tbl3));
185
- if (!colsRefT1.length || !colsRefT3.length) throw "Incorrectly referenced or missing columns for nested insert";
186
-
187
- const fileTable = this.dboBuilder.prostgles.fileManager?.tableName;
188
- if (targetTable !== fileTable) {
189
- throw "Only media allowed to have nested inserts more than 2 tables apart"
190
- }
84
+ const _data = await Promise.all(
85
+ (isMultiInsert ? data : [data]).map(async (row) => {
86
+ // const { preValidate, validate } = tableRules?.insert ?? {};
87
+ // const { tableConfigurator } = this.dboBuilder.prostgles;
88
+ // if(!tableConfigurator) throw "tableConfigurator missing";
89
+ // let row = await tableConfigurator.getPreInsertRow(this, { dbx: this.getFinalDbo(localParams), validate, localParams, row: _row })
90
+ // if (preValidate) {
91
+ // row = await preValidate({ row, dbx: this.tx?.dbTX || this.dboBuilder.dbo, localParams });
92
+ // }
93
+
94
+ /* Potentially a nested join */
95
+ if (hasNestedInserts) {
96
+ const extraKeys = getExtraKeys(row);
97
+ const colInserts = getReferenceColumnInserts(this, row);
98
+
99
+ /* Ensure we're using the same transaction */
100
+ const _this = this.tx ? this : (dbTX![this.name] as TableHandler);
101
+
102
+ const omitedKeys = extraKeys.concat(colInserts.map((c) => c.col));
103
+
104
+ const rootData: AnyObject = omitKeys(row, omitedKeys);
105
+
106
+ let insertedChildren: AnyObject[];
107
+ let targetTableRules: TableRule;
108
+
109
+ const colInsertsResult = colInserts.map((ci) => ({
110
+ ...ci,
111
+ inserted: undefined as AnyObject[] | undefined,
112
+ }));
113
+ /** Insert referenced first and then populate root data with referenced keys */
114
+ if (colInserts.length) {
115
+ for await (const colInsert of colInsertsResult) {
116
+ const newLocalParams: LocalParams = {
117
+ ...(localParams ?? {}),
118
+ nestedInsert: {
119
+ depth: (localParams.nestedInsert?.depth ?? 0) + 1,
120
+ previousData: rootData,
121
+ previousTable: this.name,
122
+ referencingColumn: colInsert.col,
123
+ },
124
+ };
125
+ const colRows = await referencedInsert(
126
+ _this,
127
+ dbTX,
128
+ newLocalParams,
129
+ colInsert.tableName,
130
+ row[colInsert.col],
131
+ );
132
+ if (
133
+ !Array.isArray(colRows) ||
134
+ colRows.length !== 1 ||
135
+ [null, undefined].includes(colRows[0]![colInsert.fcol])
136
+ ) {
137
+ throw new Error(
138
+ "Could not do nested column insert: Unexpected return " +
139
+ JSON.stringify(colRows),
140
+ );
141
+ }
142
+ colInsert.inserted = colRows;
191
143
 
192
- /* We expect tbl2 to have only 2 columns (media_id and foreign_id) */
193
- if (!cols2 || !(
194
- cols2.filter(c => c.references?.[0]?.ftable === fileTable).length === 1 &&
195
- cols2.filter(c => c.references?.[0]?.ftable === _this.name).length === 1
196
- )) {
197
- console.log({ tbl1, tbl2, tbl3, name: _this.name, tthisName: this.name })
198
- throw "Second joining table (" + tbl2 + ") not of expected format. Must contain exactly one reference column for each table (file table and target table) ";
144
+ const foreignKey = colRows[0]![colInsert.fcol];
145
+ rootData[colInsert.col] = foreignKey;
199
146
  }
200
-
201
- insertedChildren = await childInsert(childDataItems, targetTable);
202
-
203
- /* Insert in key_lookup table */
204
- await Promise.all(insertedChildren.map(async t3Child => {
205
- const tbl2Row: AnyObject = {};
206
-
207
- colsRefT3.map(col => {
208
- tbl2Row[col.name] = t3Child[col.references![0]!.fcols[0]!];
209
- })
210
- colsRefT1.map(col => {
211
- tbl2Row[col.name] = fullRootResult[col.references![0]!.fcols[0]!];
212
- })
213
-
214
- await childInsert(tbl2Row, tbl2!);//.then(() => {});
215
- }));
216
-
217
- } else {
218
- console.error(JSON.stringify({ path, thisTable: this.name, targetTable }, null, 2));
219
- throw "Unexpected path for Nested inserts";
220
147
  }
221
148
 
222
- /* Return also the nested inserted data */
223
- if (targetTableRules && insertedChildren?.length && returning) {
224
- const targetTableHandler = dbTX![targetTable] as TableHandler;
225
- const targetReturning = await targetTableHandler.prepareReturning("*", targetTableHandler.parseFieldFilter(targetTableRules?.insert?.returningFields));
226
- const clientTargetInserts = insertedChildren.map(d => {
227
- const _d = { ...d };
228
- const res: AnyObject = {};
229
- targetReturning.map(r => {
230
- res[r.alias] = _d[r.alias]
149
+ const fullRootResult = await _this.insert(
150
+ rootData,
151
+ { returning: "*" },
152
+ undefined,
153
+ tableRules,
154
+ localParams,
155
+ );
156
+ let returnData: AnyObject | undefined;
157
+ const returning = param2?.returning;
158
+ if (returning) {
159
+ returnData = {};
160
+ const returningItems = await this.prepareReturning(
161
+ returning,
162
+ this.parseFieldFilter(tableRules?.insert?.returningFields),
163
+ );
164
+ returningItems
165
+ .filter((s) => s.selected)
166
+ .map((rs) => {
167
+ const colInsertResult = colInsertsResult.find(
168
+ ({ col }) => col === rs.columnName,
169
+ );
170
+ const inserted = colInsertResult?.singleInsert
171
+ ? colInsertResult.inserted?.[0]
172
+ : colInsertResult?.inserted;
173
+ returnData![rs.alias] = inserted ?? fullRootResult[rs.alias];
231
174
  });
232
- return res;
233
- });
234
-
235
- returnData![targetTable] = clientTargetInserts.length === 1 ? clientTargetInserts[0] : clientTargetInserts;
236
175
  }
237
- }));
238
176
 
239
- return returnData
240
- }
177
+ await Promise.all(
178
+ extraKeys.map(async (targetTable) => {
179
+ const childDataItems = Array.isArray(row[targetTable])
180
+ ? row[targetTable]
181
+ : [row[targetTable]];
182
+
183
+ const childInsert = async (
184
+ cdata: AnyObject | AnyObject[],
185
+ tableName: string,
186
+ ) => {
187
+ return referencedInsert(
188
+ this,
189
+ dbTX,
190
+ localParams,
191
+ tableName,
192
+ cdata,
193
+ );
194
+ };
195
+
196
+ const joinPath = await getJoinPath(this, targetTable);
197
+
198
+ const { path } = joinPath;
199
+ const [tbl1, tbl2, tbl3] = path;
200
+ targetTableRules = await getInsertTableRules(
201
+ this,
202
+ targetTable,
203
+ localParams,
204
+ ); // tbl3
205
+
206
+ const cols2 = this.dboBuilder.dbo[tbl2!]!.columns || [];
207
+ if (!this.dboBuilder.dbo[tbl2!])
208
+ throw "Invalid/disallowed table: " + tbl2;
209
+ const colsRefT1 = cols2?.filter((c) =>
210
+ c.references?.some(
211
+ (rc) => rc.cols.length === 1 && rc.ftable === tbl1,
212
+ ),
213
+ );
214
+
215
+ if (!path.length) {
216
+ throw (
217
+ "Nested inserts join path not found for " +
218
+ [this.name, targetTable]
219
+ );
220
+ } else if (path.length === 2) {
221
+ if (targetTable !== tbl2) throw "Did not expect this";
222
+
223
+ if (!colsRefT1.length) {
224
+ throw `Target table ${tbl2} does not reference any columns from the root table ${this.name}. Cannot insert nested data`;
225
+ }
226
+
227
+ insertedChildren = await childInsert(
228
+ childDataItems.map((d: AnyObject) => {
229
+ const result = { ...d };
230
+ colsRefT1.map((col) => {
231
+ result[col.references![0]!.cols[0]!] =
232
+ fullRootResult[col.references![0]!.fcols[0]!];
233
+ });
234
+ return result;
235
+ }),
236
+ targetTable,
237
+ );
238
+ } else if (path.length === 3) {
239
+ if (targetTable !== tbl3) throw "Did not expect this";
240
+ const colsRefT3 = cols2?.filter((c) =>
241
+ c.references?.some(
242
+ (rc) => rc.cols.length === 1 && rc.ftable === tbl3,
243
+ ),
244
+ );
245
+ if (!colsRefT1.length || !colsRefT3.length)
246
+ throw "Incorrectly referenced or missing columns for nested insert";
247
+
248
+ const fileTable =
249
+ this.dboBuilder.prostgles.fileManager?.tableName;
250
+ if (targetTable !== fileTable) {
251
+ throw "Only media allowed to have nested inserts more than 2 tables apart";
252
+ }
253
+
254
+ /* We expect tbl2 to have only 2 columns (media_id and foreign_id) */
255
+ if (
256
+ !cols2 ||
257
+ !(
258
+ cols2.filter((c) => c.references?.[0]?.ftable === fileTable)
259
+ .length === 1 &&
260
+ cols2.filter((c) => c.references?.[0]?.ftable === _this.name)
261
+ .length === 1
262
+ )
263
+ ) {
264
+ console.log({
265
+ tbl1,
266
+ tbl2,
267
+ tbl3,
268
+ name: _this.name,
269
+ tthisName: this.name,
270
+ });
271
+ throw (
272
+ "Second joining table (" +
273
+ tbl2 +
274
+ ") not of expected format. Must contain exactly one reference column for each table (file table and target table) "
275
+ );
276
+ }
277
+
278
+ insertedChildren = await childInsert(childDataItems, targetTable);
279
+
280
+ /* Insert in key_lookup table */
281
+ await Promise.all(
282
+ insertedChildren.map(async (t3Child) => {
283
+ const tbl2Row: AnyObject = {};
284
+
285
+ colsRefT3.map((col) => {
286
+ tbl2Row[col.name] = t3Child[col.references![0]!.fcols[0]!];
287
+ });
288
+ colsRefT1.map((col) => {
289
+ tbl2Row[col.name] =
290
+ fullRootResult[col.references![0]!.fcols[0]!];
291
+ });
292
+
293
+ await childInsert(tbl2Row, tbl2!); //.then(() => {});
294
+ }),
295
+ );
296
+ } else {
297
+ console.error(
298
+ JSON.stringify(
299
+ { path, thisTable: this.name, targetTable },
300
+ null,
301
+ 2,
302
+ ),
303
+ );
304
+ throw "Unexpected path for Nested inserts";
305
+ }
306
+
307
+ /* Return also the nested inserted data */
308
+ if (targetTableRules && insertedChildren?.length && returning) {
309
+ const targetTableHandler = dbTX![targetTable] as TableHandler;
310
+ const targetReturning = await targetTableHandler.prepareReturning(
311
+ "*",
312
+ targetTableHandler.parseFieldFilter(
313
+ targetTableRules?.insert?.returningFields,
314
+ ),
315
+ );
316
+ const clientTargetInserts = insertedChildren.map((d) => {
317
+ const _d = { ...d };
318
+ const res: AnyObject = {};
319
+ targetReturning.map((r) => {
320
+ res[r.alias] = _d[r.alias];
321
+ });
322
+ return res;
323
+ });
324
+
325
+ returnData![targetTable] =
326
+ clientTargetInserts.length === 1
327
+ ? clientTargetInserts[0]
328
+ : clientTargetInserts;
329
+ }
330
+ }),
331
+ );
332
+
333
+ return returnData;
334
+ }
241
335
 
242
- return row;
243
- }));
336
+ return row;
337
+ }),
338
+ );
244
339
 
245
340
  const result = isMultiInsert ? _data : _data[0];
246
- const res = hasNestedInserts ?
247
- { insertResult: result } :
248
- { data: result };
341
+ const res = hasNestedInserts ? { insertResult: result } : { data: result };
249
342
 
250
343
  return res;
251
344
  }
252
345
 
253
346
  /* Must be allowed to insert into referenced table */
254
- export const getInsertTableRules = async (tableHandler: TableHandler, targetTable: string, localParams: LocalParams) => {
255
- const childRules = await tableHandler.dboBuilder.publishParser?.getValidatedRequestRuleWusr({ tableName: targetTable, command: "insert", localParams });
256
- if (!childRules || !childRules.insert) throw "Dissallowed nested insert into table " + childRules;
347
+ export const getInsertTableRules = async (
348
+ tableHandler: TableHandler,
349
+ targetTable: string,
350
+ localParams: LocalParams,
351
+ ) => {
352
+ const childRules =
353
+ await tableHandler.dboBuilder.publishParser?.getValidatedRequestRuleWusr({
354
+ tableName: targetTable,
355
+ command: "insert",
356
+ localParams,
357
+ });
358
+ if (!childRules || !childRules.insert)
359
+ throw "Dissallowed nested insert into table " + childRules;
257
360
  return childRules;
258
- }
361
+ };
259
362
 
260
- const getJoinPath = async (tableHandler: TableHandler, targetTable: string): Promise<{
363
+ const getJoinPath = async (
364
+ tableHandler: TableHandler,
365
+ targetTable: string,
366
+ ): Promise<{
261
367
  t1: string;
262
368
  t2: string;
263
369
  path: string[];
264
370
  }> => {
265
-
266
- const jp = tableHandler.dboBuilder.getShortestJoinPath(tableHandler, targetTable);
371
+ const jp = tableHandler.dboBuilder.getShortestJoinPath(
372
+ tableHandler,
373
+ targetTable,
374
+ );
267
375
  if (!jp) {
268
- const pref = tableHandler.dboBuilder.prostgles.opts.joins !== "inferred" ? "Joins are not inferred! " : ""
269
- throw new Error(`${pref}Could not find a single join path for the nested data ( sourceTable: ${tableHandler.name} targetTable: ${targetTable} ) `);
376
+ const pref =
377
+ tableHandler.dboBuilder.prostgles.opts.joins !== "inferred"
378
+ ? "Joins are not inferred! "
379
+ : "";
380
+ throw new Error(
381
+ `${pref}Could not find a single join path for the nested data ( sourceTable: ${tableHandler.name} targetTable: ${targetTable} ) `,
382
+ );
270
383
  }
271
384
  return jp;
272
- }
273
-
274
- const referencedInsert = async (tableHandler: TableHandler, dbTX: TableHandlers | undefined, localParams: LocalParams, targetTable: string, targetData: AnyObject | AnyObject[]): Promise<AnyObject[]> => {
275
-
385
+ };
276
386
 
387
+ const referencedInsert = async (
388
+ tableHandler: TableHandler,
389
+ dbTX: TableHandlers | undefined,
390
+ localParams: LocalParams,
391
+ targetTable: string,
392
+ targetData: AnyObject | AnyObject[],
393
+ ): Promise<AnyObject[]> => {
277
394
  // const thisInfo = await tableHandler.getInfo();
278
395
  await getJoinPath(tableHandler, targetTable);
279
396
 
280
- if (!targetData || !dbTX?.[targetTable] || !("insert" in dbTX[targetTable]!)) {
281
- throw new Error("childInsertErr: Table handler missing for referenced table: " + targetTable);
397
+ if (
398
+ !targetData ||
399
+ !dbTX?.[targetTable] ||
400
+ !("insert" in dbTX[targetTable]!)
401
+ ) {
402
+ throw new Error(
403
+ "childInsertErr: Table handler missing for referenced table: " +
404
+ targetTable,
405
+ );
282
406
  }
283
407
 
284
- const childRules = await getInsertTableRules(tableHandler, targetTable, localParams);
408
+ const childRules = await getInsertTableRules(
409
+ tableHandler,
410
+ targetTable,
411
+ localParams,
412
+ );
285
413
 
286
414
  // if (thisInfo.has_media === "one" && thisInfo.media_table_name === targetTable && Array.isArray(targetData) && targetData.length > 1) {
287
415
  // throw "Constraint check fail: Cannot insert more than one record into " + JSON.stringify(targetTable);
288
416
  // }
289
417
  return Promise.all(
290
- (Array.isArray(targetData) ? targetData : [targetData])
291
- .map(m => (dbTX![targetTable] as TableHandler)
418
+ (Array.isArray(targetData) ? targetData : [targetData]).map((m) =>
419
+ (dbTX![targetTable] as TableHandler)
292
420
  .insert(m, { returning: "*" }, undefined, childRules, localParams)
293
- .catch(e => {
294
- return Promise.reject(e);
295
- })
296
- )
421
+ .catch((e) => {
422
+ return Promise.reject(e);
423
+ }),
424
+ ),
297
425
  );
298
-
299
- }
426
+ };
300
427
 
301
428
  type ReferenceColumnInsert<ExpectSingleInsert> = {
302
429
  tableName: string;
303
430
  col: string;
304
431
  fcol: string;
305
432
  singleInsert: boolean;
306
- data: ExpectSingleInsert extends true? AnyObject : (AnyObject | AnyObject[]);
307
- }
433
+ data: ExpectSingleInsert extends true ? AnyObject : AnyObject | AnyObject[];
434
+ };
308
435
 
309
436
  /**
310
437
  * Insert through the reference column. e.g.:
@@ -313,34 +440,41 @@ type ReferenceColumnInsert<ExpectSingleInsert> = {
313
440
  * fkey_column: { ...referenced_table_data }
314
441
  * }
315
442
  */
316
- export const getReferenceColumnInserts = <ExpectSingleInsert extends boolean>(tableHandler: TableHandler, parentRow: AnyObject, expectSingleInsert?: ExpectSingleInsert): ReferenceColumnInsert<ExpectSingleInsert>[] => {
443
+ export const getReferenceColumnInserts = <ExpectSingleInsert extends boolean>(
444
+ tableHandler: TableHandler,
445
+ parentRow: AnyObject,
446
+ expectSingleInsert?: ExpectSingleInsert,
447
+ ): ReferenceColumnInsert<ExpectSingleInsert>[] => {
317
448
  return Object.entries(parentRow)
318
449
  .map(([insertedFieldName, insertedFieldValue]) => {
319
- if(insertedFieldValue && isObject(insertedFieldValue)){
320
- const insertedRefCol = tableHandler.columns.find(c => c.name === insertedFieldName && c.references?.length);
321
- if(!insertedRefCol) return undefined;
450
+ if (insertedFieldValue && isObject(insertedFieldValue)) {
451
+ const insertedRefCol = tableHandler.columns.find(
452
+ (c) => c.name === insertedFieldName && c.references?.length,
453
+ );
454
+ if (!insertedRefCol) return undefined;
322
455
  return {
323
456
  insertedRefCol,
324
- insertedRefColRef: insertedRefCol.references!
325
- }
457
+ insertedRefColRef: insertedRefCol.references!,
458
+ };
326
459
  }
327
-
460
+
328
461
  return undefined;
329
462
  })
330
463
  .filter(isDefined)
331
464
  .map(({ insertedRefCol, insertedRefColRef }) => {
332
-
333
- if(insertedRefColRef.length !== 1){
334
- throw "Cannot do a nested insert on column that references multiple tables"
465
+ if (insertedRefColRef.length !== 1) {
466
+ throw "Cannot do a nested insert on column that references multiple tables";
335
467
  }
336
-
337
- const referencesMultipleColumns = insertedRefColRef?.some(refs => refs.fcols.length !== 1);
338
- if(referencesMultipleColumns){
339
- throw "Cannot do a nested insert on multi-column foreign key reference"
468
+
469
+ const referencesMultipleColumns = insertedRefColRef?.some(
470
+ (refs) => refs.fcols.length !== 1,
471
+ );
472
+ if (referencesMultipleColumns) {
473
+ throw "Cannot do a nested insert on multi-column foreign key reference";
340
474
  }
341
475
 
342
476
  const singleInsert = !Array.isArray(parentRow[insertedRefCol.name]);
343
- if(expectSingleInsert && !singleInsert){
477
+ if (expectSingleInsert && !singleInsert) {
344
478
  throw "Expected singleInsert";
345
479
  }
346
480
  const res = {
@@ -349,7 +483,8 @@ export const getReferenceColumnInserts = <ExpectSingleInsert extends boolean>(ta
349
483
  fcol: insertedRefCol.references![0]!.fcols[0]!,
350
484
  singleInsert,
351
485
  data: parentRow[insertedRefCol.name],
352
- }
486
+ };
353
487
  return res;
354
- }).filter(isDefined);
355
- }
488
+ })
489
+ .filter(isDefined);
490
+ };