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
package/server/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { RemultServer, RemultServerOptions, ServerCoreOptions } from './expressBridge';
2
- export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, RemultServerCore, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer, InitRequestOptions } from './expressBridge';
3
- export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
2
+ export { queuedJobInfo, QueueStorage, GenericRequestInfo, GenericRequestHandler, RemultServerCore, GenericResponse, GenericRouter, RemultServerOptions, SpecificRoute, RemultServer, InitRequestOptions, } from './expressBridge';
3
+ export { JsonEntityFileStorage, JsonFileDataProvider, } from './JsonEntityFileStorage';
4
4
  export { DataProviderLiveQueryStorage } from '../live-query/data-provider-live-query-storage';
5
5
  export { SseSubscriptionServer } from '../SseSubscriptionServer';
6
6
  export declare function createRemultServer<RequestType>(options: RemultServerOptions<RequestType>, serverCoreOptions?: ServerCoreOptions<RequestType>): RemultServer<RequestType>;
package/server/index.js CHANGED
@@ -14,8 +14,11 @@ Object.defineProperty(exports, "SseSubscriptionServer", { enumerable: true, get:
14
14
  function createRemultServer(options, serverCoreOptions) {
15
15
  var _this = this;
16
16
  initAsyncHooks_1.initAsyncHooks();
17
- return expressBridge_1.createRemultServerCore(options, serverCoreOptions || { buildGenericRequestInfo: function (req) { return req; }, getRequestBody: function (req) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
17
+ return expressBridge_1.createRemultServerCore(options, serverCoreOptions || {
18
+ buildGenericRequestInfo: function (req) { return req; },
19
+ getRequestBody: function (req) { return tslib_1.__awaiter(_this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) {
18
20
  return [2 /*return*/, req.body];
19
- }); }); } });
21
+ }); }); },
22
+ });
20
23
  }
21
24
  exports.createRemultServer = createRemultServer;
@@ -2,12 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initAsyncHooks = void 0;
4
4
  var async_hooks_1 = require("async_hooks");
5
- var expressBridge_1 = require("./expressBridge");
5
+ var context_1 = require("../src/context");
6
6
  var init = false;
7
7
  function initAsyncHooks() {
8
8
  if (init)
9
9
  return;
10
10
  init = true;
11
- expressBridge_1.RemultAsyncLocalStorage.instance = new expressBridge_1.RemultAsyncLocalStorage(new async_hooks_1.AsyncLocalStorage());
11
+ context_1.RemultAsyncLocalStorage.instance = new context_1.RemultAsyncLocalStorage(new async_hooks_1.AsyncLocalStorage());
12
12
  }
13
13
  exports.initAsyncHooks = initAsyncHooks;
@@ -5,7 +5,7 @@ var tslib_1 = require("tslib");
5
5
  function initDataProvider(optionsDataProvider) {
6
6
  var _this = this;
7
7
  var dataProvider;
8
- if (typeof optionsDataProvider === "function") {
8
+ if (typeof optionsDataProvider === 'function') {
9
9
  dataProvider = optionsDataProvider();
10
10
  }
11
11
  else
@@ -1,4 +1,4 @@
1
- import { dbTestWhatSignature } from "../shared-tests/db-tests-setup";
1
+ import { dbTestWhatSignature } from '../shared-tests/db-tests-setup';
2
2
  export declare const testKnexPGSqlImpl: (key: string, what: dbTestWhatSignature, focus?: boolean) => void;
3
3
  export declare const mySqlTest: import("../shared-tests/db-tests-setup").dbTestMethodSignature;
4
4
  export declare function testPostgresImplementation(key: string, what: dbTestWhatSignature, focus?: boolean): void;
@@ -18,7 +18,7 @@ function testKnexSqlImpl(knex, name) {
18
18
  var _this = this;
19
19
  return function (key, what, focus) {
20
20
  if (focus === void 0) { focus = false; }
21
- db_tests_setup_1.itWithFocus(key + " " + name + " - knex", function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
21
+ db_tests_setup_1.itWithFocus(key + ' ' + name + ' - knex', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
22
22
  var db, remult;
23
23
  var _this = this;
24
24
  return tslib_1.__generator(this, function (_a) {
@@ -27,7 +27,8 @@ function testKnexSqlImpl(knex, name) {
27
27
  db = new remult_knex_1.KnexDataProvider(knex);
28
28
  remult = new context_1.Remult(db);
29
29
  return [4 /*yield*/, what({
30
- db: db, remult: remult,
30
+ db: db,
31
+ remult: remult,
31
32
  createEntity: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
32
33
  var repo, _a, _b;
33
34
  return tslib_1.__generator(this, function (_c) {
@@ -45,7 +46,7 @@ function testKnexSqlImpl(knex, name) {
45
46
  return [2 /*return*/, repo];
46
47
  }
47
48
  });
48
- }); }
49
+ }); },
49
50
  })];
50
51
  case 1:
51
52
  _a.sent();
@@ -58,7 +59,7 @@ function testKnexSqlImpl(knex, name) {
58
59
  exports.testKnexPGSqlImpl = testKnexSqlImpl(Knex.default({
59
60
  client: 'pg',
60
61
  connection: process.env.DATABASE_URL,
61
- }), "postgres");
62
+ }), 'postgres');
62
63
  db_tests_setup_1.addDatabaseToTest(exports.testKnexPGSqlImpl);
63
64
  if (process.env['TESTS_SQL_SERVER'])
64
65
  db_tests_setup_1.addDatabaseToTest(testKnexSqlImpl(Knex.default({
@@ -71,32 +72,31 @@ if (process.env['TESTS_SQL_SERVER'])
71
72
  options: {
72
73
  enableArithAbort: true,
73
74
  encrypt: false,
74
- instanceName: 'sqlexpress'
75
- }
76
- } //,debug: true
77
- }), "sql server"));
75
+ instanceName: 'sqlexpress',
76
+ },
77
+ },
78
+ }), 'sql server'));
78
79
  if (true)
79
80
  db_tests_setup_1.addDatabaseToTest(testKnexSqlImpl(Knex.default({
80
81
  client: 'better-sqlite3',
81
82
  connection: {
82
- filename: ":memory:"
83
+ filename: ':memory:',
83
84
  },
84
- }), "sqlite3"));
85
+ }), 'sqlite3'));
85
86
  exports.mySqlTest = db_tests_setup_1.addDatabaseToTest(testKnexSqlImpl(Knex.default({
86
87
  client: 'mysql2',
87
88
  connection: {
88
89
  user: 'root',
89
90
  password: 'MASTERKEY',
90
91
  host: '127.0.0.1',
91
- database: 'test'
92
- }
93
- //debug: true
94
- }), "mysql2"));
92
+ database: 'test',
93
+ },
94
+ }), 'mysql2'));
95
95
  var pg = postgres_1.createPostgresConnection();
96
96
  function testPostgresImplementation(key, what, focus) {
97
97
  var _this = this;
98
98
  if (focus === void 0) { focus = false; }
99
- db_tests_setup_1.itWithFocus(key + " - postgres", function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
99
+ db_tests_setup_1.itWithFocus(key + ' - postgres', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
100
100
  var db, remult;
101
101
  var _this = this;
102
102
  return tslib_1.__generator(this, function (_a) {
@@ -106,7 +106,8 @@ function testPostgresImplementation(key, what, focus) {
106
106
  db = _a.sent();
107
107
  remult = new context_1.Remult(db);
108
108
  return [4 /*yield*/, what({
109
- db: db, remult: remult,
109
+ db: db,
110
+ remult: remult,
110
111
  createEntity: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
111
112
  var repo, _a, _b, _c;
112
113
  return tslib_1.__generator(this, function (_d) {
@@ -114,7 +115,7 @@ function testPostgresImplementation(key, what, focus) {
114
115
  case 0:
115
116
  repo = remult.repo(entity);
116
117
  _b = (_a = db).execute;
117
- _c = "drop table if exists ";
118
+ _c = 'drop table if exists ';
118
119
  return [4 /*yield*/, repo.metadata.getDbName()];
119
120
  case 1: return [4 /*yield*/, _b.apply(_a, [_c + (_d.sent())])];
120
121
  case 2:
@@ -125,7 +126,7 @@ function testPostgresImplementation(key, what, focus) {
125
126
  return [2 /*return*/, repo];
126
127
  }
127
128
  });
128
- }); }
129
+ }); },
129
130
  })];
130
131
  case 2:
131
132
  _a.sent();
@@ -138,7 +139,7 @@ exports.testPostgresImplementation = testPostgresImplementation;
138
139
  db_tests_setup_1.addDatabaseToTest(testPostgresImplementation);
139
140
  var remult_3_entities_1 = require("../tests/remult-3-entities");
140
141
  var remult_mongo_1 = require("../../remult-mongo");
141
- db_tests_setup_1.testAll("transactions", function (_a) {
142
+ db_tests_setup_1.testAll('transactions', function (_a) {
142
143
  var db = _a.db, createEntity = _a.createEntity;
143
144
  return tslib_1.__awaiter(void 0, void 0, void 0, function () {
144
145
  var x;
@@ -173,7 +174,7 @@ var client = new mongodb_1.MongoClient(mongoConnectionString);
173
174
  var done;
174
175
  var mongoDbPromise = client.connect().then(function (c) {
175
176
  done = c;
176
- return c.db("test");
177
+ return c.db('test');
177
178
  });
178
179
  afterAll(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
179
180
  return tslib_1.__generator(this, function (_a) {
@@ -185,7 +186,7 @@ afterAll(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function
185
186
  function testMongo(key, what, focus) {
186
187
  var _this = this;
187
188
  if (focus === void 0) { focus = false; }
188
- db_tests_setup_1.itWithFocus(key + " - mongo", function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
189
+ db_tests_setup_1.itWithFocus(key + ' - mongo', function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
189
190
  var mongoDb, db, remult;
190
191
  var _this = this;
191
192
  return tslib_1.__generator(this, function (_a) {
@@ -196,22 +197,25 @@ function testMongo(key, what, focus) {
196
197
  db = new remult_mongo_1.MongoDataProvider(mongoDb, client);
197
198
  remult = new context_1.Remult(db);
198
199
  return [4 /*yield*/, what({
199
- db: db, remult: remult,
200
+ db: db,
201
+ remult: remult,
200
202
  createEntity: function (entity) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
201
203
  var repo, _a, _b;
202
204
  return tslib_1.__generator(this, function (_c) {
203
205
  switch (_c.label) {
204
206
  case 0:
205
207
  repo = remult.repo(entity);
206
- _b = (_a = mongoDb).collection;
208
+ _b = (_a = mongoDb)
209
+ .collection;
207
210
  return [4 /*yield*/, repo.metadata.getDbName()];
208
- case 1: return [4 /*yield*/, _b.apply(_a, [_c.sent()]).deleteMany({})];
211
+ case 1: return [4 /*yield*/, _b.apply(_a, [_c.sent()])
212
+ .deleteMany({})];
209
213
  case 2:
210
214
  _c.sent();
211
215
  return [2 /*return*/, repo];
212
216
  }
213
217
  });
214
- }); }
218
+ }); },
215
219
  })];
216
220
  case 2:
217
221
  _a.sent();
@@ -222,18 +226,20 @@ function testMongo(key, what, focus) {
222
226
  }
223
227
  exports.testMongo = testMongo;
224
228
  db_tests_setup_1.addDatabaseToTest(testMongo, db_tests_setup_1.TestDbs.mongo);
225
- it("test mongo without transaction", function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
229
+ it('test mongo without transaction', function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
226
230
  var client, mongoDb, db, remult, entity, repo, _a, _b, item, e_1_1, _c, _d;
227
231
  var e_1, _e;
228
232
  return tslib_1.__generator(this, function (_f) {
229
233
  switch (_f.label) {
230
234
  case 0:
231
- client = new mongodb_1.MongoClient("mongodb://localhost:27017/local");
235
+ client = new mongodb_1.MongoClient('mongodb://localhost:27017/local');
232
236
  return [4 /*yield*/, client.connect()];
233
237
  case 1:
234
238
  _f.sent();
235
239
  mongoDb = client.db('test');
236
- db = new remult_mongo_1.MongoDataProvider(mongoDb, client, { disableTransactions: true });
240
+ db = new remult_mongo_1.MongoDataProvider(mongoDb, client, {
241
+ disableTransactions: true,
242
+ });
237
243
  remult = new context_1.Remult(db);
238
244
  entity = /** @class */ (function () {
239
245
  function class_1() {
@@ -242,7 +248,10 @@ it("test mongo without transaction", function () { return tslib_1.__awaiter(void
242
248
  }
243
249
  return class_1;
244
250
  }());
245
- DecoratorReplacer_1.describeClass(entity, remult3_1.Entity("testNoTrans"), { id: remult3_1.Fields.number(), title: remult3_1.Fields.string() });
251
+ DecoratorReplacer_1.describeClass(entity, remult3_1.Entity('testNoTrans'), {
252
+ id: remult3_1.Fields.number(),
253
+ title: remult3_1.Fields.string(),
254
+ });
246
255
  repo = remult.repo(entity);
247
256
  _f.label = 2;
248
257
  case 2:
@@ -272,7 +281,7 @@ it("test mongo without transaction", function () { return tslib_1.__awaiter(void
272
281
  }
273
282
  finally { if (e_1) throw e_1.error; }
274
283
  return [7 /*endfinally*/];
275
- case 10: return [4 /*yield*/, repo.insert({ id: 1, title: "a" })];
284
+ case 10: return [4 /*yield*/, repo.insert({ id: 1, title: 'a' })];
276
285
  case 11:
277
286
  _f.sent();
278
287
  _f.label = 12;
@@ -281,7 +290,7 @@ it("test mongo without transaction", function () { return tslib_1.__awaiter(void
281
290
  return [4 /*yield*/, db.transaction(function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
282
291
  return tslib_1.__generator(this, function (_a) {
283
292
  switch (_a.label) {
284
- case 0: return [4 /*yield*/, repo.insert({ id: 2, title: "b" })];
293
+ case 0: return [4 /*yield*/, repo.insert({ id: 2, title: 'b' })];
285
294
  case 1:
286
295
  _a.sent();
287
296
  throw new Error();
@@ -1,4 +1,4 @@
1
- import { RestDataProviderHttpProvider } from "./data-interfaces";
1
+ import { RestDataProviderHttpProvider } from './data-interfaces';
2
2
  import { RestDataProviderHttpProviderUsingFetch } from './data-providers/rest-data-provider';
3
3
  export declare function buildRestDataProvider(provider: ExternalHttpProvider | typeof fetch): RestDataProviderHttpProviderUsingFetch | RestDataProviderHttpProvider;
4
4
  export declare function isExternalHttpProvider(item: any): boolean;
@@ -13,7 +13,7 @@ function buildRestDataProvider(provider) {
13
13
  }
14
14
  }
15
15
  if (!httpDataProvider) {
16
- if (typeof provider === "function") {
16
+ if (typeof provider === 'function') {
17
17
  httpDataProvider = new rest_data_provider_1.RestDataProviderHttpProviderUsingFetch(provider);
18
18
  }
19
19
  }
@@ -80,8 +80,9 @@ function retry(what) {
80
80
  case 3: return [2 /*return*/, _e.sent()];
81
81
  case 4:
82
82
  err_1 = _e.sent();
83
- if (!((((_a = err_1.message) === null || _a === void 0 ? void 0 : _a.startsWith("Error occurred while trying to proxy")) || ((_b = err_1.message) === null || _b === void 0 ? void 0 : _b.startsWith("Error occured while trying to proxy")) || ((_c = err_1.message) === null || _c === void 0 ? void 0 : _c.includes("http proxy error")) || ((_d = err_1.message) === null || _d === void 0 ? void 0 : _d.startsWith("Gateway Timeout")) ||
84
- err_1.status == 500) && i++ < 50)) return [3 /*break*/, 6];
83
+ if (!((((_a = err_1.message) === null || _a === void 0 ? void 0 : _a.startsWith('Error occurred while trying to proxy')) || ((_b = err_1.message) === null || _b === void 0 ? void 0 : _b.startsWith('Error occured while trying to proxy')) || ((_c = err_1.message) === null || _c === void 0 ? void 0 : _c.includes('http proxy error')) || ((_d = err_1.message) === null || _d === void 0 ? void 0 : _d.startsWith('Gateway Timeout')) ||
84
+ err_1.status == 500) &&
85
+ i++ < 50)) return [3 /*break*/, 6];
85
86
  return [4 /*yield*/, new Promise(function (res, req) {
86
87
  setTimeout(function () {
87
88
  res({});
@@ -101,17 +102,24 @@ exports.retry = retry;
101
102
  function toPromise(p) {
102
103
  var _this = this;
103
104
  var r;
104
- if (p["toPromise"] !== undefined) {
105
- r = p["toPromise"]();
105
+ if (p['toPromise'] !== undefined) {
106
+ r = p['toPromise']();
106
107
  }
107
108
  //@ts-ignore
108
109
  else
109
110
  r = p;
110
- return r.then(function (x) {
111
- if (x && (x.status == 200 || x.status == 201) && x.headers && x.request && x.data) //for axios
111
+ return r
112
+ .then(function (x) {
113
+ if (x &&
114
+ (x.status == 200 || x.status == 201) &&
115
+ x.headers &&
116
+ x.request &&
117
+ x.data)
118
+ //for axios
112
119
  return x.data;
113
120
  return x;
114
- }).catch(function (ex) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
121
+ })
122
+ .catch(function (ex) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
115
123
  return tslib_1.__generator(this, function (_a) {
116
124
  switch (_a.label) {
117
125
  case 0: return [4 /*yield*/, processHttpException(ex)];
@@ -133,7 +141,7 @@ function processHttpException(ex) {
133
141
  if (z.error)
134
142
  error = z.error;
135
143
  else if (z.isAxiosError) {
136
- if (typeof ((_a = z.response) === null || _a === void 0 ? void 0 : _a.data) === "string")
144
+ if (typeof ((_a = z.response) === null || _a === void 0 ? void 0 : _a.data) === 'string')
137
145
  error = z.response.data;
138
146
  else
139
147
  error = (_b = z === null || z === void 0 ? void 0 : z.response) === null || _b === void 0 ? void 0 : _b.data;
@@ -141,7 +149,7 @@ function processHttpException(ex) {
141
149
  if (!error)
142
150
  error = z.message;
143
151
  if (z.status == 0 && z.error.isTrusted)
144
- error = "Network Error";
152
+ error = 'Network Error';
145
153
  if (typeof error === 'string') {
146
154
  error = {
147
155
  message: error,
@@ -3,9 +3,9 @@ import { Allowed, AllowedForInstance } from './context';
3
3
  import { EntityMetadata, FieldRef, OmitEB } from './remult3';
4
4
  export interface FieldOptions<entityType = any, valueType = any> {
5
5
  /** A human readable name for the field. Can be used to achieve a consistent caption for a field throughout the app
6
- * @example
7
- * <input placeholder={taskRepo.metadata.fields.title.caption}/>
8
- */
6
+ * @example
7
+ * <input placeholder={taskRepo.metadata.fields.title.caption}/>
8
+ */
9
9
  caption?: string;
10
10
  /** If it can store null in the database */
11
11
  allowNull?: boolean;
@@ -13,7 +13,7 @@ export interface FieldOptions<entityType = any, valueType = any> {
13
13
  * @see [allowed](http://remult.dev/docs/allowed.html)*/
14
14
  includeInApi?: Allowed;
15
15
  /** If this field data can be updated in the api.
16
- * @see [allowed](http://remult.dev/docs/allowed.html)*/
16
+ * @see [allowed](http://remult.dev/docs/allowed.html)*/
17
17
  allowApiUpdate?: AllowedForInstance<entityType>;
18
18
  /** An arrow function that'll be used to perform validations on it
19
19
  * @example
@@ -35,9 +35,9 @@ export interface FieldOptions<entityType = any, valueType = any> {
35
35
  * }
36
36
  * })
37
37
  */
38
- validate?: ((entity: entityType, fieldRef: FieldRef<entityType, valueType>) => (any | Promise<any>)) | ((entity: entityType, fieldRef: FieldRef<entityType, valueType>) => (any | Promise<any>))[];
38
+ validate?: ((entity: entityType, fieldRef: FieldRef<entityType, valueType>) => any | Promise<any>) | ((entity: entityType, fieldRef: FieldRef<entityType, valueType>) => any | Promise<any>)[];
39
39
  /** Will be fired before this field is saved to the server/database */
40
- saving?: ((entity: entityType, fieldRef: FieldRef<entityType, valueType>) => (any | Promise<any>));
40
+ saving?: (entity: entityType, fieldRef: FieldRef<entityType, valueType>) => any | Promise<any>;
41
41
  /** An expression that will determine this fields value on the backend and be provided to the front end*/
42
42
  serverExpression?: (entity: entityType) => valueType | Promise<valueType>;
43
43
  /** The name of the column in the database that holds the data for this field. If no name is set, the key will be used instead. */
@@ -51,7 +51,7 @@ export interface FieldOptions<entityType = any, valueType = any> {
51
51
  * titleLength = 0;
52
52
  * @Fields.string()
53
53
  * title='';
54
- */
54
+ */
55
55
  sqlExpression?: string | ((entity: EntityMetadata<entityType>) => string | Promise<string>);
56
56
  /** For fields that shouldn't be part of an update or insert statement */
57
57
  dbReadOnly?: boolean;
@@ -100,7 +100,7 @@ export interface FieldMetadata<valueType = any, entityType = any> {
100
100
  * @example
101
101
  * const taskRepo = remult.repo(Task);
102
102
  * Task == taskRepo.metadata.fields.title.target //will return true
103
- */
103
+ */
104
104
  readonly target: ClassType<valueType>;
105
105
  /** Returns the dbName - based on it's `dbName` option and it's `sqlExpression` option */
106
106
  getDbName(): Promise<string>;
@@ -113,7 +113,7 @@ export interface FieldMetadata<valueType = any, entityType = any> {
113
113
  /** Get the display value for a specific item
114
114
  * @example
115
115
  * repo.fields.createDate.displayValue(task) //will display the date as defined in the `displayValue` option defined for it.
116
- */
116
+ */
117
117
  displayValue(item: Partial<OmitEB<entityType>>): string;
118
118
  apiUpdateAllowed(item?: Partial<OmitEB<entityType>>): boolean;
119
119
  readonly includedInApi: boolean;
package/src/column.d.ts CHANGED
@@ -31,9 +31,13 @@ export declare class CompoundIdField implements FieldMetadata<string> {
31
31
  export declare class LookupColumn<T> {
32
32
  private repository;
33
33
  id: idType<T>;
34
+ toJson(): any;
34
35
  setId(val: any): void;
35
36
  waitLoadOf(id: any): Promise<T>;
36
37
  get(id: any): any;
38
+ storedItem: {
39
+ item: T;
40
+ };
37
41
  set(item: T): void;
38
42
  constructor(repository: RepositoryImplementation<T>, id: idType<T>);
39
43
  get item(): T;
package/src/column.js CHANGED
@@ -7,9 +7,12 @@ var filter_interfaces_1 = require("./filter/filter-interfaces");
7
7
  var remult3_1 = require("./remult3");
8
8
  function makeTitle(name) {
9
9
  // insert a space before all caps
10
- return name.replace(/([A-Z])/g, ' $1')
10
+ return (name
11
+ .replace(/([A-Z])/g, ' $1')
11
12
  // uppercase the first character
12
- .replace(/^./, function (str) { return str.toUpperCase(); }).replace('Email', 'eMail').replace(" I D", " ID");
13
+ .replace(/^./, function (str) { return str.toUpperCase(); })
14
+ .replace('Email', 'eMail')
15
+ .replace(' I D', ' ID'));
13
16
  }
14
17
  exports.makeTitle = makeTitle;
15
18
  var CompoundIdField = /** @class */ (function () {
@@ -33,10 +36,10 @@ var CompoundIdField = /** @class */ (function () {
33
36
  throw new Error('Method not implemented.');
34
37
  };
35
38
  CompoundIdField.prototype.getDbName = function () {
36
- return Promise.resolve("");
39
+ return Promise.resolve('');
37
40
  };
38
41
  CompoundIdField.prototype.getId = function (instance) {
39
- var r = "";
42
+ var r = '';
40
43
  this.fields.forEach(function (c) {
41
44
  if (r.length > 0)
42
45
  r += ',';
@@ -46,7 +49,7 @@ var CompoundIdField = /** @class */ (function () {
46
49
  };
47
50
  Object.defineProperty(CompoundIdField.prototype, "valueConverter", {
48
51
  get: function () {
49
- throw new Error("cant get value converter of compound id");
52
+ throw new Error('cant get value converter of compound id');
50
53
  },
51
54
  enumerable: false,
52
55
  configurable: true
@@ -84,6 +87,11 @@ var LookupColumn = /** @class */ (function () {
84
87
  this.repository = repository;
85
88
  this.id = id;
86
89
  }
90
+ LookupColumn.prototype.toJson = function () {
91
+ if (this.item === null)
92
+ return null;
93
+ return this.repository.toJson(this.item);
94
+ };
87
95
  LookupColumn.prototype.setId = function (val) {
88
96
  if (this.repository.metadata.idMetadata.field.valueType == Number)
89
97
  val = +val;
@@ -100,8 +108,9 @@ var LookupColumn = /** @class */ (function () {
100
108
  return this.repository.getCachedById(id);
101
109
  };
102
110
  LookupColumn.prototype.set = function (item) {
111
+ this.storedItem = undefined;
103
112
  if (item) {
104
- if (typeof item === "string" || typeof item === "number")
113
+ if (typeof item === 'string' || typeof item === 'number')
105
114
  this.id = item;
106
115
  else {
107
116
  var eo = remult3_1.getEntityRef(item, false);
@@ -110,6 +119,7 @@ var LookupColumn = /** @class */ (function () {
110
119
  this.id = eo.getId();
111
120
  }
112
121
  else {
122
+ this.storedItem = { item: item };
113
123
  this.id = item[this.repository.metadata.idMetadata.field.key];
114
124
  }
115
125
  }
@@ -123,6 +133,8 @@ var LookupColumn = /** @class */ (function () {
123
133
  };
124
134
  Object.defineProperty(LookupColumn.prototype, "item", {
125
135
  get: function () {
136
+ if (this.storedItem)
137
+ return this.storedItem.item;
126
138
  return this.get(this.id);
127
139
  },
128
140
  enumerable: false,
@@ -160,12 +172,12 @@ var OneToMany = /** @class */ (function () {
160
172
  return [2 /*return*/, this._currentPromise];
161
173
  if (this._items === undefined)
162
174
  this._items = [];
163
- return [2 /*return*/, this._currentPromise = this.find().then(function (x) {
175
+ return [2 /*return*/, (this._currentPromise = this.find().then(function (x) {
164
176
  var _a;
165
177
  _this._items.splice(0);
166
178
  (_a = _this._items).push.apply(_a, tslib_1.__spread(x));
167
179
  return _this._items;
168
- })];
180
+ }))];
169
181
  });
170
182
  });
171
183
  };
package/src/context.d.ts CHANGED
@@ -1,9 +1,18 @@
1
- import { DataProvider } from "./data-interfaces";
2
- import { EntityMetadata, EntityRef, FindOptions, Repository } from "./remult3";
3
- import { ClassType } from "../classType";
4
- import type { SubscriptionServer } from "./live-query/SubscriptionServer";
5
- import { ExternalHttpProvider } from "./buildRestDataProvider";
6
- import { SubscriptionClient, Unsubscribe } from "./live-query/SubscriptionChannel";
1
+ import { DataProvider } from './data-interfaces';
2
+ import { EntityMetadata, EntityRef, FindOptions, Repository } from './remult3';
3
+ import { ClassType } from '../classType';
4
+ import type { SubscriptionServer } from './live-query/SubscriptionServer';
5
+ import { ExternalHttpProvider } from './buildRestDataProvider';
6
+ import { SubscriptionClient, Unsubscribe } from './live-query/SubscriptionChannel';
7
+ export declare class RemultAsyncLocalStorage {
8
+ private readonly remultObjectStorage;
9
+ static enable(): void;
10
+ static disable(): void;
11
+ constructor(remultObjectStorage: import('async_hooks').AsyncLocalStorage<Remult>);
12
+ run(remult: Remult, callback: VoidFunction): void;
13
+ getRemult(): Remult;
14
+ static instance: RemultAsyncLocalStorage;
15
+ }
7
16
  export declare function isBackend(): boolean;
8
17
  export declare class Remult {
9
18
  /**Return's a `Repository` of the specific entity type
@@ -48,8 +57,8 @@ export declare class Remult {
48
57
  * @param backendMethod - the backend method to call
49
58
  * @param classInstance - the class instance of the backend method, for static backend methods use undefined
50
59
  * @param args - the arguments to send to the backend method
51
- */
52
- call<T extends ((...args: any[]) => Promise<any>)>(backendMethod: T, classInstance?: any, ...args: GetArguments<T>): ReturnType<T>;
60
+ */
61
+ call<T extends (...args: any[]) => Promise<any>>(backendMethod: T, classInstance?: any, ...args: GetArguments<T>): ReturnType<T>;
53
62
  /** A helper callback that can be used to debug and trace all find operations. Useful in debugging scenarios */
54
63
  static onFind: (metadata: EntityMetadata, options: FindOptions<any>) => void;
55
64
  clearAllCache(): any;
@@ -59,6 +68,9 @@ export declare class Remult {
59
68
  readonly context: RemultContext;
60
69
  /** The api client that will be used by `remult` to perform calls to the `api` */
61
70
  apiClient: ApiClient;
71
+ static run<T>(callback: () => T, options: {
72
+ dataProvider: DataProvider;
73
+ }): T;
62
74
  }
63
75
  export declare type GetArguments<T> = T extends (...args: infer FirstArgument) => any ? FirstArgument : never;
64
76
  export interface RemultContext {