remult 0.21.1 → 0.22.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (451) hide show
  1. package/README.md +47 -46
  2. package/SseSubscriptionServer.js +9 -9
  3. package/ably.js +1 -1
  4. package/esm/SseSubscriptionServer.js +11 -11
  5. package/esm/ably.js +2 -2
  6. package/esm/angular/interfaces/index.d.ts +1 -0
  7. package/esm/angular/interfaces/index.js +1 -0
  8. package/esm/angular/interfaces/src/column-collection.d.ts +70 -0
  9. package/esm/angular/interfaces/src/column-collection.js +341 -0
  10. package/esm/angular/interfaces/src/data-area-settings.d.ts +15 -0
  11. package/esm/angular/interfaces/src/data-area-settings.js +35 -0
  12. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +36 -0
  13. package/esm/angular/interfaces/src/data-control-interfaces.js +57 -0
  14. package/esm/angular/interfaces/src/dataList.d.ts +13 -0
  15. package/esm/angular/interfaces/src/dataList.js +42 -0
  16. package/esm/angular/interfaces/src/filter-helper.d.ts +13 -0
  17. package/esm/angular/interfaces/src/filter-helper.js +59 -0
  18. package/esm/angular/interfaces/src/grid-settings.d.ts +145 -0
  19. package/esm/angular/interfaces/src/grid-settings.js +387 -0
  20. package/esm/angular/interfaces/src/public_api.d.ts +4 -0
  21. package/esm/angular/interfaces/src/public_api.js +4 -0
  22. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +4 -0
  23. package/esm/angular/src/angular/RemultAngularPluginsService.js +3 -0
  24. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +49 -0
  25. package/esm/angular/src/angular/data-control/data-control2.component.js +138 -0
  26. package/esm/core/SseSubscriptionServer.d.ts +33 -0
  27. package/esm/core/SseSubscriptionServer.js +107 -0
  28. package/esm/core/assign.d.ts +1 -0
  29. package/esm/core/assign.js +5 -0
  30. package/esm/core/classType.d.ts +3 -0
  31. package/esm/core/classType.js +1 -0
  32. package/esm/core/index.d.ts +27 -0
  33. package/esm/core/index.js +25 -0
  34. package/esm/core/inputTypes.d.ts +9 -0
  35. package/esm/core/inputTypes.js +9 -0
  36. package/esm/core/live-query/data-provider-live-query-storage.d.ts +22 -0
  37. package/esm/core/live-query/data-provider-live-query-storage.js +71 -0
  38. package/esm/core/postgres/index.d.ts +2 -0
  39. package/esm/core/postgres/index.js +2 -0
  40. package/esm/core/postgres/postgres-data-provider.d.ts +36 -0
  41. package/esm/core/postgres/postgres-data-provider.js +120 -0
  42. package/esm/core/postgres/schema-builder.d.ts +17 -0
  43. package/esm/core/postgres/schema-builder.js +153 -0
  44. package/esm/core/remult-fresh.d.ts +17 -0
  45. package/esm/core/remult-fresh.js +29 -0
  46. package/esm/core/remult-knex/index.d.ts +30 -0
  47. package/esm/core/remult-knex/index.js +446 -0
  48. package/esm/core/remult-mongo.d.ts +24 -0
  49. package/esm/core/remult-mongo.js +254 -0
  50. package/esm/core/server/JsonEntityFileStorage.d.ts +10 -0
  51. package/esm/core/server/JsonEntityFileStorage.js +25 -0
  52. package/esm/core/server/core.d.ts +4 -0
  53. package/esm/core/server/core.js +4 -0
  54. package/esm/core/server/expressBridge.d.ts +182 -0
  55. package/esm/core/server/expressBridge.js +938 -0
  56. package/esm/core/server/index.d.ts +6 -0
  57. package/esm/core/server/index.js +9 -0
  58. package/esm/core/server/initAsyncHooks.d.ts +1 -0
  59. package/esm/core/server/initAsyncHooks.js +9 -0
  60. package/esm/core/server/initDataProvider.d.ts +2 -0
  61. package/esm/core/server/initDataProvider.js +14 -0
  62. package/esm/core/src/__EntityValueProvider.d.ts +11 -0
  63. package/esm/core/src/__EntityValueProvider.js +1 -0
  64. package/esm/core/src/__RowsOfDataForTesting.d.ts +3 -0
  65. package/esm/core/src/__RowsOfDataForTesting.js +1 -0
  66. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +6 -0
  67. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +147 -0
  68. package/esm/core/src/backend-tests/my-test.backend-spec.d.ts +1 -0
  69. package/esm/core/src/backend-tests/my-test.backend-spec.js +197 -0
  70. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +1 -0
  71. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +167 -0
  72. package/esm/core/src/buildRestDataProvider.d.ts +31 -0
  73. package/esm/core/src/buildRestDataProvider.js +113 -0
  74. package/esm/core/src/column-interfaces.d.ts +154 -0
  75. package/esm/core/src/column-interfaces.js +7 -0
  76. package/esm/core/src/column.d.ts +58 -0
  77. package/esm/core/src/column.js +174 -0
  78. package/esm/core/src/context.d.ts +134 -0
  79. package/esm/core/src/context.js +286 -0
  80. package/esm/core/src/data-api.d.ts +39 -0
  81. package/esm/core/src/data-api.js +279 -0
  82. package/esm/core/src/data-interfaces.d.ts +41 -0
  83. package/esm/core/src/data-interfaces.js +12 -0
  84. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +22 -0
  85. package/esm/core/src/data-providers/array-entity-data-provider.js +252 -0
  86. package/esm/core/src/data-providers/in-memory-database.d.ts +9 -0
  87. package/esm/core/src/data-providers/in-memory-database.js +14 -0
  88. package/esm/core/src/data-providers/json-data-provider.d.ts +12 -0
  89. package/esm/core/src/data-providers/json-data-provider.js +55 -0
  90. package/esm/core/src/data-providers/rest-data-provider.d.ts +49 -0
  91. package/esm/core/src/data-providers/rest-data-provider.js +256 -0
  92. package/esm/core/src/data-providers/sql-database.d.ts +33 -0
  93. package/esm/core/src/data-providers/sql-database.js +384 -0
  94. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +24 -0
  95. package/esm/core/src/data-providers/web-sql-data-provider.js +143 -0
  96. package/esm/core/src/entity.d.ts +91 -0
  97. package/esm/core/src/entity.js +1 -0
  98. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +50 -0
  99. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +150 -0
  100. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +1 -0
  101. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +1 -0
  102. package/esm/core/src/filter/filter-interfaces.d.ts +85 -0
  103. package/esm/core/src/filter/filter-interfaces.js +477 -0
  104. package/esm/core/src/live-query/LiveQueryClient.d.ts +20 -0
  105. package/esm/core/src/live-query/LiveQueryClient.js +188 -0
  106. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +5 -0
  107. package/esm/core/src/live-query/SseSubscriptionClient.js +86 -0
  108. package/esm/core/src/live-query/SubscriptionChannel.d.ts +72 -0
  109. package/esm/core/src/live-query/SubscriptionChannel.js +123 -0
  110. package/esm/core/src/live-query/SubscriptionServer.d.ts +53 -0
  111. package/esm/core/src/live-query/SubscriptionServer.js +111 -0
  112. package/esm/core/src/live-query/live-query-tests.spec.d.ts +6 -0
  113. package/esm/core/src/live-query/live-query-tests.spec.js +952 -0
  114. package/esm/core/src/remult-proxy.d.ts +35 -0
  115. package/esm/core/src/remult-proxy.js +113 -0
  116. package/esm/core/src/remult3/DecoratorReplacer.d.ts +10 -0
  117. package/esm/core/src/remult3/DecoratorReplacer.js +20 -0
  118. package/esm/core/src/remult3/RepositoryImplementation.d.ts +355 -0
  119. package/esm/core/src/remult3/RepositoryImplementation.js +2109 -0
  120. package/esm/core/src/remult3/index.d.ts +2 -0
  121. package/esm/core/src/remult3/index.js +2 -0
  122. package/esm/core/src/remult3/remult3.d.ts +395 -0
  123. package/esm/core/src/remult3/remult3.js +2 -0
  124. package/esm/core/src/server-action.d.ts +81 -0
  125. package/esm/core/src/server-action.js +394 -0
  126. package/esm/core/src/shared-tests/db-tests-setup.d.ts +32 -0
  127. package/esm/core/src/shared-tests/db-tests-setup.js +78 -0
  128. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +25 -0
  129. package/esm/core/src/shared-tests/db-tests.db-tests.js +810 -0
  130. package/esm/core/src/shared-tests/deleteAll.d.ts +2 -0
  131. package/esm/core/src/shared-tests/deleteAll.js +4 -0
  132. package/esm/core/src/shared-tests/entityWithValidations.d.ts +14 -0
  133. package/esm/core/src/shared-tests/entityWithValidations.js +43 -0
  134. package/esm/core/src/shared-tests/index.d.ts +4 -0
  135. package/esm/core/src/shared-tests/index.js +4 -0
  136. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +1 -0
  137. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +67 -0
  138. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +10 -0
  139. package/esm/core/src/shared-tests/test-special-value.spec.js +73 -0
  140. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +1 -0
  141. package/esm/core/src/shared-tests/test-update-with-null.spec.js +31 -0
  142. package/esm/core/src/sort.d.ts +16 -0
  143. package/esm/core/src/sort.js +103 -0
  144. package/esm/core/src/sql-command.d.ts +19 -0
  145. package/esm/core/src/sql-command.js +1 -0
  146. package/esm/core/src/test.d.ts +3 -0
  147. package/esm/core/src/test.js +12 -0
  148. package/esm/core/src/tests/Done.d.ts +5 -0
  149. package/esm/core/src/tests/Done.js +9 -0
  150. package/esm/core/src/tests/RowProvider.spec.d.ts +16 -0
  151. package/esm/core/src/tests/RowProvider.spec.js +631 -0
  152. package/esm/core/src/tests/TestDataApiResponse.d.ts +10 -0
  153. package/esm/core/src/tests/TestDataApiResponse.js +22 -0
  154. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +8 -0
  155. package/esm/core/src/tests/basicRowFunctionality.spec.js +2103 -0
  156. package/esm/core/src/tests/c.d.ts +8 -0
  157. package/esm/core/src/tests/c.js +13 -0
  158. package/esm/core/src/tests/createData.d.ts +7 -0
  159. package/esm/core/src/tests/createData.js +22 -0
  160. package/esm/core/src/tests/d.d.ts +6 -0
  161. package/esm/core/src/tests/d.js +11 -0
  162. package/esm/core/src/tests/dWithPrefilter.d.ts +7 -0
  163. package/esm/core/src/tests/dWithPrefilter.js +18 -0
  164. package/esm/core/src/tests/entityForCustomFilter.d.ts +16 -0
  165. package/esm/core/src/tests/entityForCustomFilter.js +33 -0
  166. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +5 -0
  167. package/esm/core/src/tests/entityWithValidationsOnColumn.js +13 -0
  168. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +4 -0
  169. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +37 -0
  170. package/esm/core/src/tests/h.d.ts +6 -0
  171. package/esm/core/src/tests/h.js +24 -0
  172. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +1 -0
  173. package/esm/core/src/tests/remult-3-basic-tests.spec.js +236 -0
  174. package/esm/core/src/tests/remult-3-entities.d.ts +23 -0
  175. package/esm/core/src/tests/remult-3-entities.js +39 -0
  176. package/esm/core/src/tests/tasks.d.ts +6 -0
  177. package/esm/core/src/tests/tasks.js +10 -0
  178. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  179. package/esm/core/src/tests/test-context-as-storage.spec.js +1 -0
  180. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +1 -0
  181. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +389 -0
  182. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +5 -0
  183. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +152 -0
  184. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +1 -0
  185. package/esm/core/src/tests/test-decorator-precedence.spec.js +38 -0
  186. package/esm/core/src/tests/test-default-value.spec.d.ts +1 -0
  187. package/esm/core/src/tests/test-default-value.spec.js +33 -0
  188. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +14 -0
  189. package/esm/core/src/tests/test-entity-inheritance.spec.js +82 -0
  190. package/esm/core/src/tests/test-exceptions.spec.d.ts +1 -0
  191. package/esm/core/src/tests/test-exceptions.spec.js +375 -0
  192. package/esm/core/src/tests/test-json.spec.d.ts +1 -0
  193. package/esm/core/src/tests/test-json.spec.js +115 -0
  194. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +9 -0
  195. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +809 -0
  196. package/esm/core/src/tests/test-non-active-record.spec.d.ts +1 -0
  197. package/esm/core/src/tests/test-non-active-record.spec.js +66 -0
  198. package/esm/core/src/tests/test-object-column.spec.d.ts +1 -0
  199. package/esm/core/src/tests/test-object-column.spec.js +189 -0
  200. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +1 -0
  201. package/esm/core/src/tests/test-paged-foreach.spec.js +328 -0
  202. package/esm/core/src/tests/test-remult-angular.spec.d.ts +1 -0
  203. package/esm/core/src/tests/test-remult-angular.spec.js +23 -0
  204. package/esm/core/src/tests/test-server-controller.spec.d.ts +7 -0
  205. package/esm/core/src/tests/test-server-controller.spec.js +489 -0
  206. package/esm/core/src/tests/test-server-expressions.spec.d.ts +1 -0
  207. package/esm/core/src/tests/test-server-expressions.spec.js +178 -0
  208. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +1 -0
  209. package/esm/core/src/tests/test-server-method-on-entity.spec.js +306 -0
  210. package/esm/core/src/tests/test-sql-expression.spec.d.ts +5 -0
  211. package/esm/core/src/tests/test-sql-expression.spec.js +205 -0
  212. package/esm/core/src/tests/test-sql.spec.d.ts +1 -0
  213. package/esm/core/src/tests/test-sql.spec.js +170 -0
  214. package/esm/core/src/tests/test-subscribe.spec.d.ts +1 -0
  215. package/esm/core/src/tests/test-subscribe.spec.js +135 -0
  216. package/esm/core/src/tests/test-type-recovery.spec.d.ts +1 -0
  217. package/esm/core/src/tests/test-type-recovery.spec.js +49 -0
  218. package/esm/core/src/tests/test-where-api.spec.d.ts +1 -0
  219. package/esm/core/src/tests/test-where-api.spec.js +434 -0
  220. package/esm/core/src/tests/testHelper.spec.d.ts +36 -0
  221. package/esm/core/src/tests/testHelper.spec.js +226 -0
  222. package/esm/core/src/tests/testModel/models.d.ts +16 -0
  223. package/esm/core/src/tests/testModel/models.js +25 -0
  224. package/esm/core/src/validators.d.ts +14 -0
  225. package/esm/core/src/validators.js +33 -0
  226. package/esm/core/src/valueConverters.d.ts +13 -0
  227. package/esm/core/src/valueConverters.js +197 -0
  228. package/esm/core/urlBuilder.d.ts +6 -0
  229. package/esm/core/urlBuilder.js +20 -0
  230. package/esm/graphql.js +194 -73
  231. package/esm/index.d.ts +10 -10
  232. package/esm/index.js +8 -8
  233. package/esm/inputTypes.js +1 -1
  234. package/esm/live-query/data-provider-live-query-storage.d.ts +3 -3
  235. package/esm/live-query/data-provider-live-query-storage.js +12 -9
  236. package/esm/myLog.js +2 -2
  237. package/esm/postgres/postgres-data-provider.d.ts +2 -2
  238. package/esm/postgres/postgres-data-provider.js +20 -14
  239. package/esm/postgres/schema-builder.d.ts +1 -1
  240. package/esm/postgres/schema-builder.js +28 -21
  241. package/esm/remult-express.js +2 -2
  242. package/esm/remult-fastify.js +9 -7
  243. package/esm/remult-fresh.d.ts +1 -1
  244. package/esm/remult-fresh.js +5 -8
  245. package/esm/remult-knex/index.d.ts +4 -4
  246. package/esm/remult-knex/index.js +75 -59
  247. package/esm/remult-mongo.js +36 -27
  248. package/esm/remult-next.d.ts +3 -3
  249. package/esm/remult-next.js +17 -11
  250. package/esm/remult-sveltekit.js +10 -10
  251. package/esm/server/JsonEntityFileStorage.js +3 -1
  252. package/esm/server/core.d.ts +2 -2
  253. package/esm/server/core.js +2 -2
  254. package/esm/server/expressBridge.d.ts +3 -12
  255. package/esm/server/expressBridge.js +265 -278
  256. package/esm/server/index.d.ts +2 -2
  257. package/esm/server/index.js +5 -2
  258. package/esm/server/initAsyncHooks.js +1 -1
  259. package/esm/server/initDataProvider.js +1 -1
  260. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
  261. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +47 -38
  262. package/esm/src/buildRestDataProvider.d.ts +1 -1
  263. package/esm/src/buildRestDataProvider.js +21 -13
  264. package/esm/src/column-interfaces.d.ts +9 -9
  265. package/esm/src/column.d.ts +4 -0
  266. package/esm/src/column.js +23 -11
  267. package/esm/src/context.d.ts +20 -8
  268. package/esm/src/context.js +65 -24
  269. package/esm/src/data-api.d.ts +0 -1
  270. package/esm/src/data-api.js +38 -37
  271. package/esm/src/data-interfaces.d.ts +1 -1
  272. package/esm/src/data-interfaces.js +1 -1
  273. package/esm/src/data-providers/array-entity-data-provider.js +9 -9
  274. package/esm/src/data-providers/in-memory-database.d.ts +1 -1
  275. package/esm/src/data-providers/in-memory-database.js +3 -1
  276. package/esm/src/data-providers/json-data-provider.js +8 -8
  277. package/esm/src/data-providers/rest-data-provider.d.ts +1 -1
  278. package/esm/src/data-providers/rest-data-provider.js +52 -36
  279. package/esm/src/data-providers/sql-database.d.ts +5 -5
  280. package/esm/src/data-providers/sql-database.js +53 -36
  281. package/esm/src/data-providers/web-sql-data-provider.d.ts +4 -4
  282. package/esm/src/data-providers/web-sql-data-provider.js +15 -13
  283. package/esm/src/entity.d.ts +24 -24
  284. package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +4 -4
  285. package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +35 -20
  286. package/esm/src/filter/filter-interfaces.d.ts +7 -7
  287. package/esm/src/filter/filter-interfaces.js +108 -88
  288. package/esm/src/live-query/LiveQueryClient.js +37 -29
  289. package/esm/src/live-query/SseSubscriptionClient.d.ts +1 -1
  290. package/esm/src/live-query/SseSubscriptionClient.js +14 -14
  291. package/esm/src/live-query/SubscriptionChannel.d.ts +3 -3
  292. package/esm/src/live-query/SubscriptionChannel.js +27 -25
  293. package/esm/src/live-query/SubscriptionServer.js +24 -20
  294. package/esm/src/remult-proxy.d.ts +1 -1
  295. package/esm/src/remult-proxy.js +87 -29
  296. package/esm/src/remult3/DecoratorReplacer.d.ts +2 -2
  297. package/esm/src/remult3/RepositoryImplementation.d.ts +51 -41
  298. package/esm/src/remult3/RepositoryImplementation.js +336 -206
  299. package/esm/src/remult3/remult3.d.ts +56 -51
  300. package/esm/src/remult3/remult3.js +0 -1
  301. package/esm/src/server-action.d.ts +12 -5
  302. package/esm/src/server-action.js +79 -53
  303. package/esm/src/shared-tests/db-tests-setup.d.ts +8 -8
  304. package/esm/src/shared-tests/db-tests-setup.js +10 -10
  305. package/esm/src/shared-tests/db-tests.db-tests.d.ts +1 -1
  306. package/esm/src/shared-tests/db-tests.db-tests.js +279 -177
  307. package/esm/src/shared-tests/deleteAll.d.ts +1 -1
  308. package/esm/src/shared-tests/deleteAll.js +1 -1
  309. package/esm/src/shared-tests/entityWithValidations.js +1 -1
  310. package/esm/src/shared-tests/test-custom-id-column.spec.js +4 -4
  311. package/esm/src/shared-tests/test-special-value.spec.js +12 -12
  312. package/esm/src/shared-tests/test-update-with-null.spec.js +10 -6
  313. package/esm/src/sort.d.ts +2 -2
  314. package/esm/src/sort.js +12 -10
  315. package/esm/src/tests/TestDataApiResponse.d.ts +1 -1
  316. package/esm/src/tests/TestDataApiResponse.js +3 -4
  317. package/esm/src/tests/createData.js +2 -2
  318. package/esm/src/tests/d.js +1 -1
  319. package/esm/src/tests/dWithPrefilter.js +1 -1
  320. package/esm/src/tests/entityForCustomFilter.d.ts +4 -4
  321. package/esm/src/tests/entityForCustomFilter.js +12 -4
  322. package/esm/src/tests/entityWithValidationsOnColumn.js +1 -1
  323. package/esm/src/tests/frontend-database-tests-setup.spec.d.ts +1 -1
  324. package/esm/src/tests/frontend-database-tests-setup.spec.js +14 -14
  325. package/esm/src/tests/h.js +4 -4
  326. package/esm/src/tests/remult-3-entities.d.ts +2 -2
  327. package/esm/src/tests/remult-3-entities.js +6 -6
  328. package/esm/src/tests/testHelper.spec.d.ts +7 -7
  329. package/esm/src/tests/testHelper.spec.js +50 -39
  330. package/esm/src/tests/testModel/models.js +4 -4
  331. package/esm/src/validators.d.ts +1 -1
  332. package/esm/src/validators.js +10 -7
  333. package/esm/src/valueConverters.d.ts +1 -1
  334. package/esm/src/valueConverters.js +68 -55
  335. package/esm/test-servers/shared/Task.d.ts +9 -0
  336. package/esm/test-servers/shared/Task.js +32 -0
  337. package/esm/test.d.ts +5 -0
  338. package/esm/test.js +6 -0
  339. package/graphql.js +157 -45
  340. package/index.d.ts +10 -10
  341. package/inputTypes.js +1 -1
  342. package/live-query/data-provider-live-query-storage.d.ts +3 -3
  343. package/live-query/data-provider-live-query-storage.js +7 -4
  344. package/myLog.js +2 -2
  345. package/package.json +2 -2
  346. package/postgres/postgres-data-provider.d.ts +2 -2
  347. package/postgres/postgres-data-provider.js +21 -16
  348. package/postgres/schema-builder.d.ts +1 -1
  349. package/postgres/schema-builder.js +22 -15
  350. package/remult-express.js +1 -1
  351. package/remult-fastify.js +7 -7
  352. package/remult-fresh.d.ts +1 -1
  353. package/remult-fresh.js +1 -4
  354. package/remult-knex/index.d.ts +4 -4
  355. package/remult-knex/index.js +50 -35
  356. package/remult-mongo.js +33 -23
  357. package/remult-next.d.ts +3 -3
  358. package/remult-next.js +15 -11
  359. package/remult-sveltekit.js +14 -15
  360. package/server/core.d.ts +2 -2
  361. package/server/expressBridge.d.ts +3 -12
  362. package/server/expressBridge.js +278 -279
  363. package/server/index.d.ts +2 -2
  364. package/server/index.js +5 -2
  365. package/server/initAsyncHooks.js +2 -2
  366. package/server/initDataProvider.js +1 -1
  367. package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
  368. package/src/backend-tests/backend-database-test-setup.backend-spec.js +40 -31
  369. package/src/buildRestDataProvider.d.ts +1 -1
  370. package/src/buildRestDataProvider.js +18 -10
  371. package/src/column-interfaces.d.ts +9 -9
  372. package/src/column.d.ts +4 -0
  373. package/src/column.js +20 -8
  374. package/src/context.d.ts +20 -8
  375. package/src/context.js +61 -18
  376. package/src/data-api.d.ts +0 -1
  377. package/src/data-api.js +40 -43
  378. package/src/data-interfaces.d.ts +1 -1
  379. package/src/data-providers/array-entity-data-provider.js +2 -2
  380. package/src/data-providers/in-memory-database.d.ts +1 -1
  381. package/src/data-providers/in-memory-database.js +3 -1
  382. package/src/data-providers/json-data-provider.js +33 -15
  383. package/src/data-providers/rest-data-provider.d.ts +1 -1
  384. package/src/data-providers/rest-data-provider.js +47 -32
  385. package/src/data-providers/sql-database.d.ts +5 -5
  386. package/src/data-providers/sql-database.js +41 -24
  387. package/src/data-providers/web-sql-data-provider.d.ts +4 -4
  388. package/src/data-providers/web-sql-data-provider.js +10 -8
  389. package/src/entity.d.ts +24 -24
  390. package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +4 -4
  391. package/src/filter/filter-consumer-bridge-to-sql-request.js +34 -17
  392. package/src/filter/filter-interfaces.d.ts +7 -7
  393. package/src/filter/filter-interfaces.js +73 -47
  394. package/src/live-query/LiveQueryClient.js +35 -25
  395. package/src/live-query/SseSubscriptionClient.d.ts +1 -1
  396. package/src/live-query/SseSubscriptionClient.js +80 -76
  397. package/src/live-query/SubscriptionChannel.d.ts +3 -3
  398. package/src/live-query/SubscriptionChannel.js +26 -18
  399. package/src/live-query/SubscriptionServer.js +23 -17
  400. package/src/remult-proxy.d.ts +1 -1
  401. package/src/remult-proxy.js +84 -35
  402. package/src/remult3/DecoratorReplacer.d.ts +2 -2
  403. package/src/remult3/RepositoryImplementation.d.ts +51 -41
  404. package/src/remult3/RepositoryImplementation.js +402 -257
  405. package/src/remult3/remult3.d.ts +56 -51
  406. package/src/remult3/remult3.js +0 -1
  407. package/src/server-action.d.ts +12 -5
  408. package/src/server-action.js +78 -48
  409. package/src/shared-tests/db-tests-setup.d.ts +8 -8
  410. package/src/shared-tests/db-tests-setup.js +6 -6
  411. package/src/shared-tests/db-tests.db-tests.d.ts +1 -1
  412. package/src/shared-tests/db-tests.db-tests.js +350 -153
  413. package/src/shared-tests/deleteAll.d.ts +1 -1
  414. package/src/shared-tests/entityWithValidations.js +1 -1
  415. package/src/shared-tests/test-custom-id-column.spec.js +4 -4
  416. package/src/shared-tests/test-special-value.spec.js +9 -9
  417. package/src/shared-tests/test-update-with-null.spec.js +8 -4
  418. package/src/sort.d.ts +2 -2
  419. package/src/sort.js +9 -7
  420. package/src/tests/TestDataApiResponse.d.ts +1 -1
  421. package/src/tests/TestDataApiResponse.js +3 -4
  422. package/src/tests/createData.js +1 -1
  423. package/src/tests/d.js +1 -1
  424. package/src/tests/dWithPrefilter.js +1 -1
  425. package/src/tests/entityForCustomFilter.d.ts +4 -4
  426. package/src/tests/entityForCustomFilter.js +16 -6
  427. package/src/tests/entityWithValidationsOnColumn.js +1 -1
  428. package/src/tests/frontend-database-tests-setup.spec.d.ts +1 -1
  429. package/src/tests/frontend-database-tests-setup.spec.js +8 -8
  430. package/src/tests/h.js +3 -3
  431. package/src/tests/remult-3-entities.d.ts +2 -2
  432. package/src/tests/remult-3-entities.js +8 -4
  433. package/src/tests/testHelper.spec.d.ts +7 -7
  434. package/src/tests/testHelper.spec.js +38 -27
  435. package/src/tests/testModel/models.js +3 -3
  436. package/src/validators.d.ts +1 -1
  437. package/src/validators.js +18 -9
  438. package/src/valueConverters.d.ts +1 -1
  439. package/src/valueConverters.js +38 -21
  440. package/esm/remult-svletekit.d.ts +0 -3
  441. package/esm/remult-svletekit.js +0 -83
  442. package/esm/src/id-entity.d.ts +0 -4
  443. package/esm/src/id-entity.js +0 -8
  444. package/esm/src/remult3/getId.d.ts +0 -2
  445. package/esm/src/remult3/getId.js +0 -7
  446. package/postgres/getEntityTypescriptPostgres.d.ts +0 -1
  447. package/postgres/getEntityTypescriptPostgres.js +0 -125
  448. package/src/id-entity.d.ts +0 -4
  449. package/src/id-entity.js +0 -17
  450. package/src/remult3/getId.d.ts +0 -2
  451. package/src/remult3/getId.js +0 -11
@@ -1,6 +1,6 @@
1
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>;
@@ -1,9 +1,12 @@
1
1
  import { createRemultServerCore, } from './expressBridge';
2
2
  import { initAsyncHooks } from './initAsyncHooks';
3
- export { JsonEntityFileStorage, JsonFileDataProvider } from './JsonEntityFileStorage';
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 function createRemultServer(options, serverCoreOptions) {
7
7
  initAsyncHooks();
8
- return createRemultServerCore(options, serverCoreOptions || { buildGenericRequestInfo: req => req, getRequestBody: async (req) => req.body });
8
+ return createRemultServerCore(options, serverCoreOptions || {
9
+ buildGenericRequestInfo: (req) => req,
10
+ getRequestBody: async (req) => req.body,
11
+ });
9
12
  }
@@ -1,5 +1,5 @@
1
1
  import { AsyncLocalStorage } from 'async_hooks';
2
- import { RemultAsyncLocalStorage } from './expressBridge';
2
+ import { RemultAsyncLocalStorage } from '../src/context';
3
3
  let init = false;
4
4
  export function initAsyncHooks() {
5
5
  if (init)
@@ -1,6 +1,6 @@
1
1
  export function initDataProvider(optionsDataProvider) {
2
2
  let dataProvider;
3
- if (typeof optionsDataProvider === "function") {
3
+ if (typeof optionsDataProvider === 'function') {
4
4
  dataProvider = optionsDataProvider();
5
5
  }
6
6
  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;
@@ -1,28 +1,29 @@
1
- import { Remult } from "../context";
1
+ import { Remult } from '../context';
2
2
  import { KnexDataProvider, KnexSchemaBuilder } from '../../remult-knex';
3
3
  import * as Knex from 'knex';
4
4
  import { MongoClient } from 'mongodb';
5
5
  import { config } from 'dotenv';
6
- import { createPostgresConnection, PostgresSchemaBuilder } from "../../postgres";
7
- import { addDatabaseToTest, itWithFocus, testAll, TestDbs } from "../shared-tests/db-tests-setup";
8
- import { describeClass } from "../remult3/DecoratorReplacer";
9
- import { Entity, Fields } from "../remult3";
6
+ import { createPostgresConnection, PostgresSchemaBuilder, } from '../../postgres';
7
+ import { addDatabaseToTest, itWithFocus, testAll, TestDbs, } from '../shared-tests/db-tests-setup';
8
+ import { describeClass } from '../remult3/DecoratorReplacer';
9
+ import { Entity, Fields } from '../remult3';
10
10
  KnexSchemaBuilder.logToConsole = false;
11
11
  PostgresSchemaBuilder.logToConsole = false;
12
12
  config();
13
13
  function testKnexSqlImpl(knex, name) {
14
14
  return (key, what, focus = false) => {
15
- itWithFocus(key + " " + name + " - knex", async () => {
15
+ itWithFocus(key + ' ' + name + ' - knex', async () => {
16
16
  let db = new KnexDataProvider(knex);
17
17
  let remult = new Remult(db);
18
18
  await what({
19
- db, remult,
19
+ db,
20
+ remult,
20
21
  createEntity: async (entity) => {
21
22
  let repo = remult.repo(entity);
22
23
  await knex.schema.dropTableIfExists(await repo.metadata.getDbName());
23
24
  await db.ensureSchema([repo.metadata]);
24
25
  return repo;
25
- }
26
+ },
26
27
  });
27
28
  }, focus);
28
29
  };
@@ -30,7 +31,7 @@ function testKnexSqlImpl(knex, name) {
30
31
  export const testKnexPGSqlImpl = testKnexSqlImpl(Knex.default({
31
32
  client: 'pg',
32
33
  connection: process.env.DATABASE_URL,
33
- }), "postgres");
34
+ }), 'postgres');
34
35
  addDatabaseToTest(testKnexPGSqlImpl);
35
36
  if (process.env['TESTS_SQL_SERVER'])
36
37
  addDatabaseToTest(testKnexSqlImpl(Knex.default({
@@ -43,47 +44,47 @@ if (process.env['TESTS_SQL_SERVER'])
43
44
  options: {
44
45
  enableArithAbort: true,
45
46
  encrypt: false,
46
- instanceName: 'sqlexpress'
47
- }
48
- } //,debug: true
49
- }), "sql server"));
47
+ instanceName: 'sqlexpress',
48
+ },
49
+ },
50
+ }), 'sql server'));
50
51
  if (true)
51
52
  addDatabaseToTest(testKnexSqlImpl(Knex.default({
52
53
  client: 'better-sqlite3',
53
54
  connection: {
54
- filename: ":memory:"
55
+ filename: ':memory:',
55
56
  },
56
- }), "sqlite3"));
57
+ }), 'sqlite3'));
57
58
  export const mySqlTest = addDatabaseToTest(testKnexSqlImpl(Knex.default({
58
59
  client: 'mysql2',
59
60
  connection: {
60
61
  user: 'root',
61
62
  password: 'MASTERKEY',
62
63
  host: '127.0.0.1',
63
- database: 'test'
64
- }
65
- //debug: true
66
- }), "mysql2"));
64
+ database: 'test',
65
+ },
66
+ }), 'mysql2'));
67
67
  let pg = createPostgresConnection();
68
68
  export function testPostgresImplementation(key, what, focus = false) {
69
- itWithFocus(key + " - postgres", async () => {
69
+ itWithFocus(key + ' - postgres', async () => {
70
70
  let db = await pg;
71
71
  let remult = new Remult(db);
72
72
  await what({
73
- db, remult,
73
+ db,
74
+ remult,
74
75
  createEntity: async (entity) => {
75
76
  let repo = remult.repo(entity);
76
- await db.execute("drop table if exists " + await repo.metadata.getDbName());
77
+ await db.execute('drop table if exists ' + (await repo.metadata.getDbName()));
77
78
  await db.ensureSchema([repo.metadata]);
78
79
  return repo;
79
- }
80
+ },
80
81
  });
81
82
  }, focus);
82
83
  }
83
84
  addDatabaseToTest(testPostgresImplementation);
84
- import { Categories } from "../tests/remult-3-entities";
85
- import { MongoDataProvider } from "../../remult-mongo";
86
- testAll("transactions", async ({ db, createEntity }) => {
85
+ import { Categories } from '../tests/remult-3-entities';
86
+ import { MongoDataProvider } from '../../remult-mongo';
87
+ testAll('transactions', async ({ db, createEntity }) => {
87
88
  let x = await createEntity(Categories);
88
89
  await db.transaction(async (db) => {
89
90
  let remult = new Remult(db);
@@ -93,35 +94,40 @@ testAll("transactions", async ({ db, createEntity }) => {
93
94
  const mongoConnectionString = process.env['MONGO_TEST_URL']; //"mongodb://localhost:27017/local"
94
95
  let client = new MongoClient(mongoConnectionString);
95
96
  let done;
96
- let mongoDbPromise = client.connect().then(c => {
97
+ let mongoDbPromise = client.connect().then((c) => {
97
98
  done = c;
98
- return c.db("test");
99
+ return c.db('test');
99
100
  });
100
101
  afterAll(async () => {
101
102
  if (done)
102
103
  done.close();
103
104
  });
104
105
  export function testMongo(key, what, focus = false) {
105
- itWithFocus(key + " - mongo", async () => {
106
+ itWithFocus(key + ' - mongo', async () => {
106
107
  let mongoDb = await mongoDbPromise;
107
108
  let db = new MongoDataProvider(mongoDb, client);
108
109
  let remult = new Remult(db);
109
110
  await what({
110
- db, remult,
111
+ db,
112
+ remult,
111
113
  createEntity: async (entity) => {
112
114
  let repo = remult.repo(entity);
113
- await mongoDb.collection(await repo.metadata.getDbName()).deleteMany({});
115
+ await mongoDb
116
+ .collection(await repo.metadata.getDbName())
117
+ .deleteMany({});
114
118
  return repo;
115
- }
119
+ },
116
120
  });
117
121
  }, focus);
118
122
  }
119
123
  addDatabaseToTest(testMongo, TestDbs.mongo);
120
- it("test mongo without transaction", async () => {
121
- const client = new MongoClient("mongodb://localhost:27017/local");
124
+ it('test mongo without transaction', async () => {
125
+ const client = new MongoClient('mongodb://localhost:27017/local');
122
126
  await client.connect();
123
127
  const mongoDb = client.db('test');
124
- const db = new MongoDataProvider(mongoDb, client, { disableTransactions: true });
128
+ const db = new MongoDataProvider(mongoDb, client, {
129
+ disableTransactions: true,
130
+ });
125
131
  var remult = new Remult(db);
126
132
  const entity = class {
127
133
  constructor() {
@@ -129,15 +135,18 @@ it("test mongo without transaction", async () => {
129
135
  this.title = '';
130
136
  }
131
137
  };
132
- describeClass(entity, Entity("testNoTrans"), { id: Fields.number(), title: Fields.string() });
138
+ describeClass(entity, Entity('testNoTrans'), {
139
+ id: Fields.number(),
140
+ title: Fields.string(),
141
+ });
133
142
  const repo = remult.repo(entity);
134
143
  for (const item of await repo.find()) {
135
144
  await repo.delete(item);
136
145
  }
137
- await repo.insert({ id: 1, title: "a" });
146
+ await repo.insert({ id: 1, title: 'a' });
138
147
  try {
139
148
  await db.transaction(async () => {
140
- await repo.insert({ id: 2, title: "b" });
149
+ await repo.insert({ id: 2, title: 'b' });
141
150
  throw new Error();
142
151
  });
143
152
  }
@@ -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;
@@ -9,7 +9,7 @@ export function buildRestDataProvider(provider) {
9
9
  }
10
10
  }
11
11
  if (!httpDataProvider) {
12
- if (typeof provider === "function") {
12
+ if (typeof provider === 'function') {
13
13
  httpDataProvider = new RestDataProviderHttpProviderUsingFetch(provider);
14
14
  }
15
15
  }
@@ -45,11 +45,12 @@ export async function retry(what) {
45
45
  return await what();
46
46
  }
47
47
  catch (err) {
48
- if ((err.message?.startsWith("Error occurred while trying to proxy") ||
49
- err.message?.startsWith("Error occured while trying to proxy") ||
50
- err.message?.includes("http proxy error") ||
51
- err.message?.startsWith("Gateway Timeout") ||
52
- err.status == 500) && i++ < 50) {
48
+ if ((err.message?.startsWith('Error occurred while trying to proxy') ||
49
+ err.message?.startsWith('Error occured while trying to proxy') ||
50
+ err.message?.includes('http proxy error') ||
51
+ err.message?.startsWith('Gateway Timeout') ||
52
+ err.status == 500) &&
53
+ i++ < 50) {
53
54
  await new Promise((res, req) => {
54
55
  setTimeout(() => {
55
56
  res({});
@@ -63,17 +64,24 @@ export async function retry(what) {
63
64
  }
64
65
  export function toPromise(p) {
65
66
  let r;
66
- if (p["toPromise"] !== undefined) {
67
- r = p["toPromise"]();
67
+ if (p['toPromise'] !== undefined) {
68
+ r = p['toPromise']();
68
69
  }
69
70
  //@ts-ignore
70
71
  else
71
72
  r = p;
72
- return r.then((x) => {
73
- if (x && (x.status == 200 || x.status == 201) && x.headers && x.request && x.data) //for axios
73
+ return r
74
+ .then((x) => {
75
+ if (x &&
76
+ (x.status == 200 || x.status == 201) &&
77
+ x.headers &&
78
+ x.request &&
79
+ x.data)
80
+ //for axios
74
81
  return x.data;
75
82
  return x;
76
- }).catch(async (ex) => {
83
+ })
84
+ .catch(async (ex) => {
77
85
  throw await processHttpException(ex);
78
86
  });
79
87
  }
@@ -83,7 +91,7 @@ export async function processHttpException(ex) {
83
91
  if (z.error)
84
92
  error = z.error;
85
93
  else if (z.isAxiosError) {
86
- if (typeof z.response?.data === "string")
94
+ if (typeof z.response?.data === 'string')
87
95
  error = z.response.data;
88
96
  else
89
97
  error = z?.response?.data;
@@ -91,7 +99,7 @@ export async function processHttpException(ex) {
91
99
  if (!error)
92
100
  error = z.message;
93
101
  if (z.status == 0 && z.error.isTrusted)
94
- error = "Network Error";
102
+ error = 'Network Error';
95
103
  if (typeof error === 'string') {
96
104
  error = {
97
105
  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;
@@ -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/esm/src/column.js CHANGED
@@ -1,11 +1,14 @@
1
1
  import { assign } from '../assign';
2
2
  import { Filter } from './filter/filter-interfaces';
3
- import { getEntityRef, __updateEntityBasedOnWhere } from './remult3';
3
+ import { getEntityRef, __updateEntityBasedOnWhere, } from './remult3';
4
4
  export function makeTitle(name) {
5
5
  // insert a space before all caps
6
- return name.replace(/([A-Z])/g, ' $1')
6
+ return (name
7
+ .replace(/([A-Z])/g, ' $1')
7
8
  // uppercase the first character
8
- .replace(/^./, (str) => str.toUpperCase()).replace('Email', 'eMail').replace(" I D", " ID");
9
+ .replace(/^./, (str) => str.toUpperCase())
10
+ .replace('Email', 'eMail')
11
+ .replace(' I D', ' ID'));
9
12
  }
10
13
  export class CompoundIdField {
11
14
  constructor(...columns) {
@@ -24,11 +27,11 @@ export class CompoundIdField {
24
27
  throw new Error('Method not implemented.');
25
28
  }
26
29
  getDbName() {
27
- return Promise.resolve("");
30
+ return Promise.resolve('');
28
31
  }
29
32
  getId(instance) {
30
- let r = "";
31
- this.fields.forEach(c => {
33
+ let r = '';
34
+ this.fields.forEach((c) => {
32
35
  if (r.length > 0)
33
36
  r += ',';
34
37
  r += instance[c.key];
@@ -36,7 +39,7 @@ export class CompoundIdField {
36
39
  return r;
37
40
  }
38
41
  get valueConverter() {
39
- throw new Error("cant get value converter of compound id");
42
+ throw new Error('cant get value converter of compound id');
40
43
  }
41
44
  isEqualTo(value) {
42
45
  let result = {};
@@ -48,7 +51,7 @@ export class CompoundIdField {
48
51
  return result;
49
52
  }
50
53
  resultIdFilter(id, data) {
51
- return new Filter(add => {
54
+ return new Filter((add) => {
52
55
  let idParts = [];
53
56
  if (id != undefined)
54
57
  idParts = id.split(',');
@@ -68,6 +71,11 @@ export class LookupColumn {
68
71
  this.repository = repository;
69
72
  this.id = id;
70
73
  }
74
+ toJson() {
75
+ if (this.item === null)
76
+ return null;
77
+ return this.repository.toJson(this.item);
78
+ }
71
79
  setId(val) {
72
80
  if (this.repository.metadata.idMetadata.field.valueType == Number)
73
81
  val = +val;
@@ -84,8 +92,9 @@ export class LookupColumn {
84
92
  return this.repository.getCachedById(id);
85
93
  }
86
94
  set(item) {
95
+ this.storedItem = undefined;
87
96
  if (item) {
88
- if (typeof item === "string" || typeof item === "number")
97
+ if (typeof item === 'string' || typeof item === 'number')
89
98
  this.id = item;
90
99
  else {
91
100
  let eo = getEntityRef(item, false);
@@ -94,6 +103,7 @@ export class LookupColumn {
94
103
  this.id = eo.getId();
95
104
  }
96
105
  else {
106
+ this.storedItem = { item };
97
107
  this.id = item[this.repository.metadata.idMetadata.field.key];
98
108
  }
99
109
  }
@@ -106,6 +116,8 @@ export class LookupColumn {
106
116
  }
107
117
  }
108
118
  get item() {
119
+ if (this.storedItem)
120
+ return this.storedItem.item;
109
121
  return this.get(this.id);
110
122
  }
111
123
  async waitLoad() {
@@ -127,11 +139,11 @@ export class OneToMany {
127
139
  return this._currentPromise;
128
140
  if (this._items === undefined)
129
141
  this._items = [];
130
- return this._currentPromise = this.find().then(x => {
142
+ return (this._currentPromise = this.find().then((x) => {
131
143
  this._items.splice(0);
132
144
  this._items.push(...x);
133
145
  return this._items;
134
- });
146
+ }));
135
147
  }
136
148
  async find() {
137
149
  return this.provider.find(this.settings);
@@ -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 {