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
@@ -4,61 +4,97 @@ import { ValidateRowBasic } from "../PublishParser/PublishParser";
4
4
  import { TableHandler } from "./TableHandler/TableHandler";
5
5
 
6
6
  export const isFile = (row: AnyObject) => {
7
- return Boolean(row && isObject(row) && getKeys(row).sort().join() === ["name", "data"].sort().join() && row.data && (typeof row.data === "string" || Buffer.isBuffer(row.data)) && typeof row.name === "string")
8
- }
7
+ return Boolean(
8
+ row &&
9
+ isObject(row) &&
10
+ getKeys(row).sort().join() === ["name", "data"].sort().join() &&
11
+ row.data &&
12
+ (typeof row.data === "string" || Buffer.isBuffer(row.data)) &&
13
+ typeof row.name === "string",
14
+ );
15
+ };
9
16
 
10
17
  type UploadFileArgs = {
11
18
  row: AnyObject;
12
- validate: ValidateRowBasic | undefined;
19
+ validate: ValidateRowBasic | undefined;
13
20
  localParams: LocalParams | undefined;
14
21
  /**
15
22
  * Used to update an existing file
16
23
  */
17
24
  mediaId?: string;
18
- }
25
+ };
19
26
 
20
- export async function uploadFile(this: TableHandler, { row, localParams, validate, mediaId }: UploadFileArgs): Promise<Media> {
27
+ export async function uploadFile(
28
+ this: TableHandler,
29
+ { row, localParams, validate, mediaId }: UploadFileArgs,
30
+ ): Promise<Media> {
21
31
  if (!this.dboBuilder.prostgles?.fileManager) throw "fileManager not set up";
22
32
 
23
- if (!isFile(row)) throw "Expecting only two properties for file upload: { name: string; data: File | string | Buffer }; but got: " + Object.entries(row).map(([k, v]) => `${k}: ${typeof v}`).join(", ");
33
+ if (!isFile(row))
34
+ throw (
35
+ "Expecting only two properties for file upload: { name: string; data: File | string | Buffer }; but got: " +
36
+ Object.entries(row)
37
+ .map(([k, v]) => `${k}: ${typeof v}`)
38
+ .join(", ")
39
+ );
24
40
  const { data, name } = row;
25
41
 
26
- const media_id = mediaId ?? (await this.db.oneOrNone("SELECT gen_random_uuid() as name")).name;
42
+ const media_id =
43
+ mediaId ??
44
+ (await this.db.oneOrNone("SELECT gen_random_uuid() as name")).name;
27
45
  const nestedInsert = localParams?.nestedInsert;
28
- const type = await this.dboBuilder.prostgles.fileManager.getValidatedFileType({ file: data, fileName: name, tableName: nestedInsert?.previousTable, colName: nestedInsert?.referencingColumn });
46
+ const type = await this.dboBuilder.prostgles.fileManager.getValidatedFileType(
47
+ {
48
+ file: data,
49
+ fileName: name,
50
+ tableName: nestedInsert?.previousTable,
51
+ colName: nestedInsert?.referencingColumn,
52
+ },
53
+ );
29
54
  const media_name = `${media_id}.${type.ext}`;
30
- const parsedMediaKeys = ["id", "name", "original_name", "extension", "content_type"] as const
31
- const media: Required<Pick<Media, typeof parsedMediaKeys[number]>> = {
55
+ const parsedMediaKeys = [
56
+ "id",
57
+ "name",
58
+ "original_name",
59
+ "extension",
60
+ "content_type",
61
+ ] as const;
62
+ const media: Required<Pick<Media, (typeof parsedMediaKeys)[number]>> = {
32
63
  id: media_id,
33
64
  name: media_name,
34
65
  original_name: name,
35
66
  extension: type.ext,
36
- content_type: type.mime
37
- }
67
+ content_type: type.mime,
68
+ };
38
69
 
39
70
  if (validate) {
40
- if(!localParams) throw "localParams missing";
41
- const parsedMedia = await validate({ row: media, dbx: this.getFinalDbo(localParams), localParams });
42
- const missingKeys = parsedMediaKeys.filter(k => !parsedMedia[k])
43
- if(missingKeys.length){
71
+ if (!localParams) throw "localParams missing";
72
+ const parsedMedia = await validate({
73
+ row: media,
74
+ dbx: this.getFinalDbo(localParams),
75
+ localParams,
76
+ });
77
+ const missingKeys = parsedMediaKeys.filter((k) => !parsedMedia[k]);
78
+ if (missingKeys.length) {
44
79
  throw `Some keys are missing from file insert validation: ${missingKeys}`;
45
80
  }
46
81
  }
47
82
 
48
- const _media: Media = await this.dboBuilder.prostgles.fileManager.uploadAsMedia({
49
- item: {
50
- data,
51
- name: media.name ?? "????",
52
- content_type: media.content_type as any,
53
- extension: media.extension
54
- },
55
- // imageCompression: {
56
- // inside: {
57
- // width: 1100,
58
- // height: 630
59
- // }
60
- // }
61
- });
83
+ const _media: Media =
84
+ await this.dboBuilder.prostgles.fileManager.uploadAsMedia({
85
+ item: {
86
+ data,
87
+ name: media.name ?? "????",
88
+ content_type: media.content_type as any,
89
+ extension: media.extension,
90
+ },
91
+ // imageCompression: {
92
+ // inside: {
93
+ // width: 1100,
94
+ // height: 630
95
+ // }
96
+ // }
97
+ });
62
98
 
63
99
  const mediaRow = {
64
100
  ...media,
@@ -66,4 +102,4 @@ export async function uploadFile(this: TableHandler, { row, localParams, validat
66
102
  };
67
103
 
68
104
  return mediaRow;
69
- }
105
+ }
@@ -1,4 +1,3 @@
1
-
2
1
  export const EVENT_TRIGGER_TAGS = [
3
2
  "ALTER AGGREGATE",
4
3
  "ALTER COLLATION",
@@ -110,9 +109,12 @@ export const EVENT_TRIGGER_TAGS = [
110
109
  "REFRESH MATERIALIZED VIEW",
111
110
  "REVOKE",
112
111
  "SECURITY LABEL",
113
- "SELECT INTO"
112
+ "SELECT INTO",
114
113
  ] as const;
115
114
 
116
- export type EventTriggerTag = typeof EVENT_TRIGGER_TAGS[number];
115
+ export type EventTriggerTag = (typeof EVENT_TRIGGER_TAGS)[number];
117
116
 
118
- export type EventTriggerTagFilter = Partial<Record<EventTriggerTag, 1>> | Partial<Record<EventTriggerTag, 0>> | "*";
117
+ export type EventTriggerTagFilter =
118
+ | Partial<Record<EventTriggerTag, 1>>
119
+ | Partial<Record<EventTriggerTag, 0>>
120
+ | "*";
@@ -23,7 +23,10 @@ import { ExpressApp } from "../RestApi";
23
23
 
24
24
  export const HOUR = 3600 * 1000;
25
25
 
26
- export const asSQLIdentifier = async (name: string, db: DB): Promise<string> => {
26
+ export const asSQLIdentifier = async (
27
+ name: string,
28
+ db: DB,
29
+ ): Promise<string> => {
27
30
  return (await db.one("select format('%I', $1) as name", [name]))?.name;
28
31
  };
29
32
 
@@ -51,7 +54,9 @@ export type FileUploadArgs = {
51
54
  contentType: string;
52
55
  file: string | Buffer | stream.PassThrough;
53
56
  onFinish: (
54
- ...args: [error: Error, result: undefined] | [error: undefined, result: UploadedCloudFile]
57
+ ...args:
58
+ | [error: Error, result: undefined]
59
+ | [error: undefined, result: UploadedCloudFile]
55
60
  ) => void;
56
61
  onProgress?: (bytesUploaded: number) => void;
57
62
  };
@@ -59,7 +64,10 @@ export type CloudClient = {
59
64
  upload: (file: FileUploadArgs) => Promise<void>;
60
65
  downloadAsStream: (name: string) => Promise<stream.Readable>;
61
66
  delete: (fileName: string) => Promise<void>;
62
- getSignedUrlForDownload: (fileName: string, expiresInSeconds: number) => Promise<string>;
67
+ getSignedUrlForDownload: (
68
+ fileName: string,
69
+ expiresInSeconds: number,
70
+ ) => Promise<string>;
63
71
  };
64
72
 
65
73
  export type LocalConfig = {
@@ -153,11 +161,14 @@ export class FileManager {
153
161
  }
154
162
  } else {
155
163
  console.error(
156
- "FileManager checkInterval delayedDelete FAIL: Could not access file table tableHandler.delete()"
164
+ "FileManager checkInterval delayedDelete FAIL: Could not access file table tableHandler.delete()",
157
165
  );
158
166
  }
159
167
  },
160
- Math.max(10000, (fullConfig.delayedDelete.checkIntervalHours || 0) * HOUR)
168
+ Math.max(
169
+ 10000,
170
+ (fullConfig.delayedDelete.checkIntervalHours || 0) * HOUR,
171
+ ),
161
172
  );
162
173
  }
163
174
  }
@@ -191,7 +202,8 @@ export class FileManager {
191
202
 
192
203
  getValidatedFileType = getValidatedFileType.bind(this);
193
204
 
194
- getLocalFileUrl = (name: string) => (this.fileRoute ? `${this.fileRoute}/${name}` : "");
205
+ getLocalFileUrl = (name: string) =>
206
+ this.fileRoute ? `${this.fileRoute}/${name}` : "";
195
207
 
196
208
  checkFreeSpace = async (folderPath: string, fileSize = 0) => {
197
209
  if (!this.cloudClient && "localFolderPath" in this.config) {
@@ -268,24 +280,32 @@ export class FileManager {
268
280
  return res;
269
281
  };
270
282
 
271
- async getFileCloudDownloadURL(fileName: string, expiresInSecondsRaw: number = 30 * 60) {
283
+ async getFileCloudDownloadURL(
284
+ fileName: string,
285
+ expiresInSecondsRaw: number = 30 * 60,
286
+ ) {
272
287
  const expiresInSeconds = Math.max(1, Math.round(expiresInSecondsRaw));
273
- return await this.cloudClient?.getSignedUrlForDownload(fileName, expiresInSeconds);
288
+ return await this.cloudClient?.getSignedUrlForDownload(
289
+ fileName,
290
+ expiresInSeconds,
291
+ );
274
292
  }
275
293
 
276
- parseSQLIdentifier = async (name: string) => asSQLIdentifier(name, this.prostgles!.db!); // this.prostgles.dbo.sql<"value">("select format('%I', $1)", [name], { returnType: "value" } )
294
+ parseSQLIdentifier = async (name: string) =>
295
+ asSQLIdentifier(name, this.prostgles!.db!); // this.prostgles.dbo.sql<"value">("select format('%I', $1)", [name], { returnType: "value" } )
277
296
 
278
297
  getColInfo = (args: {
279
298
  tableName: string;
280
299
  colName: string;
281
300
  }): ValidatedColumnInfo["file"] | undefined => {
282
301
  const { colName, tableName } = args;
283
- const tableConfig = this.prostgles?.opts.fileTable?.referencedTables?.[tableName];
302
+ const tableConfig =
303
+ this.prostgles?.opts.fileTable?.referencedTables?.[tableName];
284
304
  const isReferencingFileTable = this.dbo[tableName]?.columns?.some(
285
305
  (c) =>
286
306
  c.name === colName &&
287
307
  c.references &&
288
- c.references?.some(({ ftable }) => ftable === this.tableName)
308
+ c.references?.some(({ ftable }) => ftable === this.tableName),
289
309
  );
290
310
  const allowAllFiles = { acceptedContent: "*" } as const;
291
311
  if (isReferencingFileTable) {
@@ -300,13 +320,15 @@ export class FileManager {
300
320
  init = initFileManager.bind(this);
301
321
 
302
322
  destroy = () => {
303
- removeExpressRoute(this.prostgles?.opts.fileTable?.expressApp, [this.fileRouteExpress]);
323
+ removeExpressRoute(this.prostgles?.opts.fileTable?.expressApp, [
324
+ this.fileRouteExpress,
325
+ ]);
304
326
  };
305
327
  }
306
328
 
307
329
  export const removeExpressRoute = (
308
330
  app: ExpressApp | undefined,
309
- routePaths: (string | undefined)[]
331
+ routePaths: (string | undefined)[],
310
332
  ) => {
311
333
  const routes = app?._router?.stack;
312
334
  if (routes) {
@@ -318,7 +340,10 @@ export const removeExpressRoute = (
318
340
  }
319
341
  };
320
342
 
321
- export const removeExpressRouteByName = (app: ExpressApp | undefined, name: string) => {
343
+ export const removeExpressRouteByName = (
344
+ app: ExpressApp | undefined,
345
+ name: string,
346
+ ) => {
322
347
  const routes = app?._router?.stack;
323
348
  if (routes) {
324
349
  routes.forEach((route, i) => {
@@ -330,15 +355,17 @@ export const removeExpressRouteByName = (app: ExpressApp | undefined, name: stri
330
355
  };
331
356
 
332
357
  export const getFileTypeFromFilename = (
333
- fileName: string
334
- ): { mime: ALLOWED_CONTENT_TYPE; ext: ALLOWED_EXTENSION | string } | undefined => {
358
+ fileName: string,
359
+ ):
360
+ | { mime: ALLOWED_CONTENT_TYPE; ext: ALLOWED_EXTENSION | string }
361
+ | undefined => {
335
362
  const nameParts = fileName.split(".");
336
363
 
337
364
  if (nameParts.length < 2) return undefined;
338
365
 
339
366
  const nameExt = nameParts.at(-1)!.toLowerCase(),
340
367
  mime = getKeys(CONTENT_TYPE_TO_EXT).find((k) =>
341
- (CONTENT_TYPE_TO_EXT[k] as readonly string[]).includes(nameExt)
368
+ (CONTENT_TYPE_TO_EXT[k] as readonly string[]).includes(nameExt),
342
369
  );
343
370
 
344
371
  if (!mime) return undefined;
@@ -354,7 +381,7 @@ export const getFileTypeFromFilename = (
354
381
 
355
382
  export const getFileType = async (
356
383
  file: Buffer | string,
357
- fileName: string
384
+ fileName: string,
358
385
  ): Promise<{ mime: ALLOWED_CONTENT_TYPE; ext: ALLOWED_EXTENSION }> => {
359
386
  const { fileTypeFromBuffer } = await (eval('import("file-type")') as Promise<
360
387
  typeof import("file-type")
@@ -362,12 +389,17 @@ export const getFileType = async (
362
389
 
363
390
  const fileNameMime = getFileTypeFromFilename(fileName);
364
391
  if (!fileNameMime?.ext) throw new Error("File name must contain extenion");
365
- const res = await fileTypeFromBuffer(typeof file === "string" ? Buffer.from(file, "utf8") : file);
392
+ const res = await fileTypeFromBuffer(
393
+ typeof file === "string" ? Buffer.from(file, "utf8") : file,
394
+ );
366
395
 
367
396
  if (!res) {
368
397
  /* Set correct/missing extension */
369
398
  const nameExt = fileNameMime?.ext;
370
- if (["xml", "txt", "csv", "tsv", "svg", "sql"].includes(nameExt) && fileNameMime.mime) {
399
+ if (
400
+ ["xml", "txt", "csv", "tsv", "svg", "sql"].includes(nameExt) &&
401
+ fileNameMime.mime
402
+ ) {
371
403
  return fileNameMime as any;
372
404
  }
373
405
 
@@ -375,7 +407,7 @@ export const getFileType = async (
375
407
  } else {
376
408
  if (!res.ext || fileNameMime?.ext.toLowerCase() !== res.ext.toLowerCase()) {
377
409
  throw new Error(
378
- `There is a mismatch between file name extension and actual buffer extension: ${fileNameMime?.ext} vs ${res.ext}`
410
+ `There is a mismatch between file name extension and actual buffer extension: ${fileNameMime?.ext} vs ${res.ext}`,
379
411
  );
380
412
  }
381
413
  }
@@ -1,6 +1,16 @@
1
- import { ALLOWED_CONTENT_TYPE, ALLOWED_EXTENSION, CONTENT_TYPE_TO_EXT, getKeys, isObject } from "prostgles-types";
1
+ import {
2
+ ALLOWED_CONTENT_TYPE,
3
+ ALLOWED_EXTENSION,
4
+ CONTENT_TYPE_TO_EXT,
5
+ getKeys,
6
+ isObject,
7
+ } from "prostgles-types";
2
8
  import { parseFieldFilter } from "../DboBuilder/ViewHandler/parseFieldFilter";
3
- import { FileManager, getFileType, getFileTypeFromFilename } from "./FileManager";
9
+ import {
10
+ FileManager,
11
+ getFileType,
12
+ getFileTypeFromFilename,
13
+ } from "./FileManager";
4
14
 
5
15
  type Args = {
6
16
  file: Buffer | string;
@@ -8,7 +18,10 @@ type Args = {
8
18
  colName?: string;
9
19
  tableName?: string;
10
20
  };
11
- export async function getValidatedFileType(this: FileManager, args: Args): Promise<{
21
+ export async function getValidatedFileType(
22
+ this: FileManager,
23
+ args: Args,
24
+ ): Promise<{
12
25
  mime: string | ALLOWED_CONTENT_TYPE;
13
26
  ext: string | ALLOWED_EXTENSION;
14
27
 
@@ -17,53 +30,84 @@ export async function getValidatedFileType(this: FileManager, args: Args): Promi
17
30
  }> {
18
31
  const { file, fileName, tableName, colName } = args;
19
32
  const config = this.prostgles?.opts.fileTable;
20
- if(!config) throw new Error("File table config missing");
33
+ if (!config) throw new Error("File table config missing");
21
34
 
22
- const buffer = typeof file === "string"? Buffer.from(file, 'utf8') : file;
35
+ const buffer = typeof file === "string" ? Buffer.from(file, "utf8") : file;
23
36
 
24
37
  const result = await getFileTypeFromFilename(fileName);
25
- if(tableName && colName){
38
+ if (tableName && colName) {
26
39
  const tableConfig = config.referencedTables?.[tableName];
27
40
 
28
- if(tableConfig && isObject(tableConfig) && tableConfig.referenceColumns[colName]){
41
+ if (
42
+ tableConfig &&
43
+ isObject(tableConfig) &&
44
+ tableConfig.referenceColumns[colName]
45
+ ) {
29
46
  const colConfig = tableConfig.referenceColumns[colName]!;
30
- if(colConfig.maxFileSizeMB){
47
+ if (colConfig.maxFileSizeMB) {
31
48
  const actualBufferSize = Buffer.byteLength(buffer);
32
- if((actualBufferSize/1e6) > colConfig.maxFileSizeMB){
33
- throw new Error(`Provided file is larger than the ${colConfig.maxFileSizeMB}MB limit`);
49
+ if (actualBufferSize / 1e6 > colConfig.maxFileSizeMB) {
50
+ throw new Error(
51
+ `Provided file is larger than the ${colConfig.maxFileSizeMB}MB limit`,
52
+ );
34
53
  }
35
54
  }
36
-
37
- if("acceptedContent" in colConfig && colConfig.acceptedContent && colConfig.acceptedContent !== "*"){
55
+
56
+ if (
57
+ "acceptedContent" in colConfig &&
58
+ colConfig.acceptedContent &&
59
+ colConfig.acceptedContent !== "*"
60
+ ) {
38
61
  const mime = await getFileType(buffer, fileName);
39
- const CONTENTS = [
40
- "image",
41
- "audio",
42
- "video",
43
- "text",
44
- "application",
45
- ];
46
- const allowedContent = parseFieldFilter(colConfig.acceptedContent, false, CONTENTS);
47
- if(!allowedContent.some(c => mime.mime.startsWith(c))){
48
- throw new Error(`Dissallowed content type provided: ${mime.mime.split("/")[0]}. Allowed content types: ${allowedContent} `)
62
+ const CONTENTS = ["image", "audio", "video", "text", "application"];
63
+ const allowedContent = parseFieldFilter(
64
+ colConfig.acceptedContent,
65
+ false,
66
+ CONTENTS,
67
+ );
68
+ if (!allowedContent.some((c) => mime.mime.startsWith(c))) {
69
+ throw new Error(
70
+ `Dissallowed content type provided: ${mime.mime.split("/")[0]}. Allowed content types: ${allowedContent} `,
71
+ );
49
72
  }
50
- } else if("acceptedContentType" in colConfig && colConfig.acceptedContentType && colConfig.acceptedContentType !== "*"){
73
+ } else if (
74
+ "acceptedContentType" in colConfig &&
75
+ colConfig.acceptedContentType &&
76
+ colConfig.acceptedContentType !== "*"
77
+ ) {
51
78
  const mime = await getFileType(buffer, fileName);
52
- const allowedContentTypes = parseFieldFilter(colConfig.acceptedContentType, false, getKeys(CONTENT_TYPE_TO_EXT));
53
-
54
- if(!allowedContentTypes.some(c => c === mime.mime)){
55
- throw new Error(`Dissallowed MIME provided: ${mime.mime}. Allowed MIME values: ${allowedContentTypes} `)
79
+ const allowedContentTypes = parseFieldFilter(
80
+ colConfig.acceptedContentType,
81
+ false,
82
+ getKeys(CONTENT_TYPE_TO_EXT),
83
+ );
84
+
85
+ if (!allowedContentTypes.some((c) => c === mime.mime)) {
86
+ throw new Error(
87
+ `Dissallowed MIME provided: ${mime.mime}. Allowed MIME values: ${allowedContentTypes} `,
88
+ );
56
89
  }
57
- } else if("acceptedFileTypes" in colConfig && colConfig.acceptedFileTypes && colConfig.acceptedFileTypes !== "*"){
90
+ } else if (
91
+ "acceptedFileTypes" in colConfig &&
92
+ colConfig.acceptedFileTypes &&
93
+ colConfig.acceptedFileTypes !== "*"
94
+ ) {
58
95
  const mime = await getFileType(buffer, fileName);
59
- const allowedExtensions = parseFieldFilter(colConfig.acceptedFileTypes, false, Object.values(CONTENT_TYPE_TO_EXT).flat());
60
-
61
- if(!allowedExtensions.some(c => c === mime.ext)){
62
- throw new Error(`Dissallowed extension provided: ${mime.ext}. Allowed extension values: ${allowedExtensions} `)
96
+ const allowedExtensions = parseFieldFilter(
97
+ colConfig.acceptedFileTypes,
98
+ false,
99
+ Object.values(CONTENT_TYPE_TO_EXT).flat(),
100
+ );
101
+
102
+ if (!allowedExtensions.some((c) => c === mime.ext)) {
103
+ throw new Error(
104
+ `Dissallowed extension provided: ${mime.ext}. Allowed extension values: ${allowedExtensions} `,
105
+ );
63
106
  }
64
107
  }
65
- }
108
+ }
66
109
  }
67
- if(!result?.mime) throw `File MIME type not found for the provided extension: ${result?.ext}`;
110
+ if (!result?.mime)
111
+ throw `File MIME type not found for the provided extension: ${result?.ext}`;
68
112
  return result;
69
- }
113
+ }
@@ -17,9 +17,10 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
17
17
  const { tableName = "files", referencedTables = {} } = fileTable;
18
18
  this.tableName = tableName;
19
19
 
20
- const maxBfSizeMB = (prg.opts.io?.engine?.opts?.maxHttpBufferSize || 1e6) / 1e6;
20
+ const maxBfSizeMB =
21
+ (prg.opts.io?.engine?.opts?.maxHttpBufferSize || 1e6) / 1e6;
21
22
  console.log(
22
- `Prostgles: Initiated file manager. Max allowed file size: ${maxBfSizeMB}MB (maxHttpBufferSize = 1e6). To increase this set maxHttpBufferSize in socket.io server init options`
23
+ `Prostgles: Initiated file manager. Max allowed file size: ${maxBfSizeMB}MB (maxHttpBufferSize = 1e6). To increase this set maxHttpBufferSize in socket.io server init options`,
23
24
  );
24
25
 
25
26
  const canCreate = await canCreateTables(this.db);
@@ -65,7 +66,7 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
65
66
  UNIQUE(id),
66
67
  UNIQUE(name)
67
68
  )`,
68
- `Create fileTable ${asName(tableName)}`
69
+ `Create fileTable ${asName(tableName)}`,
69
70
  );
70
71
  await prg.refreshDBO();
71
72
  }
@@ -84,7 +85,9 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
84
85
  for (const [colName] of Object.entries(tableConfig.referenceColumns)) {
85
86
  const existingCol = cols.find((c) => c.name === colName);
86
87
  if (existingCol) {
87
- if (existingCol.references?.some(({ ftable }) => ftable === tableName)) {
88
+ if (
89
+ existingCol.references?.some(({ ftable }) => ftable === tableName)
90
+ ) {
88
91
  // All ok
89
92
  } else {
90
93
  if (existingCol.udt_name === "uuid") {
@@ -94,12 +97,12 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
94
97
  await runQuery(query, msg);
95
98
  } catch (e) {
96
99
  console.error(
97
- `Could not add constraing. Err: ${e instanceof Error ? e.message : JSON.stringify(e)}`
100
+ `Could not add constraing. Err: ${e instanceof Error ? e.message : JSON.stringify(e)}`,
98
101
  );
99
102
  }
100
103
  } else {
101
104
  console.error(
102
- `Referenced file column ${refTable} (${colName}) exists but is not of required type (UUID). Choose a different column name or ALTER the existing column to match the type and the data found in file table ${tableName}(id)`
105
+ `Referenced file column ${refTable} (${colName}) exists but is not of required type (UUID). Choose a different column name or ALTER the existing column to match the type and the data found in file table ${tableName}(id)`,
103
106
  );
104
107
  }
105
108
  }
@@ -115,7 +118,7 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
115
118
  // }
116
119
  // await createColumn();
117
120
  console.error(
118
- `Referenced file column ${refTable} (${colName}) does not exist. Create it using this query:\n${query}`
121
+ `Referenced file column ${refTable} (${colName}) does not exist. Create it using this query:\n${query}`,
119
122
  );
120
123
  }
121
124
  }
@@ -154,7 +157,13 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
154
157
  }
155
158
  const id = name.slice(0, 36);
156
159
  const selectParams = {
157
- select: { id: 1, name: 1, signed_url: 1, signed_url_expires: 1, content_type: 1 },
160
+ select: {
161
+ id: 1,
162
+ name: 1,
163
+ signed_url: 1,
164
+ signed_url_expires: 1,
165
+ content_type: 1,
166
+ },
158
167
  };
159
168
  const media = await runClientRequest.bind(this.prostgles)({
160
169
  type: "http",
@@ -178,7 +187,10 @@ export async function initFileManager(this: FileManager, prg: Prostgles) {
178
187
  const EXPIRES = Date.now() + HOUR;
179
188
  if (!url || expires < EXPIRES) {
180
189
  url = await this.getFileCloudDownloadURL(media.name, 60 * 60);
181
- await mediaTable.update({ name }, { signed_url: url, signed_url_expires: EXPIRES });
190
+ await mediaTable.update(
191
+ { name },
192
+ { signed_url: url, signed_url_expires: EXPIRES },
193
+ );
182
194
  }
183
195
 
184
196
  res.redirect(url);
@@ -1,26 +1,30 @@
1
- import { FileManager, LocalConfig, OnProgress, UploadedItem } from "./FileManager";
2
- import * as stream from 'stream';
3
- import * as fs from 'fs';
1
+ import {
2
+ FileManager,
3
+ LocalConfig,
4
+ OnProgress,
5
+ UploadedItem,
6
+ } from "./FileManager";
7
+ import * as stream from "stream";
8
+ import * as fs from "fs";
4
9
 
5
10
  export async function upload(
6
11
  this: FileManager,
7
- file: Buffer | string | stream.PassThrough,
12
+ file: Buffer | string | stream.PassThrough,
8
13
  name: string,
9
14
  mime: string,
10
- onProgress?: OnProgress
15
+ onProgress?: OnProgress,
11
16
  ): Promise<UploadedItem> {
12
-
13
17
  return new Promise(async (resolve, reject) => {
14
- if(!file){
18
+ if (!file) {
15
19
  throw "No file. Expecting: Buffer | String | stream.PassThrough";
16
20
  }
17
- if(!name){
21
+ if (!name) {
18
22
  throw "No file name. Expecting: String";
19
23
  }
20
24
 
21
25
  const url = this.getLocalFileUrl(name);
22
- if(!this.cloudClient){
23
- if(file instanceof stream.PassThrough){
26
+ if (!this.cloudClient) {
27
+ if (file instanceof stream.PassThrough) {
24
28
  throw new Error("S3 config missing. Can only upload streams to S3");
25
29
  }
26
30
  const config = this.config as LocalConfig;
@@ -31,32 +35,30 @@ export async function upload(
31
35
  resolve({
32
36
  url,
33
37
  etag: `none`,
34
- content_length: fs.statSync(filePath).size
38
+ content_length: fs.statSync(filePath).size,
35
39
  });
36
- } catch(err){
40
+ } catch (err) {
37
41
  console.error("Error saving file locally", err);
38
- reject("Internal error")
42
+ reject("Internal error");
39
43
  }
40
44
  } else {
41
-
42
45
  let content_length = 0;
43
46
  this.cloudClient.upload({
44
47
  fileName: name,
45
48
  contentType: mime,
46
49
  file,
47
50
  onFinish: (err, uploaded) => {
48
- if(err){
51
+ if (err) {
49
52
  reject(err.toString());
50
53
  } else {
51
54
  resolve({ ...uploaded, url });
52
55
  }
53
56
  },
54
- onProgress: loaded => {
57
+ onProgress: (loaded) => {
55
58
  content_length = loaded;
56
59
  onProgress?.({ loaded, total: content_length });
57
- }
60
+ },
58
61
  });
59
62
  }
60
-
61
63
  });
62
- }
64
+ }