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,5 +1,10 @@
1
-
2
- import { PubSubManager, SyncParams, pickKeys, omitKeys, log } from "./PubSubManager/PubSubManager";
1
+ import {
2
+ PubSubManager,
3
+ SyncParams,
4
+ pickKeys,
5
+ omitKeys,
6
+ log,
7
+ } from "./PubSubManager/PubSubManager";
3
8
  import { OrderBy, WAL, AnyObject, SyncBatchParams } from "prostgles-types";
4
9
  import { TableHandler } from "./DboBuilder/TableHandler/TableHandler";
5
10
 
@@ -19,7 +24,7 @@ export type ServerSyncInfo = Partial<{
19
24
  * PG count is ussually string due to bigint
20
25
  */
21
26
  s_count: number | string;
22
- }>
27
+ }>;
23
28
 
24
29
  export type SyncBatchInfo = Partial<{
25
30
  from_synced: number | null;
@@ -27,44 +32,65 @@ export type SyncBatchInfo = Partial<{
27
32
  end_offset: number | null;
28
33
  }>;
29
34
 
30
- export type onSyncRequestResponse = {
31
- onSyncRequest?: ClientSyncInfo
32
- } | {
33
- err: AnyObject | string;
34
- };
35
+ export type onSyncRequestResponse =
36
+ | {
37
+ onSyncRequest?: ClientSyncInfo;
38
+ }
39
+ | {
40
+ err: AnyObject | string;
41
+ };
35
42
 
36
43
  export type ClientExpressData = ClientSyncInfo & {
37
44
  data?: AnyObject[];
38
45
  deleted?: AnyObject[];
39
- }
46
+ };
40
47
 
41
- function getNumbers(numberArr: (null | undefined | string | number)[]): number[] {
42
- return numberArr.filter(v => v !== null && v !== undefined && Number.isFinite(+v)) as any;
48
+ function getNumbers(
49
+ numberArr: (null | undefined | string | number)[],
50
+ ): number[] {
51
+ return numberArr.filter(
52
+ (v) => v !== null && v !== undefined && Number.isFinite(+v),
53
+ ) as any;
43
54
  }
44
55
 
45
56
  /**
46
57
  * Server or client requested data sync
47
58
  */
48
- export async function syncData (this: PubSubManager, sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"){
49
- await this._log({
59
+ export async function syncData(
60
+ this: PubSubManager,
61
+ sync: SyncParams,
62
+ clientData: ClientExpressData | undefined,
63
+ source: "trigger" | "client",
64
+ ) {
65
+ await this._log({
50
66
  type: "sync",
51
- command: "syncData",
67
+ command: "syncData",
52
68
  tableName: sync.table_name,
53
69
  sid: sync.sid,
54
70
  source,
55
71
  ...pickKeys(sync, ["socket_id", "condition", "last_synced", "is_syncing"]),
56
72
  lr: JSON.stringify(sync.lr),
57
- connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map(s => s.id),
73
+ connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map(
74
+ (s) => s.id,
75
+ ),
58
76
  localParams: undefined,
59
77
  duration: -1,
60
- socketId: sync.socket_id
78
+ socketId: sync.socket_id,
61
79
  });
62
80
 
63
81
  const {
64
- socket_id, channel_name, table_name, filter,
65
- table_rules, allow_delete = false, params,
66
- synced_field, id_fields = [], batch_size,
67
- wal, throttle = 0
82
+ socket_id,
83
+ channel_name,
84
+ table_name,
85
+ filter,
86
+ table_rules,
87
+ allow_delete = false,
88
+ params,
89
+ synced_field,
90
+ id_fields = [],
91
+ batch_size,
92
+ wal,
93
+ throttle = 0,
68
94
  } = sync;
69
95
 
70
96
  const socket = this.sockets[socket_id];
@@ -73,93 +99,149 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
73
99
  }
74
100
 
75
101
  const sync_fields = [synced_field, ...id_fields.sort()],
76
- orderByAsc: OrderBy = sync_fields.reduce((a, v) => ({ ...a, [v]: true }), {}),
102
+ orderByAsc: OrderBy = sync_fields.reduce(
103
+ (a, v) => ({ ...a, [v]: true }),
104
+ {},
105
+ ),
77
106
  rowsIdsMatch = (a?: AnyObject, b?: AnyObject) => {
78
- return a && b && !id_fields.find(key => (a[key]).toString() !== (b[key]).toString())
107
+ return (
108
+ a &&
109
+ b &&
110
+ !id_fields.find((key) => a[key].toString() !== b[key].toString())
111
+ );
79
112
  },
80
113
  rowsFullyMatch = (a?: AnyObject, b?: AnyObject) => {
81
- return rowsIdsMatch(a, b) && a?.[synced_field].toString() === b?.[synced_field].toString();
114
+ return (
115
+ rowsIdsMatch(a, b) &&
116
+ a?.[synced_field].toString() === b?.[synced_field].toString()
117
+ );
82
118
  },
83
- getServerRowInfo = async (args: SyncBatchParams = {}): Promise<ServerSyncInfo> => {
119
+ getServerRowInfo = async (
120
+ args: SyncBatchParams = {},
121
+ ): Promise<ServerSyncInfo> => {
84
122
  const { from_synced = null, to_synced = null, offset = 0, limit } = args;
85
123
  const _filter: AnyObject = { ...filter };
86
124
 
87
125
  if (from_synced || to_synced) {
88
126
  _filter[synced_field] = {
89
127
  ...(from_synced ? { $gte: from_synced } : {}),
90
- ...(to_synced ? { $lte: to_synced } : {})
91
- }
128
+ ...(to_synced ? { $lte: to_synced } : {}),
129
+ };
92
130
  }
93
- if (this.dbo?.[table_name]?.find === undefined || this?.dbo?.[table_name]?.count === undefined) {
131
+ if (
132
+ this.dbo?.[table_name]?.find === undefined ||
133
+ this?.dbo?.[table_name]?.count === undefined
134
+ ) {
94
135
  throw `dbo.${table_name}.find or .count are missing or not allowed`;
95
136
  }
96
137
 
97
- const first_rows = await this.dbo?.[table_name]?.find?.(_filter, { orderBy: orderByAsc, select: sync_fields, limit, offset }, undefined, table_rules);
138
+ const first_rows = await this.dbo?.[table_name]?.find?.(
139
+ _filter,
140
+ { orderBy: orderByAsc, select: sync_fields, limit, offset },
141
+ undefined,
142
+ table_rules,
143
+ );
98
144
  const last_rows = first_rows?.slice(-1); // Why not logic below?
99
145
  // const last_rows = await _this?.dbo[table_name]?.find?.(_filter, { orderBy: (orderByDesc as OrderBy), select: sync_fields, limit: 1, offset: -offset || 0 }, null, table_rules);
100
- const count = await this.dbo?.[table_name]?.count?.(_filter, undefined, undefined, table_rules);
101
-
102
- return { s_fr: first_rows?.[0] || null, s_lr: last_rows?.[0] || null, s_count: count }
146
+ const count = await this.dbo?.[table_name]?.count?.(
147
+ _filter,
148
+ undefined,
149
+ undefined,
150
+ table_rules,
151
+ );
152
+
153
+ return {
154
+ s_fr: first_rows?.[0] || null,
155
+ s_lr: last_rows?.[0] || null,
156
+ s_count: count,
157
+ };
103
158
  },
104
159
  getClientRowInfo = (args: SyncBatchInfo = {}) => {
105
160
  const { from_synced = null, to_synced = null, end_offset = null } = args;
106
161
  const res = new Promise<any>((resolve, reject) => {
107
- const onSyncRequest = { from_synced, to_synced, end_offset };//, forReal: true };
108
- socket.emit(channel_name, { onSyncRequest }, (resp?: onSyncRequestResponse) => {
109
- if (resp && "onSyncRequest" in resp && resp?.onSyncRequest) {
110
- const c_fr = resp.onSyncRequest.c_fr,
111
- c_lr = resp.onSyncRequest.c_lr,
112
- c_count = resp.onSyncRequest.c_count;
113
-
114
- // console.log(onSyncRequest, { c_fr, c_lr, c_count }, socket._user);
115
- return resolve({ c_fr, c_lr, c_count });
116
- } else if (resp && "err" in resp && resp?.err) {
117
- reject(resp.err);
118
- }
119
- });
162
+ const onSyncRequest = { from_synced, to_synced, end_offset }; //, forReal: true };
163
+ socket.emit(
164
+ channel_name,
165
+ { onSyncRequest },
166
+ (resp?: onSyncRequestResponse) => {
167
+ if (resp && "onSyncRequest" in resp && resp?.onSyncRequest) {
168
+ const c_fr = resp.onSyncRequest.c_fr,
169
+ c_lr = resp.onSyncRequest.c_lr,
170
+ c_count = resp.onSyncRequest.c_count;
171
+
172
+ // console.log(onSyncRequest, { c_fr, c_lr, c_count }, socket._user);
173
+ return resolve({ c_fr, c_lr, c_count });
174
+ } else if (resp && "err" in resp && resp?.err) {
175
+ reject(resp.err);
176
+ }
177
+ },
178
+ );
120
179
  });
121
180
 
122
181
  return res;
123
182
  },
124
183
  getClientData = (from_synced = 0, offset = 0): Promise<AnyObject[]> => {
125
184
  return new Promise((resolve, reject) => {
126
- const onPullRequest = { from_synced: from_synced || 0, offset: offset || 0, limit: batch_size };
127
- socket.emit(channel_name, { onPullRequest }, async (resp?: { data?: AnyObject[] }) => {
128
- if (resp && resp.data && Array.isArray(resp.data)) {
129
- // console.log({ onPullRequest, resp }, socket._user)
130
- resolve(sortClientData(resp.data));
131
- } else {
132
- reject("unexpected onPullRequest response: " + JSON.stringify(resp));
133
- }
134
- });
185
+ const onPullRequest = {
186
+ from_synced: from_synced || 0,
187
+ offset: offset || 0,
188
+ limit: batch_size,
189
+ };
190
+ socket.emit(
191
+ channel_name,
192
+ { onPullRequest },
193
+ async (resp?: { data?: AnyObject[] }) => {
194
+ if (resp && resp.data && Array.isArray(resp.data)) {
195
+ // console.log({ onPullRequest, resp }, socket._user)
196
+ resolve(sortClientData(resp.data));
197
+ } else {
198
+ reject(
199
+ "unexpected onPullRequest response: " + JSON.stringify(resp),
200
+ );
201
+ }
202
+ },
203
+ );
135
204
  });
136
205
 
137
206
  function sortClientData(data: AnyObject[]) {
138
207
  return data.sort((a, b) => {
139
208
  /* Order by increasing synced and ids (sorted alphabetically) */
140
- return (+a[synced_field] - +b[synced_field]) || id_fields.sort().map(idKey => a[idKey] < b[idKey] ? -1 : a[idKey] > b[idKey] ? 1 : 0).find(v => v) || 0;
209
+ return (
210
+ +a[synced_field] - +b[synced_field] ||
211
+ id_fields
212
+ .sort()
213
+ .map((idKey) =>
214
+ a[idKey] < b[idKey] ? -1 : a[idKey] > b[idKey] ? 1 : 0,
215
+ )
216
+ .find((v) => v) ||
217
+ 0
218
+ );
141
219
  });
142
220
  }
143
221
  },
144
- getServerData = async (from_synced = 0, offset = 0): Promise<AnyObject[]> => {
222
+ getServerData = async (
223
+ from_synced = 0,
224
+ offset = 0,
225
+ ): Promise<AnyObject[]> => {
145
226
  const _filter = {
146
227
  ...filter,
147
- [synced_field]: { $gte: from_synced || 0 }
228
+ [synced_field]: { $gte: from_synced || 0 },
148
229
  };
149
230
 
150
- if (!this?.dbo?.[table_name]?.find) throw "_this?.dbo?.[table_name]?.find is missing";
231
+ if (!this?.dbo?.[table_name]?.find)
232
+ throw "_this?.dbo?.[table_name]?.find is missing";
151
233
 
152
234
  try {
153
235
  const res = this?.dbo?.[table_name]?.find?.(
154
236
  _filter,
155
237
  {
156
238
  select: params.select,
157
- orderBy: (orderByAsc as OrderBy),
239
+ orderBy: orderByAsc as OrderBy,
158
240
  offset: offset || 0,
159
- limit: batch_size
241
+ limit: batch_size,
160
242
  },
161
243
  undefined,
162
- table_rules
244
+ table_rules,
163
245
  );
164
246
 
165
247
  if (!res) throw "_this?.dbo?.[table_name]?.find is missing";
@@ -167,140 +249,196 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
167
249
  return res;
168
250
  } catch (e) {
169
251
  console.error("Sync getServerData failed: ", e);
170
- throw "INTERNAL ERROR"
252
+ throw "INTERNAL ERROR";
171
253
  }
172
254
  },
173
255
  deleteData = async (deleted: AnyObject[]) => {
174
256
  // console.log("deleteData deleteData deleteData " + deleted.length);
175
257
  if (allow_delete) {
176
- return Promise.all(deleted.map(async d => {
177
- const id_filter = pickKeys(d, id_fields);
178
- try {
179
- await (this.dbo[table_name] as TableHandler).delete(id_filter, undefined, undefined, table_rules);
180
- return 1;
181
- } catch (e) {
182
- console.error(e)
183
- }
184
- return 0;
185
- }))
258
+ return Promise.all(
259
+ deleted.map(async (d) => {
260
+ const id_filter = pickKeys(d, id_fields);
261
+ try {
262
+ await (this.dbo[table_name] as TableHandler).delete(
263
+ id_filter,
264
+ undefined,
265
+ undefined,
266
+ table_rules,
267
+ );
268
+ return 1;
269
+ } catch (e) {
270
+ console.error(e);
271
+ }
272
+ return 0;
273
+ }),
274
+ );
186
275
  } else {
187
- console.warn("client tried to delete data without permission (allow_delete is false)")
276
+ console.warn(
277
+ "client tried to delete data without permission (allow_delete is false)",
278
+ );
188
279
  }
189
280
  return false;
190
281
  },
191
-
192
282
  /**
193
- * Upserts the given client data where synced_field is higher than on server
283
+ * Upserts the given client data where synced_field is higher than on server
194
284
  */
195
285
  upsertData = async (data: AnyObject[]) => {
196
-
197
286
  const start = Date.now();
198
- const result = await this.dboBuilder.getTX(async (dbTX) => {
199
- const tbl = dbTX[table_name] as TableHandler;
200
- const existingData = await tbl.find(
201
- { $or: data.map(d => pickKeys(d, id_fields)) },
202
- {
203
- select: [synced_field, ...id_fields],
204
- orderBy: (orderByAsc as OrderBy),
205
- },
206
- undefined,
207
- table_rules
208
- );
209
- let inserts = data.filter(d => !existingData.find(ed => rowsIdsMatch(ed, d)));
210
- let updates = data.filter(d => existingData.find(ed => rowsIdsMatch(ed, d) && +ed[synced_field] < +d[synced_field]));
211
- try {
212
- if (!table_rules) throw "table_rules missing";
213
-
214
- if (table_rules.update && updates.length) {
215
- const updateData: [any, any][] = [];
216
- await Promise.all(updates.map(upd => {
217
- const id_filter = pickKeys(upd, id_fields);
218
- const syncSafeFilter = { $and: [id_filter, { [synced_field]: { "<": upd[synced_field] } }] }
219
-
220
- updateData.push([syncSafeFilter, omitKeys(upd, id_fields)])
221
- }));
222
- await tbl.updateBatch(updateData, { removeDisallowedFields: true }, undefined, table_rules);
223
- } else {
224
- updates = [];
225
- }
226
-
227
- if (table_rules.insert && inserts.length) {
228
- await tbl.insert(inserts, { removeDisallowedFields: true }, undefined, table_rules);
229
- } else {
230
- inserts = [];
287
+ const result = await this.dboBuilder
288
+ .getTX(async (dbTX) => {
289
+ const tbl = dbTX[table_name] as TableHandler;
290
+ const existingData = await tbl.find(
291
+ { $or: data.map((d) => pickKeys(d, id_fields)) },
292
+ {
293
+ select: [synced_field, ...id_fields],
294
+ orderBy: orderByAsc as OrderBy,
295
+ },
296
+ undefined,
297
+ table_rules,
298
+ );
299
+ let inserts = data.filter(
300
+ (d) => !existingData.find((ed) => rowsIdsMatch(ed, d)),
301
+ );
302
+ let updates = data.filter((d) =>
303
+ existingData.find(
304
+ (ed) =>
305
+ rowsIdsMatch(ed, d) && +ed[synced_field] < +d[synced_field],
306
+ ),
307
+ );
308
+ try {
309
+ if (!table_rules) throw "table_rules missing";
310
+
311
+ if (table_rules.update && updates.length) {
312
+ const updateData: [any, any][] = [];
313
+ await Promise.all(
314
+ updates.map((upd) => {
315
+ const id_filter = pickKeys(upd, id_fields);
316
+ const syncSafeFilter = {
317
+ $and: [
318
+ id_filter,
319
+ { [synced_field]: { "<": upd[synced_field] } },
320
+ ],
321
+ };
322
+
323
+ updateData.push([syncSafeFilter, omitKeys(upd, id_fields)]);
324
+ }),
325
+ );
326
+ await tbl.updateBatch(
327
+ updateData,
328
+ { removeDisallowedFields: true },
329
+ undefined,
330
+ table_rules,
331
+ );
332
+ } else {
333
+ updates = [];
334
+ }
335
+
336
+ if (table_rules.insert && inserts.length) {
337
+ await tbl.insert(
338
+ inserts,
339
+ { removeDisallowedFields: true },
340
+ undefined,
341
+ table_rules,
342
+ );
343
+ } else {
344
+ inserts = [];
345
+ }
346
+
347
+ return { inserts, updates };
348
+ } catch (e) {
349
+ console.trace(e);
350
+ throw e;
231
351
  }
352
+ })
353
+ .then(({ inserts, updates }) => {
354
+ log(
355
+ `upsertData: inserted( ${inserts.length} ) updated( ${updates.length} ) total( ${data.length} ) \n last insert ${JSON.stringify(inserts.at(-1))} \n last update ${JSON.stringify(updates.at(-1))}`,
356
+ );
357
+ return {
358
+ inserted: inserts.length,
359
+ updated: updates.length,
360
+ total: data.length,
361
+ };
362
+ })
363
+ .catch((err) => {
364
+ console.trace(
365
+ "Something went wrong with syncing to server: \n ->",
366
+ err,
367
+ data.length,
368
+ id_fields,
369
+ );
370
+ return Promise.reject(
371
+ "Something went wrong with syncing to server: ",
372
+ );
373
+ });
232
374
 
233
- return { inserts, updates };
234
- } catch (e) {
235
- console.trace(e);
236
- throw e;
237
- }
238
-
239
- }).then(({ inserts, updates }) => {
240
- log(`upsertData: inserted( ${inserts.length} ) updated( ${updates.length} ) total( ${data.length} ) \n last insert ${JSON.stringify(inserts.at(-1))} \n last update ${JSON.stringify(updates.at(-1))}`);
241
- return { inserted: inserts.length, updated: updates.length, total: data.length };
242
- })
243
- .catch(err => {
244
- console.trace("Something went wrong with syncing to server: \n ->", err, data.length, id_fields);
245
- return Promise.reject("Something went wrong with syncing to server: ")
246
- });
247
-
248
- await this._log({
249
- type: "sync",
250
- command: "upsertData",
251
- tableName: sync.table_name,
252
- rows: data.length,
375
+ await this._log({
376
+ type: "sync",
377
+ command: "upsertData",
378
+ tableName: sync.table_name,
379
+ rows: data.length,
253
380
  socketId: socket_id,
254
381
  sid: sync.sid,
255
382
  duration: Date.now() - start,
256
- connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map(s => s.id)
383
+ connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map(
384
+ (s) => s.id,
385
+ ),
257
386
  });
258
387
 
259
388
  return result;
260
389
  },
261
-
262
390
  /**
263
391
  * Pushes the given data to client
264
- * @param isSynced = true if
392
+ * @param isSynced = true if
265
393
  */
266
- pushData = async (data?: AnyObject[], isSynced = false, err: any = null) => {
394
+ pushData = async (
395
+ data?: AnyObject[],
396
+ isSynced = false,
397
+ err: any = null,
398
+ ) => {
267
399
  const start = Date.now();
268
400
  const result = await new Promise((resolve, reject) => {
269
- socket.emit(channel_name, { data, isSynced }, (resp?: { ok: boolean }) => {
270
-
271
- if (resp && resp.ok) {
272
- // console.log("PUSHED to client: fr/lr", data[0], data[data.length - 1]);
273
- resolve({ pushed: data?.length, resp })
274
- } else {
275
- reject(resp);
276
- console.error("Unexpected response");
277
- }
278
- });
401
+ socket.emit(
402
+ channel_name,
403
+ { data, isSynced },
404
+ (resp?: { ok: boolean }) => {
405
+ if (resp && resp.ok) {
406
+ // console.log("PUSHED to client: fr/lr", data[0], data[data.length - 1]);
407
+ resolve({ pushed: data?.length, resp });
408
+ } else {
409
+ reject(resp);
410
+ console.error("Unexpected response");
411
+ }
412
+ },
413
+ );
279
414
  });
280
415
 
281
- await this._log({
282
- type: "sync",
283
- command: "pushData",
284
- tableName: sync.table_name,
285
- rows: data?.length ?? 0,
416
+ await this._log({
417
+ type: "sync",
418
+ command: "pushData",
419
+ tableName: sync.table_name,
420
+ rows: data?.length ?? 0,
286
421
  socketId: socket_id,
287
422
  duration: Date.now() - start,
288
423
  sid: sync.sid,
289
- connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map(s => s.id)
424
+ connectedSocketIds: this.dboBuilder.prostgles.connectedSockets.map(
425
+ (s) => s.id,
426
+ ),
290
427
  });
291
428
 
292
429
  return result;
293
430
  },
294
-
295
431
  /**
296
- * Returns the lowest synced_field between server and client by checking client and server sync data.
432
+ * Returns the lowest synced_field between server and client by checking client and server sync data.
297
433
  * If last rows don't match it will find an earlier matching last row and use that last matching from_synced
298
434
  * If no rows or fully synced (c_lr and s_lr match) then returns null
299
435
  */
300
- getLastSynced = async (clientSyncInfo?: ClientSyncInfo): Promise<number | null> => {
301
-
436
+ getLastSynced = async (
437
+ clientSyncInfo?: ClientSyncInfo,
438
+ ): Promise<number | null> => {
302
439
  // Get latest row info
303
- const { c_fr, c_lr, c_count } = clientSyncInfo || await getClientRowInfo();
440
+ const { c_fr, c_lr, c_count } =
441
+ clientSyncInfo || (await getClientRowInfo());
304
442
  const { s_fr, s_lr, s_count } = await getServerRowInfo();
305
443
 
306
444
  // console.log("getLastSynced", clientData, socket._user )
@@ -308,7 +446,8 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
308
446
  let result = null;
309
447
 
310
448
  /* Nothing to sync */
311
- if (!c_fr && !s_fr || rowsFullyMatch(c_lr, s_lr)) { // c_count === s_count &&
449
+ if ((!c_fr && !s_fr) || rowsFullyMatch(c_lr, s_lr)) {
450
+ // c_count === s_count &&
312
451
  // sync.last_synced = null;
313
452
  result = null;
314
453
 
@@ -316,38 +455,49 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
316
455
  } else if (!rowsFullyMatch(c_fr, s_fr)) {
317
456
  if (c_fr && s_fr) {
318
457
  result = Math.min(c_fr[synced_field], s_fr[synced_field]);
319
-
320
458
  } else if (c_fr || s_fr) {
321
459
  result = (c_fr || s_fr)[synced_field];
322
460
  }
323
461
 
324
462
  /* Sync from last matching synced value */
325
463
  } else if (rowsFullyMatch(c_fr, s_fr)) {
326
-
327
464
  if (s_lr && c_lr) {
328
- result = Math.min(...getNumbers([c_lr[synced_field], s_lr[synced_field]]));
465
+ result = Math.min(
466
+ ...getNumbers([c_lr[synced_field], s_lr[synced_field]]),
467
+ );
329
468
  } else {
330
- result = Math.min(...getNumbers([c_fr[synced_field], s_fr?.[synced_field]]));
469
+ result = Math.min(
470
+ ...getNumbers([c_fr[synced_field], s_fr?.[synced_field]]),
471
+ );
331
472
  }
332
473
 
333
474
  const min_count = Math.min(...getNumbers([c_count, s_count]));
334
- let end_offset = 1;// Math.min(s_count, c_count) - 1;
475
+ let end_offset = 1; // Math.min(s_count, c_count) - 1;
335
476
  let step = 0;
336
477
 
337
478
  while (min_count > 5 && end_offset < min_count) {
338
- const { c_lr = null } = await getClientRowInfo({ from_synced: 0, to_synced: result, end_offset });
479
+ const { c_lr = null } = await getClientRowInfo({
480
+ from_synced: 0,
481
+ to_synced: result,
482
+ end_offset,
483
+ });
339
484
  // console.log("getLastSynced... end_offset > " + end_offset);
340
485
  let server_row;
341
486
 
342
487
  if (c_lr) {
343
488
  const _filter: AnyObject = {};
344
- sync_fields.map(key => {
489
+ sync_fields.map((key) => {
345
490
  _filter[key] = c_lr[key];
346
491
  });
347
- server_row = await this?.dbo?.[table_name]?.find?.(_filter, { select: sync_fields, limit: 1 }, undefined, table_rules);
492
+ server_row = await this?.dbo?.[table_name]?.find?.(
493
+ _filter,
494
+ { select: sync_fields, limit: 1 },
495
+ undefined,
496
+ table_rules,
497
+ );
348
498
  }
349
499
 
350
- // if(rowsFullyMatch(c_lr, s_lr)){ //c_count === s_count &&
500
+ // if(rowsFullyMatch(c_lr, s_lr)){ //c_count === s_count &&
351
501
  if (server_row && server_row.length) {
352
502
  server_row = server_row[0];
353
503
 
@@ -365,18 +515,25 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
365
515
 
366
516
  return result;
367
517
  },
368
-
369
518
  updateSyncLR = (data: AnyObject) => {
370
519
  if (data.length) {
371
520
  const lastRow = data[data.length - 1];
372
- if (sync.lr?.[synced_field] && +sync.lr?.[synced_field] > +lastRow[synced_field]) {
373
- console.error({ syncIssue: "sync.lr[synced_field] is greater than lastRow[synced_field]" }, sync.table_name)
521
+ if (
522
+ sync.lr?.[synced_field] &&
523
+ +sync.lr?.[synced_field] > +lastRow[synced_field]
524
+ ) {
525
+ console.error(
526
+ {
527
+ syncIssue:
528
+ "sync.lr[synced_field] is greater than lastRow[synced_field]",
529
+ },
530
+ sync.table_name,
531
+ );
374
532
  }
375
533
  sync.lr = lastRow;
376
534
  sync.last_synced = +sync.lr?.[synced_field];
377
535
  }
378
536
  },
379
-
380
537
  /**
381
538
  * Will push pull sync between client and server from a given from_synced value
382
539
  */
@@ -387,14 +544,17 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
387
544
  min_synced = from_synced || 0,
388
545
  max_synced = from_synced;
389
546
 
390
- let inserted = 0, updated = 0, pushed = 0, deleted = 0, total = 0;
547
+ let inserted = 0,
548
+ updated = 0,
549
+ pushed = 0,
550
+ deleted = 0,
551
+ total = 0;
391
552
 
392
553
  // console.log("syncBatch", from_synced)
393
554
 
394
555
  while (canContinue) {
395
556
  const cData = await getClientData(min_synced, offset);
396
557
 
397
-
398
558
  if (cData.length) {
399
559
  const res = await upsertData(cData);
400
560
  inserted += res.inserted;
@@ -406,30 +566,42 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
406
566
  sData = await getServerData(min_synced, offset);
407
567
  } catch (e) {
408
568
  console.trace("sync getServerData err", e);
409
- await pushData(undefined, undefined, "Internal error. Check server logs");
410
- throw " d"
569
+ await pushData(
570
+ undefined,
571
+ undefined,
572
+ "Internal error. Check server logs",
573
+ );
574
+ throw " d";
411
575
  }
412
576
 
413
577
  // console.log("allow_delete", table_rules.delete);
414
578
  if (allow_delete && table_rules?.delete) {
415
- const to_delete = sData.filter(d => {
416
- !cData.find(c => rowsIdsMatch(c, d))
579
+ const to_delete = sData.filter((d) => {
580
+ !cData.find((c) => rowsIdsMatch(c, d));
417
581
  });
418
- await Promise.all(to_delete.map(d => {
419
- deleted++;
420
- return (this.dbo[table_name] as TableHandler).delete(pickKeys(d, id_fields), {}, undefined, table_rules);
421
- }));
582
+ await Promise.all(
583
+ to_delete.map((d) => {
584
+ deleted++;
585
+ return (this.dbo[table_name] as TableHandler).delete(
586
+ pickKeys(d, id_fields),
587
+ {},
588
+ undefined,
589
+ table_rules,
590
+ );
591
+ }),
592
+ );
422
593
  sData = await getServerData(min_synced, offset);
423
594
  }
424
595
 
425
- const forClient = sData.filter(s => {
426
- return !cData.find(c =>
427
- rowsIdsMatch(c, s) &&
428
- +c[synced_field] >= +s[synced_field]
596
+ const forClient = sData.filter((s) => {
597
+ return !cData.find(
598
+ (c) => rowsIdsMatch(c, s) && +c[synced_field] >= +s[synced_field],
429
599
  );
430
600
  });
431
601
  if (forClient.length) {
432
- const res: any = await pushData(forClient.filter(d => !sync.wal || !sync.wal.isInHistory(d)));
602
+ const res: any = await pushData(
603
+ forClient.filter((d) => !sync.wal || !sync.wal.isInHistory(d)),
604
+ );
433
605
  pushed += res.pushed;
434
606
  }
435
607
 
@@ -443,7 +615,10 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
443
615
  canContinue = sData.length >= limit;
444
616
  // console.log(`sData ${sData.length} limit ${limit}`);
445
617
  }
446
- log(`server.syncBatch ${table_name}: inserted( ${inserted} ) updated( ${updated} ) deleted( ${deleted} ) pushed to client( ${pushed} ) total( ${total} )`, socket._user );
618
+ log(
619
+ `server.syncBatch ${table_name}: inserted( ${inserted} ) updated( ${updated} ) deleted( ${deleted} ) pushed to client( ${pushed} ) total( ${total} )`,
620
+ socket._user,
621
+ );
447
622
 
448
623
  return true;
449
624
  };
@@ -451,7 +626,10 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
451
626
  if (!wal) {
452
627
  /* Used to throttle and merge incomming updates */
453
628
  sync.wal = new WAL({
454
- id_fields, synced_field, throttle, batch_size,
629
+ id_fields,
630
+ synced_field,
631
+ throttle,
632
+ batch_size,
455
633
  DEBUG_MODE: this.dboBuilder.prostgles.opts.DEBUG_MODE,
456
634
  onSendStart: () => {
457
635
  sync.is_syncing = true;
@@ -484,7 +662,7 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
484
662
  */
485
663
  this.syncData(sync, undefined, source);
486
664
  },
487
- })
665
+ });
488
666
  }
489
667
 
490
668
  /* Debounce sync requests */
@@ -495,7 +673,7 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
495
673
  this.syncTimeout = undefined;
496
674
  // console.log("SYNC FROM TIMEOUT")
497
675
  this.syncData(sync, undefined, source);
498
- }, throttle)
676
+ }, throttle);
499
677
  }
500
678
  // console.log("SYNC THROTTLE")
501
679
  return;
@@ -508,15 +686,23 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
508
686
  * Add to WAL manager which will sync at the end
509
687
  */
510
688
  if (clientData) {
511
- if (clientData.data && Array.isArray(clientData.data) && clientData.data.length) {
689
+ if (
690
+ clientData.data &&
691
+ Array.isArray(clientData.data) &&
692
+ clientData.data.length
693
+ ) {
512
694
  if (!sync.wal) throw "sync.wal missing";
513
695
 
514
- sync.wal.addData(clientData.data.map(d => ({ current: d })));
696
+ sync.wal.addData(clientData.data.map((d) => ({ current: d })));
515
697
  return;
516
698
  // await upsertData(clientData.data, true);
517
699
 
518
700
  /* Not expecting this anymore. use normal db.table.delete channel */
519
- } else if (clientData.deleted && Array.isArray(clientData.deleted) && clientData.deleted.length) {
701
+ } else if (
702
+ clientData.deleted &&
703
+ Array.isArray(clientData.deleted) &&
704
+ clientData.deleted.length
705
+ ) {
520
706
  await deleteData(clientData.deleted);
521
707
  }
522
708
  } else {
@@ -554,4 +740,4 @@ export async function syncData (this: PubSubManager, sync: SyncParams, clientDat
554
740
 
555
741
  sync.is_syncing = false;
556
742
  // console.log(`Finished sync for ${table_name}`, socket._user);
557
- }
743
+ }