remult 0.21.1 → 0.22.0

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 (451) hide show
  1. package/README.md +47 -46
  2. package/SseSubscriptionServer.js +9 -9
  3. package/ably.js +1 -1
  4. package/esm/SseSubscriptionServer.js +11 -11
  5. package/esm/ably.js +2 -2
  6. package/esm/angular/interfaces/index.d.ts +1 -0
  7. package/esm/angular/interfaces/index.js +1 -0
  8. package/esm/angular/interfaces/src/column-collection.d.ts +70 -0
  9. package/esm/angular/interfaces/src/column-collection.js +341 -0
  10. package/esm/angular/interfaces/src/data-area-settings.d.ts +15 -0
  11. package/esm/angular/interfaces/src/data-area-settings.js +35 -0
  12. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +36 -0
  13. package/esm/angular/interfaces/src/data-control-interfaces.js +57 -0
  14. package/esm/angular/interfaces/src/dataList.d.ts +13 -0
  15. package/esm/angular/interfaces/src/dataList.js +42 -0
  16. package/esm/angular/interfaces/src/filter-helper.d.ts +13 -0
  17. package/esm/angular/interfaces/src/filter-helper.js +59 -0
  18. package/esm/angular/interfaces/src/grid-settings.d.ts +145 -0
  19. package/esm/angular/interfaces/src/grid-settings.js +387 -0
  20. package/esm/angular/interfaces/src/public_api.d.ts +4 -0
  21. package/esm/angular/interfaces/src/public_api.js +4 -0
  22. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +4 -0
  23. package/esm/angular/src/angular/RemultAngularPluginsService.js +3 -0
  24. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +49 -0
  25. package/esm/angular/src/angular/data-control/data-control2.component.js +138 -0
  26. package/esm/core/SseSubscriptionServer.d.ts +33 -0
  27. package/esm/core/SseSubscriptionServer.js +107 -0
  28. package/esm/core/assign.d.ts +1 -0
  29. package/esm/core/assign.js +5 -0
  30. package/esm/core/classType.d.ts +3 -0
  31. package/esm/core/classType.js +1 -0
  32. package/esm/core/index.d.ts +27 -0
  33. package/esm/core/index.js +25 -0
  34. package/esm/core/inputTypes.d.ts +9 -0
  35. package/esm/core/inputTypes.js +9 -0
  36. package/esm/core/live-query/data-provider-live-query-storage.d.ts +22 -0
  37. package/esm/core/live-query/data-provider-live-query-storage.js +71 -0
  38. package/esm/core/postgres/index.d.ts +2 -0
  39. package/esm/core/postgres/index.js +2 -0
  40. package/esm/core/postgres/postgres-data-provider.d.ts +36 -0
  41. package/esm/core/postgres/postgres-data-provider.js +120 -0
  42. package/esm/core/postgres/schema-builder.d.ts +17 -0
  43. package/esm/core/postgres/schema-builder.js +153 -0
  44. package/esm/core/remult-fresh.d.ts +17 -0
  45. package/esm/core/remult-fresh.js +29 -0
  46. package/esm/core/remult-knex/index.d.ts +30 -0
  47. package/esm/core/remult-knex/index.js +446 -0
  48. package/esm/core/remult-mongo.d.ts +24 -0
  49. package/esm/core/remult-mongo.js +254 -0
  50. package/esm/core/server/JsonEntityFileStorage.d.ts +10 -0
  51. package/esm/core/server/JsonEntityFileStorage.js +25 -0
  52. package/esm/core/server/core.d.ts +4 -0
  53. package/esm/core/server/core.js +4 -0
  54. package/esm/core/server/expressBridge.d.ts +182 -0
  55. package/esm/core/server/expressBridge.js +938 -0
  56. package/esm/core/server/index.d.ts +6 -0
  57. package/esm/core/server/index.js +9 -0
  58. package/esm/core/server/initAsyncHooks.d.ts +1 -0
  59. package/esm/core/server/initAsyncHooks.js +9 -0
  60. package/esm/core/server/initDataProvider.d.ts +2 -0
  61. package/esm/core/server/initDataProvider.js +14 -0
  62. package/esm/core/src/__EntityValueProvider.d.ts +11 -0
  63. package/esm/core/src/__EntityValueProvider.js +1 -0
  64. package/esm/core/src/__RowsOfDataForTesting.d.ts +3 -0
  65. package/esm/core/src/__RowsOfDataForTesting.js +1 -0
  66. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +6 -0
  67. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +147 -0
  68. package/esm/core/src/backend-tests/my-test.backend-spec.d.ts +1 -0
  69. package/esm/core/src/backend-tests/my-test.backend-spec.js +197 -0
  70. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +1 -0
  71. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +167 -0
  72. package/esm/core/src/buildRestDataProvider.d.ts +31 -0
  73. package/esm/core/src/buildRestDataProvider.js +113 -0
  74. package/esm/core/src/column-interfaces.d.ts +154 -0
  75. package/esm/core/src/column-interfaces.js +7 -0
  76. package/esm/core/src/column.d.ts +58 -0
  77. package/esm/core/src/column.js +174 -0
  78. package/esm/core/src/context.d.ts +134 -0
  79. package/esm/core/src/context.js +286 -0
  80. package/esm/core/src/data-api.d.ts +39 -0
  81. package/esm/core/src/data-api.js +279 -0
  82. package/esm/core/src/data-interfaces.d.ts +41 -0
  83. package/esm/core/src/data-interfaces.js +12 -0
  84. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +22 -0
  85. package/esm/core/src/data-providers/array-entity-data-provider.js +252 -0
  86. package/esm/core/src/data-providers/in-memory-database.d.ts +9 -0
  87. package/esm/core/src/data-providers/in-memory-database.js +14 -0
  88. package/esm/core/src/data-providers/json-data-provider.d.ts +12 -0
  89. package/esm/core/src/data-providers/json-data-provider.js +55 -0
  90. package/esm/core/src/data-providers/rest-data-provider.d.ts +49 -0
  91. package/esm/core/src/data-providers/rest-data-provider.js +256 -0
  92. package/esm/core/src/data-providers/sql-database.d.ts +33 -0
  93. package/esm/core/src/data-providers/sql-database.js +384 -0
  94. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +24 -0
  95. package/esm/core/src/data-providers/web-sql-data-provider.js +143 -0
  96. package/esm/core/src/entity.d.ts +91 -0
  97. package/esm/core/src/entity.js +1 -0
  98. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +50 -0
  99. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +150 -0
  100. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +1 -0
  101. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +1 -0
  102. package/esm/core/src/filter/filter-interfaces.d.ts +85 -0
  103. package/esm/core/src/filter/filter-interfaces.js +477 -0
  104. package/esm/core/src/live-query/LiveQueryClient.d.ts +20 -0
  105. package/esm/core/src/live-query/LiveQueryClient.js +188 -0
  106. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +5 -0
  107. package/esm/core/src/live-query/SseSubscriptionClient.js +86 -0
  108. package/esm/core/src/live-query/SubscriptionChannel.d.ts +72 -0
  109. package/esm/core/src/live-query/SubscriptionChannel.js +123 -0
  110. package/esm/core/src/live-query/SubscriptionServer.d.ts +53 -0
  111. package/esm/core/src/live-query/SubscriptionServer.js +111 -0
  112. package/esm/core/src/live-query/live-query-tests.spec.d.ts +6 -0
  113. package/esm/core/src/live-query/live-query-tests.spec.js +952 -0
  114. package/esm/core/src/remult-proxy.d.ts +35 -0
  115. package/esm/core/src/remult-proxy.js +113 -0
  116. package/esm/core/src/remult3/DecoratorReplacer.d.ts +10 -0
  117. package/esm/core/src/remult3/DecoratorReplacer.js +20 -0
  118. package/esm/core/src/remult3/RepositoryImplementation.d.ts +355 -0
  119. package/esm/core/src/remult3/RepositoryImplementation.js +2109 -0
  120. package/esm/core/src/remult3/index.d.ts +2 -0
  121. package/esm/core/src/remult3/index.js +2 -0
  122. package/esm/core/src/remult3/remult3.d.ts +395 -0
  123. package/esm/core/src/remult3/remult3.js +2 -0
  124. package/esm/core/src/server-action.d.ts +81 -0
  125. package/esm/core/src/server-action.js +394 -0
  126. package/esm/core/src/shared-tests/db-tests-setup.d.ts +32 -0
  127. package/esm/core/src/shared-tests/db-tests-setup.js +78 -0
  128. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +25 -0
  129. package/esm/core/src/shared-tests/db-tests.db-tests.js +810 -0
  130. package/esm/core/src/shared-tests/deleteAll.d.ts +2 -0
  131. package/esm/core/src/shared-tests/deleteAll.js +4 -0
  132. package/esm/core/src/shared-tests/entityWithValidations.d.ts +14 -0
  133. package/esm/core/src/shared-tests/entityWithValidations.js +43 -0
  134. package/esm/core/src/shared-tests/index.d.ts +4 -0
  135. package/esm/core/src/shared-tests/index.js +4 -0
  136. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +1 -0
  137. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +67 -0
  138. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +10 -0
  139. package/esm/core/src/shared-tests/test-special-value.spec.js +73 -0
  140. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +1 -0
  141. package/esm/core/src/shared-tests/test-update-with-null.spec.js +31 -0
  142. package/esm/core/src/sort.d.ts +16 -0
  143. package/esm/core/src/sort.js +103 -0
  144. package/esm/core/src/sql-command.d.ts +19 -0
  145. package/esm/core/src/sql-command.js +1 -0
  146. package/esm/core/src/test.d.ts +3 -0
  147. package/esm/core/src/test.js +12 -0
  148. package/esm/core/src/tests/Done.d.ts +5 -0
  149. package/esm/core/src/tests/Done.js +9 -0
  150. package/esm/core/src/tests/RowProvider.spec.d.ts +16 -0
  151. package/esm/core/src/tests/RowProvider.spec.js +631 -0
  152. package/esm/core/src/tests/TestDataApiResponse.d.ts +10 -0
  153. package/esm/core/src/tests/TestDataApiResponse.js +22 -0
  154. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +8 -0
  155. package/esm/core/src/tests/basicRowFunctionality.spec.js +2103 -0
  156. package/esm/core/src/tests/c.d.ts +8 -0
  157. package/esm/core/src/tests/c.js +13 -0
  158. package/esm/core/src/tests/createData.d.ts +7 -0
  159. package/esm/core/src/tests/createData.js +22 -0
  160. package/esm/core/src/tests/d.d.ts +6 -0
  161. package/esm/core/src/tests/d.js +11 -0
  162. package/esm/core/src/tests/dWithPrefilter.d.ts +7 -0
  163. package/esm/core/src/tests/dWithPrefilter.js +18 -0
  164. package/esm/core/src/tests/entityForCustomFilter.d.ts +16 -0
  165. package/esm/core/src/tests/entityForCustomFilter.js +33 -0
  166. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +5 -0
  167. package/esm/core/src/tests/entityWithValidationsOnColumn.js +13 -0
  168. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +4 -0
  169. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +37 -0
  170. package/esm/core/src/tests/h.d.ts +6 -0
  171. package/esm/core/src/tests/h.js +24 -0
  172. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +1 -0
  173. package/esm/core/src/tests/remult-3-basic-tests.spec.js +236 -0
  174. package/esm/core/src/tests/remult-3-entities.d.ts +23 -0
  175. package/esm/core/src/tests/remult-3-entities.js +39 -0
  176. package/esm/core/src/tests/tasks.d.ts +6 -0
  177. package/esm/core/src/tests/tasks.js +10 -0
  178. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  179. package/esm/core/src/tests/test-context-as-storage.spec.js +1 -0
  180. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +1 -0
  181. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +389 -0
  182. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +5 -0
  183. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +152 -0
  184. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +1 -0
  185. package/esm/core/src/tests/test-decorator-precedence.spec.js +38 -0
  186. package/esm/core/src/tests/test-default-value.spec.d.ts +1 -0
  187. package/esm/core/src/tests/test-default-value.spec.js +33 -0
  188. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +14 -0
  189. package/esm/core/src/tests/test-entity-inheritance.spec.js +82 -0
  190. package/esm/core/src/tests/test-exceptions.spec.d.ts +1 -0
  191. package/esm/core/src/tests/test-exceptions.spec.js +375 -0
  192. package/esm/core/src/tests/test-json.spec.d.ts +1 -0
  193. package/esm/core/src/tests/test-json.spec.js +115 -0
  194. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +9 -0
  195. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +809 -0
  196. package/esm/core/src/tests/test-non-active-record.spec.d.ts +1 -0
  197. package/esm/core/src/tests/test-non-active-record.spec.js +66 -0
  198. package/esm/core/src/tests/test-object-column.spec.d.ts +1 -0
  199. package/esm/core/src/tests/test-object-column.spec.js +189 -0
  200. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +1 -0
  201. package/esm/core/src/tests/test-paged-foreach.spec.js +328 -0
  202. package/esm/core/src/tests/test-remult-angular.spec.d.ts +1 -0
  203. package/esm/core/src/tests/test-remult-angular.spec.js +23 -0
  204. package/esm/core/src/tests/test-server-controller.spec.d.ts +7 -0
  205. package/esm/core/src/tests/test-server-controller.spec.js +489 -0
  206. package/esm/core/src/tests/test-server-expressions.spec.d.ts +1 -0
  207. package/esm/core/src/tests/test-server-expressions.spec.js +178 -0
  208. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +1 -0
  209. package/esm/core/src/tests/test-server-method-on-entity.spec.js +306 -0
  210. package/esm/core/src/tests/test-sql-expression.spec.d.ts +5 -0
  211. package/esm/core/src/tests/test-sql-expression.spec.js +205 -0
  212. package/esm/core/src/tests/test-sql.spec.d.ts +1 -0
  213. package/esm/core/src/tests/test-sql.spec.js +170 -0
  214. package/esm/core/src/tests/test-subscribe.spec.d.ts +1 -0
  215. package/esm/core/src/tests/test-subscribe.spec.js +135 -0
  216. package/esm/core/src/tests/test-type-recovery.spec.d.ts +1 -0
  217. package/esm/core/src/tests/test-type-recovery.spec.js +49 -0
  218. package/esm/core/src/tests/test-where-api.spec.d.ts +1 -0
  219. package/esm/core/src/tests/test-where-api.spec.js +434 -0
  220. package/esm/core/src/tests/testHelper.spec.d.ts +36 -0
  221. package/esm/core/src/tests/testHelper.spec.js +226 -0
  222. package/esm/core/src/tests/testModel/models.d.ts +16 -0
  223. package/esm/core/src/tests/testModel/models.js +25 -0
  224. package/esm/core/src/validators.d.ts +14 -0
  225. package/esm/core/src/validators.js +33 -0
  226. package/esm/core/src/valueConverters.d.ts +13 -0
  227. package/esm/core/src/valueConverters.js +197 -0
  228. package/esm/core/urlBuilder.d.ts +6 -0
  229. package/esm/core/urlBuilder.js +20 -0
  230. package/esm/graphql.js +194 -73
  231. package/esm/index.d.ts +10 -10
  232. package/esm/index.js +8 -8
  233. package/esm/inputTypes.js +1 -1
  234. package/esm/live-query/data-provider-live-query-storage.d.ts +3 -3
  235. package/esm/live-query/data-provider-live-query-storage.js +12 -9
  236. package/esm/myLog.js +2 -2
  237. package/esm/postgres/postgres-data-provider.d.ts +2 -2
  238. package/esm/postgres/postgres-data-provider.js +20 -14
  239. package/esm/postgres/schema-builder.d.ts +1 -1
  240. package/esm/postgres/schema-builder.js +28 -21
  241. package/esm/remult-express.js +2 -2
  242. package/esm/remult-fastify.js +9 -7
  243. package/esm/remult-fresh.d.ts +1 -1
  244. package/esm/remult-fresh.js +5 -8
  245. package/esm/remult-knex/index.d.ts +4 -4
  246. package/esm/remult-knex/index.js +75 -59
  247. package/esm/remult-mongo.js +36 -27
  248. package/esm/remult-next.d.ts +3 -3
  249. package/esm/remult-next.js +17 -11
  250. package/esm/remult-sveltekit.js +10 -10
  251. package/esm/server/JsonEntityFileStorage.js +3 -1
  252. package/esm/server/core.d.ts +2 -2
  253. package/esm/server/core.js +2 -2
  254. package/esm/server/expressBridge.d.ts +3 -12
  255. package/esm/server/expressBridge.js +265 -278
  256. package/esm/server/index.d.ts +2 -2
  257. package/esm/server/index.js +5 -2
  258. package/esm/server/initAsyncHooks.js +1 -1
  259. package/esm/server/initDataProvider.js +1 -1
  260. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
  261. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +47 -38
  262. package/esm/src/buildRestDataProvider.d.ts +1 -1
  263. package/esm/src/buildRestDataProvider.js +21 -13
  264. package/esm/src/column-interfaces.d.ts +9 -9
  265. package/esm/src/column.d.ts +4 -0
  266. package/esm/src/column.js +23 -11
  267. package/esm/src/context.d.ts +20 -8
  268. package/esm/src/context.js +65 -24
  269. package/esm/src/data-api.d.ts +0 -1
  270. package/esm/src/data-api.js +38 -37
  271. package/esm/src/data-interfaces.d.ts +1 -1
  272. package/esm/src/data-interfaces.js +1 -1
  273. package/esm/src/data-providers/array-entity-data-provider.js +9 -9
  274. package/esm/src/data-providers/in-memory-database.d.ts +1 -1
  275. package/esm/src/data-providers/in-memory-database.js +3 -1
  276. package/esm/src/data-providers/json-data-provider.js +8 -8
  277. package/esm/src/data-providers/rest-data-provider.d.ts +1 -1
  278. package/esm/src/data-providers/rest-data-provider.js +52 -36
  279. package/esm/src/data-providers/sql-database.d.ts +5 -5
  280. package/esm/src/data-providers/sql-database.js +53 -36
  281. package/esm/src/data-providers/web-sql-data-provider.d.ts +4 -4
  282. package/esm/src/data-providers/web-sql-data-provider.js +15 -13
  283. package/esm/src/entity.d.ts +24 -24
  284. package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +4 -4
  285. package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +35 -20
  286. package/esm/src/filter/filter-interfaces.d.ts +7 -7
  287. package/esm/src/filter/filter-interfaces.js +108 -88
  288. package/esm/src/live-query/LiveQueryClient.js +37 -29
  289. package/esm/src/live-query/SseSubscriptionClient.d.ts +1 -1
  290. package/esm/src/live-query/SseSubscriptionClient.js +14 -14
  291. package/esm/src/live-query/SubscriptionChannel.d.ts +3 -3
  292. package/esm/src/live-query/SubscriptionChannel.js +27 -25
  293. package/esm/src/live-query/SubscriptionServer.js +24 -20
  294. package/esm/src/remult-proxy.d.ts +1 -1
  295. package/esm/src/remult-proxy.js +87 -29
  296. package/esm/src/remult3/DecoratorReplacer.d.ts +2 -2
  297. package/esm/src/remult3/RepositoryImplementation.d.ts +51 -41
  298. package/esm/src/remult3/RepositoryImplementation.js +336 -206
  299. package/esm/src/remult3/remult3.d.ts +56 -51
  300. package/esm/src/remult3/remult3.js +0 -1
  301. package/esm/src/server-action.d.ts +12 -5
  302. package/esm/src/server-action.js +79 -53
  303. package/esm/src/shared-tests/db-tests-setup.d.ts +8 -8
  304. package/esm/src/shared-tests/db-tests-setup.js +10 -10
  305. package/esm/src/shared-tests/db-tests.db-tests.d.ts +1 -1
  306. package/esm/src/shared-tests/db-tests.db-tests.js +279 -177
  307. package/esm/src/shared-tests/deleteAll.d.ts +1 -1
  308. package/esm/src/shared-tests/deleteAll.js +1 -1
  309. package/esm/src/shared-tests/entityWithValidations.js +1 -1
  310. package/esm/src/shared-tests/test-custom-id-column.spec.js +4 -4
  311. package/esm/src/shared-tests/test-special-value.spec.js +12 -12
  312. package/esm/src/shared-tests/test-update-with-null.spec.js +10 -6
  313. package/esm/src/sort.d.ts +2 -2
  314. package/esm/src/sort.js +12 -10
  315. package/esm/src/tests/TestDataApiResponse.d.ts +1 -1
  316. package/esm/src/tests/TestDataApiResponse.js +3 -4
  317. package/esm/src/tests/createData.js +2 -2
  318. package/esm/src/tests/d.js +1 -1
  319. package/esm/src/tests/dWithPrefilter.js +1 -1
  320. package/esm/src/tests/entityForCustomFilter.d.ts +4 -4
  321. package/esm/src/tests/entityForCustomFilter.js +12 -4
  322. package/esm/src/tests/entityWithValidationsOnColumn.js +1 -1
  323. package/esm/src/tests/frontend-database-tests-setup.spec.d.ts +1 -1
  324. package/esm/src/tests/frontend-database-tests-setup.spec.js +14 -14
  325. package/esm/src/tests/h.js +4 -4
  326. package/esm/src/tests/remult-3-entities.d.ts +2 -2
  327. package/esm/src/tests/remult-3-entities.js +6 -6
  328. package/esm/src/tests/testHelper.spec.d.ts +7 -7
  329. package/esm/src/tests/testHelper.spec.js +50 -39
  330. package/esm/src/tests/testModel/models.js +4 -4
  331. package/esm/src/validators.d.ts +1 -1
  332. package/esm/src/validators.js +10 -7
  333. package/esm/src/valueConverters.d.ts +1 -1
  334. package/esm/src/valueConverters.js +68 -55
  335. package/esm/test-servers/shared/Task.d.ts +9 -0
  336. package/esm/test-servers/shared/Task.js +32 -0
  337. package/esm/test.d.ts +5 -0
  338. package/esm/test.js +6 -0
  339. package/graphql.js +157 -45
  340. package/index.d.ts +10 -10
  341. package/inputTypes.js +1 -1
  342. package/live-query/data-provider-live-query-storage.d.ts +3 -3
  343. package/live-query/data-provider-live-query-storage.js +7 -4
  344. package/myLog.js +2 -2
  345. package/package.json +2 -2
  346. package/postgres/postgres-data-provider.d.ts +2 -2
  347. package/postgres/postgres-data-provider.js +21 -16
  348. package/postgres/schema-builder.d.ts +1 -1
  349. package/postgres/schema-builder.js +22 -15
  350. package/remult-express.js +1 -1
  351. package/remult-fastify.js +7 -7
  352. package/remult-fresh.d.ts +1 -1
  353. package/remult-fresh.js +1 -4
  354. package/remult-knex/index.d.ts +4 -4
  355. package/remult-knex/index.js +50 -35
  356. package/remult-mongo.js +33 -23
  357. package/remult-next.d.ts +3 -3
  358. package/remult-next.js +15 -11
  359. package/remult-sveltekit.js +14 -15
  360. package/server/core.d.ts +2 -2
  361. package/server/expressBridge.d.ts +3 -12
  362. package/server/expressBridge.js +278 -279
  363. package/server/index.d.ts +2 -2
  364. package/server/index.js +5 -2
  365. package/server/initAsyncHooks.js +2 -2
  366. package/server/initDataProvider.js +1 -1
  367. package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
  368. package/src/backend-tests/backend-database-test-setup.backend-spec.js +40 -31
  369. package/src/buildRestDataProvider.d.ts +1 -1
  370. package/src/buildRestDataProvider.js +18 -10
  371. package/src/column-interfaces.d.ts +9 -9
  372. package/src/column.d.ts +4 -0
  373. package/src/column.js +20 -8
  374. package/src/context.d.ts +20 -8
  375. package/src/context.js +61 -18
  376. package/src/data-api.d.ts +0 -1
  377. package/src/data-api.js +40 -43
  378. package/src/data-interfaces.d.ts +1 -1
  379. package/src/data-providers/array-entity-data-provider.js +2 -2
  380. package/src/data-providers/in-memory-database.d.ts +1 -1
  381. package/src/data-providers/in-memory-database.js +3 -1
  382. package/src/data-providers/json-data-provider.js +33 -15
  383. package/src/data-providers/rest-data-provider.d.ts +1 -1
  384. package/src/data-providers/rest-data-provider.js +47 -32
  385. package/src/data-providers/sql-database.d.ts +5 -5
  386. package/src/data-providers/sql-database.js +41 -24
  387. package/src/data-providers/web-sql-data-provider.d.ts +4 -4
  388. package/src/data-providers/web-sql-data-provider.js +10 -8
  389. package/src/entity.d.ts +24 -24
  390. package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +4 -4
  391. package/src/filter/filter-consumer-bridge-to-sql-request.js +34 -17
  392. package/src/filter/filter-interfaces.d.ts +7 -7
  393. package/src/filter/filter-interfaces.js +73 -47
  394. package/src/live-query/LiveQueryClient.js +35 -25
  395. package/src/live-query/SseSubscriptionClient.d.ts +1 -1
  396. package/src/live-query/SseSubscriptionClient.js +80 -76
  397. package/src/live-query/SubscriptionChannel.d.ts +3 -3
  398. package/src/live-query/SubscriptionChannel.js +26 -18
  399. package/src/live-query/SubscriptionServer.js +23 -17
  400. package/src/remult-proxy.d.ts +1 -1
  401. package/src/remult-proxy.js +84 -35
  402. package/src/remult3/DecoratorReplacer.d.ts +2 -2
  403. package/src/remult3/RepositoryImplementation.d.ts +51 -41
  404. package/src/remult3/RepositoryImplementation.js +402 -257
  405. package/src/remult3/remult3.d.ts +56 -51
  406. package/src/remult3/remult3.js +0 -1
  407. package/src/server-action.d.ts +12 -5
  408. package/src/server-action.js +78 -48
  409. package/src/shared-tests/db-tests-setup.d.ts +8 -8
  410. package/src/shared-tests/db-tests-setup.js +6 -6
  411. package/src/shared-tests/db-tests.db-tests.d.ts +1 -1
  412. package/src/shared-tests/db-tests.db-tests.js +350 -153
  413. package/src/shared-tests/deleteAll.d.ts +1 -1
  414. package/src/shared-tests/entityWithValidations.js +1 -1
  415. package/src/shared-tests/test-custom-id-column.spec.js +4 -4
  416. package/src/shared-tests/test-special-value.spec.js +9 -9
  417. package/src/shared-tests/test-update-with-null.spec.js +8 -4
  418. package/src/sort.d.ts +2 -2
  419. package/src/sort.js +9 -7
  420. package/src/tests/TestDataApiResponse.d.ts +1 -1
  421. package/src/tests/TestDataApiResponse.js +3 -4
  422. package/src/tests/createData.js +1 -1
  423. package/src/tests/d.js +1 -1
  424. package/src/tests/dWithPrefilter.js +1 -1
  425. package/src/tests/entityForCustomFilter.d.ts +4 -4
  426. package/src/tests/entityForCustomFilter.js +16 -6
  427. package/src/tests/entityWithValidationsOnColumn.js +1 -1
  428. package/src/tests/frontend-database-tests-setup.spec.d.ts +1 -1
  429. package/src/tests/frontend-database-tests-setup.spec.js +8 -8
  430. package/src/tests/h.js +3 -3
  431. package/src/tests/remult-3-entities.d.ts +2 -2
  432. package/src/tests/remult-3-entities.js +8 -4
  433. package/src/tests/testHelper.spec.d.ts +7 -7
  434. package/src/tests/testHelper.spec.js +38 -27
  435. package/src/tests/testModel/models.js +3 -3
  436. package/src/validators.d.ts +1 -1
  437. package/src/validators.js +18 -9
  438. package/src/valueConverters.d.ts +1 -1
  439. package/src/valueConverters.js +38 -21
  440. package/esm/remult-svletekit.d.ts +0 -3
  441. package/esm/remult-svletekit.js +0 -83
  442. package/esm/src/id-entity.d.ts +0 -4
  443. package/esm/src/id-entity.js +0 -8
  444. package/esm/src/remult3/getId.d.ts +0 -2
  445. package/esm/src/remult3/getId.js +0 -7
  446. package/postgres/getEntityTypescriptPostgres.d.ts +0 -1
  447. package/postgres/getEntityTypescriptPostgres.js +0 -125
  448. package/src/id-entity.d.ts +0 -4
  449. package/src/id-entity.js +0 -17
  450. package/src/remult3/getId.d.ts +0 -2
  451. package/src/remult3/getId.js +0 -11
@@ -1,11 +1,11 @@
1
- import { customDatabaseFilterToken, Filter } from "../src/filter/filter-interfaces";
2
- import { dbNamesOf, isDbReadonly } from "../src/filter/filter-consumer-bridge-to-sql-request";
3
- import { allEntities } from "../src/context";
4
- import { isAutoIncrement, getRepository } from "../src/remult3";
5
- import { ValueConverters } from "../src/valueConverters";
1
+ import { customDatabaseFilterToken, Filter, } from '../src/filter/filter-interfaces';
2
+ import { dbNamesOf, isDbReadonly, } from '../src/filter/filter-consumer-bridge-to-sql-request';
3
+ import { allEntities } from '../src/context';
4
+ import { isAutoIncrement, getRepository, } from '../src/remult3';
5
+ import { ValueConverters } from '../src/valueConverters';
6
6
  import { CompoundIdField } from '../src/column';
7
7
  import { Sort } from '../src/sort';
8
- import { remult as remultContext, RemultProxy } from '../src/remult-proxy';
8
+ import { remult as remultContext } from '../src/remult-proxy';
9
9
  export class KnexDataProvider {
10
10
  constructor(knex) {
11
11
  this.knex = knex;
@@ -13,15 +13,19 @@ export class KnexDataProvider {
13
13
  static getDb(remult) {
14
14
  const r = (remult || remultContext).dataProvider;
15
15
  if (!r.knex)
16
- throw "the data provider is not an KnexDataProvider";
16
+ throw 'the data provider is not an KnexDataProvider';
17
17
  return r.knex;
18
18
  }
19
19
  getEntityDataProvider(entity) {
20
20
  if (!supportsJson(this.knex))
21
21
  for (const f of entity.fields.toArray()) {
22
- if (f.valueConverter.fieldTypeInDb === "json") {
22
+ if (f.valueConverter.fieldTypeInDb === 'json') {
23
23
  //@ts-ignore
24
- f.valueConverter = { ...f.valueConverter, toDb: ValueConverters.JsonString.toDb, fromDb: ValueConverters.JsonString.fromDb };
24
+ f.valueConverter = {
25
+ ...f.valueConverter,
26
+ toDb: ValueConverters.JsonString.toDb,
27
+ fromDb: ValueConverters.JsonString.fromDb,
28
+ };
25
29
  }
26
30
  }
27
31
  return new KnexEntityDataProvider(entity, this.knex);
@@ -40,17 +44,17 @@ export class KnexDataProvider {
40
44
  static rawFilter(build) {
41
45
  return {
42
46
  [customDatabaseFilterToken]: {
43
- buildKnex: build
44
- }
47
+ buildKnex: build,
48
+ },
45
49
  };
46
50
  }
47
51
  static async filterToRaw(entity, condition) {
48
52
  const repo = getRepository(entity);
49
53
  var b = new FilterConsumerBridgeToKnexRequest(await dbNamesOf(repo.metadata));
50
54
  b._addWhere = false;
51
- await (await (repo.translateWhereToFilter(condition))).__applyToConsumer(b);
55
+ await (await repo.translateWhereToFilter(condition)).__applyToConsumer(b);
52
56
  let r = await b.resolveWhere();
53
- return knex => r.forEach(y => y(knex));
57
+ return (knex) => r.forEach((y) => y(knex));
54
58
  }
55
59
  async ensureSchema(entities) {
56
60
  var sb = new KnexSchemaBuilder(this.knex);
@@ -67,8 +71,9 @@ class KnexEntityDataProvider {
67
71
  const br = new FilterConsumerBridgeToKnexRequest(e);
68
72
  where.__applyToConsumer(br);
69
73
  let r = await br.resolveWhere();
70
- const result = (await this.knex(e.$entityName)
71
- .count().where(b => r.forEach(w => w(b))));
74
+ const result = await this.knex(e.$entityName)
75
+ .count()
76
+ .where((b) => r.forEach((w) => w(b)));
72
77
  var row = result[0];
73
78
  for (const key in row) {
74
79
  if (Object.prototype.hasOwnProperty.call(row, key)) {
@@ -94,15 +99,15 @@ class KnexEntityDataProvider {
94
99
  const br = new FilterConsumerBridgeToKnexRequest(e);
95
100
  options.where.__applyToConsumer(br);
96
101
  let r = await br.resolveWhere();
97
- query.where(b => r.forEach(y => y(b)));
102
+ query.where((b) => r.forEach((y) => y(b)));
98
103
  }
99
104
  if (!options.orderBy) {
100
105
  options.orderBy = Sort.createUniqueSort(this.entity, new Sort());
101
106
  }
102
107
  if (options.orderBy) {
103
- query = query.orderBy(options.orderBy.Segments.map(s => ({
108
+ query = query.orderBy(options.orderBy.Segments.map((s) => ({
104
109
  column: e.$dbNameOf(s.field),
105
- order: s.isDescending ? "desc" : "asc"
110
+ order: s.isDescending ? 'desc' : 'asc',
106
111
  })));
107
112
  }
108
113
  if (options.limit) {
@@ -111,7 +116,7 @@ class KnexEntityDataProvider {
111
116
  query = query.offset((options.page - 1) * options.limit);
112
117
  }
113
118
  const r = await query;
114
- return r.map(y => {
119
+ return r.map((y) => {
115
120
  let result = {};
116
121
  let i = 0;
117
122
  for (let m in y) {
@@ -120,14 +125,14 @@ class KnexEntityDataProvider {
120
125
  result[field.key] = field.valueConverter.fromDb(y[m]);
121
126
  }
122
127
  catch (err) {
123
- throw new Error("Failed to load from db:" + field.key + "\r\n" + err);
128
+ throw new Error('Failed to load from db:' + field.key + '\r\n' + err);
124
129
  }
125
130
  }
126
131
  return result;
127
132
  });
128
133
  }
129
134
  async init() {
130
- return await dbNamesOf(this.entity);
135
+ return (await dbNamesOf(this.entity));
131
136
  }
132
137
  async update(id, data) {
133
138
  const e = await this.init();
@@ -138,7 +143,8 @@ class KnexEntityDataProvider {
138
143
  resultFilter = this.entity.idMetadata.getIdFilter(data.id);
139
144
  let updateObject = {};
140
145
  for (const x of this.entity.fields) {
141
- if (isDbReadonly(x, e)) { }
146
+ if (isDbReadonly(x, e)) {
147
+ }
142
148
  else if (data[x.key] !== undefined) {
143
149
  let v = translateValueAndHandleArrayAndHandleArray(x, data[x.key]);
144
150
  if (v !== undefined) {
@@ -148,15 +154,21 @@ class KnexEntityDataProvider {
148
154
  }
149
155
  }
150
156
  let where = await f.resolveWhere();
151
- await this.knex(e.$entityName).update(updateObject).where(b => where.forEach(w => w(b)));
152
- return this.find({ where: Filter.fromEntityFilter(this.entity, resultFilter) }).then(y => y[0]);
157
+ await this.knex(e.$entityName)
158
+ .update(updateObject)
159
+ .where((b) => where.forEach((w) => w(b)));
160
+ return this.find({
161
+ where: Filter.fromEntityFilter(this.entity, resultFilter),
162
+ }).then((y) => y[0]);
153
163
  }
154
164
  async delete(id) {
155
165
  const e = await this.init();
156
166
  let f = new FilterConsumerBridgeToKnexRequest(e);
157
167
  Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(f);
158
168
  let where = await f.resolveWhere();
159
- await this.knex(e.$entityName).delete().where(b => where.forEach(w => w(b)));
169
+ await this.knex(e.$entityName)
170
+ .delete()
171
+ .where((b) => where.forEach((w) => w(b)));
160
172
  }
161
173
  async insert(data) {
162
174
  const e = await this.init();
@@ -167,7 +179,8 @@ class KnexEntityDataProvider {
167
179
  resultFilter = Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(data[this.entity.idMetadata.field.key]));
168
180
  let insertObject = {};
169
181
  for (const x of this.entity.fields) {
170
- if (isDbReadonly(x, e)) { }
182
+ if (isDbReadonly(x, e)) {
183
+ }
171
184
  else {
172
185
  let v = translateValueAndHandleArrayAndHandleArray(x, data[x.key]);
173
186
  if (v != undefined) {
@@ -187,11 +200,11 @@ class KnexEntityDataProvider {
187
200
  let result = await insert.returning(this.entity.idMetadata.field.key);
188
201
  newId = result[0].id;
189
202
  }
190
- resultFilter = new Filter(x => x.isEqualTo(this.entity.idMetadata.field, newId));
203
+ resultFilter = new Filter((x) => x.isEqualTo(this.entity.idMetadata.field, newId));
191
204
  }
192
205
  else
193
206
  await insert;
194
- return this.find({ where: resultFilter }).then(y => {
207
+ return this.find({ where: resultFilter }).then((y) => {
195
208
  return y[0];
196
209
  });
197
210
  }
@@ -214,7 +227,7 @@ class FilterConsumerBridgeToKnexRequest {
214
227
  return this.result;
215
228
  }
216
229
  custom(key, customItem) {
217
- throw new Error("Custom filter should be translated before it gets here");
230
+ throw new Error('Custom filter should be translated before it gets here');
218
231
  }
219
232
  or(orElements) {
220
233
  this.promises.push((async () => {
@@ -225,9 +238,9 @@ class FilterConsumerBridgeToKnexRequest {
225
238
  element.__applyToConsumer(f);
226
239
  let where = await f.resolveWhere();
227
240
  if (where.length > 0) {
228
- result.push(b => {
229
- b.orWhere(b => {
230
- where.forEach(x => x(b));
241
+ result.push((b) => {
242
+ b.orWhere((b) => {
243
+ where.forEach((x) => x(b));
231
244
  });
232
245
  });
233
246
  }
@@ -235,44 +248,47 @@ class FilterConsumerBridgeToKnexRequest {
235
248
  return; //empty or means all rows
236
249
  }
237
250
  if (result.length > 0) {
238
- this.result.push(b => b.where(x => result.find(y => y(x))));
251
+ this.result.push((b) => b.where((x) => result.find((y) => y(x))));
239
252
  }
240
253
  })());
241
254
  }
242
255
  isNull(col) {
243
- this.result.push(b => b.whereNull(this.nameProvider.$dbNameOf(col)));
256
+ this.result.push((b) => b.whereNull(this.nameProvider.$dbNameOf(col)));
244
257
  }
245
258
  isNotNull(col) {
246
- this.result.push(b => b.whereNotNull(this.nameProvider.$dbNameOf(col)));
259
+ this.result.push((b) => b.whereNotNull(this.nameProvider.$dbNameOf(col)));
247
260
  }
248
261
  isIn(col, val) {
249
- this.result.push(knex => knex.whereIn(this.nameProvider.$dbNameOf(col), val.map(x => translateValueAndHandleArrayAndHandleArray(col, x))));
262
+ this.result.push((knex) => knex.whereIn(this.nameProvider.$dbNameOf(col), val.map((x) => translateValueAndHandleArrayAndHandleArray(col, x))));
250
263
  }
251
264
  isEqualTo(col, val) {
252
- this.add(col, val, "=");
265
+ this.add(col, val, '=');
253
266
  }
254
267
  isDifferentFrom(col, val) {
255
- this.add(col, val, "<>");
268
+ this.add(col, val, '<>');
256
269
  }
257
270
  isGreaterOrEqualTo(col, val) {
258
- this.add(col, val, ">=");
271
+ this.add(col, val, '>=');
259
272
  }
260
273
  isGreaterThan(col, val) {
261
- this.add(col, val, ">");
274
+ this.add(col, val, '>');
262
275
  }
263
276
  isLessOrEqualTo(col, val) {
264
- this.add(col, val, "<=");
277
+ this.add(col, val, '<=');
265
278
  }
266
279
  isLessThan(col, val) {
267
- this.add(col, val, "<");
280
+ this.add(col, val, '<');
268
281
  }
269
282
  containsCaseInsensitive(col, val) {
270
- this.result.push(b => b.whereRaw('lower (' + b.client.ref(this.nameProvider.$dbNameOf(col)) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"));
271
- this.promises.push((async () => {
272
- })());
283
+ this.result.push((b) => b.whereRaw('lower (' +
284
+ b.client.ref(this.nameProvider.$dbNameOf(col)) +
285
+ ") like lower ('%" +
286
+ val.replace(/'/g, "''") +
287
+ "%')"));
288
+ this.promises.push((async () => { })());
273
289
  }
274
290
  add(col, val, operator) {
275
- this.result.push(b => b.where(this.nameProvider.$dbNameOf(col), operator, translateValueAndHandleArrayAndHandleArray(col, val)));
291
+ this.result.push((b) => b.where(this.nameProvider.$dbNameOf(col), operator, translateValueAndHandleArrayAndHandleArray(col, val)));
276
292
  }
277
293
  databaseCustom(databaseCustom) {
278
294
  this.promises.push((async () => {
@@ -289,8 +305,8 @@ export class KnexSchemaBuilder {
289
305
  }
290
306
  async verifyStructureOfAllEntities(remult) {
291
307
  if (!remult)
292
- remult = RemultProxy.defaultRemult;
293
- const entities = allEntities.map(x => remult.repo(x).metadata);
308
+ remult = remultContext;
309
+ const entities = allEntities.map((x) => remult.repo(x).metadata);
294
310
  this.ensureSchema(entities);
295
311
  }
296
312
  async ensureSchema(entities) {
@@ -305,21 +321,21 @@ export class KnexSchemaBuilder {
305
321
  }
306
322
  }
307
323
  catch (err) {
308
- console.error("failed ensure schema of " + e.$entityName + " ", err);
324
+ console.error('failed ensure schema of ' + e.$entityName + ' ', err);
309
325
  }
310
326
  }
311
327
  }
312
328
  async createIfNotExist(entity) {
313
329
  const e = await dbNamesOf(entity);
314
- if (!await this.knex.schema.hasTable(e.$entityName)) {
330
+ if (!(await this.knex.schema.hasTable(e.$entityName))) {
315
331
  let cols = new Map();
316
332
  for (const f of entity.fields) {
317
333
  cols.set(f, {
318
334
  name: e.$dbNameOf(f),
319
- readonly: isDbReadonly(f, e)
335
+ readonly: isDbReadonly(f, e),
320
336
  });
321
337
  }
322
- await logSql(this.knex.schema.createTable(e.$entityName, b => {
338
+ await logSql(this.knex.schema.createTable(e.$entityName, (b) => {
323
339
  for (const x of entity.fields) {
324
340
  if (!cols.get(x).readonly || isAutoIncrement(x)) {
325
341
  if (isAutoIncrement(x))
@@ -340,8 +356,8 @@ export class KnexSchemaBuilder {
340
356
  return;
341
357
  let col = c(entity);
342
358
  let colName = e.$dbNameOf(col);
343
- if (!await this.knex.schema.hasColumn(e.$entityName, colName)) {
344
- await logSql(this.knex.schema.alterTable(e.$entityName, b => {
359
+ if (!(await this.knex.schema.hasColumn(e.$entityName, colName))) {
360
+ await logSql(this.knex.schema.alterTable(e.$entityName, (b) => {
345
361
  buildColumn(col, colName, b, supportsJson(this.knex));
346
362
  }));
347
363
  }
@@ -364,7 +380,7 @@ export class KnexSchemaBuilder {
364
380
  KnexSchemaBuilder.logToConsole = true;
365
381
  function supportsJson(knex) {
366
382
  const client = knex.client.config.client;
367
- if (client?.includes("sqlite3") || client?.includes("mssql"))
383
+ if (client?.includes('sqlite3') || client?.includes('mssql'))
368
384
  return false;
369
385
  return true;
370
386
  }
@@ -376,7 +392,7 @@ export function buildColumn(x, dbName, b, supportsJson = true) {
376
392
  c.defaultTo(0).notNullable();
377
393
  }
378
394
  }
379
- else if (x.valueConverter.fieldTypeInDb == "integer") {
395
+ else if (x.valueConverter.fieldTypeInDb == 'integer') {
380
396
  let c = b.integer(dbName);
381
397
  if (!x.allowNull) {
382
398
  c.defaultTo(0).notNullable();
@@ -391,7 +407,7 @@ export function buildColumn(x, dbName, b, supportsJson = true) {
391
407
  b.date(dbName);
392
408
  else
393
409
  b.dateTime(dbName);
394
- else if (x.valueConverter.fieldTypeInDb == "date")
410
+ else if (x.valueConverter.fieldTypeInDb == 'date')
395
411
  b.date(dbName);
396
412
  else
397
413
  b.specificType(dbName, x.valueConverter.fieldTypeInDb);
@@ -402,13 +418,13 @@ export function buildColumn(x, dbName, b, supportsJson = true) {
402
418
  c.defaultTo(false).notNullable();
403
419
  }
404
420
  else if (x.valueConverter.fieldTypeInDb) {
405
- if (x.valueConverter.fieldTypeInDb == "integer") {
421
+ if (x.valueConverter.fieldTypeInDb == 'integer') {
406
422
  let c = b.integer(dbName);
407
423
  if (!x.allowNull) {
408
424
  c.defaultTo(0).notNullable();
409
425
  }
410
426
  }
411
- else if (x.valueConverter.fieldTypeInDb == "json")
427
+ else if (x.valueConverter.fieldTypeInDb == 'json')
412
428
  if (supportsJson)
413
429
  b.json(dbName);
414
430
  else
@@ -1,6 +1,6 @@
1
- import { CompoundIdField, Filter } from '.';
2
- import { dbNamesOf } from './src/filter/filter-consumer-bridge-to-sql-request';
3
- import { getRepository } from './src/remult3';
1
+ import { CompoundIdField, Filter, } from '.';
2
+ import { dbNamesOf, } from './src/filter/filter-consumer-bridge-to-sql-request';
3
+ import { getRepository, } from './src/remult3';
4
4
  import { remult as remultContext } from './src/remult-proxy';
5
5
  export class MongoDataProvider {
6
6
  constructor(db, client, options) {
@@ -13,7 +13,7 @@ export class MongoDataProvider {
13
13
  static getDb(remult) {
14
14
  const r = (remult || remultContext).dataProvider;
15
15
  if (!r.db)
16
- throw "the data provider is not a MongoDataProvider";
16
+ throw 'the data provider is not a MongoDataProvider';
17
17
  return { db: r.db, session: r.session };
18
18
  }
19
19
  getEntityDataProvider(entity) {
@@ -39,12 +39,12 @@ export class MongoDataProvider {
39
39
  const repo = getRepository(entity);
40
40
  var b = new FilterConsumerBridgeToMongo(await dbNamesOf(repo.metadata));
41
41
  b._addWhere = false;
42
- await (await (repo.translateWhereToFilter(condition))).__applyToConsumer(b);
42
+ await (await repo.translateWhereToFilter(condition)).__applyToConsumer(b);
43
43
  let r = await b.resolveWhere();
44
44
  return r;
45
45
  }
46
46
  }
47
- const NULL = { $null: "$null" };
47
+ const NULL = { $null: '$null' };
48
48
  function isNull(x) {
49
49
  return x?.$null === NULL.$null;
50
50
  }
@@ -88,7 +88,7 @@ class MongoEntityDataProvider {
88
88
  options.where.__applyToConsumer(x);
89
89
  let where = await x.resolveWhere();
90
90
  let op = {
91
- session: this.session
91
+ session: this.session,
92
92
  };
93
93
  if (options.limit) {
94
94
  op.limit = options.limit;
@@ -102,7 +102,10 @@ class MongoEntityDataProvider {
102
102
  op.sort[e.$dbNameOf(s.field)] = s.isDescending ? -1 : 1;
103
103
  }
104
104
  }
105
- return await Promise.all(await collection.find(where, op).map(x => this.translateFromJson(x, e)).toArray());
105
+ return await Promise.all(await collection
106
+ .find(where, op)
107
+ .map((x) => this.translateFromJson(x, e))
108
+ .toArray());
106
109
  }
107
110
  async update(id, data) {
108
111
  let { collection, e } = await this.collection();
@@ -126,9 +129,11 @@ class MongoEntityDataProvider {
126
129
  }
127
130
  }
128
131
  let r = await collection.updateOne(await f.resolveWhere(), {
129
- $set: newR
132
+ $set: newR,
130
133
  }, { session: this.session });
131
- return this.find({ where: Filter.fromEntityFilter(this.entity, resultFilter) }).then(y => y[0]);
134
+ return this.find({
135
+ where: Filter.fromEntityFilter(this.entity, resultFilter),
136
+ }).then((y) => y[0]);
132
137
  }
133
138
  async delete(id) {
134
139
  const { e, collection } = await this.collection();
@@ -138,7 +143,9 @@ class MongoEntityDataProvider {
138
143
  }
139
144
  async insert(data) {
140
145
  let { collection, e } = await this.collection();
141
- let r = await collection.insertOne(await this.translateToJson(data, e), { session: this.session });
146
+ let r = await collection.insertOne(await this.translateToJson(data, e), {
147
+ session: this.session,
148
+ });
142
149
  return await this.translateFromJson(await collection.findOne({ _id: r.insertedId }, { session: this.session }), e);
143
150
  }
144
151
  async collection() {
@@ -163,12 +170,12 @@ class FilterConsumerBridgeToMongo {
163
170
  }
164
171
  }
165
172
  if (this.result.length > 0)
166
- return { $and: this.result.map(x => x()) };
173
+ return { $and: this.result.map((x) => x()) };
167
174
  else
168
175
  return {};
169
176
  }
170
177
  custom(key, customItem) {
171
- throw new Error("Custom filter should be translated before it gets here");
178
+ throw new Error('Custom filter should be translated before it gets here');
172
179
  }
173
180
  or(orElements) {
174
181
  this.promises.push((async () => {
@@ -185,43 +192,43 @@ class FilterConsumerBridgeToMongo {
185
192
  return; //since empty or is all rows;
186
193
  }
187
194
  this.result.push(() => ({
188
- $or: result
195
+ $or: result,
189
196
  }));
190
197
  })());
191
198
  }
192
199
  isNull(col) {
193
- this.add(col, NULL, "$eq");
200
+ this.add(col, NULL, '$eq');
194
201
  }
195
202
  isNotNull(col) {
196
- this.add(col, NULL, "$ne");
203
+ this.add(col, NULL, '$ne');
197
204
  }
198
205
  isIn(col, val) {
199
206
  this.result.push(() => ({
200
207
  [this.nameProvider.$dbNameOf(col)]: {
201
- $in: val.map(x => col.valueConverter.toDb(x))
202
- }
208
+ $in: val.map((x) => col.valueConverter.toDb(x)),
209
+ },
203
210
  }));
204
211
  }
205
212
  isEqualTo(col, val) {
206
- this.add(col, val, "$eq");
213
+ this.add(col, val, '$eq');
207
214
  }
208
215
  isDifferentFrom(col, val) {
209
- this.add(col, val, "$ne");
216
+ this.add(col, val, '$ne');
210
217
  }
211
218
  isGreaterOrEqualTo(col, val) {
212
- this.add(col, val, "$gte");
219
+ this.add(col, val, '$gte');
213
220
  }
214
221
  isGreaterThan(col, val) {
215
- this.add(col, val, "$gt");
222
+ this.add(col, val, '$gt');
216
223
  }
217
224
  isLessOrEqualTo(col, val) {
218
- this.add(col, val, "$lte");
225
+ this.add(col, val, '$lte');
219
226
  }
220
227
  isLessThan(col, val) {
221
- this.add(col, val, "$lt");
228
+ this.add(col, val, '$lt');
222
229
  }
223
230
  containsCaseInsensitive(col, val) {
224
- throw "containsCaseInsensitive not yet implemented";
231
+ throw 'containsCaseInsensitive not yet implemented';
225
232
  // this.promises.push(col.getDbName().then(colName => {
226
233
  // this.result.push(b => b.whereRaw(
227
234
  // 'lower (' + colName + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"));
@@ -229,11 +236,13 @@ class FilterConsumerBridgeToMongo {
229
236
  }
230
237
  add(col, val, operator) {
231
238
  this.result.push(() => ({
232
- [this.nameProvider.$dbNameOf(col)]: { [operator]: isNull(val) ? val : col.valueConverter.toDb(val) }
239
+ [this.nameProvider.$dbNameOf(col)]: {
240
+ [operator]: isNull(val) ? val : col.valueConverter.toDb(val),
241
+ },
233
242
  }));
234
243
  }
235
244
  databaseCustom(databaseCustom) {
236
- throw "error";
245
+ throw 'error';
237
246
  // this.promises.push((async () => {
238
247
  // if (databaseCustom?.buildSql) {
239
248
  // let item = new CustomSqlFilterBuilder(this.knex);
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
- import type { GetServerSideProps, NextApiRequest, PreviewData, NextApiHandler } from "next";
3
- import type { ParsedUrlQuery } from "querystring";
4
- import { RemultServerCore, RemultServerOptions } from "./server";
2
+ import type { GetServerSideProps, NextApiRequest, PreviewData, NextApiHandler } from 'next';
3
+ import type { ParsedUrlQuery } from 'querystring';
4
+ import { RemultServerCore, RemultServerOptions } from './server';
5
5
  export declare function remultNext(options?: RemultServerOptions<NextApiRequest>): RemultNextServer;
6
6
  export declare type RemultNextServer = RemultServerCore<NextApiRequest> & NextApiHandler & {
7
7
  getServerSideProps<P extends {
@@ -1,8 +1,8 @@
1
- import { createRemultServer } from "./server";
1
+ import { createRemultServer, } from './server';
2
2
  export function remultNext(options) {
3
3
  let result = createRemultServer(options, {
4
- buildGenericRequestInfo: req => req,
5
- getRequestBody: async (req) => req.body
4
+ buildGenericRequestInfo: (req) => req,
5
+ getRequestBody: async (req) => req.body,
6
6
  });
7
7
  return Object.assign((req, res) => result.handle(req, res).then(() => { }), result, {
8
8
  getRemult: (req) => result.getRemult(req),
@@ -32,19 +32,20 @@ export function remultNext(options) {
32
32
  });
33
33
  });
34
34
  };
35
- }
35
+ },
36
36
  });
37
37
  }
38
38
  const encoder = new TextEncoder();
39
39
  export function remultNextApp(options) {
40
40
  let result = createRemultServer(options, {
41
- getRequestBody: req => req.json(),
41
+ getRequestBody: (req) => req.json(),
42
42
  buildGenericRequestInfo: (req) => ({
43
43
  url: req?.url,
44
44
  method: req?.method,
45
45
  on: (e, do1) => {
46
- if (e === "close") {
47
- req["_tempOnClose"] = do1;
46
+ if (e === 'close') {
47
+ ;
48
+ req['_tempOnClose'] = do1;
48
49
  }
49
50
  },
50
51
  }),
@@ -52,7 +53,7 @@ export function remultNextApp(options) {
52
53
  const handler = async (req) => {
53
54
  {
54
55
  let sseResponse = undefined;
55
- req["_tempOnClose"] = () => { };
56
+ req['_tempOnClose'] = () => { };
56
57
  const response = {
57
58
  end: () => { },
58
59
  json: () => { },
@@ -62,8 +63,8 @@ export function remultNextApp(options) {
62
63
  write: () => { },
63
64
  writeHead: (status, headers) => {
64
65
  if (status === 200 && headers) {
65
- const contentType = headers["Content-Type"];
66
- if (contentType === "text/event-stream") {
66
+ const contentType = headers['Content-Type'];
67
+ if (contentType === 'text/event-stream') {
67
68
  const messages = [];
68
69
  response.write = (x) => messages.push(x);
69
70
  const stream = new ReadableStream({
@@ -77,7 +78,7 @@ export function remultNextApp(options) {
77
78
  },
78
79
  cancel: () => {
79
80
  response.write = () => { };
80
- req["_tempOnClose"]();
81
+ req['_tempOnClose']();
81
82
  },
82
83
  });
83
84
  sseResponse = new Response(stream, { headers });
@@ -94,6 +95,11 @@ export function remultNextApp(options) {
94
95
  status: responseFromRemultHandler.statusCode,
95
96
  });
96
97
  }
98
+ if (!responseFromRemultHandler) {
99
+ return new Response('', {
100
+ status: 404,
101
+ });
102
+ }
97
103
  }
98
104
  };
99
105
  return {
@@ -1,21 +1,21 @@
1
- import { createRemultServer } from './server';
1
+ import { createRemultServer, } from './server';
2
2
  export function remultSveltekit(options) {
3
3
  let result = createRemultServer(options, {
4
- buildGenericRequestInfo: event => ({
4
+ buildGenericRequestInfo: (event) => ({
5
5
  url: event.request.url,
6
6
  method: event.request.method,
7
7
  on: (e, do1) => {
8
8
  if (e === 'close') {
9
- event.locals["_tempOnClose"] = do1;
9
+ event.locals['_tempOnClose'] = do1;
10
10
  }
11
- }
11
+ },
12
12
  }),
13
- getRequestBody: event => event.request.json()
13
+ getRequestBody: (event) => event.request.json(),
14
14
  });
15
15
  const handler = async ({ event, resolve }) => {
16
16
  if (event.url.pathname.startsWith(options.rootPath)) {
17
17
  let sseResponse = undefined;
18
- event.locals["_tempOnClose"] = () => { };
18
+ event.locals['_tempOnClose'] = () => { };
19
19
  const response = {
20
20
  end: () => { },
21
21
  json: () => { },
@@ -40,13 +40,13 @@ export function remultSveltekit(options) {
40
40
  },
41
41
  cancel: () => {
42
42
  response.write = () => { };
43
- event.locals["_tempOnClose"]();
44
- }
43
+ event.locals['_tempOnClose']();
44
+ },
45
45
  });
46
46
  sseResponse = new Response(stream, { headers });
47
47
  }
48
48
  }
49
- }
49
+ },
50
50
  };
51
51
  const responseFromRemultHandler = await result.handle(event, response);
52
52
  if (sseResponse !== undefined) {
@@ -54,7 +54,7 @@ export function remultSveltekit(options) {
54
54
  }
55
55
  if (responseFromRemultHandler) {
56
56
  return new Response(JSON.stringify(responseFromRemultHandler.data), {
57
- status: responseFromRemultHandler.statusCode
57
+ status: responseFromRemultHandler.statusCode,
58
58
  });
59
59
  }
60
60
  }
@@ -20,5 +20,7 @@ export class JsonEntityFileStorage {
20
20
  }
21
21
  }
22
22
  export class JsonFileDataProvider extends JsonDataProvider {
23
- constructor(folderPath) { super(new JsonEntityFileStorage(folderPath)); }
23
+ constructor(folderPath) {
24
+ super(new JsonEntityFileStorage(folderPath));
25
+ }
24
26
  }