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
@@ -8,7 +8,7 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
8
8
  function FilterConsumerBridgeToSqlRequest(r, nameProvider) {
9
9
  this.r = r;
10
10
  this.nameProvider = nameProvider;
11
- this.where = "";
11
+ this.where = '';
12
12
  this._addWhere = true;
13
13
  this.promises = [];
14
14
  }
@@ -55,7 +55,7 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
55
55
  });
56
56
  };
57
57
  FilterConsumerBridgeToSqlRequest.prototype.custom = function (key, customItem) {
58
- throw new Error("Custom filter should be translated before it gets here");
58
+ throw new Error('Custom filter should be translated before it gets here');
59
59
  };
60
60
  FilterConsumerBridgeToSqlRequest.prototype.or = function (orElements) {
61
61
  var _this = this;
@@ -82,10 +82,10 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
82
82
  return [2 /*return*/]; //since if any member of or is empty, then the entire or is irrelevant
83
83
  if (where.length > 0) {
84
84
  if (statement.length > 0) {
85
- statement += " or ";
85
+ statement += ' or ';
86
86
  }
87
87
  if (orElements.length > 1) {
88
- statement += "(" + where + ")";
88
+ statement += '(' + where + ')';
89
89
  }
90
90
  else
91
91
  statement += where;
@@ -106,7 +106,7 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
106
106
  finally { if (e_2) throw e_2.error; }
107
107
  return [7 /*endfinally*/];
108
108
  case 7:
109
- this.addToWhere("(" + statement + ")");
109
+ this.addToWhere('(' + statement + ')');
110
110
  return [2 /*return*/];
111
111
  }
112
112
  });
@@ -130,7 +130,14 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
130
130
  var _this = this;
131
131
  return tslib_1.__generator(this, function (_a) {
132
132
  if (val && val.length > 0)
133
- this.addToWhere(this.nameProvider.$dbNameOf(col) + " in (" + val.map(function (x) { return _this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(x)); }).join(",") + ")");
133
+ this.addToWhere(this.nameProvider.$dbNameOf(col) +
134
+ ' in (' +
135
+ val
136
+ .map(function (x) {
137
+ return _this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(x));
138
+ })
139
+ .join(',') +
140
+ ')');
134
141
  else
135
142
  this.addToWhere('1 = 0 /*isIn with no values*/');
136
143
  return [2 /*return*/];
@@ -138,28 +145,32 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
138
145
  }); })());
139
146
  };
140
147
  FilterConsumerBridgeToSqlRequest.prototype.isEqualTo = function (col, val) {
141
- this.add(col, val, "=");
148
+ this.add(col, val, '=');
142
149
  };
143
150
  FilterConsumerBridgeToSqlRequest.prototype.isDifferentFrom = function (col, val) {
144
- this.add(col, val, "<>");
151
+ this.add(col, val, '<>');
145
152
  };
146
153
  FilterConsumerBridgeToSqlRequest.prototype.isGreaterOrEqualTo = function (col, val) {
147
- this.add(col, val, ">=");
154
+ this.add(col, val, '>=');
148
155
  };
149
156
  FilterConsumerBridgeToSqlRequest.prototype.isGreaterThan = function (col, val) {
150
- this.add(col, val, ">");
157
+ this.add(col, val, '>');
151
158
  };
152
159
  FilterConsumerBridgeToSqlRequest.prototype.isLessOrEqualTo = function (col, val) {
153
- this.add(col, val, "<=");
160
+ this.add(col, val, '<=');
154
161
  };
155
162
  FilterConsumerBridgeToSqlRequest.prototype.isLessThan = function (col, val) {
156
- this.add(col, val, "<");
163
+ this.add(col, val, '<');
157
164
  };
158
165
  FilterConsumerBridgeToSqlRequest.prototype.containsCaseInsensitive = function (col, val) {
159
166
  var _this = this;
160
167
  this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
161
168
  return tslib_1.__generator(this, function (_a) {
162
- this.addToWhere('lower (' + this.nameProvider.$dbNameOf(col) + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')");
169
+ this.addToWhere('lower (' +
170
+ this.nameProvider.$dbNameOf(col) +
171
+ ") like lower ('%" +
172
+ val.replace(/'/g, "''") +
173
+ "%')");
163
174
  return [2 /*return*/];
164
175
  });
165
176
  }); })());
@@ -169,7 +180,11 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
169
180
  this.promises.push((function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
170
181
  var x;
171
182
  return tslib_1.__generator(this, function (_a) {
172
- x = this.nameProvider.$dbNameOf(col) + ' ' + operator + ' ' + this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(val));
183
+ x = this.nameProvider.$dbNameOf(col) +
184
+ ' ' +
185
+ operator +
186
+ ' ' +
187
+ this.r.addParameterAndReturnSqlToken(col.valueConverter.toDb(val));
173
188
  this.addToWhere(x);
174
189
  return [2 /*return*/];
175
190
  });
@@ -197,7 +212,7 @@ var FilterConsumerBridgeToSqlRequest = /** @class */ (function () {
197
212
  case 1:
198
213
  _a.sent();
199
214
  if (item.sql) {
200
- this.addToWhere("(" + item.sql + ")");
215
+ this.addToWhere('(' + item.sql + ')');
201
216
  }
202
217
  _a.label = 2;
203
218
  case 2: return [2 /*return*/];
@@ -229,7 +244,9 @@ var CustomSqlFilterBuilder = /** @class */ (function () {
229
244
  }());
230
245
  exports.CustomSqlFilterBuilder = CustomSqlFilterBuilder;
231
246
  function isDbReadonly(field, dbNames) {
232
- return (field.dbReadOnly || field.isServerExpression || dbNames.$dbNameOf(field) != field.options.dbName);
247
+ return (field.dbReadOnly ||
248
+ field.isServerExpression ||
249
+ dbNames.$dbNameOf(field) != field.options.dbName);
233
250
  }
234
251
  exports.isDbReadonly = isDbReadonly;
235
252
  function dbNamesOf(repo) {
@@ -247,7 +264,7 @@ function dbNamesOf(repo) {
247
264
  _e.toString = function () { return result.$entityName; },
248
265
  _e.$dbNameOf = function (field) {
249
266
  var key;
250
- if (typeof field === "string")
267
+ if (typeof field === 'string')
251
268
  key = field;
252
269
  else
253
270
  key = field.key;
@@ -1,13 +1,13 @@
1
- import { FieldMetadata } from "../column-interfaces";
2
- import { Remult } from "../context";
3
- import { EntityMetadata, EntityFilter } from "../remult3";
1
+ import { FieldMetadata } from '../column-interfaces';
2
+ import { Remult } from '../context';
3
+ import { EntityMetadata, EntityFilter } from '../remult3';
4
4
  export declare class Filter {
5
5
  private apply?;
6
6
  constructor(apply?: (add: FilterConsumer) => void);
7
7
  __applyToConsumer(add: FilterConsumer): void;
8
8
  static resolve<entityType>(filter: EntityFilter<entityType> | (() => EntityFilter<entityType> | Promise<EntityFilter<entityType>>)): Promise<EntityFilter<entityType>>;
9
- static createCustom<entityType>(rawFilterTranslator: (unused: never, r: Remult) => EntityFilter<entityType> | Promise<EntityFilter<entityType>>, key?: string): (() => EntityFilter<entityType>) & rawFilterInfo<entityType>;
10
- static createCustom<entityType, argsType>(rawFilterTranslator: (args: argsType, r: Remult) => EntityFilter<entityType> | Promise<EntityFilter<entityType>>, key?: string): ((y: argsType) => EntityFilter<entityType>) & rawFilterInfo<entityType>;
9
+ static createCustom<entityType>(rawFilterTranslator: (unused: never, r: Remult) => EntityFilter<entityType> | Promise<EntityFilter<entityType>>, key?: string): (() => EntityFilter<entityType>) & customFilterInfo<entityType>;
10
+ static createCustom<entityType, argsType>(rawFilterTranslator: (args: argsType, r: Remult) => EntityFilter<entityType> | Promise<EntityFilter<entityType>>, key?: string): ((y: argsType) => EntityFilter<entityType>) & customFilterInfo<entityType>;
11
11
  static fromEntityFilter<T>(entity: EntityMetadata<T>, whereItem: EntityFilter<T>): Filter;
12
12
  toJson(): any;
13
13
  static entityFilterToJson<T>(entityDefs: EntityMetadata<T>, where: EntityFilter<T>): any;
@@ -77,9 +77,9 @@ export declare function entityFilterToJson<T>(entityDefs: EntityMetadata<T>, whe
77
77
  export declare function buildFilterFromRequestParameters(entity: EntityMetadata, filterInfo: {
78
78
  get: (key: string) => any;
79
79
  }): EntityFilter<any>;
80
- export interface rawFilterInfo<entityType> {
80
+ export interface customFilterInfo<entityType> {
81
81
  rawFilterInfo: {
82
82
  key: string;
83
- rawFilterTranslator: (args: any, r: Remult) => (EntityFilter<entityType> | Promise<EntityFilter<entityType>>);
83
+ rawFilterTranslator: (args: any, r: Remult) => EntityFilter<entityType> | Promise<EntityFilter<entityType>>;
84
84
  };
85
85
  }
@@ -18,7 +18,7 @@ var Filter = /** @class */ (function () {
18
18
  return tslib_1.__generator(this, function (_a) {
19
19
  switch (_a.label) {
20
20
  case 0:
21
- if (!(typeof filter === "function")) return [3 /*break*/, 2];
21
+ if (!(typeof filter === 'function')) return [3 /*break*/, 2];
22
22
  return [4 /*yield*/, filter()];
23
23
  case 1: return [2 /*return*/, _a.sent()];
24
24
  case 2: return [2 /*return*/, filter];
@@ -35,7 +35,7 @@ var Filter = /** @class */ (function () {
35
35
  if (x == undefined)
36
36
  x = {};
37
37
  if (!rawFilterInfo.key)
38
- throw "Usage of custom filter before a key was assigned to it";
38
+ throw 'Usage of custom filter before a key was assigned to it';
39
39
  return _a = {},
40
40
  _a[exports.customUrlToken + rawFilterInfo.key] = x,
41
41
  _a;
@@ -47,10 +47,10 @@ var Filter = /** @class */ (function () {
47
47
  if (Object.prototype.hasOwnProperty.call(whereItem, key)) {
48
48
  var fieldToFilter_1 = whereItem[key];
49
49
  {
50
- if (key == "$or") {
50
+ if (key == '$or') {
51
51
  result.push(new (OrFilter.bind.apply(OrFilter, tslib_1.__spread([void 0], fieldToFilter_1.map(function (x) { return Filter.fromEntityFilter(entity, x); }))))());
52
52
  }
53
- else if (key == "$and") {
53
+ else if (key == '$and') {
54
54
  result.push(new (AndFilter.bind.apply(AndFilter, tslib_1.__spread([void 0], fieldToFilter_1.map(function (x) { return Filter.fromEntityFilter(entity, x); }))))());
55
55
  }
56
56
  else if (key.startsWith(exports.customUrlToken)) {
@@ -71,29 +71,29 @@ var Filter = /** @class */ (function () {
71
71
  if (Object.prototype.hasOwnProperty.call(fieldToFilter_1, key_1)) {
72
72
  var element = fieldToFilter_1[key_1];
73
73
  switch (key_1) {
74
- case "$gte":
75
- case ">=":
74
+ case '$gte':
75
+ case '>=':
76
76
  result.push(fh.isGreaterOrEqualTo(element));
77
77
  found = true;
78
78
  break;
79
- case "$gt":
80
- case ">":
79
+ case '$gt':
80
+ case '>':
81
81
  result.push(fh.isGreaterThan(element));
82
82
  found = true;
83
83
  break;
84
- case "$lte":
85
- case "<=":
84
+ case '$lte':
85
+ case '<=':
86
86
  result.push(fh.isLessOrEqualTo(element));
87
87
  found = true;
88
88
  break;
89
- case "$lt":
90
- case "<":
89
+ case '$lt':
90
+ case '<':
91
91
  result.push(fh.isLessThan(element));
92
92
  found = true;
93
93
  break;
94
- case "$ne":
95
- case "!=":
96
- case "$nin":
94
+ case '$ne':
95
+ case '!=':
96
+ case '$nin':
97
97
  found = true;
98
98
  if (Array.isArray(element)) {
99
99
  result.push(fh.isNotIn(element));
@@ -101,11 +101,11 @@ var Filter = /** @class */ (function () {
101
101
  else
102
102
  result.push(fh.isDifferentFrom(element));
103
103
  break;
104
- case "$in":
104
+ case '$in':
105
105
  found = true;
106
106
  result.push(fh.isIn(element));
107
107
  break;
108
- case "$contains":
108
+ case '$contains':
109
109
  found = true;
110
110
  result.push(fh.contains(element));
111
111
  break;
@@ -138,7 +138,9 @@ var Filter = /** @class */ (function () {
138
138
  return Filter.fromEntityFilter(entityDefs, where).toJson();
139
139
  };
140
140
  Filter.entityFilterFromJson = function (entityDefs, packed) {
141
- return buildFilterFromRequestParameters(entityDefs, { get: function (key) { return packed[key]; } });
141
+ return buildFilterFromRequestParameters(entityDefs, {
142
+ get: function (key) { return packed[key]; },
143
+ });
142
144
  };
143
145
  Filter.translateCustomWhere = function (r, entity, remult) {
144
146
  return tslib_1.__awaiter(this, void 0, void 0, function () {
@@ -162,7 +164,9 @@ var Filter = /** @class */ (function () {
162
164
  if (!(_i < _a.length)) return [3 /*break*/, 5];
163
165
  key = _a[_i];
164
166
  element = entity.entityType[key];
165
- if (!(element && element.rawFilterInfo && element.rawFilterInfo.rawFilterTranslator)) return [3 /*break*/, 4];
167
+ if (!(element &&
168
+ element.rawFilterInfo &&
169
+ element.rawFilterInfo.rawFilterTranslator)) return [3 /*break*/, 4];
166
170
  if (!(element.rawFilterInfo.key == filterKey)) return [3 /*break*/, 4];
167
171
  _d = (_c = r).push;
168
172
  _f = (_e = Filter).fromEntityFilter;
@@ -201,7 +205,7 @@ var filterHelper = /** @class */ (function () {
201
205
  if (ei) {
202
206
  if (!val)
203
207
  return null;
204
- if (typeof val === "string" || typeof val === "number")
208
+ if (typeof val === 'string' || typeof val === 'number')
205
209
  return val;
206
210
  return remult3_1.getEntityRef(val).getId();
207
211
  }
@@ -326,17 +330,21 @@ var OrFilter = /** @class */ (function (_super) {
326
330
  return OrFilter;
327
331
  }(Filter));
328
332
  exports.OrFilter = OrFilter;
329
- exports.customUrlToken = "$custom$";
330
- exports.customDatabaseFilterToken = "$db$";
333
+ exports.customUrlToken = '$custom$';
334
+ exports.customDatabaseFilterToken = '$db$';
335
+ var customArrayToken = '$an array';
331
336
  var FilterSerializer = /** @class */ (function () {
332
337
  function FilterSerializer() {
333
338
  this.result = {};
334
339
  this.hasUndefined = false;
335
340
  }
336
341
  FilterSerializer.prototype.databaseCustom = function (databaseCustom) {
337
- throw new Error("database custom is not allowed with api calls.");
342
+ throw new Error('database custom is not allowed with api calls.');
338
343
  };
339
344
  FilterSerializer.prototype.custom = function (key, customItem) {
345
+ var _a;
346
+ if (Array.isArray(customItem))
347
+ customItem = (_a = {}, _a[customArrayToken] = customItem, _a);
340
348
  this.add(exports.customUrlToken + key, customItem);
341
349
  };
342
350
  FilterSerializer.prototype.add = function (key, val) {
@@ -356,20 +364,20 @@ var FilterSerializer = /** @class */ (function () {
356
364
  r[key] = v;
357
365
  };
358
366
  FilterSerializer.prototype.or = function (orElements) {
359
- this.add("OR", orElements.map(function (x) {
367
+ this.add('OR', orElements.map(function (x) {
360
368
  var f = new FilterSerializer();
361
369
  x.__applyToConsumer(f);
362
370
  return f.result;
363
371
  }));
364
372
  };
365
373
  FilterSerializer.prototype.isNull = function (col) {
366
- this.add(col.key + ".null", true);
374
+ this.add(col.key + '.null', true);
367
375
  };
368
376
  FilterSerializer.prototype.isNotNull = function (col) {
369
- this.add(col.key + ".null", false);
377
+ this.add(col.key + '.null', false);
370
378
  };
371
379
  FilterSerializer.prototype.isIn = function (col, val) {
372
- this.add(col.key + ".in", val.map(function (x) { return col.valueConverter.toJson(x); }));
380
+ this.add(col.key + '.in', val.map(function (x) { return col.valueConverter.toJson(x); }));
373
381
  };
374
382
  FilterSerializer.prototype.isEqualTo = function (col, val) {
375
383
  this.add(col.key, col.valueConverter.toJson(val));
@@ -390,7 +398,7 @@ var FilterSerializer = /** @class */ (function () {
390
398
  this.add(col.key + '.lt', col.valueConverter.toJson(val));
391
399
  };
392
400
  FilterSerializer.prototype.containsCaseInsensitive = function (col, val) {
393
- this.add(col.key + ".contains", val);
401
+ this.add(col.key + '.contains', val);
394
402
  };
395
403
  return FilterSerializer;
396
404
  }());
@@ -398,11 +406,10 @@ exports.FilterSerializer = FilterSerializer;
398
406
  function entityFilterToJson(entityDefs, where) {
399
407
  if (!where)
400
408
  return {};
401
- return (Filter.fromEntityFilter(entityDefs, where)).toJson();
409
+ return Filter.fromEntityFilter(entityDefs, where).toJson();
402
410
  }
403
411
  exports.entityFilterToJson = entityFilterToJson;
404
412
  function buildFilterFromRequestParameters(entity, filterInfo) {
405
- var _a;
406
413
  var where = [];
407
414
  tslib_1.__spread(entity.fields).forEach(function (col) {
408
415
  var _a, _b;
@@ -421,7 +428,9 @@ function buildFilterFromRequestParameters(entity, filterInfo) {
421
428
  arr = JSON.parse(val);
422
429
  else
423
430
  arr = val;
424
- theVal = arr.map(function (x) { return asString ? x : col.valueConverter.fromJson(x); });
431
+ theVal = arr.map(function (x) {
432
+ return asString ? x : col.valueConverter.fromJson(x);
433
+ });
425
434
  }
426
435
  else {
427
436
  theVal = asString ? theVal : col.valueConverter.fromJson(theVal);
@@ -460,23 +469,23 @@ function buildFilterFromRequestParameters(entity, filterInfo) {
460
469
  }
461
470
  var c = new filterHelper(col);
462
471
  addFilter('', function (val) { return val; });
463
- addFilter('.gt', function (val) { return ({ "$gt": val }); });
464
- addFilter('.gte', function (val) { return ({ "$gte": val }); });
465
- addFilter('.lt', function (val) { return ({ "$lt": val }); });
466
- addFilter('.lte', function (val) { return ({ "$lte": val }); });
467
- addFilter('.ne', function (val) { return ({ "$ne": val }); });
472
+ addFilter('.gt', function (val) { return ({ $gt: val }); });
473
+ addFilter('.gte', function (val) { return ({ $gte: val }); });
474
+ addFilter('.lt', function (val) { return ({ $lt: val }); });
475
+ addFilter('.lte', function (val) { return ({ $lte: val }); });
476
+ addFilter('.ne', function (val) { return ({ $ne: val }); });
468
477
  addFilter('.in', function (val) { return val; }, true);
469
- var nullFilter = filterInfo.get(col.key + ".null");
478
+ var nullFilter = filterInfo.get(col.key + '.null');
470
479
  if (nullFilter) {
471
480
  nullFilter = nullFilter.toString().trim().toLowerCase();
472
481
  switch (nullFilter) {
473
- case "y":
474
- case "true":
475
- case "yes":
482
+ case 'y':
483
+ case 'true':
484
+ case 'yes':
476
485
  where.push((_a = {}, _a[col.key] = null, _a));
477
486
  break;
478
487
  default:
479
- where.push((_b = {}, _b[col.key] = { "$ne": null }, _b));
488
+ where.push((_b = {}, _b[col.key] = { $ne: null }, _b));
480
489
  break;
481
490
  }
482
491
  }
@@ -488,19 +497,36 @@ function buildFilterFromRequestParameters(entity, filterInfo) {
488
497
  where.push({
489
498
  $and: array.map(function (v) { return ({
490
499
  $or: v.map(function (x) {
491
- return buildFilterFromRequestParameters(entity, { get: function (key) { return x[key]; } });
492
- })
493
- }); })
500
+ return buildFilterFromRequestParameters(entity, {
501
+ get: function (key) { return x[key]; },
502
+ });
503
+ }),
504
+ }); }),
494
505
  });
495
506
  }
496
- for (var key in entity.entityType) {
507
+ var _loop_2 = function (key) {
497
508
  var element = entity.entityType[key];
498
- if (element && element.rawFilterInfo && element.rawFilterInfo.rawFilterTranslator) {
509
+ if (element &&
510
+ element.rawFilterInfo &&
511
+ element.rawFilterInfo.rawFilterTranslator) {
499
512
  var custom = filterInfo.get(exports.customUrlToken + key);
500
513
  if (custom !== undefined) {
501
- where.push((_a = {}, _a[exports.customUrlToken + key] = custom, _a));
514
+ var addItem_1 = function (item) {
515
+ var _a;
516
+ if (item[customArrayToken] != undefined)
517
+ item = item[customArrayToken];
518
+ where.push((_a = {}, _a[exports.customUrlToken + key] = item, _a));
519
+ };
520
+ if (Array.isArray(custom)) {
521
+ custom.forEach(function (item) { return addItem_1(item); });
522
+ }
523
+ else
524
+ addItem_1(custom);
502
525
  }
503
526
  }
527
+ };
528
+ for (var key in entity.entityType) {
529
+ _loop_2(key);
504
530
  }
505
531
  return { $and: where };
506
532
  function separateArrayFromInnerArray(val) {
@@ -20,7 +20,9 @@ var LiveQueryClient = /** @class */ (function () {
20
20
  else
21
21
  handleMessage();
22
22
  };
23
- ;
23
+ LiveQueryClient.prototype.hasQueriesForTesting = function () {
24
+ return this.queries.size > 0;
25
+ };
24
26
  LiveQueryClient.prototype.runPromise = function (p) {
25
27
  return p;
26
28
  };
@@ -45,7 +47,7 @@ var LiveQueryClient = /** @class */ (function () {
45
47
  _b.trys.push([2, 7, , 8]);
46
48
  q_1 = this.channels.get(key);
47
49
  if (!!q_1) return [3 /*break*/, 6];
48
- this.channels.set(key, q_1 = new MessageChannel());
50
+ this.channels.set(key, (q_1 = new MessageChannel()));
49
51
  _b.label = 3;
50
52
  case 3:
51
53
  _b.trys.push([3, 5, , 6]);
@@ -95,16 +97,21 @@ var LiveQueryClient = /** @class */ (function () {
95
97
  LiveQueryClient.prototype.subscribe = function (repo, options, listener) {
96
98
  var _this = this;
97
99
  var alive = true;
98
- var onUnsubscribe = function () { alive = false; };
99
- this.runPromise(repo.buildEntityDataProviderFindOptions(options)
100
+ var onUnsubscribe = function () {
101
+ alive = false;
102
+ };
103
+ this.runPromise(repo
104
+ .buildEntityDataProviderFindOptions(options)
100
105
  .then(function (opts) {
101
106
  if (!alive)
102
107
  return;
103
- var _a = new rest_data_provider_1.RestDataProvider(_this.apiProvider).getEntityDataProvider(repo.metadata).buildFindRequest(opts), createKey = _a.createKey, subscribe = _a.subscribe;
108
+ var _a = new rest_data_provider_1.RestDataProvider(_this.apiProvider)
109
+ .getEntityDataProvider(repo.metadata)
110
+ .buildFindRequest(opts), createKey = _a.createKey, subscribe = _a.subscribe;
104
111
  var eventTypeKey = createKey();
105
112
  var q = _this.queries.get(eventTypeKey);
106
113
  if (!q) {
107
- _this.queries.set(eventTypeKey, q = new SubscriptionChannel_1.LiveQuerySubscriber(repo, { entityKey: repo.metadata.key, options: options }, _this.getUserId()));
114
+ _this.queries.set(eventTypeKey, (q = new SubscriptionChannel_1.LiveQuerySubscriber(repo, { entityKey: repo.metadata.key, options: options }, _this.getUserId())));
108
115
  q.subscribeCode = function () {
109
116
  if (q.unsubscribe) {
110
117
  q.unsubscribe();
@@ -115,13 +122,13 @@ var LiveQueryClient = /** @class */ (function () {
115
122
  complete: function () { },
116
123
  error: function (er) {
117
124
  q.listeners.forEach(function (l) { return l.error(er); });
118
- }
125
+ },
119
126
  }).then(function (unsubscribeToChannel) {
120
127
  if (q.listeners.length == 0) {
121
128
  unsubscribeToChannel();
122
129
  return;
123
130
  }
124
- _this.runPromise(subscribe(q.id)
131
+ _this.runPromise(subscribe(q.queryChannel)
125
132
  .then(function (r) {
126
133
  if (q.listeners.length === 0) {
127
134
  r.unsubscribe();
@@ -136,7 +143,9 @@ var LiveQueryClient = /** @class */ (function () {
136
143
  };
137
144
  })
138
145
  .catch(function (err) {
139
- listener.error(err);
146
+ q.listeners.forEach(function (l) { return l.error(err); });
147
+ unsubscribeToChannel();
148
+ _this.queries.delete(eventTypeKey);
140
149
  }));
141
150
  })).catch(function (err) {
142
151
  q.listeners.forEach(function (l) { return l.error(err); });
@@ -194,7 +203,9 @@ var LiveQueryClient = /** @class */ (function () {
194
203
  case 1:
195
204
  actionInfo = (_j.sent()).actionInfo;
196
205
  _c = this.runPromise;
197
- return [4 /*yield*/, actionInfo.runActionWithoutBlockingUI(function () { return buildRestDataProvider_1.buildRestDataProvider(p_1.httpClient).post(p_1.url + '/' + SubscriptionChannel_1.liveQueryKeepAliveRoute, ids); })];
206
+ return [4 /*yield*/, actionInfo.runActionWithoutBlockingUI(function () {
207
+ return buildRestDataProvider_1.buildRestDataProvider(p_1.httpClient).post(p_1.url + '/' + SubscriptionChannel_1.liveQueryKeepAliveRoute, ids);
208
+ })];
198
209
  case 2: return [4 /*yield*/, _c.apply(this, [_j.sent()])];
199
210
  case 3:
200
211
  invalidIds = _j.sent();
@@ -229,23 +240,22 @@ var LiveQueryClient = /** @class */ (function () {
229
240
  }
230
241
  });
231
242
  }); }, 30000);
232
- return this.runPromise(this.client =
233
- this.apiProvider().subscriptionClient.openConnection(function () {
234
- var e_4, _a;
235
- try {
236
- for (var _b = tslib_1.__values(_this.queries.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
237
- var q = _c.value;
238
- q.subscribeCode();
239
- }
243
+ return this.runPromise((this.client = this.apiProvider().subscriptionClient.openConnection(function () {
244
+ var e_4, _a;
245
+ try {
246
+ for (var _b = tslib_1.__values(_this.queries.values()), _c = _b.next(); !_c.done; _c = _b.next()) {
247
+ var q = _c.value;
248
+ q.subscribeCode();
240
249
  }
241
- catch (e_4_1) { e_4 = { error: e_4_1 }; }
242
- finally {
243
- try {
244
- if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
245
- }
246
- finally { if (e_4) throw e_4.error; }
250
+ }
251
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
252
+ finally {
253
+ try {
254
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
247
255
  }
248
- }));
256
+ finally { if (e_4) throw e_4.error; }
257
+ }
258
+ })));
249
259
  }
250
260
  return this.client;
251
261
  };
@@ -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
  }