prostgles-server 1.5.122 → 2.0.3

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 (426) hide show
  1. package/dist/DboBuilder.d.ts +52 -27
  2. package/dist/DboBuilder.d.ts.map +1 -1
  3. package/dist/DboBuilder.js +404 -85
  4. package/dist/DboBuilder.js.map +1 -1
  5. package/dist/FileManager.d.ts +160 -0
  6. package/dist/FileManager.d.ts.map +1 -0
  7. package/dist/FileManager.js +419 -0
  8. package/dist/FileManager.js.map +1 -0
  9. package/dist/Prostgles.d.ts +145 -79
  10. package/dist/Prostgles.d.ts.map +1 -1
  11. package/dist/Prostgles.js +240 -180
  12. package/dist/Prostgles.js.map +1 -1
  13. package/dist/PubSubManager.js +1 -1
  14. package/dist/PubSubManager.js.map +1 -1
  15. package/dist/QueryBuilder.d.ts.map +1 -1
  16. package/dist/QueryBuilder.js +8 -5
  17. package/dist/QueryBuilder.js.map +1 -1
  18. package/dist/index.d.ts +3 -2
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js.map +1 -1
  21. package/lib/DboBuilder.ts +541 -136
  22. package/lib/FileManager.ts +546 -0
  23. package/lib/Prostgles.ts +407 -253
  24. package/lib/PubSubManager.ts +1 -1
  25. package/lib/QueryBuilder.ts +10 -6
  26. package/lib/index.ts +3 -3
  27. package/package.json +8 -2
  28. package/tests/client/index.js +18 -6
  29. package/tests/client/index.ts +16 -4
  30. package/tests/client/package-lock.json +27 -26
  31. package/tests/client/package.json +1 -1
  32. package/tests/client_only_queries.js +4 -4
  33. package/tests/config_test/DBoGenerated.d.ts +231 -8
  34. package/tests/config_test/index.html +35 -9
  35. package/tests/config_test/index.js +55 -97
  36. package/tests/config_test/index.js.map +1 -0
  37. package/tests/config_test/index.ts +67 -113
  38. package/tests/config_test/init.sql +50 -24
  39. package/tests/config_test/media/002d5f12-63c3-41f3-9007-cd33009104f4.txt +1 -0
  40. package/tests/config_test/media/003f0136-d231-4dd1-8937-08fa9a7c3d2e.txt +1 -0
  41. package/tests/config_test/media/01bd39a0-083b-4bfa-91fc-f4d1d9b7b204.txt +1 -0
  42. package/tests/config_test/media/0224513a-62de-4f0a-92bb-dcb3f700da7f.txt +1 -0
  43. package/tests/config_test/media/03005346-d6d5-4824-96ae-5ad7ca762730.txt +1 -0
  44. package/tests/config_test/media/0342d065-9bd2-443f-9058-f8058ab52de0.txt +1 -0
  45. package/tests/config_test/media/0350d1cf-b3b3-4c58-aef2-ad1dc3f80c6c.txt +1 -0
  46. package/tests/config_test/media/036833d7-d166-43a1-bda3-b801938c614d.txt +1 -0
  47. package/tests/config_test/media/03b5324d-0913-408f-a78a-252ff8fe8126.txt +1 -0
  48. package/tests/config_test/media/0540b670-bf42-4a83-82b2-67164630a24a.txt +1 -0
  49. package/tests/config_test/media/05900f5f-3b67-4ee9-8e1d-b511fd79d878.txt +1 -0
  50. package/tests/config_test/media/05969252-3f9e-41a0-88ce-aa23ba8b42eb.txt +1 -0
  51. package/tests/config_test/media/05a8a60c-cc75-4469-8e06-55d88c26e97a.txt +1 -0
  52. package/tests/config_test/media/05e662fc-7a03-4303-ae42-27a28d9affb9.txt +1 -0
  53. package/tests/config_test/media/061f86e6-0ddd-49b0-b243-4c063c6db5e4.txt +1 -0
  54. package/tests/config_test/media/062cf311-3976-471e-88ec-d618bd8ceeaa.txt +1 -0
  55. package/tests/config_test/media/0693b073-77b9-446a-9606-5453bcafd200.txt +1 -0
  56. package/tests/config_test/media/07a09b79-b1ed-45a3-bb42-42cd1a00757b.txt +1 -0
  57. package/tests/config_test/media/07e48303-0520-4a80-921e-130417488baa.txt +1 -0
  58. package/tests/config_test/media/09ab90a6-8461-4f39-89fb-8e2277974771.txt +1 -0
  59. package/tests/config_test/media/09c1194a-5d09-417c-a0c4-26dcf1e65bdb.txt +1 -0
  60. package/tests/config_test/media/09dc662f-6a9d-4a0b-95ba-8d24ceae9721.txt +1 -0
  61. package/tests/config_test/media/09ebb492-6146-4ff8-ac83-ac9970f5844c.txt +1 -0
  62. package/tests/config_test/media/0a198d6f-c629-42bd-9aa8-3c0ff62e1f1d.txt +1 -0
  63. package/tests/config_test/media/0a6d3ced-a16f-4491-b25b-679e9323ad79.txt +1 -0
  64. package/tests/config_test/media/0a817a27-6888-4ac4-b07b-4d1275e035ff.txt +1 -0
  65. package/tests/config_test/media/0aadc4f7-bf87-49da-8ef6-0857bf1789b4.txt +1 -0
  66. package/tests/config_test/media/0abe4a2e-fd75-428b-9757-2535d4112862.txt +1 -0
  67. package/tests/config_test/media/0ad9deca-6362-41dd-b0b3-8f8a71e2e1e2.txt +1 -0
  68. package/tests/config_test/media/0bdb19df-b82c-4a07-8d9b-a6e3a2af8a94.txt +1 -0
  69. package/tests/config_test/media/0c1e4575-223d-4d0c-b2c3-6ab6bb9844e6.txt +1 -0
  70. package/tests/config_test/media/0c4e3d55-432f-42e9-aa53-48e816ff6d15.txt +1 -0
  71. package/tests/config_test/media/0c5b47a4-884a-4207-b106-fa2557fc5600.txt +1 -0
  72. package/tests/config_test/media/0d8fbe62-22bc-47e8-b4ca-b77d8fd02798.txt +1 -0
  73. package/tests/config_test/media/0d95a140-3ae1-4faa-a34b-ed5b6cc524ac.txt +1 -0
  74. package/tests/config_test/media/0e0907c7-bd10-4ce2-ac36-066916a8a793.txt +1 -0
  75. package/tests/config_test/media/0e192b00-2676-4130-8819-90ee34a50932.txt +1 -0
  76. package/tests/config_test/media/0f9e3861-0e59-4ae4-a606-1fdd2c890c5b.txt +1 -0
  77. package/tests/config_test/media/1039afe1-24e9-4ea6-bfd0-6871b5f06f8f.txt +1 -0
  78. package/tests/config_test/media/1052e479-295e-46e9-88ec-d8f20efa75ea.txt +1 -0
  79. package/tests/config_test/media/11973be6-a675-4e0d-a54e-1eccbcdb3f2a.txt +1 -0
  80. package/tests/config_test/media/121656f5-1ef9-4181-9ee0-e3ae1433fed1.txt +1 -0
  81. package/tests/config_test/media/121a16b4-a925-406b-9ba9-0e4b4d413402.txt +1 -0
  82. package/tests/config_test/media/122cdf36-5b17-4b81-aa9d-c6725d1e8c8a.txt +1 -0
  83. package/tests/config_test/media/12435236-4735-4978-a234-52100181ee72.txt +1 -0
  84. package/tests/config_test/media/130eea28-64d0-40c4-8fa4-0cfba493e321.txt +1 -0
  85. package/tests/config_test/media/1435b6fd-4b86-4f7e-8e68-b607c5e5f2ad.txt +1 -0
  86. package/tests/config_test/media/14d78bf0-fd3e-4686-863d-b18d2c69b181.txt +1 -0
  87. package/tests/config_test/media/14dffd0e-23ae-4659-b8b3-25c89593643e.txt +1 -0
  88. package/tests/config_test/media/14e32028-fb4d-4743-a34d-c325be47b25e.txt +1 -0
  89. package/tests/config_test/media/14fb2139-eb53-4246-8dcb-c1e568572306.txt +1 -0
  90. package/tests/config_test/media/1644d880-c61f-4e9c-9c5c-892623ff5689.txt +1 -0
  91. package/tests/config_test/media/16818bb0-a022-4fd9-acac-e5a448b58eaf.txt +1 -0
  92. package/tests/config_test/media/16a47db5-262f-490b-850f-0f82019a58b4.txt +1 -0
  93. package/tests/config_test/media/16c2ffcc-8632-4935-b12d-be1313b74ddc.txt +1 -0
  94. package/tests/config_test/media/16fe3928-25c7-4e3a-9f68-51520712a4f6.txt +1 -0
  95. package/tests/config_test/media/172a7736-d3cf-431c-92a5-1a4aa6e89c7e.txt +1 -0
  96. package/tests/config_test/media/1784e75f-d063-43e2-accb-364ed36ae7d0.txt +1 -0
  97. package/tests/config_test/media/182e9dcc-0443-4cc5-aff1-9cf954dab771.txt +1 -0
  98. package/tests/config_test/media/19158860-e0c0-4ac7-afee-5428f9060b36.txt +1 -0
  99. package/tests/config_test/media/1998f271-5d71-4bc0-9f92-376a8a98f7da.txt +1 -0
  100. package/tests/config_test/media/19d2b383-4b1b-41a5-a7ef-ceaf1e691e0f.txt +1 -0
  101. package/tests/config_test/media/1c33fac7-470b-47e0-8aba-7c7394406aad.txt +1 -0
  102. package/tests/config_test/media/1d8a6c9c-0539-4c08-8ea5-4bd0bbe8fa18.txt +1 -0
  103. package/tests/config_test/media/1de86105-97ce-49c0-8137-030f3af37fb5.txt +1 -0
  104. package/tests/config_test/media/1f1393d1-e2f2-445e-806e-05c9a6135437.txt +1 -0
  105. package/tests/config_test/media/1fc303e7-943c-42cd-87f0-d14b361e5564.txt +1 -0
  106. package/tests/config_test/media/1fd79260-4246-4230-b4ab-c42baad3de44.txt +1 -0
  107. package/tests/config_test/media/209085fb-8441-4039-bb01-32171248c7f7.txt +1 -0
  108. package/tests/config_test/media/20ab3e07-77d6-4fbc-9532-b47e16c38e68.txt +1 -0
  109. package/tests/config_test/media/20d43c00-35b4-43da-b79f-cb59888ac41b.txt +1 -0
  110. package/tests/config_test/media/20f7f651-06de-4d5f-aa39-2c261c662cd3.txt +1 -0
  111. package/tests/config_test/media/214af93c-f973-4809-a440-87a5a3b28e83.txt +1 -0
  112. package/tests/config_test/media/22bffc7f-c942-4163-bbf6-141f585f3671.txt +1 -0
  113. package/tests/config_test/media/23d09f4f-db2a-44cb-9d1b-552eb0568acf.txt +1 -0
  114. package/tests/config_test/media/24a256f7-fe83-4a6d-ace8-a2c2ded37341.txt +1 -0
  115. package/tests/config_test/media/25522aa0-9c30-413b-b0df-f9f2c2562769.txt +1 -0
  116. package/tests/config_test/media/25806b78-52cd-40f2-907a-d4fba3821435.txt +1 -0
  117. package/tests/config_test/media/259920a6-0c5a-4193-8940-91fc0183204c.txt +1 -0
  118. package/tests/config_test/media/28ca6b02-f58e-4204-a87a-28347d8f5884.txt +1 -0
  119. package/tests/config_test/media/2a3f8e6e-3bc4-44b3-ac43-17851b1f53e4.txt +1 -0
  120. package/tests/config_test/media/2afe6eb3-64ca-4aae-b002-676ab3862c96.txt +1 -0
  121. package/tests/config_test/media/2bd913c1-408a-4451-b465-e48452ca46cb.txt +1 -0
  122. package/tests/config_test/media/2bfe0f21-70b6-45a7-9bc0-f60dee9b0786.txt +1 -0
  123. package/tests/config_test/media/2c37bb2d-412e-44be-8f91-58bf1adae554.txt +1 -0
  124. package/tests/config_test/media/2c6ffa05-479f-4d8f-bc98-0c050567ef28.txt +1 -0
  125. package/tests/config_test/media/2ce666cb-e1e7-411f-9727-ce47be9365f5.txt +1 -0
  126. package/tests/config_test/media/2d737158-559b-4fca-b35c-3a832e21a0bf.txt +1 -0
  127. package/tests/config_test/media/2d7cae40-8fa9-4715-8834-b105a5815efc.txt +1 -0
  128. package/tests/config_test/media/2ea6b55b-eb9e-4b72-9510-4d5b00490076.txt +1 -0
  129. package/tests/config_test/media/2f0f8b73-7a21-48e5-b0d8-6e733de5eef8.txt +1 -0
  130. package/tests/config_test/media/2f37ed63-4a76-49e8-9df0-b586e2318b54.txt +1 -0
  131. package/tests/config_test/media/2f4e2797-63dd-43cb-8edf-b6e4a5f6d85b.txt +1 -0
  132. package/tests/config_test/media/2fc8b254-571c-49da-b8d8-af12bead2b6e.txt +1 -0
  133. package/tests/config_test/media/31887ce4-a69d-429e-bd32-e3fcf1b6ec3c.txt +1 -0
  134. package/tests/config_test/media/31ab5780-f38f-4614-b11e-1399a5d19e88.txt +1 -0
  135. package/tests/config_test/media/330b1369-abf8-4a0d-aac3-15185409347b.txt +1 -0
  136. package/tests/config_test/media/332306f0-16a4-46f1-b312-42d5b1739561.txt +1 -0
  137. package/tests/config_test/media/33729cd7-ef5a-461d-860c-188b12c3c0e1.txt +1 -0
  138. package/tests/config_test/media/34f797b8-98c7-47ff-ac4f-da792d3e59ec.txt +1 -0
  139. package/tests/config_test/media/35753dc2-4a87-4fdb-b547-8ba587ab7cca.txt +1 -0
  140. package/tests/config_test/media/35cf2e07-f087-410d-898b-326b16617631.txt +1 -0
  141. package/tests/config_test/media/3704c54c-08b7-429c-98fa-0656dca539ca.txt +1 -0
  142. package/tests/config_test/media/3823f728-c199-416b-aeb3-223bc0dc006a.txt +1 -0
  143. package/tests/config_test/media/38d31ef9-7e41-47f9-8e05-e826f9d1a378.txt +1 -0
  144. package/tests/config_test/media/39504f22-47a7-428a-8793-7cb9cc79b23d.txt +1 -0
  145. package/tests/config_test/media/39baaddd-7764-48b4-9dc3-e77f91b04ff0.txt +1 -0
  146. package/tests/config_test/media/39c91ceb-928d-4279-a8a7-00f363b18384.txt +1 -0
  147. package/tests/config_test/media/3a58c511-78de-425f-a857-63a43e3b4c51.txt +1 -0
  148. package/tests/config_test/media/3c3fd2ca-8a72-4d38-899b-776f4ff690fc.txt +1 -0
  149. package/tests/config_test/media/3c592436-14fa-49f5-be05-1d8aff250d0d.txt +1 -0
  150. package/tests/config_test/media/3db275e8-327d-45d4-a755-3df103967b04.txt +1 -0
  151. package/tests/config_test/media/3de350d2-a26d-40ef-ad11-fa1454a0f50a.txt +1 -0
  152. package/tests/config_test/media/3e4f08ac-8b0a-4ec6-b3be-ff6ce140af6a.txt +1 -0
  153. package/tests/config_test/media/3fa40e56-cb30-4722-ba36-583e7c064d16.txt +1 -0
  154. package/tests/config_test/media/3fe9495c-6fa5-49ca-a16f-e3cf1808d619.txt +1 -0
  155. package/tests/config_test/media/3fed5003-1a13-433d-a82f-325dbd57ff55.txt +1 -0
  156. package/tests/config_test/media/40dfa3df-237e-4e0d-99ff-c90000c5f7ed.txt +1 -0
  157. package/tests/config_test/media/40ea2d40-3f28-46e5-a41d-5aae1721de21.txt +1 -0
  158. package/tests/config_test/media/410c564d-860e-4693-9112-efb2304bf940.txt +1 -0
  159. package/tests/config_test/media/424c9239-aa07-48f3-9a64-c99261387fec.txt +1 -0
  160. package/tests/config_test/media/4260eab4-3e7d-420a-bc8f-b9cc945f3c80.txt +1 -0
  161. package/tests/config_test/media/42886a01-8047-4a49-beab-97f5a3a7c128.txt +1 -0
  162. package/tests/config_test/media/44e2e069-a213-4632-b13b-153461000c5e.txt +1 -0
  163. package/tests/config_test/media/46520b9c-f878-41e9-9840-0d0babb9b63d.txt +1 -0
  164. package/tests/config_test/media/46f010a8-66b2-48d8-b4a6-62cc23e26008.txt +1 -0
  165. package/tests/config_test/media/48c9f649-f776-4cd9-8df5-56b5312f51c2.txt +1 -0
  166. package/tests/config_test/media/49f5836b-4fb0-4ee1-831b-91ddfcaac0bf.txt +1 -0
  167. package/tests/config_test/media/4a2d3bae-040e-44fe-bb36-301af65302fd.txt +1 -0
  168. package/tests/config_test/media/4ab15a14-36c7-4a4e-8179-be60c56368c5.txt +1 -0
  169. package/tests/config_test/media/4b98c009-458a-4e35-96e2-ccd465673234.txt +1 -0
  170. package/tests/config_test/media/4bf86749-685c-423c-9997-eb73cb0bc254.txt +1 -0
  171. package/tests/config_test/media/4db9d5ad-c703-4fb5-9b15-9c48ee3edca1.txt +1 -0
  172. package/tests/config_test/media/4dd147f7-59ef-4b8f-963b-1dbedb0d10a2.txt +1 -0
  173. package/tests/config_test/media/4e61da19-25e1-44a0-b901-2cefc3461619.txt +1 -0
  174. package/tests/config_test/media/4e66c64c-72e3-4458-8ac9-490774193a50.txt +1 -0
  175. package/tests/config_test/media/4e98ba50-1583-4d7b-9e0d-7c577af28182.txt +1 -0
  176. package/tests/config_test/media/4e9cb872-dd5f-404a-ae9f-97ec69606d36.txt +1 -0
  177. package/tests/config_test/media/4fbb89d3-e922-42f2-81ed-6c1370199c94.txt +1 -0
  178. package/tests/config_test/media/4fdf0b1d-1718-4f53-8a9c-6d44bdef0c60.txt +1 -0
  179. package/tests/config_test/media/503c6659-ff3f-4df4-ac88-628e809b2e72.txt +1 -0
  180. package/tests/config_test/media/51010c69-5b30-4ac7-8ed9-12f1866ef145.txt +1 -0
  181. package/tests/config_test/media/51b2d38d-230e-4eb0-9b1f-dab8fa8b415d.txt +1 -0
  182. package/tests/config_test/media/51cc7a7b-a764-4ebd-ac31-ba881fa1404e.txt +1 -0
  183. package/tests/config_test/media/52f0dbb6-2179-4472-871d-dd80c6341c58.txt +1 -0
  184. package/tests/config_test/media/54aff9eb-0202-447d-9c95-c74560cabcd7.txt +1 -0
  185. package/tests/config_test/media/55551c8d-4305-48ca-a752-ade3a9efb538.txt +1 -0
  186. package/tests/config_test/media/555b772b-6c78-4667-80d6-bbe2f290611c.txt +1 -0
  187. package/tests/config_test/media/555fbb0b-febc-4611-9efa-16ddbf8e988c.txt +1 -0
  188. package/tests/config_test/media/55a84883-9a15-4368-b8fe-05bd848de6ba.txt +1 -0
  189. package/tests/config_test/media/56523343-de4a-49de-94ae-8205cc92eeb6.txt +1 -0
  190. package/tests/config_test/media/567d431e-813f-47d7-a3d2-e2371c0f32e2.txt +1 -0
  191. package/tests/config_test/media/56fa54a9-10a4-42a3-9a29-ea132adf09bc.txt +1 -0
  192. package/tests/config_test/media/57734e9e-d5b8-4942-a76c-db1d0cb72aea.txt +1 -0
  193. package/tests/config_test/media/5777d7a2-cd26-494e-92ba-fa681c2445ef.txt +1 -0
  194. package/tests/config_test/media/582f6e3f-1b06-4f97-bb81-4355cc139e41.txt +1 -0
  195. package/tests/config_test/media/584ef61c-974e-4882-aaff-8089029b7a66.txt +1 -0
  196. package/tests/config_test/media/58987f15-0627-4c3c-a8ba-33e0315548f9.txt +1 -0
  197. package/tests/config_test/media/58eb23e6-6110-489f-81d3-37d48bcd3bf7.txt +1 -0
  198. package/tests/config_test/media/5c5e5543-491c-49d2-b762-162faa75019a.txt +1 -0
  199. package/tests/config_test/media/5e688b4a-afba-4d47-bdc8-dd108d673619.txt +1 -0
  200. package/tests/config_test/media/5f42b54e-6020-4552-8872-17dc7d57b110.txt +1 -0
  201. package/tests/config_test/media/5f5ae0f6-816d-4425-8403-5d07284db0aa.txt +1 -0
  202. package/tests/config_test/media/5ffa2969-2d65-430e-a621-420c07f18f41.txt +1 -0
  203. package/tests/config_test/media/62a62671-e4bc-4312-8dfd-a06168c22aee.txt +1 -0
  204. package/tests/config_test/media/63732c16-1f11-4635-b2bc-62a6459e651e.txt +1 -0
  205. package/tests/config_test/media/64b8c889-5423-4cbb-9816-a05e72771b52.txt +1 -0
  206. package/tests/config_test/media/653d8bcd-4e60-4fda-9676-2e0054d966c1.txt +1 -0
  207. package/tests/config_test/media/6602e1e0-07e9-4dd1-b3c8-276f24e2a41f.txt +1 -0
  208. package/tests/config_test/media/67868636-99cc-441b-991d-7fe781b67745.txt +1 -0
  209. package/tests/config_test/media/67b4eede-7118-4e25-8801-ca53d0fd9d7f.txt +1 -0
  210. package/tests/config_test/media/67b817df-8c2f-4fe5-ba38-6090b5658943.txt +1 -0
  211. package/tests/config_test/media/67f8c8a6-8aa3-4d0f-bcf6-bec8c5a6726a.txt +1 -0
  212. package/tests/config_test/media/6808c09c-a1a9-4eea-92d6-327957c599be.txt +1 -0
  213. package/tests/config_test/media/681f8ee3-0d7f-4d85-a593-0c1f5ceea9be.txt +1 -0
  214. package/tests/config_test/media/68ae942b-c728-4127-a057-dfd08edc1aee.txt +1 -0
  215. package/tests/config_test/media/6a405178-234d-4562-ab34-c554826476fc.txt +1 -0
  216. package/tests/config_test/media/6b801410-b1fb-43f6-935e-c7cb09fb0f5a.txt +1 -0
  217. package/tests/config_test/media/6bd41073-fa62-4c20-a896-8b1e5d2b8381.txt +1 -0
  218. package/tests/config_test/media/6ea9bf1d-780e-4fc2-987e-841038b791cd.txt +1 -0
  219. package/tests/config_test/media/6fa62bcc-859a-44eb-a85b-ed12b3aec3ae.txt +1 -0
  220. package/tests/config_test/media/70118801-66f3-4165-a0b2-8918e4d4bd15.txt +1 -0
  221. package/tests/config_test/media/70640e73-56dc-4880-af62-ad7530a1185d.txt +1 -0
  222. package/tests/config_test/media/7114e6d7-f285-48b3-80c9-ec3fb1c3233e.txt +1 -0
  223. package/tests/config_test/media/71997029-9398-4efb-9868-3025b6de861a.txt +1 -0
  224. package/tests/config_test/media/725cb5f7-8410-4b7a-8427-90b213cea9d6.txt +1 -0
  225. package/tests/config_test/media/727960af-4454-4aa2-b479-c88398ca2c01.txt +1 -0
  226. package/tests/config_test/media/763e2702-7677-48b0-89be-30f8caf56667.txt +1 -0
  227. package/tests/config_test/media/7682d7aa-6622-4ae1-bdfc-bb5134cf92d9.txt +1 -0
  228. package/tests/config_test/media/773d6a45-2316-41da-9973-1395727ffc1f.txt +1 -0
  229. package/tests/config_test/media/783cdda1-9913-4ab0-aba6-56a4c22e2b61.txt +1 -0
  230. package/tests/config_test/media/78becb97-76f6-4fd1-976d-ab3d5e4b21c2.txt +1 -0
  231. package/tests/config_test/media/78cb1409-965a-44ea-b42b-0363db4d2ebd.txt +1 -0
  232. package/tests/config_test/media/79f9864e-b5d5-4c8d-bb66-749f5b49877f.txt +1 -0
  233. package/tests/config_test/media/7b2928b9-4fd3-46c7-8b78-f8d1118c605b.txt +1 -0
  234. package/tests/config_test/media/7b5aead0-b20b-4719-88aa-3dd070d53e4d.txt +1 -0
  235. package/tests/config_test/media/7c1a82c9-391d-40fb-a6f3-d79468fcd45f.txt +1 -0
  236. package/tests/config_test/media/7f1aefd7-7c6b-4b29-9f71-a85d800d63eb.txt +1 -0
  237. package/tests/config_test/media/7fe1aa1b-3e92-4f1b-a77d-bf69601ba162.txt +1 -0
  238. package/tests/config_test/media/802ca8c0-8898-446d-aeca-59d0cce3eea5.txt +1 -0
  239. package/tests/config_test/media/8034e1cc-a82a-4e65-9019-ecf53a212c9e.txt +1 -0
  240. package/tests/config_test/media/80828d5a-916c-412b-aa23-eccdf3ce4078.txt +1 -0
  241. package/tests/config_test/media/81a6ec1c-49c5-490b-afe8-bd47a3c3b1e7.txt +1 -0
  242. package/tests/config_test/media/82827b46-f1f4-4b2a-bd5a-4a83e6b5cc12.txt +1 -0
  243. package/tests/config_test/media/82f7163d-c5a6-44fe-b06a-b1863c553af4.txt +1 -0
  244. package/tests/config_test/media/83141a3e-3f8b-456a-83f1-b9b4ada167f0.txt +1 -0
  245. package/tests/config_test/media/837397e7-63f9-4cba-8b10-51d565e00341.txt +1 -0
  246. package/tests/config_test/media/8440b86e-2036-46ef-affe-e052ae1e232f.txt +1 -0
  247. package/tests/config_test/media/8729c33a-8f9d-496c-8090-42947d3bd4c7.txt +1 -0
  248. package/tests/config_test/media/874e1047-3429-443a-868d-4ce453c3a525.txt +1 -0
  249. package/tests/config_test/media/8770cffa-58f5-4c15-869a-687c77529f81.txt +1 -0
  250. package/tests/config_test/media/87c977c0-4375-4527-abc1-6223c71e8756.txt +1 -0
  251. package/tests/config_test/media/889e72cc-7e19-40ef-9d5b-1e501f3b48c7.txt +1 -0
  252. package/tests/config_test/media/88c89c9b-755e-43f9-9ac6-c01df1e83dfb.txt +1 -0
  253. package/tests/config_test/media/894ee8b5-d527-40e2-a7e1-475d9f07c2aa.txt +1 -0
  254. package/tests/config_test/media/89ec8a46-a4bf-4462-8f6d-c132016af9e1.txt +1 -0
  255. package/tests/config_test/media/8b2bee47-1673-4cd9-a8d5-033ef092b93e.txt +1 -0
  256. package/tests/config_test/media/8c362262-34ff-4707-ab5f-c334034083ee.txt +1 -0
  257. package/tests/config_test/media/8c458967-085b-4750-91e6-3ea391147bc7.txt +1 -0
  258. package/tests/config_test/media/8c5b0560-fc62-47a5-b480-a93120ca7bc4.txt +1 -0
  259. package/tests/config_test/media/8ce076d6-e809-4355-97ab-96104b51b939.txt +1 -0
  260. package/tests/config_test/media/8d60f276-8a2d-48e2-934b-63ef82f03d0f.txt +1 -0
  261. package/tests/config_test/media/8d889db9-f6b8-4ccb-864c-d10d1a54f7e9.txt +1 -0
  262. package/tests/config_test/media/8df0284b-c43f-4c32-a4e1-7dbe2c8c80f0.txt +1 -0
  263. package/tests/config_test/media/8e583c0b-1e2e-4b51-b104-1382e81f69d9.txt +1 -0
  264. package/tests/config_test/media/8f57d7e8-0f26-4719-b4d1-37896da3f579.txt +1 -0
  265. package/tests/config_test/media/9070fc55-481f-44c9-96f2-62f7c0a08814.txt +1 -0
  266. package/tests/config_test/media/93743c64-b60e-4521-9774-4d3beffd4465.txt +1 -0
  267. package/tests/config_test/media/939c6b06-b95d-4de6-bdaa-6f33cbe1fc1e.txt +1 -0
  268. package/tests/config_test/media/94ac4fc1-ba54-43de-b283-a7fa05eb3921.txt +1 -0
  269. package/tests/config_test/media/95093a2d-81d2-46d7-a817-7ab507cc2454.txt +1 -0
  270. package/tests/config_test/media/9628850e-c8d3-44da-b3b4-b27e00ba0e05.txt +1 -0
  271. package/tests/config_test/media/965e4782-3120-41c1-a398-23b38a342d95.txt +1 -0
  272. package/tests/config_test/media/97216f64-db92-4fa8-a239-5a115e3293a0.txt +1 -0
  273. package/tests/config_test/media/97b54a41-ec05-498e-9c61-6ec20f34a331.txt +1 -0
  274. package/tests/config_test/media/97c15c9a-13b4-49f1-b9ea-708c92756b95.txt +1 -0
  275. package/tests/config_test/media/97e45e1c-d03b-4a17-bb6f-ea8601e7fdf4.txt +1 -0
  276. package/tests/config_test/media/98faca9f-2686-4338-a1c2-d1920cce2fc0.txt +1 -0
  277. package/tests/config_test/media/997016d6-6832-4c09-9f8d-949dba5f4f8e.txt +1 -0
  278. package/tests/config_test/media/99ce7c2e-d4a3-49d0-9251-9c62d28288f5.txt +1 -0
  279. package/tests/config_test/media/9a9940a6-78b9-4978-98a6-914a171406c3.txt +1 -0
  280. package/tests/config_test/media/9ade4d45-452f-4a3f-ba4f-d9a08da80dab.txt +1 -0
  281. package/tests/config_test/media/9aff7e30-1809-4021-8ab1-e9a04068ad15.txt +1 -0
  282. package/tests/config_test/media/9b6b83df-1ee4-48f2-a3b0-aee0723378fc.txt +1 -0
  283. package/tests/config_test/media/9bbf50e1-c19d-4cc4-a366-0dcc234f003f.txt +1 -0
  284. package/tests/config_test/media/9ce9bc18-89eb-4a6f-832d-a4380111ebfa.txt +1 -0
  285. package/tests/config_test/media/9d7e647b-f1a9-44a7-bb9d-5ad7ac545ed9.txt +1 -0
  286. package/tests/config_test/media/9e141207-cb69-47c7-a80a-9096886b0f4e.txt +1 -0
  287. package/tests/config_test/media/9e58e7cc-04bb-48d0-9af1-9fd7c80d46be.txt +1 -0
  288. package/tests/config_test/media/9f1f6f42-70f0-404e-89e4-31588f235108.txt +1 -0
  289. package/tests/config_test/media/9f3e0022-deb0-44a2-b47c-fd4880fb2fa6.txt +1 -0
  290. package/tests/config_test/media/a07a6a4e-25c7-4f91-acdc-411e676bae99.txt +1 -0
  291. package/tests/config_test/media/a08ef99a-7cff-4224-985f-aa7cf292c6c3.txt +1 -0
  292. package/tests/config_test/media/a0c4ef94-eb1d-4b7f-b636-62ad6914a69c.txt +1 -0
  293. package/tests/config_test/media/a170f562-2b00-4662-85d7-7c43f9f67e0c.txt +1 -0
  294. package/tests/config_test/media/a32bb27b-7772-4373-ada7-890d9315256f.txt +1 -0
  295. package/tests/config_test/media/a36c31b9-f5c1-43a9-b448-34a380990d3f.txt +1 -0
  296. package/tests/config_test/media/a3831984-3f77-4bac-af70-5a7de6ce5424.txt +1 -0
  297. package/tests/config_test/media/a4f1f023-6135-44da-b580-c1d024cd3f47.txt +1 -0
  298. package/tests/config_test/media/a6227af7-2710-47be-ab45-25f497cec39f.txt +1 -0
  299. package/tests/config_test/media/a64baf32-bd1e-4353-bdf8-74cc3672639f.txt +1 -0
  300. package/tests/config_test/media/a67f5ac1-9645-4f28-a221-c3466b6ba865.txt +1 -0
  301. package/tests/config_test/media/a7f8e5a7-0c0e-48fb-b323-743b121fc091.txt +1 -0
  302. package/tests/config_test/media/a969343e-857b-49b1-a311-0030e0cc57cd.txt +1 -0
  303. package/tests/config_test/media/a9bc7241-7413-4113-8baf-784af73b110d.txt +1 -0
  304. package/tests/config_test/media/aa5b6ba2-76cf-4ca2-90b8-8f83cb23687e.txt +1 -0
  305. package/tests/config_test/media/aa5f29d2-3c13-4a15-ac68-b28964f80a1d.txt +1 -0
  306. package/tests/config_test/media/aaa97926-1d6f-4f5a-9af8-e68584797d23.txt +1 -0
  307. package/tests/config_test/media/ac98c0da-b830-4ec8-9ab6-d8e72a6d0bf2.txt +1 -0
  308. package/tests/config_test/media/af2dda92-1ed0-4b00-a786-f0f7516d4b2b.txt +1 -0
  309. package/tests/config_test/media/b0327e27-0733-4f08-b728-8dca3eae7526.txt +1 -0
  310. package/tests/config_test/media/b23fc74b-403b-49d6-810b-5c3dc71f48de.txt +1 -0
  311. package/tests/config_test/media/b2aa3fbb-ef3f-423b-b7a9-1863aba35bdd.txt +1 -0
  312. package/tests/config_test/media/b38675e5-1ecf-4967-88ef-9f60cce1bb89.txt +1 -0
  313. package/tests/config_test/media/b45c1951-b045-4762-a9fa-8d346617c1b5.txt +1 -0
  314. package/tests/config_test/media/b5359b92-46ea-4ebc-b6bc-102ef03ac5f5.txt +1 -0
  315. package/tests/config_test/media/b5d5aa47-fb92-48a6-9bd5-e394dc7b5212.txt +1 -0
  316. package/tests/config_test/media/b6bba0b4-d9fe-431b-8836-ef41bcd890fe.txt +1 -0
  317. package/tests/config_test/media/b72f4de8-5071-4314-a8e9-0adc7ce98fb8.txt +1 -0
  318. package/tests/config_test/media/b792506c-a05f-4b33-8934-83a7f2b1ebdd.txt +1 -0
  319. package/tests/config_test/media/b7e0e1bd-5e0f-44cc-89b9-55e67c368dce.txt +1 -0
  320. package/tests/config_test/media/b7ec24ac-6967-441e-9cb9-533daa7b443e.txt +1 -0
  321. package/tests/config_test/media/b86f2242-9e7c-4434-ac3d-e8fe868ab758.txt +1 -0
  322. package/tests/config_test/media/b8aa1cbb-05fe-4564-bfad-96a5243eec54.txt +1 -0
  323. package/tests/config_test/media/b8c54323-7977-4626-9412-66116a40fe42.txt +1 -0
  324. package/tests/config_test/media/ba3387a6-c5cd-4677-bddd-a399c6f648a3.txt +1 -0
  325. package/tests/config_test/media/ba70f293-7a40-4a5d-9e60-9d9c3d1fd2c0.txt +1 -0
  326. package/tests/config_test/media/ba7cad62-385b-494c-9688-b008fbae10c9.txt +1 -0
  327. package/tests/config_test/media/bb07c0ca-4b9f-4888-9109-95087951d2a6.txt +1 -0
  328. package/tests/config_test/media/bcf860eb-13b6-44b7-9a58-f2b6422a4fb0.txt +1 -0
  329. package/tests/config_test/media/bd8a019f-c9fd-4289-bc38-cc222a247ba8.txt +1 -0
  330. package/tests/config_test/media/bda18b4f-b4f3-4095-8b9b-8d715945ded1.txt +1 -0
  331. package/tests/config_test/media/bf3e4228-17f4-40d6-9d23-7ba79a333be5.txt +1 -0
  332. package/tests/config_test/media/bfa2fe67-34fe-466c-b807-bea2ddfb0141.txt +1 -0
  333. package/tests/config_test/media/c15ecf6e-6167-42ad-ba24-161216dbabfb.txt +1 -0
  334. package/tests/config_test/media/c17436fb-113d-425e-b59b-cafe93e3418e.txt +1 -0
  335. package/tests/config_test/media/c22154ee-3f66-4996-8ed7-df6120806040.txt +1 -0
  336. package/tests/config_test/media/c2c47ffe-50a1-46f4-bace-d66008c3ce7b.txt +1 -0
  337. package/tests/config_test/media/c4e0c0bf-f9b0-4fec-8fbf-292d8d2fe254.txt +1 -0
  338. package/tests/config_test/media/c56803d2-29bc-4359-8cb4-ea9574a47b2d.txt +1 -0
  339. package/tests/config_test/media/c607d0ee-1641-47e1-83d5-66e9e4bed857.txt +1 -0
  340. package/tests/config_test/media/c62769c5-d469-4499-bf09-97f752a65397.txt +1 -0
  341. package/tests/config_test/media/c667bac7-c161-4f89-b311-9975dcac5865.txt +1 -0
  342. package/tests/config_test/media/c7485a24-95f6-45e7-90f2-6a4716e8971e.txt +1 -0
  343. package/tests/config_test/media/c80b124d-579a-4f7b-9743-5428be624edf.txt +1 -0
  344. package/tests/config_test/media/c8f6e757-0252-4ac6-a439-14a5cd406e16.txt +1 -0
  345. package/tests/config_test/media/c94c9c39-24e1-4ce3-94bd-e32db7052a9d.txt +1 -0
  346. package/tests/config_test/media/ca950ac2-312d-472f-ae0f-7604edd6eae8.txt +1 -0
  347. package/tests/config_test/media/cc1ffb29-8d6f-47cd-9efd-f38832045570.txt +1 -0
  348. package/tests/config_test/media/cf42859e-23b6-4f7b-9b00-4928b0fc33fd.txt +1 -0
  349. package/tests/config_test/media/d000b20e-fd2c-4d07-bb8c-fc48541fe420.txt +1 -0
  350. package/tests/config_test/media/d191b4ba-365d-4346-96c6-7ab4f27a163d.txt +1 -0
  351. package/tests/config_test/media/d2739585-5101-44b5-8dd1-bbb09a104978.txt +1 -0
  352. package/tests/config_test/media/d31d2bf6-bdb1-4de2-9942-3ab83e857a52.txt +1 -0
  353. package/tests/config_test/media/d4027635-8e25-4cf5-a3dc-73a826c5045c.txt +1 -0
  354. package/tests/config_test/media/d476077e-d4e9-42e8-a7db-ded7f075d88d.txt +1 -0
  355. package/tests/config_test/media/d4fe0fae-942f-4966-ab76-64ba34352269.txt +1 -0
  356. package/tests/config_test/media/d551ace3-b4bb-4306-ad17-4873cdbfa5f5.txt +1 -0
  357. package/tests/config_test/media/d5aabdf7-472d-4268-b542-ddce2b25c70e.txt +1 -0
  358. package/tests/config_test/media/d6279202-c868-4058-947d-d9e44acd26cc.txt +1 -0
  359. package/tests/config_test/media/d62ecbb0-df04-449c-91fa-5d60f96c717f.txt +1 -0
  360. package/tests/config_test/media/d6309af6-add5-4d3d-9596-92a3c1b785b8.txt +1 -0
  361. package/tests/config_test/media/d6f419fc-2441-4170-8967-1d3f2a232869.txt +1 -0
  362. package/tests/config_test/media/d78e034e-51e4-47e7-802b-2fb9ca7aeeb0.txt +1 -0
  363. package/tests/config_test/media/d7a5dea2-b545-4b1f-9f25-0ca31bfa9ba9.txt +1 -0
  364. package/tests/config_test/media/d7eff0e2-7e17-4364-995a-13608df42af3.txt +1 -0
  365. package/tests/config_test/media/d89b187c-f4e0-45c2-8622-8f6c05b3f8f8.txt +1 -0
  366. package/tests/config_test/media/d8e4f769-79a3-4577-ae6f-e21b6c373661.txt +1 -0
  367. package/tests/config_test/media/d9266efc-e275-4daf-bb58-a7d224649ac5.txt +1 -0
  368. package/tests/config_test/media/db04add1-1f89-4657-a897-4779001bd6cc.txt +1 -0
  369. package/tests/config_test/media/dc709e83-06c7-4371-95f4-c4982d094c7b.txt +1 -0
  370. package/tests/config_test/media/de3812df-b579-4203-98b1-7ee8821680a4.txt +1 -0
  371. package/tests/config_test/media/df1a21db-e3e1-4670-b909-da77c591486e.txt +1 -0
  372. package/tests/config_test/media/e033a02b-3a38-4b6f-8873-b121cc0cbcad.txt +1 -0
  373. package/tests/config_test/media/e13e2632-4aaf-4a79-b6b4-ef1f81028346.txt +1 -0
  374. package/tests/config_test/media/e19633b3-1ab1-4f18-86cd-e421633e96af.txt +1 -0
  375. package/tests/config_test/media/e1dc9b89-9563-4937-b529-43cd55f82a98.txt +1 -0
  376. package/tests/config_test/media/e37f9c75-0571-4336-b7a6-d431e295ba92.txt +1 -0
  377. package/tests/config_test/media/e3fb83b1-53ed-470d-b9f4-015f98c6a128.txt +1 -0
  378. package/tests/config_test/media/e6c964da-ab48-4779-9706-0ae9ab5f22bb.txt +1 -0
  379. package/tests/config_test/media/e732131f-d7e2-4969-9f0f-10672281405b.txt +1 -0
  380. package/tests/config_test/media/e73f5320-f030-43ae-9efe-002aeb6e0522.txt +1 -0
  381. package/tests/config_test/media/e98267b9-553f-4cd2-9277-2bee037b7003.txt +1 -0
  382. package/tests/config_test/media/ea3c4ac0-f63d-4a91-b015-345851856564.txt +1 -0
  383. package/tests/config_test/media/eacee16f-a2db-4d60-a36b-9b60ea2be330.txt +1 -0
  384. package/tests/config_test/media/eba1b05a-52aa-4f00-92f6-3d556ca2f366.txt +1 -0
  385. package/tests/config_test/media/ebf6e54b-0d1e-4d87-b206-34fa81c66dbb.txt +1 -0
  386. package/tests/config_test/media/ecbf0894-6d76-4141-875d-7691de63a8f7.txt +1 -0
  387. package/tests/config_test/media/ece7a87a-3490-4ac6-adaf-289b1e427325.txt +1 -0
  388. package/tests/config_test/media/ed59c963-3449-4431-8440-2cba7defdcae.txt +1 -0
  389. package/tests/config_test/media/eda09368-348b-4531-a062-a8aafbf9cb8a.txt +1 -0
  390. package/tests/config_test/media/edd1c2b2-179f-4d44-9ac0-72b4fe16c6f2.txt +1 -0
  391. package/tests/config_test/media/ee4e9f39-779e-4084-b696-f39abe74f545.txt +1 -0
  392. package/tests/config_test/media/ef08a195-fcc6-452f-b81e-9d4e97231327.txt +1 -0
  393. package/tests/config_test/media/ef518fee-57a4-47d3-bbb5-aef9b166ca49.txt +1 -0
  394. package/tests/config_test/media/efd77ad3-0e00-448f-a01d-4f363ad5c0b1.txt +1 -0
  395. package/tests/config_test/media/f0c18f54-1095-4787-891b-63c82ba6c153.txt +1 -0
  396. package/tests/config_test/media/f18dca67-521a-4e7f-8064-e6daa08ea3bc.txt +1 -0
  397. package/tests/config_test/media/f19a32ab-f345-4bcb-be01-58e62ade0285.txt +1 -0
  398. package/tests/config_test/media/f29ef9e1-4f84-4bb7-93ce-3693d7cd01f7.txt +1 -0
  399. package/tests/config_test/media/f2cd3857-386e-4d43-b5ee-cb54d1e7fa3c.txt +1 -0
  400. package/tests/config_test/media/f3c8b431-4b3a-43b9-a277-233daea240bb.txt +1 -0
  401. package/tests/config_test/media/f7344305-dde1-4b33-989e-b64b18447e2a.txt +1 -0
  402. package/tests/config_test/media/f829cdfe-a118-4751-a49f-565a617c2b99.txt +1 -0
  403. package/tests/config_test/media/f89206aa-0728-4215-a1df-c1f4315079b5.txt +1 -0
  404. package/tests/config_test/media/f89bb977-c022-471d-9972-d9417484f025.txt +1 -0
  405. package/tests/config_test/media/f960f026-724a-4630-b3ea-48d7ad60b022.txt +1 -0
  406. package/tests/config_test/media/fa343cd4-aca6-482b-9395-f221148fd0d8.txt +1 -0
  407. package/tests/config_test/media/fa802dcc-614e-4027-95fe-ce4f0da61bc9.txt +1 -0
  408. package/tests/config_test/media/ff1a47f0-9c4b-4c88-b0dc-b28d20a83509.txt +1 -0
  409. package/tests/config_test/media/ff8aa3b0-5c4d-4d39-be53-4e28e9ee02e7.txt +1 -0
  410. package/tests/config_test/media/ffb998c5-c98b-4442-b8ef-187bdc7e4c73.txt +1 -0
  411. package/tests/config_test/media/ffc43791-7d7b-4e13-a2ea-3bb952457e7f.txt +1 -0
  412. package/tests/config_test/package-lock.json +727 -688
  413. package/tests/config_test/package.json +2 -2
  414. package/tests/config_test/tsconfig.json +1 -1
  415. package/tests/isomorphic_queries.js +38 -0
  416. package/tests/isomorphic_queries.ts +28 -1
  417. package/tests/server/DBoGenerated.d.ts +135 -1
  418. package/tests/server/index.js +51 -27
  419. package/tests/server/index.ts +49 -26
  420. package/tests/server/init.sql +22 -7
  421. package/tests/server/media/35d7e3d7-64d3-4d4b-b564-5e810ca3671f.txt +1 -0
  422. package/tests/server/media/70ca7114-d6bc-4551-8170-cd7dcdff11dd.txt +1 -0
  423. package/tests/server/media/9e19f591-edc8-4ad7-ac4f-96c3078cb8ed.txt +1 -0
  424. package/tests/server/package-lock.json +166 -535
  425. package/tests/server/package.json +2 -2
  426. package/tests/config_test2/package-lock.json +0 -1999
@@ -17,6 +17,17 @@ exports.isPlainObject = exports.DboBuilder = exports.TableHandler = exports.View
17
17
  const Bluebird = require("bluebird");
18
18
  const pgPromise = require("pg-promise");
19
19
  const prostgles_types_1 = require("prostgles-types");
20
+ // <TXKey extends string = "tx">
21
+ // & {
22
+ // [K in TXKey]: TX
23
+ // };
24
+ // const d: DbHandler = { } as any;
25
+ // d.
26
+ // export type DbHandlerTX = { [key: string]: TX } | DbHandler;
27
+ // export type DbHandlerTX = DbHandler
28
+ // & Partial<{
29
+ // [key: string]: TX
30
+ // }>
20
31
  const utils_1 = require("./utils");
21
32
  const QueryBuilder_1 = require("./QueryBuilder");
22
33
  const Prostgles_1 = require("./Prostgles");
@@ -112,6 +123,7 @@ class ViewHandler {
112
123
  this.tsColumnDefs = [];
113
124
  this.is_view = true;
114
125
  this.filterDef = "";
126
+ this.is_media = false;
115
127
  if (!db || !tableOrViewInfo)
116
128
  throw "";
117
129
  this.db = db;
@@ -176,7 +188,10 @@ class ViewHandler {
176
188
  /* Safely test publish rules */
177
189
  if (fields) {
178
190
  try {
179
- this.parseFieldFilter(fields);
191
+ const _fields = this.parseFieldFilter(fields);
192
+ if (this.is_media && rule === "insert" && !_fields.includes("id")) {
193
+ throw "Must allow id insert for media table";
194
+ }
180
195
  }
181
196
  catch (e) {
182
197
  throw ` issue with publish.${this.name}.${rule}.fields: \nVALUE: ` + JSON.stringify(fields, null, 2) + "\nERROR: " + JSON.stringify(e, null, 2);
@@ -223,7 +238,7 @@ class ViewHandler {
223
238
  return { query, toOne: false };
224
239
  }
225
240
  getJoins(source, target, path) {
226
- let result = [];
241
+ let paths = [];
227
242
  if (!this.joinPaths)
228
243
  throw "Joins dissallowed";
229
244
  if (path && !path.length)
@@ -243,7 +258,7 @@ class ViewHandler {
243
258
  if (!jp || !this.joinPaths.find(j => path ? j.path.join() === path.join() : j.t1 === source && j.t2 === target))
244
259
  throw `Joining ${source} <-...-> ${target} dissallowed or missing`;
245
260
  /* Make the join chain info excluding root table */
246
- result = (path || jp.path).slice(1).map((t2, i, arr) => {
261
+ paths = (path || jp.path).slice(1).map((t2, i, arr) => {
247
262
  const t1 = i === 0 ? source : arr[i - 1];
248
263
  if (!this.joins)
249
264
  this.joins = JSON.parse(JSON.stringify(this.dboBuilder.joins));
@@ -271,20 +286,60 @@ class ViewHandler {
271
286
  on
272
287
  };
273
288
  });
274
- return result;
289
+ let expectOne = false;
290
+ paths.map(({ source, target, on }, i) => {
291
+ // if(expectOne && on.length === 1){
292
+ // const sourceCol = on[0][1];
293
+ // const targetCol = on[0][0];
294
+ // const sCol = this.dboBuilder.dbo[source].columns.find(c => c.name === sourceCol)
295
+ // const tCol = this.dboBuilder.dbo[target].columns.find(c => c.name === targetCol)
296
+ // console.log({ sourceCol, targetCol, sCol, source, tCol, target, on})
297
+ // expectOne = sCol.is_pkey && tCol.is_pkey
298
+ // }
299
+ });
300
+ return {
301
+ paths,
302
+ expectOne
303
+ };
275
304
  }
276
305
  checkFilter(filter) {
277
306
  if (filter === null || filter && !isPojoObject(filter))
278
307
  throw `invalid filter -> ${JSON.stringify(filter)} \nExpecting: undefined | {} | { field_name: "value" } | { field: { $gt: 22 } } ... `;
279
308
  }
280
309
  getInfo(param1, param2, param3, tableRules, localParams) {
310
+ var _a, _b, _c, _e, _f, _g, _h, _j, _k, _l, _m;
281
311
  return __awaiter(this, void 0, void 0, function* () {
282
312
  const p = this.getValidatedRules(tableRules, localParams);
283
313
  if (!p.select.getInfo)
284
314
  throw "Not allowed";
315
+ let has_media = undefined;
316
+ const mediaTable = (_c = (_b = (_a = this.dboBuilder.prostgles) === null || _a === void 0 ? void 0 : _a.opts) === null || _b === void 0 ? void 0 : _b.fileTable) === null || _c === void 0 ? void 0 : _c.tableName;
317
+ if (!this.is_media && mediaTable) {
318
+ if ((_h = (_g = (_f = (_e = this.dboBuilder.prostgles) === null || _e === void 0 ? void 0 : _e.opts) === null || _f === void 0 ? void 0 : _f.fileTable) === null || _g === void 0 ? void 0 : _g.referencedTables) === null || _h === void 0 ? void 0 : _h[this.name]) {
319
+ has_media = (_m = (_l = (_k = (_j = this.dboBuilder.prostgles) === null || _j === void 0 ? void 0 : _j.opts) === null || _k === void 0 ? void 0 : _k.fileTable) === null || _l === void 0 ? void 0 : _l.referencedTables) === null || _m === void 0 ? void 0 : _m[this.name];
320
+ }
321
+ else {
322
+ const jp = this.dboBuilder.joinPaths.find(jp => jp.t1 === this.name && jp.t2 === mediaTable);
323
+ if (jp && jp.path.length < 4) {
324
+ yield Promise.all(jp.path.map((tableName) => __awaiter(this, void 0, void 0, function* () {
325
+ const cols = (yield this.dboBuilder.dbo[tableName].getColumns()).filter(c => { var _a; return jp.path.includes((_a = c.references) === null || _a === void 0 ? void 0 : _a.ftable); });
326
+ if (cols.length && has_media !== "many") {
327
+ if (cols.find(c => !c.is_pkey)) {
328
+ has_media = "many";
329
+ }
330
+ else {
331
+ has_media = "one";
332
+ }
333
+ }
334
+ })));
335
+ }
336
+ }
337
+ }
285
338
  return {
286
339
  oid: this.tableOrViewInfo.oid,
287
340
  comment: this.tableOrViewInfo.comment,
341
+ is_media: this.is_media,
342
+ has_media,
288
343
  };
289
344
  });
290
345
  }
@@ -298,10 +353,10 @@ class ViewHandler {
298
353
  // console.log("getColumns", this.name, this.columns.map(c => c.name))
299
354
  let _lang = lang;
300
355
  return this.columns.map(c => {
301
- var _a, _b, _c, _d, _e, _f;
356
+ var _a, _b, _c, _e, _f, _g, _h, _j;
302
357
  let label = c.comment || c.name;
303
- const iConf = (_d = (_c = (_b = (_a = this.dboBuilder.prostgles) === null || _a === void 0 ? void 0 : _a.i18n) === null || _b === void 0 ? void 0 : _b.column_labels) === null || _c === void 0 ? void 0 : _c[this.name]) === null || _d === void 0 ? void 0 : _d[c.name];
304
- const fallbackLang = (_f = (_e = this.dboBuilder.prostgles) === null || _e === void 0 ? void 0 : _e.i18n) === null || _f === void 0 ? void 0 : _f.fallbackLang;
358
+ const iConf = (_f = (_e = (_c = (_b = (_a = this.dboBuilder.prostgles) === null || _a === void 0 ? void 0 : _a.opts) === null || _b === void 0 ? void 0 : _b.i18n) === null || _c === void 0 ? void 0 : _c.column_labels) === null || _e === void 0 ? void 0 : _e[this.name]) === null || _f === void 0 ? void 0 : _f[c.name];
359
+ const fallbackLang = (_j = (_h = (_g = this.dboBuilder.prostgles) === null || _g === void 0 ? void 0 : _g.opts) === null || _h === void 0 ? void 0 : _h.i18n) === null || _j === void 0 ? void 0 : _j.fallbackLang;
305
360
  _lang = _lang || fallbackLang;
306
361
  if ((lang || fallbackLang) && iConf) {
307
362
  let langLabel;
@@ -447,9 +502,10 @@ class ViewHandler {
447
502
  return __awaiter(this, void 0, void 0, function* () {
448
503
  try {
449
504
  filter = filter || {};
505
+ const allowedReturnTypes = ["row", "value", "values"];
450
506
  const { returnType } = selectParams || {};
451
- if (returnType && !["row", "value", "values"].includes(returnType)) {
452
- throw `returnType (${returnType}) can only be ${["row", "values"].join(" OR ")}`;
507
+ if (returnType && !allowedReturnTypes.includes(returnType)) {
508
+ throw `returnType (${returnType}) can only be ${allowedReturnTypes.join(" OR ")}`;
453
509
  }
454
510
  const { testRule = false, returnQuery = false } = localParams || {};
455
511
  if (testRule)
@@ -477,7 +533,6 @@ class ViewHandler {
477
533
  throw ` invalid publish.${this.name}.select.maxLimit -> expecting integer but got ` + maxLimit;
478
534
  }
479
535
  let q = yield QueryBuilder_1.getNewQuery(this, filter, selectParams, param3_unused, tableRules, localParams), _query = QueryBuilder_1.makeQuery(this, q, undefined, undefined, selectParams);
480
- // console.log(_query)
481
536
  if (testRule) {
482
537
  try {
483
538
  yield this.db.any("EXPLAIN " + _query);
@@ -488,7 +543,6 @@ class ViewHandler {
488
543
  throw `INTERNAL ERROR: Publish config is not valid for publish.${this.name}.select `;
489
544
  }
490
545
  }
491
- // console.log(_query);
492
546
  if (returnQuery)
493
547
  return _query;
494
548
  if (["row", "value"].includes(returnType)) {
@@ -667,24 +721,26 @@ class ViewHandler {
667
721
  }
668
722
  const makeTableChain = (finalFilter) => {
669
723
  let joinPaths = [];
724
+ let expectOne = true;
670
725
  tables.map((t2, depth) => {
671
726
  let t1 = depth ? tables[depth - 1] : thisTable;
672
727
  let exactPaths = [t1, t2];
673
728
  if (!depth && eConfig.shortestJoin)
674
729
  exactPaths = undefined;
675
- joinPaths = joinPaths.concat(this.getJoins(t1, t2, exactPaths));
730
+ const jinf = this.getJoins(t1, t2, exactPaths);
731
+ expectOne = expectOne && jinf.expectOne;
732
+ joinPaths = joinPaths.concat(jinf.paths);
676
733
  });
677
- let r = makeJoin(joinPaths, 0);
678
- // console.log(r);
734
+ let r = makeJoin({ paths: joinPaths, expectOne }, 0);
679
735
  return r;
680
- function makeJoin(paths, ji) {
736
+ function makeJoin(joinInfo, ji) {
737
+ const { paths } = joinInfo;
681
738
  const jp = paths[ji];
682
739
  let prevTable = ji ? paths[ji - 1].table : jp.source;
683
740
  let table = paths[ji].table;
684
741
  let tableAlias = prostgles_types_1.asName(ji < paths.length - 1 ? `jd${ji}` : table);
685
742
  let prevTableAlias = prostgles_types_1.asName(ji ? `jd${ji - 1}` : thisTable);
686
743
  let cond = `${jp.on.map(([c1, c2]) => `${prevTableAlias}.${prostgles_types_1.asName(c1)} = ${tableAlias}.${prostgles_types_1.asName(c2)}`).join("\n AND ")}`;
687
- // console.log(join, cond);
688
744
  let j = `SELECT 1 \n` +
689
745
  `FROM ${prostgles_types_1.asName(table)} ${tableAlias} \n` +
690
746
  `WHERE ${cond} \n`; //
@@ -694,7 +750,7 @@ class ViewHandler {
694
750
  }
695
751
  const indent = (a, b) => a;
696
752
  if (ji < paths.length - 1) {
697
- j += `AND ${makeJoin(paths, ji + 1)} \n`;
753
+ j += `AND ${makeJoin(joinInfo, ji + 1)} \n`;
698
754
  }
699
755
  j = indent(j, ji + 1);
700
756
  let res = `EXISTS ( \n` +
@@ -705,9 +761,9 @@ class ViewHandler {
705
761
  };
706
762
  let t2Rules = undefined, forcedFilter, filterFields, tableAlias;
707
763
  /* Check if allowed to view data */
708
- if (localParams && localParams.socket && this.dboBuilder.publishParser) {
764
+ if (localParams && (localParams.socket || localParams.httpReq) && this.dboBuilder.publishParser) {
709
765
  /* Need to think about joining through dissallowed tables */
710
- t2Rules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: t2, command: "find", socket: localParams.socket });
766
+ t2Rules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: t2, command: "find", localParams });
711
767
  if (!t2Rules || !t2Rules.select)
712
768
  throw "Dissallowed";
713
769
  ({ forcedFilter, filterFields } = t2Rules.select);
@@ -721,14 +777,13 @@ class ViewHandler {
721
777
  addKeywords: false,
722
778
  tableAlias,
723
779
  localParams,
724
- tableRule: tableRules
780
+ tableRule: t2Rules //tableRules
725
781
  }));
726
782
  }
727
783
  catch (err) {
728
784
  // console.trace(err)
729
785
  throw "Issue with preparing $exists query for table " + t2 + "\n->" + JSON.stringify(err);
730
786
  }
731
- // console.log(f2, finalWhere);
732
787
  if (!isJoined) {
733
788
  res = ` EXISTS (SELECT 1 \nFROM ${prostgles_types_1.asName(t2)} \n${finalWhere ? `WHERE ${finalWhere}` : ""}) `;
734
789
  }
@@ -823,7 +878,6 @@ class ViewHandler {
823
878
  return false;
824
879
  });
825
880
  }
826
- // console.log(allowedSelect);
827
881
  /* Add remaining allowed fields */
828
882
  allowedSelect = allowedSelect.concat(p.allColumns.filter(c => allowed_colnames.includes(c.name) &&
829
883
  !allowedSelect.find(s => s.alias === c.name)).map(f => ({
@@ -858,14 +912,12 @@ class ViewHandler {
858
912
  pgp: exports.pgp,
859
913
  select: allowedSelect
860
914
  });
861
- // console.log({ f, q })
862
915
  let templates = [q].filter(q => q);
863
916
  if (existsCond)
864
917
  templates.push(existsCond);
865
918
  templates = templates.concat(computedColConditions);
866
919
  return templates.sort() /* sorted to ensure duplicate subscription channels are not created due to different condition order */
867
920
  .join(" AND \n");
868
- // console.log(templates)
869
921
  // return templates; //pgp.as.format(template, data);
870
922
  /*
871
923
  SHOULD CHECK DATA TYPES TO AVOID "No operator matches the given data type" error
@@ -954,7 +1006,6 @@ class ViewHandler {
954
1006
  if (!_ob || !_ob.length)
955
1007
  return "";
956
1008
  const validatedAggAliases = select.filter(s => s.type !== "joinedColumn").map(s => s.alias);
957
- // console.log({ validatedAggAliases })
958
1009
  let bad_param = _ob.find(({ key }) => !(validatedAggAliases || []).includes(key) &&
959
1010
  (!column_names.includes(key) ||
960
1011
  (allowedFields.length && !allowedFields.includes(key))));
@@ -1155,8 +1206,8 @@ function isPojoObject(obj) {
1155
1206
  class TableHandler extends ViewHandler {
1156
1207
  constructor(db, tableOrViewInfo, pubSubManager, dboBuilder, t, joinPaths) {
1157
1208
  super(db, tableOrViewInfo, pubSubManager, dboBuilder, t, joinPaths);
1158
- this.prepareReturning = (returning, allowedFields, tableAlias) => __awaiter(this, void 0, void 0, function* () {
1159
- let result = "";
1209
+ this.prepareReturning = (returning, allowedFields) => __awaiter(this, void 0, void 0, function* () {
1210
+ let result = [];
1160
1211
  if (returning) {
1161
1212
  let sBuilder = new QueryBuilder_1.SelectItemBuilder({
1162
1213
  allFields: this.column_names.slice(0),
@@ -1166,9 +1217,7 @@ class TableHandler extends ViewHandler {
1166
1217
  isView: this.is_view
1167
1218
  });
1168
1219
  yield sBuilder.parseUserSelect(returning);
1169
- if (sBuilder.select.length)
1170
- result = "RETURNING ";
1171
- result += sBuilder.select.map(s => s.getQuery() + " AS " + QueryBuilder_1.asNameAlias(s.alias, tableAlias)).join(", ");
1220
+ return sBuilder.select;
1172
1221
  }
1173
1222
  return result;
1174
1223
  });
@@ -1180,6 +1229,7 @@ class TableHandler extends ViewHandler {
1180
1229
  batching: null
1181
1230
  };
1182
1231
  this.is_view = false;
1232
+ this.is_media = dboBuilder.prostgles.isMedia(this.name);
1183
1233
  }
1184
1234
  /* TO DO: Maybe finished query batching */
1185
1235
  willBatch(query) {
@@ -1269,7 +1319,6 @@ class TableHandler extends ViewHandler {
1269
1319
  const queries = yield Promise.all(data.map(([filter, data]) => __awaiter(this, void 0, void 0, function* () {
1270
1320
  return yield this.update(filter, data, Object.assign(Object.assign({}, (params || {})), { returning: undefined }), tableRules, Object.assign(Object.assign({}, (localParams || {})), { returnQuery: true }));
1271
1321
  })));
1272
- // console.log(queries)
1273
1322
  return this.db.tx(t => {
1274
1323
  const _queries = queries.map(q => t.none(q));
1275
1324
  return t.batch(_queries);
@@ -1341,13 +1390,11 @@ class TableHandler extends ViewHandler {
1341
1390
  throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
1342
1391
  patchedTextData.push(Object.assign(Object.assign({}, d), { fieldName: c.name }));
1343
1392
  }
1344
- // console.log("update2", patchedTextData);
1345
1393
  });
1346
1394
  if (patchedTextData && patchedTextData.length) {
1347
1395
  if (tableRules && !tableRules.select)
1348
1396
  throw "Select needs to be permitted to patch data";
1349
1397
  const rows = yield this.find(filter, { select: patchedTextData.reduce((a, v) => (Object.assign(Object.assign({}, a), { [v.fieldName]: 1 })), {}) }, null, tableRules);
1350
- // console.log(rows)
1351
1398
  if (rows.length !== 1) {
1352
1399
  throw "Cannot patch data within a filter that affects more/less than 1 row";
1353
1400
  }
@@ -1374,9 +1421,8 @@ class TableHandler extends ViewHandler {
1374
1421
  let qType = "none";
1375
1422
  if (returning) {
1376
1423
  qType = multi ? "any" : "one";
1377
- query += yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
1424
+ query += this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
1378
1425
  }
1379
- // console.log(query)
1380
1426
  if (returnQuery)
1381
1427
  return query;
1382
1428
  if (this.t) {
@@ -1406,29 +1452,221 @@ class TableHandler extends ViewHandler {
1406
1452
  // let cs = new pgp.helpers.ColumnSet(this.columnSet.columns.filter(c => dataKeys.includes(c.name)), { table: this.name });
1407
1453
  return { data, allowedCols: this.columns.filter(c => dataKeys.includes(c.name)).map(c => c.name) };
1408
1454
  }
1409
- insert(data, param2, param3_unused, tableRules, localParams = null) {
1455
+ insertDataParse(data, param2, param3_unused, tableRules, _localParams = null) {
1456
+ var _a, _b;
1457
+ return __awaiter(this, void 0, void 0, function* () {
1458
+ const localParams = _localParams || {};
1459
+ const { dbTX } = localParams;
1460
+ const isMultiInsert = Array.isArray(data);
1461
+ const getExtraKeys = d => Object.keys(d).filter(k => !this.columns.find(c => c.name === k));
1462
+ /* Nested insert is not allowed for the file table */
1463
+ const isNestedInsert = this.is_media ? false : (Array.isArray(data) ? data : [data]).some(d => getExtraKeys(d).length);
1464
+ /**
1465
+ * Make sure nested insert uses a transaction
1466
+ */
1467
+ if (isNestedInsert && (!this.t || !dbTX)) {
1468
+ return {
1469
+ insertResult: yield this.dboBuilder.getTX((dbTX) => dbTX[this.name].insert(data, param2, param3_unused, tableRules, Object.assign({ dbTX }, localParams)))
1470
+ };
1471
+ }
1472
+ const preValidate = (_a = tableRules === null || tableRules === void 0 ? void 0 : tableRules.insert) === null || _a === void 0 ? void 0 : _a.preValidate, validate = (_b = tableRules === null || tableRules === void 0 ? void 0 : tableRules.insert) === null || _b === void 0 ? void 0 : _b.validate;
1473
+ let _data = yield Promise.all((Array.isArray(data) ? data : [data]).map((row) => __awaiter(this, void 0, void 0, function* () {
1474
+ var _c, _e;
1475
+ if (preValidate) {
1476
+ row = yield preValidate(row);
1477
+ }
1478
+ const dataKeys = Object.keys(row);
1479
+ const extraKeys = getExtraKeys(row);
1480
+ /* Upload file then continue insert */
1481
+ if (this.is_media) {
1482
+ if (!((_c = this.dboBuilder.prostgles) === null || _c === void 0 ? void 0 : _c.fileManager))
1483
+ throw "fileManager not set up";
1484
+ const { data, name } = row;
1485
+ if (dataKeys.length !== 2)
1486
+ throw "Expecting only two properties: { name: string; data: File }";
1487
+ // if(!Buffer.isBuffer(data)) throw "data is not of type Buffer"
1488
+ if (!data)
1489
+ throw "data not provided";
1490
+ if (typeof name !== "string") {
1491
+ throw "name is not of type string";
1492
+ }
1493
+ const media_id = (yield this.db.oneOrNone("SELECT gen_random_uuid() as name")).name;
1494
+ const type = yield this.dboBuilder.prostgles.fileManager.getMIME(data, name);
1495
+ const media_name = `${media_id}.${type.ext}`;
1496
+ let media = {
1497
+ id: media_id,
1498
+ name: media_name,
1499
+ original_name: name,
1500
+ extension: type.ext,
1501
+ content_type: type.mime
1502
+ };
1503
+ if (validate) {
1504
+ media = yield validate(media);
1505
+ }
1506
+ const _media = yield this.dboBuilder.prostgles.fileManager.uploadAsMedia({
1507
+ item: {
1508
+ data,
1509
+ name: media.name,
1510
+ content_type: media.content_type
1511
+ },
1512
+ });
1513
+ return Object.assign(Object.assign({}, media), _media);
1514
+ /* Potentially a nested join */
1515
+ }
1516
+ else if (extraKeys.length) {
1517
+ /* Ensure we're using the same transaction */
1518
+ const _this = this.t ? this : dbTX[this.name];
1519
+ let rootData = PubSubManager_1.filterObj(data, null, extraKeys);
1520
+ let insertedChildren;
1521
+ let targetTableRules;
1522
+ if (validate) {
1523
+ rootData = yield validate(rootData);
1524
+ }
1525
+ const fullRootResult = yield _this.insert(rootData, { returning: "*" }, null, tableRules, localParams);
1526
+ let returnData;
1527
+ const returning = param2 === null || param2 === void 0 ? void 0 : param2.returning;
1528
+ if (returning) {
1529
+ returnData = {};
1530
+ const returningItems = yield this.prepareReturning(returning, this.parseFieldFilter((_e = tableRules === null || tableRules === void 0 ? void 0 : tableRules.insert) === null || _e === void 0 ? void 0 : _e.returningFields));
1531
+ returningItems.filter(s => s.selected).map(rs => {
1532
+ returnData[rs.alias] = fullRootResult[rs.alias];
1533
+ });
1534
+ }
1535
+ yield Promise.all(extraKeys.map((targetTable) => __awaiter(this, void 0, void 0, function* () {
1536
+ var _f;
1537
+ const childDataItems = Array.isArray(row[targetTable]) ? row[targetTable] : [row[targetTable]];
1538
+ // console.log({childDataItems})
1539
+ /* Must be allowed to insert into media table */
1540
+ const canInsert = (tbl) => __awaiter(this, void 0, void 0, function* () {
1541
+ const childRules = yield this.dboBuilder.publishParser.getValidatedRequestRuleWusr({ tableName: tbl, command: "insert", localParams });
1542
+ if (!childRules || !childRules.insert)
1543
+ throw "Dissallowed nested insert into table " + childRules;
1544
+ return childRules;
1545
+ });
1546
+ // console.log(JSON.stringify(this.dboBuilder.joinPaths, null, 2))
1547
+ const jp = this.dboBuilder.joinPaths.find(jp => jp.t1 === this.name && jp.t2 === targetTable);
1548
+ if (!jp)
1549
+ throw `Could not find a valid table for the nested data { ${targetTable} } `;
1550
+ const childInsert = (cdata, tableName) => __awaiter(this, void 0, void 0, function* () {
1551
+ // console.log("childInsert", {data, tableName})
1552
+ if (!cdata || !dbTX[tableName] || !("insert" in dbTX[tableName]))
1553
+ throw "childInsertErr: Child table handler missing for: " + tableName;
1554
+ const tableRules = yield canInsert(tableName);
1555
+ return Promise.all((Array.isArray(cdata) ? cdata : [cdata])
1556
+ .map(m => dbTX[tableName]
1557
+ .insert(m, { returning: "*" }, null, tableRules, localParams)
1558
+ .catch(e => {
1559
+ console.trace({ childInsertErr: e });
1560
+ return Promise.reject({ childInsertErr: e });
1561
+ })));
1562
+ });
1563
+ const { path } = jp;
1564
+ const [tbl1, tbl2, tbl3] = path;
1565
+ targetTableRules = yield canInsert(targetTable); // tbl3
1566
+ const cols2 = this.dboBuilder.dbo[tbl2].columns || [];
1567
+ if (!this.dboBuilder.dbo[tbl2])
1568
+ throw "Invalid/disallowed table: " + tbl2;
1569
+ const colsRefT1 = cols2 === null || cols2 === void 0 ? void 0 : cols2.filter(c => { var _a, _b; return ((_a = c.references) === null || _a === void 0 ? void 0 : _a.cols.length) === 1 && ((_b = c.references) === null || _b === void 0 ? void 0 : _b.ftable) === tbl1; });
1570
+ if (!path.length) {
1571
+ throw "Nested inserts join path not found for " + [this.name, targetTable];
1572
+ }
1573
+ else if (path.length === 2) {
1574
+ if (targetTable !== tbl2)
1575
+ throw "Did not expect this";
1576
+ if (!colsRefT1.length)
1577
+ throw `Target table ${tbl2} does not reference any columns from the root table ${this.name}. Cannot do nested insert`;
1578
+ // console.log(JSON.stringify(colsRefT1, null, 2))
1579
+ insertedChildren = yield childInsert(childDataItems.map(d => {
1580
+ let result = Object.assign({}, d);
1581
+ colsRefT1.map(col => {
1582
+ result[col.references.cols[0]] = fullRootResult[col.references.fcols[0]];
1583
+ });
1584
+ return result;
1585
+ }), targetTable);
1586
+ }
1587
+ else if (path.length === 3) {
1588
+ if (targetTable !== tbl3)
1589
+ throw "Did not expect this";
1590
+ const colsRefT3 = cols2 === null || cols2 === void 0 ? void 0 : cols2.filter(c => { var _a, _b; return ((_a = c.references) === null || _a === void 0 ? void 0 : _a.cols.length) === 1 && ((_b = c.references) === null || _b === void 0 ? void 0 : _b.ftable) === tbl3; });
1591
+ if (!colsRefT1.length || !colsRefT3.length)
1592
+ throw "Incorrectly referenced or missing columns for nested insert";
1593
+ if (targetTable !== this.dboBuilder.prostgles.fileManager.tableName) {
1594
+ throw "Only media allowed to have nested inserts more than 2 tables apart";
1595
+ }
1596
+ /* We expect tbl2 to have only 2 columns (media_id and foreign_id) */
1597
+ if (!cols2 || cols2.find(c => !["media_id", "foreign_id"].includes(c.name))) {
1598
+ throw "Second joining table not of expected format";
1599
+ }
1600
+ insertedChildren = yield childInsert(childDataItems, targetTable);
1601
+ /* Insert in key_lookup table */
1602
+ yield Promise.all(insertedChildren.map((t3Child) => __awaiter(this, void 0, void 0, function* () {
1603
+ let tbl2Row = {};
1604
+ colsRefT3.map(col => {
1605
+ tbl2Row[col.name] = t3Child[col.references.fcols[0]];
1606
+ });
1607
+ colsRefT1.map(col => {
1608
+ tbl2Row[col.name] = fullRootResult[col.references.fcols[0]];
1609
+ });
1610
+ // console.log({ rootResult, tbl2Row, t3Child, colsRefT3, colsRefT1, t: this.t?.ctx?.start });
1611
+ yield childInsert(tbl2Row, tbl2); //.then(() => {});
1612
+ })));
1613
+ }
1614
+ else
1615
+ throw "Unexpected path for Nested inserts";
1616
+ /* Return also the nested inserted data */
1617
+ if (targetTableRules && (insertedChildren === null || insertedChildren === void 0 ? void 0 : insertedChildren.length) && returning) {
1618
+ const targetTableHandler = dbTX[targetTable];
1619
+ const targetReturning = yield targetTableHandler.prepareReturning("*", targetTableHandler.parseFieldFilter((_f = targetTableRules === null || targetTableRules === void 0 ? void 0 : targetTableRules.insert) === null || _f === void 0 ? void 0 : _f.returningFields));
1620
+ let clientTargetInserts = insertedChildren.map(d => {
1621
+ let _d = Object.assign({}, d);
1622
+ let res = {};
1623
+ targetReturning.map(r => {
1624
+ res[r.alias] = _d[r.alias];
1625
+ });
1626
+ return res;
1627
+ });
1628
+ returnData[targetTable] = clientTargetInserts.length === 1 ? clientTargetInserts[0] : clientTargetInserts;
1629
+ }
1630
+ })));
1631
+ return returnData;
1632
+ }
1633
+ return row;
1634
+ })));
1635
+ const result = isMultiInsert ? _data : _data[0];
1636
+ let res = isNestedInsert ?
1637
+ { insertResult: result } :
1638
+ { data: result };
1639
+ return res;
1640
+ });
1641
+ }
1642
+ insert(rowOrRows, param2, param3_unused, tableRules, _localParams = null) {
1643
+ var _a;
1410
1644
  return __awaiter(this, void 0, void 0, function* () {
1645
+ const localParams = _localParams || {};
1646
+ const { dbTX } = localParams;
1411
1647
  try {
1412
1648
  const { returning, onConflictDoNothing, fixIssues = false } = param2 || {};
1413
1649
  const { testRule = false, returnQuery = false } = localParams || {};
1414
- let returningFields, forcedData, validate, preValidate, fields;
1650
+ let returningFields, forcedData,
1651
+ // validate: TableRule["insert"]["validate"],
1652
+ // preValidate: any,
1653
+ fields;
1415
1654
  if (tableRules) {
1416
1655
  if (!tableRules.insert)
1417
1656
  throw "insert rules missing for " + this.name;
1418
1657
  returningFields = tableRules.insert.returningFields;
1419
1658
  forcedData = tableRules.insert.forcedData;
1420
1659
  fields = tableRules.insert.fields;
1421
- validate = tableRules.insert.validate;
1422
- preValidate = tableRules.insert.preValidate;
1660
+ // validate = tableRules.insert.validate;
1661
+ // preValidate = tableRules.insert.preValidate;
1423
1662
  /* If no returning fields specified then take select fields as returning */
1424
1663
  if (!returningFields)
1425
- returningFields = utils_1.get(tableRules, "select.fields");
1426
- if (!returningFields)
1427
- returningFields = utils_1.get(tableRules, "insert.fields");
1664
+ returningFields = utils_1.get(tableRules, "select.fields") || utils_1.get(tableRules, "insert.fields");
1428
1665
  if (!fields)
1429
1666
  throw ` invalid insert rule for ${this.name} -> fields missing `;
1430
1667
  /* Safely test publish rules */
1431
1668
  if (testRule) {
1669
+ // if(this.is_media && tableRules.insert.preValidate) throw "Media table cannot have a preValidate. It already is used internally by prostgles for file upload";
1432
1670
  yield this.validateViewRules(fields, null, returningFields, null, "insert");
1433
1671
  if (forcedData) {
1434
1672
  const keys = Object.keys(forcedData);
@@ -1449,21 +1687,23 @@ class TableHandler extends ViewHandler {
1449
1687
  if (typeof onConflictDoNothing === "boolean" && onConflictDoNothing) {
1450
1688
  conflict_query = " ON CONFLICT DO NOTHING ";
1451
1689
  }
1452
- if (!data)
1453
- data = {}; //throw "Provide data in param1";
1454
- let returningSelect = yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
1690
+ if (param2) {
1691
+ const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
1692
+ const bad_params = Object.keys(param2).filter(k => !good_params.includes(k));
1693
+ if (bad_params && bad_params.length)
1694
+ throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
1695
+ }
1696
+ if (!rowOrRows)
1697
+ rowOrRows = {}; //throw "Provide data in param1";
1698
+ let returningSelect = this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
1455
1699
  const makeQuery = (_row, isOne = false) => __awaiter(this, void 0, void 0, function* () {
1456
1700
  let row = Object.assign({}, _row);
1457
- if (preValidate) {
1458
- row = yield preValidate(row);
1459
- }
1460
- if (!isPojoObject(row))
1701
+ if (!isPojoObject(row)) {
1702
+ console.trace(row);
1461
1703
  throw "\ninvalid insert data provided -> " + JSON.stringify(row);
1704
+ }
1462
1705
  const { data, allowedCols } = this.validateNewData({ row, forcedData, allowedFields: fields, tableRules, fixIssues });
1463
1706
  let _data = Object.assign({}, data);
1464
- if (validate) {
1465
- _data = yield validate(_data);
1466
- }
1467
1707
  let insertQ = "";
1468
1708
  if (!Object.keys(_data).length)
1469
1709
  insertQ = `INSERT INTO ${prostgles_types_1.asName(this.name)} DEFAULT VALUES `;
@@ -1471,21 +1711,21 @@ class TableHandler extends ViewHandler {
1471
1711
  insertQ = this.colSet.getInsertQuery(_data, allowedCols); // pgp.helpers.insert(_data, columnSet);
1472
1712
  return insertQ + conflict_query + returningSelect;
1473
1713
  });
1474
- if (param2) {
1475
- const good_params = ["returning", "multi", "onConflictDoNothing", "fixIssues"];
1476
- const bad_params = Object.keys(param2).filter(k => !good_params.includes(k));
1477
- if (bad_params && bad_params.length)
1478
- throw "Invalid params: " + bad_params.join(", ") + " \n Expecting: " + good_params.join(", ");
1479
- }
1480
1714
  let query = "";
1481
1715
  let queryType = "none";
1716
+ /**
1717
+ * If media it will: upload file and continue insert
1718
+ * If nested insert it will: make separate inserts and not continue main insert
1719
+ */
1720
+ const { data, insertResult } = yield this.insertDataParse(rowOrRows, param2, param3_unused, tableRules, localParams);
1721
+ if (insertResult)
1722
+ return insertResult;
1482
1723
  if (Array.isArray(data)) {
1483
1724
  // if(returning) throw "Sorry but [returning] is dissalowed for multi insert";
1484
1725
  let queries = yield Promise.all(data.map((p) => __awaiter(this, void 0, void 0, function* () {
1485
1726
  const q = yield makeQuery(p);
1486
1727
  return q;
1487
1728
  })));
1488
- // console.log(queries)
1489
1729
  query = exports.pgp.helpers.concat(queries);
1490
1730
  if (returning)
1491
1731
  queryType = "many";
@@ -1495,12 +1735,18 @@ class TableHandler extends ViewHandler {
1495
1735
  if (returning)
1496
1736
  queryType = "one";
1497
1737
  }
1498
- // console.log(query);
1499
1738
  if (returnQuery)
1500
1739
  return query;
1501
- if (this.t)
1502
- return this.t[queryType](query).catch(err => makeErr(err, localParams));
1503
- return this.db.tx(t => t[queryType](query)).catch(err => makeErr(err, localParams));
1740
+ let result;
1741
+ // console.log(this.t?.ctx?.start, "insert in " + this.name, data);
1742
+ const tx = ((_a = dbTX === null || dbTX === void 0 ? void 0 : dbTX[this.name]) === null || _a === void 0 ? void 0 : _a.t) || this.t;
1743
+ if (tx) {
1744
+ result = tx[queryType](query).catch(err => makeErr(err, localParams));
1745
+ }
1746
+ else {
1747
+ result = this.db.tx(t => t[queryType](query)).catch(err => makeErr(err, localParams));
1748
+ }
1749
+ return result;
1504
1750
  }
1505
1751
  catch (e) {
1506
1752
  if (localParams && localParams.testRule)
@@ -1510,6 +1756,11 @@ class TableHandler extends ViewHandler {
1510
1756
  });
1511
1757
  }
1512
1758
  ;
1759
+ makeReturnQuery(items) {
1760
+ if (items === null || items === void 0 ? void 0 : items.length)
1761
+ return " RETURNING " + items.map(s => s.getQuery() + " AS " + prostgles_types_1.asName(s.alias)).join(", ");
1762
+ return "";
1763
+ }
1513
1764
  delete(filter, params, param3_unused, table_rules, localParams = null) {
1514
1765
  return __awaiter(this, void 0, void 0, function* () {
1515
1766
  try {
@@ -1557,7 +1808,7 @@ class TableHandler extends ViewHandler {
1557
1808
  if (!returningFields) {
1558
1809
  throw "Returning dissallowed";
1559
1810
  }
1560
- _query += yield this.prepareReturning(returning, this.parseFieldFilter(returningFields));
1811
+ _query += this.makeReturnQuery(yield this.prepareReturning(returning, this.parseFieldFilter(returningFields)));
1561
1812
  }
1562
1813
  if (returnQuery)
1563
1814
  return _query;
@@ -1590,20 +1841,14 @@ class TableHandler extends ViewHandler {
1590
1841
  return tblH.find(filter, { select: "", limit: 1 }, {}, table_rules, localParams)
1591
1842
  .then(exists => {
1592
1843
  if (exists && exists.length) {
1593
- // console.log(filter, "exists");
1594
1844
  return tblH.update(filter, newData, params, table_rules, localParams);
1595
1845
  }
1596
1846
  else {
1597
- // console.log(filter, "existnts")
1598
1847
  return tblH.insert(Object.assign(Object.assign({}, newData), filter), params, null, table_rules, localParams);
1599
1848
  }
1600
1849
  });
1601
1850
  });
1602
1851
  }
1603
- // .catch(existnts => {
1604
- // console.log(filter, "existnts")
1605
- // return this.insert({ ...filter, ...newData}, params);
1606
- // });
1607
1852
  }
1608
1853
  catch (e) {
1609
1854
  if (localParams && localParams.testRule)
@@ -1707,7 +1952,7 @@ class DboBuilder {
1707
1952
  this.schema = "public";
1708
1953
  this.init = () => __awaiter(this, void 0, void 0, function* () {
1709
1954
  let onSchemaChange;
1710
- if (this.prostgles.watchSchema) {
1955
+ if (this.prostgles.opts.watchSchema) {
1711
1956
  onSchemaChange = (event) => {
1712
1957
  this.prostgles.onSchemaChange(event);
1713
1958
  };
@@ -1730,14 +1975,20 @@ class DboBuilder {
1730
1975
  }
1731
1976
  else {
1732
1977
  txDB[tov.name] = new TableHandler(this.db, tov, this.pubSubManager, this, t, this.joinPaths);
1978
+ /**
1979
+ * Pass only the transaction object to ensure consistency
1980
+ */
1981
+ // txDB[tov.name] = new ViewHandler(t, tov, this.pubSubManager, this, t, this.joinPaths);
1982
+ // } else {
1983
+ // txDB[tov.name] = new TableHandler(t as any, tov, this.pubSubManager, this, t, this.joinPaths);
1733
1984
  }
1734
1985
  });
1735
- return dbTX(txDB);
1986
+ return dbTX(txDB, t);
1736
1987
  });
1737
1988
  };
1738
1989
  this.prostgles = prostgles;
1739
1990
  this.db = this.prostgles.db;
1740
- this.schema = this.prostgles.schema || "public";
1991
+ this.schema = this.prostgles.opts.schema || "public";
1741
1992
  this.dbo = {};
1742
1993
  // this.joins = this.prostgles.joins;
1743
1994
  }
@@ -1749,14 +2000,19 @@ class DboBuilder {
1749
2000
  }
1750
2001
  parseJoins() {
1751
2002
  return __awaiter(this, void 0, void 0, function* () {
1752
- if (this.prostgles.joins) {
1753
- let _joins = yield this.prostgles.joins;
2003
+ if (this.prostgles.opts.joins) {
2004
+ let _joins = yield this.prostgles.opts.joins;
2005
+ let inferredJoins = yield getInferredJoins(this.db, this.prostgles.opts.schema);
1754
2006
  if (typeof _joins === "string" && _joins === "inferred") {
1755
- _joins = yield getInferredJoins(this.db, this.prostgles.schema);
2007
+ _joins = inferredJoins;
2008
+ /* If joins are specified then include inferred joins except the explicit tables */
2009
+ }
2010
+ else if (Array.isArray(_joins)) {
2011
+ const joinTables = _joins.map(j => j.tables).flat();
2012
+ _joins = _joins.concat(inferredJoins.filter(j => !j.tables.find(t => joinTables.includes(t))));
1756
2013
  }
1757
2014
  let joins = JSON.parse(JSON.stringify(_joins));
1758
2015
  this.joins = joins;
1759
- // console.log(joins);
1760
2016
  // Validate joins
1761
2017
  try {
1762
2018
  // 1 find duplicates
@@ -1822,9 +2078,6 @@ class DboBuilder {
1822
2078
  }
1823
2079
  });
1824
2080
  });
1825
- // console.log(this.joinPaths)
1826
- // console.log(888, this.prostgles.joins);
1827
- // console.log(this.joinGraph, findShortestPath(this.joinGraph, "colors", "drawings"));
1828
2081
  }
1829
2082
  return this.joinPaths;
1830
2083
  });
@@ -1857,7 +2110,6 @@ export type TxCB = {
1857
2110
  i18nDef += ` ${JSON.stringify(tov.name)}: { \n`;
1858
2111
  i18nDef += ` [key in ${tov.columns.map(c => JSON.stringify(c.name)).join(" | ")}]: { [lang_id in keyof LANG_IDS]: string }; \n`;
1859
2112
  i18nDef += ` }; \n`;
1860
- // console.log("dboInit", tov.name, tov.columns.map(c => c.name))
1861
2113
  const filterKeywords = Object.values(this.prostgles.keywords);
1862
2114
  const $filterCol = tov.columns.find(c => filterKeywords.includes(c.name));
1863
2115
  if ($filterCol) {
@@ -1917,13 +2169,81 @@ export type TxCB = {
1917
2169
  this.dboDefinition += ` ${joinType}: JoinMakerTables;\n`;
1918
2170
  });
1919
2171
  }
1920
- if (this.prostgles.transactions) {
2172
+ if (this.prostgles.opts.transactions) {
1921
2173
  let txKey = "tx";
1922
- if (typeof this.prostgles.transactions === "string")
1923
- txKey = this.prostgles.transactions;
2174
+ if (typeof this.prostgles.opts.transactions === "string")
2175
+ txKey = this.prostgles.opts.transactions;
1924
2176
  this.dboDefinition += ` ${txKey}: (t: TxCB) => Promise<any | void> ;\n`;
1925
2177
  this.dbo[txKey] = (cb) => this.getTX(cb);
1926
2178
  }
2179
+ if (!this.dbo.sql) {
2180
+ let needType = true; // this.publishRawSQL && typeof this.publishRawSQL === "function";
2181
+ let DATA_TYPES = !needType ? [] : yield this.db.any("SELECT oid, typname FROM pg_type");
2182
+ let USER_TABLES = !needType ? [] : yield this.db.any("SELECT relid, relname FROM pg_catalog.pg_statio_user_tables");
2183
+ this.dbo.sql = (query, params, options, localParams) => __awaiter(this, void 0, void 0, function* () {
2184
+ var _a;
2185
+ const canRunSQL = (localParams) => __awaiter(this, void 0, void 0, function* () {
2186
+ if (!localParams)
2187
+ return true;
2188
+ const { socket } = localParams;
2189
+ const publishParams = yield this.prostgles.publishParser.getPublishParams({ socket });
2190
+ let res = yield this.prostgles.opts.publishRawSQL(publishParams);
2191
+ return Boolean(res && typeof res === "boolean" || res === "*");
2192
+ });
2193
+ if (!(yield canRunSQL(localParams)))
2194
+ throw "Not allowed to run SQL";
2195
+ const { returnType } = options || {};
2196
+ const { socket } = localParams || {};
2197
+ if (returnType === "noticeSubscription") {
2198
+ if (!socket)
2199
+ throw "Only allowed with client socket";
2200
+ return yield this.prostgles.dbEventsManager.addNotice(socket);
2201
+ }
2202
+ else if (returnType === "statement") {
2203
+ try {
2204
+ return exports.pgp.as.format(query, params);
2205
+ }
2206
+ catch (err) {
2207
+ throw err.toString();
2208
+ }
2209
+ }
2210
+ else if (this.db) {
2211
+ let qres = yield this.db.result(query, params);
2212
+ const { duration, fields, rows, command } = qres;
2213
+ if (command === "LISTEN") {
2214
+ if (!socket)
2215
+ throw "Only allowed with client socket";
2216
+ return yield this.prostgles.dbEventsManager.addNotify(query, socket);
2217
+ }
2218
+ else if (returnType === "rows") {
2219
+ return rows;
2220
+ }
2221
+ else if (returnType === "row") {
2222
+ return rows[0];
2223
+ }
2224
+ else if (returnType === "value") {
2225
+ return (_a = Object.values((rows === null || rows === void 0 ? void 0 : rows[0]) || {})) === null || _a === void 0 ? void 0 : _a[0];
2226
+ }
2227
+ else if (returnType === "values") {
2228
+ return rows.map(r => Object.values(r[0]));
2229
+ }
2230
+ else {
2231
+ if (fields && DATA_TYPES.length) {
2232
+ qres.fields = fields.map(f => {
2233
+ const dataType = DATA_TYPES.find(dt => +dt.oid === +f.dataTypeID), tableName = USER_TABLES.find(t => +t.relid === +f.tableID), { name } = f;
2234
+ return Object.assign(Object.assign(Object.assign({}, f), (dataType ? { dataType: dataType.typname } : {})), (tableName ? { tableName: tableName.relname } : {}));
2235
+ });
2236
+ }
2237
+ return qres;
2238
+ }
2239
+ }
2240
+ else
2241
+ console.error("db missing");
2242
+ });
2243
+ }
2244
+ else {
2245
+ console.warn(`Could not create dbo.sql handler because there is already a table named "sql"`);
2246
+ }
1927
2247
  this.dboDefinition += "};\n";
1928
2248
  this.tsTypesDefinition = [
1929
2249
  common_types,
@@ -2349,7 +2669,6 @@ function getInferredJoins(db, schema = "public") {
2349
2669
  });
2350
2670
  }
2351
2671
  });
2352
- // console.log(joins);
2353
2672
  return joins;
2354
2673
  });
2355
2674
  }