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,10 +1,10 @@
1
- import { ClassType } from "../../classType";
2
- import { FieldMetadata } from "../column-interfaces";
3
- import { LiveQueryChange, SubscriptionListener, Unsubscribe } from "../live-query/SubscriptionChannel";
4
- import { EntityOptions } from "../entity";
5
- import { SortSegment } from "../sort";
6
- import { entityEventListener } from "../__EntityValueProvider";
7
- import { ErrorInfo } from "../..";
1
+ import { ClassType } from '../../classType';
2
+ import { FieldMetadata } from '../column-interfaces';
3
+ import { LiveQueryChange, SubscriptionListener, Unsubscribe } from '../live-query/SubscriptionChannel';
4
+ import { EntityOptions } from '../entity';
5
+ import { SortSegment } from '../sort';
6
+ import { entityEventListener } from '../__EntityValueProvider';
7
+ import { ErrorInfo } from '../..';
8
8
  export interface EntityRef<entityType> extends Subscribable {
9
9
  hasErrors(): boolean;
10
10
  undoChanges(): any;
@@ -44,7 +44,7 @@ export interface Subscribable {
44
44
  }
45
45
  export declare type FieldsRef<entityType> = {
46
46
  [Properties in keyof OmitEB<entityType>]: entityType[Properties] extends {
47
- id?: (number | string);
47
+ id?: number | string;
48
48
  } ? IdFieldRef<entityType, entityType[Properties]> : FieldRef<entityType, entityType[Properties]>;
49
49
  } & {
50
50
  find(fieldMetadataOrKey: FieldMetadata | string): FieldRef<entityType, any>;
@@ -68,12 +68,12 @@ export interface IdFieldRef<entityType, valueType> extends FieldRef<entityType,
68
68
  id?: number;
69
69
  } ? number : valueType extends {
70
70
  id?: string;
71
- } ? string : (string | number)): any;
72
- getId(): (valueType extends {
71
+ } ? string : string | number): any;
72
+ getId(): valueType extends {
73
73
  id?: number;
74
74
  } ? number : valueType extends {
75
75
  id?: string;
76
- } ? string : (string | number));
76
+ } ? string : string | number;
77
77
  }
78
78
  export interface FieldRef<entityType = any, valueType = any> extends Subscribable {
79
79
  error: string;
@@ -110,7 +110,7 @@ export interface EntityMetadata<entityType = any> {
110
110
  /** A human readable caption for the entity. Can be used to achieve a consistent caption for a field throughout the app
111
111
  * @example
112
112
  * <h1>Create a new item in {taskRepo.metadata.caption}</h1>
113
- */
113
+ */
114
114
  readonly caption: string;
115
115
  /** The options send to the `Entity`'s decorator */
116
116
  readonly options: EntityOptions;
@@ -122,7 +122,7 @@ export interface EntityMetadata<entityType = any> {
122
122
  * if (taskRepo.metadata.apiUpdateAllowed(task)){
123
123
  * // Allow user to edit the entity
124
124
  * }
125
- */
125
+ */
126
126
  apiUpdateAllowed(item?: entityType): boolean;
127
127
  /** true if the current user is allowed to read from entity
128
128
  * @example
@@ -138,7 +138,7 @@ export interface EntityMetadata<entityType = any> {
138
138
  * if (taskRepo.metadata.apiDeleteAllowed(task)){
139
139
  * // display delete button
140
140
  * }
141
- */
141
+ */
142
142
  apiDeleteAllowed(item?: entityType): boolean;
143
143
  /** true if the current user is allowed to create an entity instance
144
144
  * @example
@@ -146,7 +146,7 @@ export interface EntityMetadata<entityType = any> {
146
146
  * if (taskRepo.metadata.apiInsertAllowed(task)){
147
147
  * // display insert button
148
148
  * }
149
- */
149
+ */
150
150
  apiInsertAllowed(item?: entityType): boolean;
151
151
  /** Returns the dbName - based on it's `dbName` option and it's `sqlExpression` option */
152
152
  getDbName(): Promise<string>;
@@ -158,7 +158,7 @@ export declare type idType<entityType> = entityType extends {
158
158
  id?: number;
159
159
  } ? number : entityType extends {
160
160
  id?: string;
161
- } ? string : (string | number);
161
+ } ? string : string | number;
162
162
  /**used to perform CRUD operations on an `entityType` */
163
163
  export interface Repository<entityType> {
164
164
  /** returns a result array based on the provided options */
@@ -190,7 +190,7 @@ export interface Repository<entityType> {
190
190
  * @see [EntityFilter](http://remult.dev/docs/entityFilter.html)
191
191
  * @example
192
192
  * await taskRepo.count({ completed:false })
193
- */
193
+ */
194
194
  count(where?: EntityFilter<entityType>): Promise<number>;
195
195
  /**Validates an item
196
196
  * @example
@@ -202,11 +202,11 @@ export interface Repository<entityType> {
202
202
  * // Can also be used to validate specific fields
203
203
  * const error = repo.validate(task,"title")
204
204
  */
205
- validate(item: Partial<entityType>, ...fields: (Extract<keyof OmitEB<entityType>, string>)[]): Promise<ErrorInfo<entityType> | undefined>;
205
+ validate(item: Partial<entityType>, ...fields: Extract<keyof OmitEB<entityType>, string>[]): Promise<ErrorInfo<entityType> | undefined>;
206
206
  /** saves an item or item[] to the data source. It assumes that if an `id` value exists, it's an existing row - otherwise it's a new row
207
207
  * @example
208
208
  * await taskRepo.save({...task, completed:true })
209
- */
209
+ */
210
210
  save(item: Partial<OmitEB<entityType>>[]): Promise<entityType[]>;
211
211
  save(item: Partial<OmitEB<entityType>>): Promise<entityType>;
212
212
  /**Insert an item or item[] to the data source
@@ -214,41 +214,46 @@ export interface Repository<entityType> {
214
214
  * await taskRepo.insert({title:"task a"})
215
215
  * @example
216
216
  * await taskRepo.insert([{title:"task a"}, {title:"task b", completed:true }])
217
- */
217
+ */
218
218
  insert(item: Partial<OmitEB<entityType>>[]): Promise<entityType[]>;
219
219
  insert(item: Partial<OmitEB<entityType>>): Promise<entityType>;
220
220
  /** Updates an item, based on its `id`
221
221
  * @example
222
222
  * taskRepo.update(task.id,{...task,completed:true})
223
- */
224
- update(id: (entityType extends {
223
+ */
224
+ update(id: entityType extends {
225
225
  id?: number;
226
226
  } ? number : entityType extends {
227
227
  id?: string;
228
- } ? string : (string | number)), item: Partial<OmitEB<entityType>>): Promise<entityType>;
228
+ } ? string : string | number, item: Partial<OmitEB<entityType>>): Promise<entityType>;
229
229
  update(id: Partial<OmitEB<entityType>>, item: Partial<OmitEB<entityType>>): Promise<entityType>;
230
230
  /** Deletes an Item*/
231
- delete(id: (entityType extends {
231
+ delete(id: entityType extends {
232
232
  id?: number;
233
233
  } ? number : entityType extends {
234
234
  id?: string;
235
- } ? string : (string | number))): Promise<void>;
235
+ } ? string : string | number): Promise<void>;
236
236
  delete(item: Partial<OmitEB<entityType>>): Promise<void>;
237
237
  /** Creates an instance of an item. It'll not be saved to the data source unless `save` or `insert` will be called for that item */
238
238
  create(item?: Partial<OmitEB<entityType>>): entityType;
239
+ toJson(item: Promise<entityType[]>): Promise<any[]>;
240
+ toJson(item: entityType[]): any[];
241
+ toJson(item: Promise<entityType>): Promise<any>;
242
+ toJson(item: entityType): any;
239
243
  /** Translates a json object to an item instance */
240
- fromJson(x: any, isNew?: boolean): Promise<entityType>;
244
+ fromJson(x: any[], isNew?: boolean): entityType[];
245
+ fromJson(x: any, isNew?: boolean): entityType;
241
246
  /** returns an `entityRef` for an item returned by `create`, `find` etc... */
242
247
  getEntityRef(item: entityType): EntityRef<entityType>;
243
248
  /** Provides information about the fields of the Repository's entity
244
249
  * @example
245
250
  * console.log(repo.fields.title.caption) // displays the caption of a specific field
246
251
  * console.log(repo.fields.title.options)// writes the options that were defined for this field
247
- */
252
+ */
248
253
  fields: FieldsMetadata<entityType>;
249
254
  /**The metadata for the `entity`
250
255
  * @See [EntityMetadata](https://remult.dev/docs/ref_entitymetadata.html)
251
- */
256
+ */
252
257
  metadata: EntityMetadata<entityType>;
253
258
  addEventListener(listener: entityEventListener<entityType>): Unsubscribe;
254
259
  }
@@ -259,7 +264,7 @@ export interface LiveQuery<entityType> {
259
264
  export interface LiveQueryChangeInfo<entityType> {
260
265
  items: entityType[];
261
266
  changes: LiveQueryChange[];
262
- applyChanges(prevState: entityType[]): entityType[];
267
+ applyChanges(prevState: entityType[] | undefined): entityType[];
263
268
  }
264
269
  export interface FindOptions<entityType> extends FindOptionsBase<entityType> {
265
270
  /** Determines the number of rows returned by the request, on the browser the default is 100 rows
@@ -268,7 +273,7 @@ export interface FindOptions<entityType> extends FindOptionsBase<entityType> {
268
273
  * limit:10,
269
274
  * page:2
270
275
  * })
271
- */
276
+ */
272
277
  limit?: number;
273
278
  /** Determines the page number that will be used to extract the data
274
279
  * @example
@@ -276,7 +281,7 @@ export interface FindOptions<entityType> extends FindOptionsBase<entityType> {
276
281
  * limit:10,
277
282
  * page:2
278
283
  * })
279
- */
284
+ */
280
285
  page?: number;
281
286
  }
282
287
  /** Determines the order of items returned .
@@ -286,34 +291,34 @@ export interface FindOptions<entityType> extends FindOptionsBase<entityType> {
286
291
  * await this.remult.repo(Products).find({ orderBy: { price: "desc", name: "asc" }})
287
292
  */
288
293
  export declare type EntityOrderBy<entityType> = {
289
- [Properties in keyof Partial<OmitEB<entityType>>]?: "asc" | "desc";
294
+ [Properties in keyof Partial<OmitEB<entityType>>]?: 'asc' | 'desc';
290
295
  };
291
296
  /**Used to filter the desired result set
292
297
  * @see [EntityFilter](http://remult.dev/docs/entityFilter.html)
293
298
  */
294
299
  export declare type EntityFilter<entityType> = {
295
- [Properties in keyof Partial<OmitEB<entityType>>]?: (Partial<OmitEB<entityType>>[Properties] extends (number | Date | undefined) ? ComparisonValueFilter<Partial<OmitEB<entityType>>[Properties]> : Partial<OmitEB<entityType>>[Properties] extends (string | undefined) ? ContainsStringValueFilter & ComparisonValueFilter<string> : Partial<OmitEB<entityType>>[Properties] extends (boolean | undefined) ? ValueFilter<boolean> : Partial<OmitEB<entityType>>[Properties] extends ({
296
- id?: (string | number);
297
- } | undefined) ? IdFilter<Partial<OmitEB<entityType>>[Properties]> : ValueFilter<Partial<OmitEB<entityType>>[Properties]>) & ContainsStringValueFilter;
300
+ [Properties in keyof Partial<OmitEB<entityType>>]?: (Partial<OmitEB<entityType>>[Properties] extends number | Date | undefined ? ComparisonValueFilter<Partial<OmitEB<entityType>>[Properties]> : Partial<OmitEB<entityType>>[Properties] extends string | undefined ? ContainsStringValueFilter & ComparisonValueFilter<string> : Partial<OmitEB<entityType>>[Properties] extends boolean | undefined ? ValueFilter<boolean> : Partial<OmitEB<entityType>>[Properties] extends {
301
+ id?: string | number;
302
+ } | undefined ? IdFilter<Partial<OmitEB<entityType>>[Properties]> : ValueFilter<Partial<OmitEB<entityType>>[Properties]>) & ContainsStringValueFilter;
298
303
  } & {
299
304
  $or?: EntityFilter<entityType>[];
300
305
  $and?: EntityFilter<entityType>[];
301
306
  };
302
307
  export declare type ValueFilter<valueType> = valueType | valueType[] | {
303
308
  $ne?: valueType | valueType[];
304
- "!="?: valueType | valueType[];
309
+ '!='?: valueType | valueType[];
305
310
  $in?: valueType[];
306
311
  $nin?: valueType[];
307
312
  };
308
313
  export declare type ComparisonValueFilter<valueType> = ValueFilter<valueType> & {
309
314
  $gt?: valueType;
310
- ">"?: valueType;
315
+ '>'?: valueType;
311
316
  $gte?: valueType;
312
- ">="?: valueType;
317
+ '>='?: valueType;
313
318
  $lt?: valueType;
314
- "<"?: valueType;
319
+ '<'?: valueType;
315
320
  $lte?: valueType;
316
- "<="?: valueType;
321
+ '<='?: valueType;
317
322
  };
318
323
  export interface ContainsStringValueFilter {
319
324
  $contains?: string;
@@ -328,24 +333,24 @@ export interface LoadOptions<entityType> {
328
333
  }
329
334
  export interface FindOptionsBase<entityType> extends LoadOptions<entityType> {
330
335
  /** filters the data
331
- * @example
332
- * await taskRepo.find({where: { completed:false }})
333
- * @see For more usage examples see [EntityFilter](https://remult.dev/docs/entityFilter.html)
334
- */
336
+ * @example
337
+ * await taskRepo.find({where: { completed:false }})
338
+ * @see For more usage examples see [EntityFilter](https://remult.dev/docs/entityFilter.html)
339
+ */
335
340
  where?: EntityFilter<entityType>;
336
341
  /** Determines the order of items returned .
337
- * @example
338
- * await this.remult.repo(Products).find({ orderBy: { name: "asc" }})
339
- * @example
340
- * await this.remult.repo(Products).find({ orderBy: { price: "desc", name: "asc" }})
341
- */
342
+ * @example
343
+ * await this.remult.repo(Products).find({ orderBy: { name: "asc" }})
344
+ * @example
345
+ * await this.remult.repo(Products).find({ orderBy: { price: "desc", name: "asc" }})
346
+ */
342
347
  orderBy?: EntityOrderBy<entityType>;
343
348
  }
344
349
  export interface FindFirstOptions<entityType> extends FindOptionsBase<entityType>, FindFirstOptionsBase<entityType> {
345
350
  }
346
351
  export interface FindFirstOptionsBase<entityType> extends LoadOptions<entityType> {
347
352
  /** determines if to cache the result, and return the results from cache.
348
- */
353
+ */
349
354
  useCache?: boolean;
350
355
  /** If set to true and an item is not found, it's created and returned*/
351
356
  createIfNotFound?: boolean;
@@ -366,7 +371,7 @@ export interface QueryResult<entityType> {
366
371
  * for await (const task of taskRepo.query()) {
367
372
  * await taskRepo.save({ ...task, completed });
368
373
  * }
369
- */
374
+ */
370
375
  [Symbol.asyncIterator](): {
371
376
  next: () => Promise<IteratorResult<entityType, entityType>>;
372
377
  };
@@ -1,2 +1 @@
1
- ;
2
1
  export {};
@@ -17,7 +17,7 @@ export declare abstract class Action<inParam, outParam> implements ActionInterfa
17
17
  run(pIn: inParam, baseUrl?: string, http?: RestDataProviderHttpProvider): Promise<outParam>;
18
18
  doWork: (args: any[], self: any, baseUrl?: string, http?: RestDataProviderHttpProvider) => Promise<any>;
19
19
  protected abstract execute(info: inParam, req: Remult, res: DataApiResponse): Promise<outParam>;
20
- __register(reg: (url: string, queue: boolean, allowed: AllowedForInstance<any>, what: ((data: any, req: Remult, res: DataApiResponse) => void)) => void): void;
20
+ __register(reg: (url: string, queue: boolean, allowed: AllowedForInstance<any>, what: (data: any, req: Remult, res: DataApiResponse) => void) => void): void;
21
21
  }
22
22
  export declare class ForbiddenError extends Error {
23
23
  constructor();
@@ -26,7 +26,7 @@ export declare class ForbiddenError extends Error {
26
26
  export declare class myServerAction extends Action<inArgs, result> {
27
27
  private types;
28
28
  private options;
29
- private originalMethod;
29
+ originalMethod: (args: any[]) => any;
30
30
  constructor(name: string, types: any[], options: BackendMethodOptions<any>, originalMethod: (args: any[]) => any);
31
31
  protected execute(info: inArgs, remult: Remult, res: DataApiResponse): Promise<result>;
32
32
  }
@@ -54,9 +54,16 @@ export declare const actionInfo: {
54
54
  };
55
55
  };
56
56
  export declare const serverActionField: unique symbol;
57
- export declare function Controller(key: string): (target: any) => any;
57
+ export declare function Controller(key: string): (target: any, context?: any) => any;
58
+ export interface ClassMethodDecoratorContextStub<This = unknown, Value extends (this: This, ...args: any) => any = (this: This, ...args: any) => any> {
59
+ readonly kind: 'method';
60
+ readonly name: string | symbol;
61
+ readonly access: {
62
+ has(object: This): boolean;
63
+ };
64
+ }
58
65
  /** Indicates that the decorated methods runs on the backend. See: [Backend Methods](https://remult.dev/docs/backendMethods.html) */
59
- export declare function BackendMethod<type = any>(options: BackendMethodOptions<type>): (target: any, key: string, descriptor: any) => any;
66
+ export declare function BackendMethod<type = any>(options: BackendMethodOptions<type>): (target: any, context: ClassMethodDecoratorContextStub<type> | string, descriptor?: any) => any;
60
67
  export interface jobWasQueuedResult {
61
68
  queuedJobId?: string;
62
69
  }
@@ -76,6 +83,6 @@ export declare function prepareReceivedArgs(types: any[], args: any[], remult: R
76
83
  export declare const classBackendMethodsArray: unique symbol;
77
84
  export interface ActionInterface {
78
85
  doWork: (args: any[], self: any, baseUrl?: string, http?: RestDataProviderHttpProvider) => Promise<any>;
79
- __register(reg: (url: string, queue: boolean, allowed: AllowedForInstance<any>, what: ((data: any, req: Remult, res: DataApiResponse) => void)) => void): any;
86
+ __register(reg: (url: string, queue: boolean, allowed: AllowedForInstance<any>, what: (data: any, req: Remult, res: DataApiResponse) => void) => void): any;
80
87
  }
81
88
  export {};
@@ -1,8 +1,8 @@
1
1
  import 'reflect-metadata';
2
- import { Remult, allEntities, classHelpers, ClassHelper, setControllerSettings, doTransaction } from './context';
3
- import { buildRestDataProvider } from "./buildRestDataProvider";
2
+ import { Remult, allEntities, classHelpers, ClassHelper, setControllerSettings, doTransaction, isBackend, } from './context';
3
+ import { buildRestDataProvider } from './buildRestDataProvider';
4
4
  import { SqlDatabase } from './data-providers/sql-database';
5
- import { getEntityRef, decorateColumnSettings, getEntitySettings, getControllerRef } from './remult3';
5
+ import { getEntityRef, decorateColumnSettings, getEntitySettings, getControllerRef, checkTarget, } from './remult3';
6
6
  import { remult } from './remult-proxy';
7
7
  export class Action {
8
8
  constructor(actionUrl, queue, allowed) {
@@ -24,7 +24,7 @@ export class Action {
24
24
  await actionInfo.runActionWithoutBlockingUI(async () => {
25
25
  while (!runningJob || !runningJob.done) {
26
26
  if (runningJob)
27
- await new Promise(res => setTimeout(() => {
27
+ await new Promise((res) => setTimeout(() => {
28
28
  res(undefined);
29
29
  }, 200));
30
30
  runningJob = await http.post(baseUrl + '/' + Action.apiUrlForJobStatus, { queuedJobId: r.queuedJobId });
@@ -52,7 +52,8 @@ export class Action {
52
52
  res.success(r);
53
53
  }
54
54
  catch (err) {
55
- if (err.isForbiddenError) // got a problem in next with instance of ForbiddenError - so replaced it with this bool
55
+ if (err.isForbiddenError)
56
+ // got a problem in next with instance of ForbiddenError - so replaced it with this bool
56
57
  res.forbidden();
57
58
  else
58
59
  res.error(err);
@@ -63,7 +64,7 @@ export class Action {
63
64
  Action.apiUrlForJobStatus = 'jobStatusInQueue';
64
65
  export class ForbiddenError extends Error {
65
66
  constructor() {
66
- super("Forbidden");
67
+ super('Forbidden');
67
68
  this.isForbiddenError = true;
68
69
  }
69
70
  }
@@ -94,16 +95,18 @@ export class myServerAction extends Action {
94
95
  export const actionInfo = {
95
96
  allActions: [],
96
97
  runningOnServer: false,
97
- runActionWithoutBlockingUI: (what) => { return what(); },
98
+ runActionWithoutBlockingUI: (what) => {
99
+ return what();
100
+ },
98
101
  startBusyWithProgress: () => ({
99
102
  progress: (percent) => { },
100
- close: () => { }
101
- })
103
+ close: () => { },
104
+ }),
102
105
  };
103
106
  export const serverActionField = Symbol('serverActionField');
104
107
  const classOptions = new Map();
105
108
  export function Controller(key) {
106
- return function (target) {
109
+ return function (target, context) {
107
110
  let r = target;
108
111
  classOptions.set(r, { key });
109
112
  setControllerSettings(target, { key });
@@ -112,14 +115,17 @@ export function Controller(key) {
112
115
  }
113
116
  /** Indicates that the decorated methods runs on the backend. See: [Backend Methods](https://remult.dev/docs/backendMethods.html) */
114
117
  export function BackendMethod(options) {
115
- return (target, key, descriptor) => {
118
+ return (target, context, descriptor) => {
119
+ const key = typeof context === 'string' ? context : context.name.toString();
120
+ const originalMethod = descriptor ? descriptor.value : target;
121
+ let result = originalMethod;
122
+ checkTarget(target);
116
123
  if (target.prototype !== undefined) {
117
- var originalMethod = descriptor.value;
118
- var types = Reflect.getMetadata("design:paramtypes", target, key);
124
+ var types = Reflect.getMetadata('design:paramtypes', target, key);
119
125
  if (options.paramTypes)
120
126
  types = options.paramTypes;
121
127
  // if types are undefined - you've forgot to set: "emitDecoratorMetadata":true
122
- let serverAction = new myServerAction((options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, types, options, args => originalMethod.apply(undefined, args));
128
+ let serverAction = new myServerAction((options?.apiPrefix ? options.apiPrefix + '/' : '') + key, types, options, (args) => originalMethod.apply(undefined, args));
123
129
  serverAction.doWork = async (args, self, url, http) => {
124
130
  args = prepareArgsToSend(types, args);
125
131
  if (options.blockUser === false) {
@@ -128,18 +134,23 @@ export function BackendMethod(options) {
128
134
  else
129
135
  return (await serverAction.run({ args }, url, http)).data;
130
136
  };
131
- descriptor.value = async function (...args) {
132
- if (!actionInfo.runningOnServer) {
137
+ result = async function (...args) {
138
+ if (!isBackend()) {
133
139
  return await serverAction.doWork(args, undefined);
134
140
  }
135
141
  else
136
- return (await originalMethod.apply(undefined, args));
142
+ return await originalMethod.apply(this, args);
137
143
  };
138
- registerAction(target, descriptor);
139
- descriptor.value[serverActionField] = serverAction;
140
- return descriptor;
144
+ registerAction(target, result);
145
+ result[serverActionField] = serverAction;
146
+ if (descriptor) {
147
+ descriptor.value = result;
148
+ return descriptor;
149
+ }
150
+ else
151
+ return result;
141
152
  }
142
- var types = Reflect.getMetadata("design:paramtypes", target, key);
153
+ var types = Reflect.getMetadata('design:paramtypes', target, key);
143
154
  if (options.paramTypes)
144
155
  types = options.paramTypes;
145
156
  let x = classHelpers.get(target.constructor);
@@ -147,7 +158,6 @@ export function BackendMethod(options) {
147
158
  x = new ClassHelper();
148
159
  classHelpers.set(target.constructor, x);
149
160
  }
150
- var originalMethod = descriptor.value;
151
161
  let serverAction = {
152
162
  __register(reg) {
153
163
  let c = new Remult();
@@ -156,8 +166,11 @@ export function BackendMethod(options) {
156
166
  if (!controllerOptions.key) {
157
167
  controllerOptions.key = c.repo(constructor).metadata.key;
158
168
  }
159
- reg(controllerOptions.key + '/' + (options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, options ? options.queue : false, options.allowed, async (d, req, res) => {
160
- d.args = d.args.map(x => isCustomUndefined(x) ? undefined : x);
169
+ reg(controllerOptions.key +
170
+ '/' +
171
+ (options?.apiPrefix ? options.apiPrefix + '/' : '') +
172
+ key, options ? options.queue : false, options.allowed, async (d, req, res) => {
173
+ d.args = d.args.map((x) => (isCustomUndefined(x) ? undefined : x));
161
174
  let allowed = options.allowed;
162
175
  try {
163
176
  let remult = req;
@@ -176,11 +189,11 @@ export function BackendMethod(options) {
176
189
  let rows = await repo.find({
177
190
  where: {
178
191
  ...repo.metadata.idMetadata.getIdFilter(d.rowInfo.id),
179
- $and: [repo.metadata.options.apiPrefilter]
180
- }
192
+ $and: [repo.metadata.options.apiPrefilter],
193
+ },
181
194
  });
182
195
  if (rows.length != 1)
183
- throw new Error("not found or too many matches");
196
+ throw new Error('not found or too many matches');
184
197
  y = rows[0];
185
198
  await repo.getEntityRef(y)._updateEntityBasedOnApi(d.rowInfo.data);
186
199
  }
@@ -195,8 +208,8 @@ export function BackendMethod(options) {
195
208
  data: await defs.toApiJson(),
196
209
  isNewRow: defs.isNew(),
197
210
  wasChanged: defs.wasChanged(),
198
- id: defs.getOriginalId()
199
- }
211
+ id: defs.getOriginalId(),
212
+ },
200
213
  };
201
214
  }
202
215
  catch (err) {
@@ -213,7 +226,7 @@ export function BackendMethod(options) {
213
226
  try {
214
227
  r = {
215
228
  result: await originalMethod.apply(y, d.args),
216
- fields: await controllerRef.toApiJson()
229
+ fields: await controllerRef.toApiJson(),
217
230
  };
218
231
  }
219
232
  catch (err) {
@@ -224,7 +237,8 @@ export function BackendMethod(options) {
224
237
  res.success(r);
225
238
  }
226
239
  catch (err) {
227
- if (err.isForbiddenError) // got a problem in next with instance of ForbiddenError - so replaced it with this bool
240
+ if (err.isForbiddenError)
241
+ // got a problem in next with instance of ForbiddenError - so replaced it with this bool
228
242
  res.forbidden();
229
243
  else
230
244
  res.error(err);
@@ -239,19 +253,22 @@ export function BackendMethod(options) {
239
253
  await defs.__validateEntity();
240
254
  let classOptions = x.classes.get(self.constructor);
241
255
  if (!classOptions.key) {
242
- classOptions.key = defs.repository.metadata.key + "_methods";
256
+ classOptions.key = defs.repository.metadata.key + '_methods';
243
257
  }
244
258
  try {
245
- let r = await (new class extends Action {
246
- }(classOptions.key + "/" + (options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, options ? options.queue : false, options.allowed).run({
259
+ let r = await new (class extends Action {
260
+ })(classOptions.key +
261
+ '/' +
262
+ (options?.apiPrefix ? options.apiPrefix + '/' : '') +
263
+ key, options ? options.queue : false, options.allowed).run({
247
264
  args,
248
265
  rowInfo: {
249
266
  data: await defs.toApiJson(),
250
267
  isNewRow: defs.isNew(),
251
268
  wasChanged: defs.wasChanged(),
252
- id: defs.getOriginalId()
253
- }
254
- }, baseUrl, http));
269
+ id: defs.getOriginalId(),
270
+ },
271
+ }, baseUrl, http);
255
272
  await defs._updateEntityBasedOnApi(r.rowInfo.data);
256
273
  return r.result;
257
274
  }
@@ -263,11 +280,14 @@ export function BackendMethod(options) {
263
280
  let defs = getControllerRef(self, undefined);
264
281
  try {
265
282
  await defs.__validateEntity();
266
- let r = await (new class extends Action {
267
- }(x.classes.get(self.constructor).key + "/" + (options?.apiPrefix ? (options.apiPrefix + '/') : '') + key, options ? options.queue : false, options.allowed).run({
283
+ let r = await new (class extends Action {
284
+ })(x.classes.get(self.constructor).key +
285
+ '/' +
286
+ (options?.apiPrefix ? options.apiPrefix + '/' : '') +
287
+ key, options ? options.queue : false, options.allowed).run({
268
288
  args,
269
- fields: await defs.toApiJson()
270
- }, baseUrl, http));
289
+ fields: await defs.toApiJson(),
290
+ }, baseUrl, http);
271
291
  await defs._updateEntityBasedOnApi(r.fields);
272
292
  return r.result;
273
293
  }
@@ -275,27 +295,33 @@ export function BackendMethod(options) {
275
295
  throw defs.catchSaveErrors(e);
276
296
  }
277
297
  }
278
- }
298
+ },
279
299
  };
280
- descriptor.value = async function (...args) {
281
- if (!actionInfo.runningOnServer) {
300
+ result = async function (...args) {
301
+ if (!isBackend()) {
282
302
  let self = this;
283
303
  return serverAction.doWork(args, self);
284
304
  }
285
305
  else
286
- return (await originalMethod.apply(this, args));
306
+ return await originalMethod.apply(this, args);
287
307
  };
288
- registerAction(target.constructor, descriptor);
289
- descriptor.value[serverActionField] = serverAction;
290
- return descriptor;
308
+ registerAction(target.constructor, result);
309
+ result[serverActionField] = serverAction;
310
+ if (descriptor) {
311
+ descriptor.value = result;
312
+ return descriptor;
313
+ }
314
+ else
315
+ return result;
291
316
  };
292
317
  }
293
318
  const customUndefined = {
294
- _isUndefined: true
319
+ _isUndefined: true,
295
320
  };
296
- function registerAction(target, descriptor) {
297
- (target[classBackendMethodsArray] || (target[classBackendMethodsArray] = [])).push(descriptor.value);
298
- actionInfo.allActions.push(descriptor.value);
321
+ function registerAction(target, resultMethod) {
322
+ ;
323
+ (target[classBackendMethodsArray] || (target[classBackendMethodsArray] = [])).push(resultMethod);
324
+ actionInfo.allActions.push(resultMethod);
299
325
  }
300
326
  function isCustomUndefined(x) {
301
327
  return x && x._isUndefined;
@@ -332,7 +358,7 @@ export function prepareArgsToSend(types, args) {
332
358
  }
333
359
  }
334
360
  }
335
- return args.map(x => x !== undefined ? x : customUndefined);
361
+ return args.map((x) => (x !== undefined ? x : customUndefined));
336
362
  }
337
363
  export async function prepareReceivedArgs(types, args, remult, ds, res) {
338
364
  for (let index = 0; index < args.length; index++) {
@@ -1,9 +1,9 @@
1
- import { ClassType } from "../../classType";
2
- import { Remult } from "../context";
3
- import { DataProvider } from "../data-interfaces";
4
- import { Repository } from "../remult3";
5
- import { CategoriesForTesting } from "../tests/remult-3-entities";
6
- import { Status } from "../tests/testModel/models";
1
+ import { ClassType } from '../../classType';
2
+ import { Remult } from '../context';
3
+ import { DataProvider } from '../data-interfaces';
4
+ import { Repository } from '../remult3';
5
+ import { CategoriesForTesting } from '../tests/remult-3-entities';
6
+ import { Status } from '../tests/testModel/models';
7
7
  export declare function itWithFocus(key: string, what: () => Promise<void>, focus?: boolean): void;
8
8
  export declare function testAll(key: string, what: dbTestWhatSignature, focus?: boolean, options?: {
9
9
  exclude?: string[];
@@ -15,11 +15,11 @@ export declare const TestDbs: {
15
15
  mongo: string;
16
16
  inMemory: string;
17
17
  };
18
- export declare type dbTestWhatSignature = ((db: {
18
+ export declare type dbTestWhatSignature = (db: {
19
19
  db: DataProvider;
20
20
  remult: Remult;
21
21
  createEntity<entityType>(entity: ClassType<entityType>): Promise<Repository<entityType>>;
22
- }) => Promise<void>);
22
+ }) => Promise<void>;
23
23
  export declare type dbTestMethodSignature = ((key: string, what: dbTestWhatSignature, focus: boolean) => void) & {
24
24
  key?: string;
25
25
  };