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,6 +1,6 @@
1
- import { RestDataProvider } from '../data-providers/rest-data-provider';
2
- import { buildRestDataProvider } from "../buildRestDataProvider";
3
- import { LiveQuerySubscriber, liveQueryKeepAliveRoute } from './SubscriptionChannel';
1
+ import { RestDataProvider, } from '../data-providers/rest-data-provider';
2
+ import { buildRestDataProvider } from '../buildRestDataProvider';
3
+ import { LiveQuerySubscriber, liveQueryKeepAliveRoute, } from './SubscriptionChannel';
4
4
  /* @internal*/
5
5
  export class LiveQueryClient {
6
6
  constructor(apiProvider, getUserId) {
@@ -16,7 +16,9 @@ export class LiveQueryClient {
16
16
  else
17
17
  handleMessage();
18
18
  }
19
- ;
19
+ hasQueriesForTesting() {
20
+ return this.queries.size > 0;
21
+ }
20
22
  runPromise(p) {
21
23
  return p;
22
24
  }
@@ -31,9 +33,9 @@ export class LiveQueryClient {
31
33
  try {
32
34
  let q = this.channels.get(key);
33
35
  if (!q) {
34
- this.channels.set(key, q = new MessageChannel());
36
+ this.channels.set(key, (q = new MessageChannel()));
35
37
  try {
36
- q.unsubscribe = await client.subscribe(key, value => this.wrapMessageHandling(() => q.handle(value)), err => {
38
+ q.unsubscribe = await client.subscribe(key, (value) => this.wrapMessageHandling(() => q.handle(value)), (err) => {
37
39
  onResult.error(err);
38
40
  });
39
41
  }
@@ -64,7 +66,7 @@ export class LiveQueryClient {
64
66
  closeIfNoListeners() {
65
67
  if (this.client)
66
68
  if (this.queries.size === 0 && this.channels.size === 0) {
67
- this.runPromise(this.client.then(x => x.close()));
69
+ this.runPromise(this.client.then((x) => x.close()));
68
70
  this.client = undefined;
69
71
  clearInterval(this.interval);
70
72
  this.interval = undefined;
@@ -72,16 +74,21 @@ export class LiveQueryClient {
72
74
  }
73
75
  subscribe(repo, options, listener) {
74
76
  let alive = true;
75
- let onUnsubscribe = () => { alive = false; };
76
- this.runPromise(repo.buildEntityDataProviderFindOptions(options)
77
- .then(opts => {
77
+ let onUnsubscribe = () => {
78
+ alive = false;
79
+ };
80
+ this.runPromise(repo
81
+ .buildEntityDataProviderFindOptions(options)
82
+ .then((opts) => {
78
83
  if (!alive)
79
84
  return;
80
- const { createKey, subscribe } = new RestDataProvider(this.apiProvider).getEntityDataProvider(repo.metadata).buildFindRequest(opts);
85
+ const { createKey, subscribe } = new RestDataProvider(this.apiProvider)
86
+ .getEntityDataProvider(repo.metadata)
87
+ .buildFindRequest(opts);
81
88
  const eventTypeKey = createKey();
82
89
  let q = this.queries.get(eventTypeKey);
83
90
  if (!q) {
84
- this.queries.set(eventTypeKey, q = new LiveQuerySubscriber(repo, { entityKey: repo.metadata.key, options }, this.getUserId()));
91
+ this.queries.set(eventTypeKey, (q = new LiveQuerySubscriber(repo, { entityKey: repo.metadata.key, options }, this.getUserId())));
85
92
  q.subscribeCode = () => {
86
93
  if (q.unsubscribe) {
87
94
  q.unsubscribe();
@@ -90,16 +97,16 @@ export class LiveQueryClient {
90
97
  this.runPromise(this.subscribeChannel(q.queryChannel, {
91
98
  next: (value) => this.runPromise(q.handle(value)),
92
99
  complete: () => { },
93
- error: er => {
94
- q.listeners.forEach(l => l.error(er));
95
- }
96
- }).then(unsubscribeToChannel => {
100
+ error: (er) => {
101
+ q.listeners.forEach((l) => l.error(er));
102
+ },
103
+ }).then((unsubscribeToChannel) => {
97
104
  if (q.listeners.length == 0) {
98
105
  unsubscribeToChannel();
99
106
  return;
100
107
  }
101
- this.runPromise(subscribe(q.id)
102
- .then(r => {
108
+ this.runPromise(subscribe(q.queryChannel)
109
+ .then((r) => {
103
110
  if (q.listeners.length === 0) {
104
111
  r.unsubscribe();
105
112
  unsubscribeToChannel();
@@ -112,11 +119,13 @@ export class LiveQueryClient {
112
119
  this.runPromise(r.unsubscribe());
113
120
  };
114
121
  })
115
- .catch(err => {
116
- listener.error(err);
122
+ .catch((err) => {
123
+ q.listeners.forEach((l) => l.error(err));
124
+ unsubscribeToChannel();
125
+ this.queries.delete(eventTypeKey);
117
126
  }));
118
- })).catch(err => {
119
- q.listeners.forEach(l => l.error(err));
127
+ })).catch((err) => {
128
+ q.listeners.forEach((l) => l.error(err));
120
129
  });
121
130
  };
122
131
  q.subscribeCode();
@@ -135,7 +144,7 @@ export class LiveQueryClient {
135
144
  this.closeIfNoListeners();
136
145
  };
137
146
  })
138
- .catch(err => {
147
+ .catch((err) => {
139
148
  listener.error(err);
140
149
  }));
141
150
  return () => {
@@ -161,12 +170,11 @@ export class LiveQueryClient {
161
170
  }
162
171
  }
163
172
  }, 30000);
164
- return this.runPromise(this.client =
165
- this.apiProvider().subscriptionClient.openConnection(() => {
166
- for (const q of this.queries.values()) {
167
- q.subscribeCode();
168
- }
169
- }));
173
+ return this.runPromise((this.client = this.apiProvider().subscriptionClient.openConnection(() => {
174
+ for (const q of this.queries.values()) {
175
+ q.subscribeCode();
176
+ }
177
+ })));
170
178
  }
171
179
  return this.client;
172
180
  }
@@ -1,4 +1,4 @@
1
- import { SubscriptionClient, SubscriptionClientConnection } from "./SubscriptionChannel";
1
+ import { SubscriptionClient, SubscriptionClientConnection } from './SubscriptionChannel';
2
2
  export declare class SseSubscriptionClient implements SubscriptionClient {
3
3
  openConnection(onReconnect: VoidFunction): Promise<SubscriptionClientConnection>;
4
4
  }
@@ -1,7 +1,7 @@
1
- import { buildRestDataProvider } from "../buildRestDataProvider";
2
- import { remult } from "../remult-proxy";
3
- import { actionInfo } from "../server-action";
4
- import { streamUrl } from "./SubscriptionChannel";
1
+ import { buildRestDataProvider } from '../buildRestDataProvider';
2
+ import { remult } from '../remult-proxy';
3
+ import { actionInfo } from '../server-action';
4
+ import { streamUrl, } from './SubscriptionChannel';
5
5
  export class SseSubscriptionClient {
6
6
  openConnection(onReconnect) {
7
7
  let connectionId;
@@ -16,7 +16,7 @@ export class SseSubscriptionClient {
16
16
  async subscribe(channel, handler) {
17
17
  let listeners = channels.get(channel);
18
18
  if (!listeners) {
19
- channels.set(channel, listeners = []);
19
+ channels.set(channel, (listeners = []));
20
20
  await subscribeToChannel(channel);
21
21
  }
22
22
  listeners.push(handler);
@@ -25,7 +25,7 @@ export class SseSubscriptionClient {
25
25
  if (listeners.length == 0) {
26
26
  actionInfo.runActionWithoutBlockingUI(() => provider.post(remult.apiClient.url + '/' + streamUrl + '/unsubscribe', {
27
27
  channel: channel,
28
- clientId: connectionId
28
+ clientId: connectionId,
29
29
  }));
30
30
  channels.delete(channel);
31
31
  }
@@ -38,22 +38,22 @@ export class SseSubscriptionClient {
38
38
  if (source)
39
39
  source.close();
40
40
  source = new EventSource(remult.apiClient.url + '/' + streamUrl, {
41
- withCredentials: true
41
+ withCredentials: true,
42
42
  });
43
- source.onmessage = e => {
43
+ source.onmessage = (e) => {
44
44
  let message = JSON.parse(e.data);
45
45
  const listeners = channels.get(message.channel);
46
46
  if (listeners)
47
- listeners.forEach(x => x(message.data));
47
+ listeners.forEach((x) => x(message.data));
48
48
  };
49
- source.onerror = e => {
50
- console.error("Live Query Event Source Error", e);
49
+ source.onerror = (e) => {
50
+ console.error('Live Query Event Source Error', e);
51
51
  source.close();
52
52
  setTimeout(() => {
53
53
  createConnection();
54
54
  }, 500);
55
55
  };
56
- source.addEventListener("connectionId", async (e) => {
56
+ source.addEventListener('connectionId', async (e) => {
57
57
  //@ts-ignore
58
58
  connectionId = e.data;
59
59
  if (connected) {
@@ -74,7 +74,7 @@ export class SseSubscriptionClient {
74
74
  const result = await actionInfo.runActionWithoutBlockingUI(() => {
75
75
  return provider.post(remult.apiClient.url + '/' + streamUrl + '/subscribe', {
76
76
  channel: channel,
77
- clientId: connectionId
77
+ clientId: connectionId,
78
78
  });
79
79
  });
80
80
  if (result === ConnectionNotFoundError) {
@@ -83,4 +83,4 @@ export class SseSubscriptionClient {
83
83
  }
84
84
  }
85
85
  }
86
- export const ConnectionNotFoundError = "client connection not found";
86
+ export const ConnectionNotFoundError = 'client connection not found';
@@ -15,10 +15,10 @@ export interface SubscriptionClient {
15
15
  }
16
16
  export declare const liveQueryKeepAliveRoute = "_liveQueryKeepAlive";
17
17
  export declare type LiveQueryChange = {
18
- type: "all";
18
+ type: 'all';
19
19
  data: any[];
20
20
  } | {
21
- type: "add";
21
+ type: 'add';
22
22
  data: any;
23
23
  } | {
24
24
  type: 'replace';
@@ -27,7 +27,7 @@ export declare type LiveQueryChange = {
27
27
  item: any;
28
28
  };
29
29
  } | {
30
- type: "remove";
30
+ type: 'remove';
31
31
  data: {
32
32
  id: any;
33
33
  };
@@ -1,6 +1,5 @@
1
1
  import { remult as defaultRemult, Sort } from '../../index';
2
2
  import { v4 as uuid } from 'uuid';
3
- import { getLiveQueryChannel } from '../data-api';
4
3
  export const streamUrl = 'stream';
5
4
  //@internal
6
5
  export class LiveQuerySubscriber {
@@ -11,15 +10,16 @@ export class LiveQuerySubscriber {
11
10
  this.defaultQueryState = [];
12
11
  this.listeners = [];
13
12
  this.id = uuid();
14
- this.queryChannel = getLiveQueryChannel(this.id, userId);
13
+ this.queryChannel = `users:${userId}:queries:${this.id}`;
14
+ this.id = this.queryChannel;
15
15
  }
16
16
  sendDefaultState(onResult) {
17
17
  onResult(this.createReducerType(() => [...this.defaultQueryState], this.allItemsMessage(this.defaultQueryState)));
18
18
  }
19
19
  async setAllItems(result) {
20
20
  const items = await this.repo.fromJsonArray(result, this.query.options.load);
21
- this.forListeners(listener => {
22
- listener(x => {
21
+ this.forListeners((listener) => {
22
+ listener((x) => {
23
23
  return items;
24
24
  });
25
25
  }, this.allItemsMessage(items));
@@ -27,15 +27,15 @@ export class LiveQuerySubscriber {
27
27
  allItemsMessage(items) {
28
28
  return [
29
29
  {
30
- type: "all",
31
- data: items
32
- }
30
+ type: 'all',
31
+ data: items,
32
+ },
33
33
  ];
34
34
  }
35
35
  forListeners(what, changes) {
36
- what(reducer => {
36
+ what((reducer) => {
37
37
  this.defaultQueryState = reducer(this.defaultQueryState);
38
- if (changes.find(c => c.type === "add" || c.type === "replace")) {
38
+ if (changes.find((c) => c.type === 'add' || c.type === 'replace')) {
39
39
  if (this.query.options.orderBy) {
40
40
  const o = Sort.translateOrderByToSort(this.repo.metadata, this.query.options.orderBy);
41
41
  this.defaultQueryState.sort((a, b) => o.compare(a, b));
@@ -43,7 +43,7 @@ export class LiveQuerySubscriber {
43
43
  }
44
44
  });
45
45
  for (const l of this.listeners) {
46
- what(reducer => {
46
+ what((reducer) => {
47
47
  l.next(this.createReducerType(reducer, changes));
48
48
  });
49
49
  }
@@ -52,40 +52,42 @@ export class LiveQuerySubscriber {
52
52
  return {
53
53
  applyChanges,
54
54
  changes,
55
- items: this.defaultQueryState
55
+ items: this.defaultQueryState,
56
56
  };
57
57
  }
58
58
  async handle(messages) {
59
59
  {
60
- let x = messages.filter(({ type }) => type == "add" || type == "replace");
61
- let loadedItems = await this.repo.fromJsonArray(x.map(m => m.data.item), this.query.options.load);
60
+ let x = messages.filter(({ type }) => type == 'add' || type == 'replace');
61
+ let loadedItems = await this.repo.fromJsonArray(x.map((m) => m.data.item), this.query.options.load);
62
62
  for (let index = 0; index < x.length; index++) {
63
63
  const element = x[index];
64
64
  element.data.item = loadedItems[index];
65
65
  }
66
66
  }
67
- this.forListeners(listener => {
68
- listener(items => {
67
+ this.forListeners((listener) => {
68
+ listener((items) => {
69
69
  if (!items)
70
70
  items = [];
71
71
  for (const message of messages) {
72
72
  switch (message.type) {
73
- case "all":
73
+ case 'all':
74
74
  this.setAllItems(message.data);
75
75
  break;
76
- case "replace": {
77
- items = items.map(x => this.repo.metadata.idMetadata.getId(x) === message.data.oldId ? message.data.item : x);
76
+ case 'replace': {
77
+ items = items.map((x) => this.repo.metadata.idMetadata.getId(x) === message.data.oldId
78
+ ? message.data.item
79
+ : x);
78
80
  break;
79
81
  }
80
- case "add":
81
- items = items.filter(x => this.repo.metadata.idMetadata.getId(x) !== this.repo.metadata.idMetadata.getId(message.data.item));
82
+ case 'add':
83
+ items = items.filter((x) => this.repo.metadata.idMetadata.getId(x) !==
84
+ this.repo.metadata.idMetadata.getId(message.data.item));
82
85
  items.push(message.data.item);
83
86
  break;
84
- case "remove":
85
- items = items.filter(x => this.repo.metadata.idMetadata.getId(x) !== message.data.id);
87
+ case 'remove':
88
+ items = items.filter((x) => this.repo.metadata.idMetadata.getId(x) !== message.data.id);
86
89
  break;
87
90
  }
88
- ;
89
91
  }
90
92
  return items;
91
93
  });
@@ -105,9 +107,9 @@ export class SubscriptionChannel {
105
107
  subscribe(next, remult) {
106
108
  remult = remult || defaultRemult;
107
109
  let listener = next;
108
- if (typeof (next) === "function") {
110
+ if (typeof next === 'function') {
109
111
  listener = {
110
- next
112
+ next,
111
113
  };
112
114
  }
113
115
  listener.error ??= () => { };
@@ -10,38 +10,40 @@ export class LiveQueryPublisher {
10
10
  runPromise(p) { }
11
11
  async itemChanged(entityKey, changes) {
12
12
  //TODO 2 - optimize so that the user will get their messages first. Based on user id
13
- await (this.liveQueryStorage().forEach(entityKey, async ({ query: q, setData }) => {
13
+ await this.liveQueryStorage().forEach(entityKey, async ({ query: q, setData }) => {
14
14
  let query = { ...q.data };
15
15
  await this.performWithContext(query.requestJson, entityKey, async (repo) => {
16
16
  const messages = [];
17
17
  const currentItems = await repo.find(findOptionsFromJson(query.findOptionsJson, repo.metadata));
18
- const currentIds = currentItems.map(x => repo.getEntityRef(x).getId());
19
- for (const id of query.lastIds.filter(y => !currentIds.includes(y))) {
20
- let c = changes.find(c => c.oldId == id);
21
- if (c === undefined || id != c.oldId || !currentIds.includes(c.id))
18
+ const currentIds = currentItems.map((x) => repo.getEntityRef(x).getId());
19
+ for (const id of query.lastIds.filter((y) => !currentIds.includes(y))) {
20
+ let c = changes.find((c) => c.oldId == id);
21
+ if (c === undefined ||
22
+ id != c.oldId ||
23
+ !currentIds.includes(c.id))
22
24
  messages.push({
23
- type: "remove",
25
+ type: 'remove',
24
26
  data: {
25
- id: id
26
- }
27
+ id: id,
28
+ },
27
29
  });
28
30
  }
29
31
  for (const item of currentItems) {
30
32
  const itemRef = repo.getEntityRef(item);
31
- let c = changes.find(c => c.id == itemRef.getId());
33
+ let c = changes.find((c) => c.id == itemRef.getId());
32
34
  if (c !== undefined && query.lastIds.includes(c.oldId)) {
33
35
  messages.push({
34
- type: "replace",
36
+ type: 'replace',
35
37
  data: {
36
38
  oldId: c.oldId,
37
- item: itemRef.toApiJson()
38
- }
39
+ item: itemRef.toApiJson(),
40
+ },
39
41
  });
40
42
  }
41
43
  else if (!query.lastIds.includes(itemRef.getId())) {
42
44
  messages.push({
43
- type: "add",
44
- data: { item: itemRef.toApiJson() }
45
+ type: 'add',
46
+ data: { item: itemRef.toApiJson() },
45
47
  });
46
48
  }
47
49
  }
@@ -50,14 +52,14 @@ export class LiveQueryPublisher {
50
52
  currentIds,
51
53
  changes,
52
54
  lastIds: query.lastIds,
53
- messages
55
+ messages,
54
56
  });
55
57
  query.lastIds = currentIds;
56
58
  await setData(query);
57
59
  if (messages.length > 0)
58
60
  this.subscriptionServer().publishMessage(q.id, messages);
59
61
  });
60
- }));
62
+ });
61
63
  }
62
64
  }
63
65
  export class InMemoryLiveQueryStorage {
@@ -72,7 +74,7 @@ export class InMemoryLiveQueryStorage {
72
74
  async keepAliveAndReturnUnknownQueryIds(ids) {
73
75
  const result = [];
74
76
  for (const id of ids) {
75
- let q = this.queries.find(q => q.id === id);
77
+ let q = this.queries.find((q) => q.id === id);
76
78
  if (q) {
77
79
  q.lastUsed = new Date().toISOString();
78
80
  }
@@ -87,19 +89,21 @@ export class InMemoryLiveQueryStorage {
87
89
  this.debug();
88
90
  }
89
91
  async remove(id) {
90
- this.queries = this.queries.filter(q => q.id !== id);
92
+ this.queries = this.queries.filter((q) => q.id !== id);
91
93
  this.removeCountForTesting++;
92
94
  this.debug();
93
95
  }
94
96
  async forEach(entityKey, handle) {
95
97
  let d = new Date();
96
98
  d.setMinutes(d.getMinutes() - 5);
97
- this.queries = this.queries.filter(x => x.lastUsed > d.toISOString());
99
+ this.queries = this.queries.filter((x) => x.lastUsed > d.toISOString());
98
100
  for (const q of this.queries) {
99
101
  if (q.entityKey === entityKey) {
100
102
  await handle({
101
103
  query: q,
102
- setData: async (data) => { q.data = data; },
104
+ setData: async (data) => {
105
+ q.data = data;
106
+ },
103
107
  });
104
108
  }
105
109
  }
@@ -1,2 +1,2 @@
1
- import type { Remult } from "./context";
1
+ import type { Remult } from './context';
2
2
  export declare const remult: Remult;
@@ -9,7 +9,7 @@ export class RemultProxy {
9
9
  let self = this;
10
10
  let entityCache = self.repoCache.get(args[0]);
11
11
  if (!entityCache) {
12
- self.repoCache.set(args[0], entityCache = new Map());
12
+ self.repoCache.set(args[0], (entityCache = new Map()));
13
13
  }
14
14
  let result = entityCache.get(args[1]);
15
15
  if (result)
@@ -18,43 +18,97 @@ export class RemultProxy {
18
18
  get fields() {
19
19
  return self.remultFactory().repo(...args).metadata.fields;
20
20
  },
21
- validate: (a, b) => self.remultFactory().repo(...args).validate(a, b),
22
- addEventListener: (...args2) => self.remultFactory().repo(...args).addEventListener(...args2),
23
- count: (...args2) => self.remultFactory().repo(...args).count(...args2),
24
- create: (...args2) => self.remultFactory().repo(...args).create(...args2),
25
- delete: (args2) => self.remultFactory().repo(...args).delete(args2),
26
- find: (...args2) => self.remultFactory().repo(...args).find(...args2),
27
- findFirst: (...args2) => self.remultFactory().repo(...args).findFirst(...args2),
28
- findId: (a, b) => self.remultFactory().repo(...args).findId(a, b),
29
- fromJson: (...args2) => self.remultFactory().repo(...args).fromJson(...args2),
30
- getEntityRef: (...args2) => self.remultFactory().repo(...args).getEntityRef(...args2),
31
- insert: (args2) => self.remultFactory().repo(...args).insert(args2),
32
- liveQuery: (...args2) => self.remultFactory().repo(...args).liveQuery(...args2),
21
+ validate: (a, b) => self
22
+ .remultFactory()
23
+ .repo(...args)
24
+ .validate(a, b),
25
+ addEventListener: (...args2) => self
26
+ .remultFactory()
27
+ .repo(...args)
28
+ .addEventListener(...args2),
29
+ count: (...args2) => self
30
+ .remultFactory()
31
+ .repo(...args)
32
+ .count(...args2),
33
+ create: (...args2) => self
34
+ .remultFactory()
35
+ .repo(...args)
36
+ .create(...args2),
37
+ delete: (args2) => self
38
+ .remultFactory()
39
+ .repo(...args)
40
+ .delete(args2),
41
+ find: (...args2) => self
42
+ .remultFactory()
43
+ .repo(...args)
44
+ .find(...args2),
45
+ findFirst: (...args2) => self
46
+ .remultFactory()
47
+ .repo(...args)
48
+ .findFirst(...args2),
49
+ findId: (a, b) => self
50
+ .remultFactory()
51
+ .repo(...args)
52
+ .findId(a, b),
53
+ //@ts-ignore
54
+ toJson: (json) => self
55
+ .remultFactory()
56
+ .repo(...args)
57
+ .toJson(json),
58
+ fromJson: (item, isNew) => self
59
+ .remultFactory()
60
+ .repo(...args)
61
+ .fromJson(item, isNew),
62
+ getEntityRef: (...args2) => self
63
+ .remultFactory()
64
+ .repo(...args)
65
+ .getEntityRef(...args2),
66
+ insert: (args2) => self
67
+ .remultFactory()
68
+ .repo(...args)
69
+ .insert(args2),
70
+ liveQuery: (...args2) => self
71
+ .remultFactory()
72
+ .repo(...args)
73
+ .liveQuery(...args2),
33
74
  //@ts-ignore
34
75
  addToCache: (a) => self.remultFactory().repo(...args).addToCache(a),
35
76
  get metadata() {
36
77
  return self.remultFactory().repo(...args).metadata;
37
78
  },
38
- query: (...args2) => self.remultFactory().repo(...args).query(...args2),
39
- save: (args2) => self.remultFactory().repo(...args).save(args2),
40
- update: (a, b) => self.remultFactory().repo(...args).update(a, b),
79
+ query: (...args2) => self
80
+ .remultFactory()
81
+ .repo(...args)
82
+ .query(...args2),
83
+ save: (args2) => self
84
+ .remultFactory()
85
+ .repo(...args)
86
+ .save(args2),
87
+ update: (a, b) => self
88
+ .remultFactory()
89
+ .repo(...args)
90
+ .update(a, b),
41
91
  };
42
92
  entityCache.set(args[1], result);
43
93
  return result;
44
94
  };
45
95
  }
46
96
  /* @internal*/
47
- get liveQuerySubscriber() { return this.remultFactory().liveQuerySubscriber; }
48
- ;
97
+ get liveQuerySubscriber() {
98
+ return this.remultFactory().liveQuerySubscriber;
99
+ }
49
100
  /* @internal*/
50
- set liveQuerySubscriber(val) { this.remultFactory().liveQuerySubscriber = val; }
51
- ;
101
+ set liveQuerySubscriber(val) {
102
+ this.remultFactory().liveQuerySubscriber = val;
103
+ }
52
104
  /* @internal*/
53
- get liveQueryStorage() { return this.remultFactory().liveQueryStorage; }
54
- ;
105
+ get liveQueryStorage() {
106
+ return this.remultFactory().liveQueryStorage;
107
+ }
55
108
  /* @internal*/
56
- set liveQueryStorage(val) { this.remultFactory().liveQueryStorage = val; }
57
- ;
109
+ set liveQueryStorage(val) {
110
+ this.remultFactory().liveQueryStorage = val;
111
+ }
58
112
  /* @internal*/
59
113
  get liveQueryPublisher() {
60
114
  return this.remultFactory().liveQueryPublisher;
@@ -69,12 +123,16 @@ export class RemultProxy {
69
123
  get context() {
70
124
  return this.remultFactory().context;
71
125
  }
72
- get dataProvider() { return this.remultFactory().dataProvider; }
73
- ;
74
- set dataProvider(provider) { this.remultFactory().dataProvider = provider; }
126
+ get dataProvider() {
127
+ return this.remultFactory().dataProvider;
128
+ }
129
+ set dataProvider(provider) {
130
+ this.remultFactory().dataProvider = provider;
131
+ }
75
132
  /*@internal*/
76
- get repCache() { return this.remultFactory().repCache; }
77
- ;
133
+ get repCache() {
134
+ return this.remultFactory().repCache;
135
+ }
78
136
  authenticated() {
79
137
  return this.remultFactory().authenticated();
80
138
  }
@@ -1,4 +1,4 @@
1
- import { OmitEB } from "./remult3";
1
+ import { OmitEB } from './remult3';
2
2
  declare type Decorator<T = any> = (a: T, b: string, c?: any) => void;
3
3
  declare type Decorators<T> = T extends new (...args: any[]) => infer R ? {
4
4
  [K in keyof OmitEB<R>]?: Decorator;
@@ -6,5 +6,5 @@ declare type Decorators<T> = T extends new (...args: any[]) => infer R ? {
6
6
  declare type StaticDecorators<T> = {
7
7
  [K in keyof T]?: Decorator;
8
8
  };
9
- export declare function describeClass<classType>(classType: classType, classDecorator: ((x: any) => any) | undefined, members?: Decorators<classType> | undefined, staticMembers?: StaticDecorators<classType>): void;
9
+ export declare function describeClass<classType>(classType: classType, classDecorator: ((x: any, context?: any) => any) | undefined, members?: Decorators<classType> | undefined, staticMembers?: StaticDecorators<classType>): void;
10
10
  export {};