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
@@ -0,0 +1,226 @@
1
+ import './frontend-database-tests-setup.spec';
2
+ import { Remult } from "../context";
3
+ import { DataApi, serializeError } from "../data-api";
4
+ import { InMemoryDataProvider } from "../data-providers/in-memory-database";
5
+ import { RestEntityDataProvider } from "../data-providers/rest-data-provider";
6
+ import { SqlDatabase } from "../data-providers/sql-database";
7
+ import { WebSqlDataProvider } from "../data-providers/web-sql-data-provider";
8
+ import { actionInfo, serverActionField } from "../server-action";
9
+ import { testConfiguration } from '../shared-tests/entityWithValidations';
10
+ import { TestDataApiResponse } from './TestDataApiResponse';
11
+ import { remult } from '../remult-proxy';
12
+ import { HttpProviderBridgeToRestDataProviderHttpProvider } from '../buildRestDataProvider';
13
+ jasmine.DEFAULT_TIMEOUT_INTERVAL = 999999;
14
+ //actionInfo.runningOnServer = false;
15
+ export function itForEach(name, arrayOfT, runAsync) {
16
+ arrayOfT.forEach(i => {
17
+ it(name + ' - ' + i, (done) => {
18
+ runAsync(i).catch(e => {
19
+ fail(e);
20
+ done();
21
+ }).then(done, e => {
22
+ fail(e);
23
+ done();
24
+ });
25
+ });
26
+ });
27
+ }
28
+ export function fitForEach(name, arrayOfT, runAsync) {
29
+ arrayOfT.forEach(i => {
30
+ fit(name + ' - ' + i, (done) => {
31
+ runAsync(i).catch(e => {
32
+ fail(e);
33
+ done();
34
+ }).then(done, e => {
35
+ fail(e);
36
+ done();
37
+ });
38
+ });
39
+ });
40
+ }
41
+ export async function testAsIfOnBackend(what) {
42
+ try {
43
+ actionInfo.runningOnServer = true;
44
+ await what();
45
+ }
46
+ finally {
47
+ actionInfo.runningOnServer = false;
48
+ }
49
+ }
50
+ export const ActionTestConfig = {
51
+ db: new InMemoryDataProvider()
52
+ };
53
+ remult.apiClient.httpClient = {
54
+ delete: () => undefined,
55
+ get: () => undefined,
56
+ post: async (urlreq, data) => {
57
+ return await new Promise((res, r) => {
58
+ let found = false;
59
+ actionInfo.allActions.forEach(action => {
60
+ action[serverActionField].
61
+ __register((url, queue, allowed, what) => {
62
+ if ('/api/' + url == urlreq) {
63
+ found = true;
64
+ let t = new TestDataApiResponse();
65
+ actionInfo.runningOnServer = true;
66
+ t.success = data => {
67
+ res(data);
68
+ actionInfo.runningOnServer = false;
69
+ };
70
+ t.error = data => {
71
+ r(JSON.parse(JSON.stringify(serializeError(data))));
72
+ actionInfo.runningOnServer = false;
73
+ };
74
+ t.forbidden = () => {
75
+ r({ status: 403, message: "forbidden" });
76
+ actionInfo.runningOnServer = false;
77
+ };
78
+ let remult = new Remult();
79
+ remult.dataProvider = (ActionTestConfig.db);
80
+ what(JSON.parse(JSON.stringify(data)), remult, t);
81
+ }
82
+ });
83
+ });
84
+ if (!found) {
85
+ r("did not find " + urlreq);
86
+ }
87
+ });
88
+ },
89
+ put: () => undefined
90
+ };
91
+ export async function testSql(runAsync) {
92
+ let webSql = new WebSqlDataProvider('test');
93
+ const sql = new SqlDatabase(webSql);
94
+ for (const r of await (await sql.execute("select name from sqlite_master where type='table'")).rows) {
95
+ switch (r.name) {
96
+ case "__WebKitDatabaseInfoTable__":
97
+ break;
98
+ default:
99
+ await sql.execute("drop table if exists " + r.name);
100
+ }
101
+ }
102
+ let remult = new Remult();
103
+ remult.dataProvider = (sql);
104
+ await runAsync({ db: sql, remult });
105
+ }
106
+ export async function testInMemoryDb(runAsync) {
107
+ let db = new InMemoryDataProvider();
108
+ remult.dataProvider = (db);
109
+ await runAsync({ db, remult });
110
+ }
111
+ export async function testRestDb(runAsync) {
112
+ let r = new Remult();
113
+ r.dataProvider = (new InMemoryDataProvider());
114
+ let remult = new Remult();
115
+ let db = new MockRestDataProvider(r);
116
+ remult.dataProvider = (db);
117
+ await runAsync({ db, remult });
118
+ }
119
+ export async function testAllDataProviders(runAsync) {
120
+ await testSql(runAsync);
121
+ await testInMemoryDb(runAsync);
122
+ await testRestDb(runAsync);
123
+ }
124
+ function urlToReq(url) {
125
+ let args = new Map();
126
+ let params = url?.split('?')[1]?.split('&');
127
+ if (params)
128
+ for (const p of params) {
129
+ if (!p)
130
+ continue;
131
+ let z = p.split('=');
132
+ let key = decodeURIComponent(z[0]);
133
+ let value = decodeURIComponent(z[1]);
134
+ let x = args.get(key);
135
+ if (x === undefined) {
136
+ args.set(key, value);
137
+ }
138
+ else if (Array.isArray(x))
139
+ x.push(value);
140
+ else
141
+ args.set(key, [args.get(key), value]);
142
+ }
143
+ let req = {
144
+ get: (key) => {
145
+ let r = args.get(key);
146
+ if (r !== undefined) {
147
+ r.toString();
148
+ }
149
+ return r;
150
+ }
151
+ };
152
+ return req;
153
+ }
154
+ export class MockRestDataProvider {
155
+ remult;
156
+ constructor(remult) {
157
+ this.remult = remult;
158
+ }
159
+ getEntityDataProvider(metadata) {
160
+ let dataApi = new DataApi(this.remult.repo(metadata.entityType), this.remult);
161
+ return new RestEntityDataProvider(() => "", () => createMockHttpDataProvider(dataApi), metadata);
162
+ }
163
+ transaction(action) {
164
+ throw new Error('Method not implemented.');
165
+ }
166
+ isProxy = true;
167
+ }
168
+ export function createMockHttpDataProvider(dataApi) {
169
+ return new HttpProviderBridgeToRestDataProviderHttpProvider({
170
+ delete: async (url) => {
171
+ let urlSplit = url.split('/');
172
+ let r = new TestDataApiResponse();
173
+ let result;
174
+ r.deleted = () => { };
175
+ try {
176
+ testConfiguration.restDbRunningOnServer = true;
177
+ await dataApi.delete(r, urlSplit[urlSplit.length - 1]);
178
+ }
179
+ finally {
180
+ testConfiguration.restDbRunningOnServer = false;
181
+ }
182
+ return result;
183
+ },
184
+ get: async (url) => {
185
+ let r = new TestDataApiResponse();
186
+ let result;
187
+ r.success = data => { result = data; };
188
+ try {
189
+ testConfiguration.restDbRunningOnServer = true;
190
+ await dataApi.httpGet(r, urlToReq(url), async () => "");
191
+ }
192
+ finally {
193
+ testConfiguration.restDbRunningOnServer = false;
194
+ }
195
+ return result;
196
+ },
197
+ post: async (url, data) => {
198
+ let r = new TestDataApiResponse();
199
+ let result;
200
+ r.created = data => { result = data; };
201
+ r.success = data => { result = data; };
202
+ try {
203
+ testConfiguration.restDbRunningOnServer = true;
204
+ await dataApi.httpPost(r, urlToReq(url), data, async () => ({}));
205
+ }
206
+ finally {
207
+ testConfiguration.restDbRunningOnServer = false;
208
+ }
209
+ return result;
210
+ },
211
+ put: async (url, data) => {
212
+ let urlSplit = url.split('/');
213
+ let r = new TestDataApiResponse();
214
+ let result;
215
+ r.success = data => { result = data; };
216
+ try {
217
+ testConfiguration.restDbRunningOnServer = true;
218
+ await dataApi.put(r, urlSplit[urlSplit.length - 1], data);
219
+ }
220
+ finally {
221
+ testConfiguration.restDbRunningOnServer = false;
222
+ }
223
+ return result;
224
+ }
225
+ });
226
+ }
@@ -0,0 +1,16 @@
1
+ export declare class Status {
2
+ id: number;
3
+ name: string;
4
+ static open: Status;
5
+ static closed: Status;
6
+ static hold: Status;
7
+ constructor(id: number, name: string);
8
+ }
9
+ export declare class TestStatus {
10
+ id?: string | undefined;
11
+ caption?: string | undefined;
12
+ static open: TestStatus;
13
+ static closed: TestStatus;
14
+ static hold: TestStatus;
15
+ constructor(id?: string | undefined, caption?: string | undefined);
16
+ }
@@ -0,0 +1,25 @@
1
+ import { ValueListFieldType } from "../../remult3";
2
+ @ValueListFieldType()
3
+ export class Status {
4
+ id;
5
+ name;
6
+ static open = new Status(0, "open");
7
+ static closed = new Status(1, "closed");
8
+ static hold = new Status(2, "hold");
9
+ constructor(id, name) {
10
+ this.id = id;
11
+ this.name = name;
12
+ }
13
+ }
14
+ @ValueListFieldType()
15
+ export class TestStatus {
16
+ id;
17
+ caption;
18
+ static open = new TestStatus();
19
+ static closed = new TestStatus('cc');
20
+ static hold = new TestStatus(undefined, 'hh');
21
+ constructor(id, caption) {
22
+ this.id = id;
23
+ this.caption = caption;
24
+ }
25
+ }
@@ -0,0 +1,14 @@
1
+ import { FieldRef } from "./remult3";
2
+ export declare class Validators {
3
+ static required: ((entity: any, col: FieldRef<any, string>, message?: undefined) => void) & {
4
+ withMessage: (message: string) => (entity: any, col: FieldRef<any, string>) => void;
5
+ defaultMessage: string;
6
+ };
7
+ static unique: ((entity: any, col: FieldRef<any, any>, message?: undefined) => Promise<void>) & {
8
+ withMessage: (message: string) => (entity: any, col: FieldRef<any, any>) => Promise<void>;
9
+ defaultMessage: string;
10
+ };
11
+ static uniqueOnBackend: ((entity: any, col: FieldRef<any, any>, message?: undefined) => Promise<void>) & {
12
+ withMessage: (message: string) => (entity: any, col: FieldRef<any, any>) => Promise<void>;
13
+ };
14
+ }
@@ -0,0 +1,33 @@
1
+ import { isBackend } from "./context";
2
+ export class Validators {
3
+ static required = Object.assign((entity, col, message = undefined) => {
4
+ if (!col.value || typeof (col.value) === "string" && col.value.trim().length == 0)
5
+ col.error = message || Validators.required.defaultMessage;
6
+ }, {
7
+ withMessage: (message) => {
8
+ return (entity, col) => Validators.required(entity, col, message);
9
+ },
10
+ defaultMessage: 'Should not be empty'
11
+ });
12
+ static unique = Object.assign(async (entity, col, message = undefined) => {
13
+ if (!col.entityRef)
14
+ throw "unique validation may only work on columns that are attached to an entity";
15
+ if (col.entityRef.isNew() || col.valueChanged()) {
16
+ if (await col.entityRef.repository.count({ [col.metadata.key]: col.value }))
17
+ col.error = message || Validators.unique.defaultMessage;
18
+ }
19
+ }, {
20
+ withMessage: (message) => {
21
+ return (entity, col) => Validators.unique(entity, col, message);
22
+ },
23
+ defaultMessage: 'already exists'
24
+ });
25
+ static uniqueOnBackend = Object.assign(async (entity, col, message = undefined) => {
26
+ if (isBackend())
27
+ return Validators.unique(entity, col, message);
28
+ }, {
29
+ withMessage: (message) => {
30
+ return (entity, col) => Validators.uniqueOnBackend(entity, col, message);
31
+ }
32
+ });
33
+ }
@@ -0,0 +1,13 @@
1
+ import { ValueConverter } from "./column-interfaces";
2
+ export declare class ValueConverters {
3
+ static readonly Date: ValueConverter<Date>;
4
+ static readonly DateOnly: ValueConverter<Date>;
5
+ static readonly DateOnlyString: ValueConverter<Date>;
6
+ static readonly Boolean: ValueConverter<Boolean>;
7
+ static readonly Number: ValueConverter<number>;
8
+ static readonly String: ValueConverter<String>;
9
+ static readonly Integer: ValueConverter<number>;
10
+ static readonly Default: Required<ValueConverter<any>>;
11
+ static readonly JsonString: ValueConverter<any>;
12
+ static readonly JsonValue: ValueConverter<any>;
13
+ }
@@ -0,0 +1,197 @@
1
+ import { InputTypes } from "../inputTypes";
2
+ export class ValueConverters {
3
+ static Date = {
4
+ toJson: (val) => {
5
+ if (val === null)
6
+ return null;
7
+ if (!val)
8
+ return '';
9
+ if (typeof (val) === "string")
10
+ val = new Date(val);
11
+ if (val instanceof Date) {
12
+ return val.toISOString();
13
+ }
14
+ else {
15
+ throw new Error("Expected date but got " + val);
16
+ }
17
+ },
18
+ fromJson: (val) => {
19
+ if (val === null)
20
+ return null;
21
+ if (val == undefined)
22
+ return undefined;
23
+ if (val == '')
24
+ return undefined;
25
+ if (val.startsWith('0000-00-00'))
26
+ return undefined;
27
+ return new Date(Date.parse(val));
28
+ },
29
+ toDb: x => x,
30
+ fromDb: val => {
31
+ if (typeof val === "number")
32
+ val = new Date(val);
33
+ if (typeof (val) === "string")
34
+ val = new Date(val);
35
+ if (val && !(val instanceof Date))
36
+ throw "expected date but got " + val;
37
+ return val;
38
+ },
39
+ fromInput: x => ValueConverters.Date.fromJson(x),
40
+ toInput: x => ValueConverters.Date.toJson(x),
41
+ displayValue: (val) => {
42
+ if (!val)
43
+ return '';
44
+ return val.toLocaleString();
45
+ }
46
+ };
47
+ static DateOnly = {
48
+ fromInput: x => ValueConverters.DateOnly.fromJson(x),
49
+ toInput: x => ValueConverters.DateOnly.toJson(x),
50
+ toJson: (val) => {
51
+ var d = val;
52
+ if (typeof d === "string" || typeof (d) === "number")
53
+ d = new Date(d);
54
+ if (!d || d == null)
55
+ return null;
56
+ if (d.getHours() == 0)
57
+ return new Date(d.valueOf() - d.getTimezoneOffset() * 60000).toISOString().substring(0, 10);
58
+ else
59
+ return d.toISOString().substring(0, 10);
60
+ },
61
+ fromJson: (value) => {
62
+ if (!value || value == '' || value == '0000-00-00')
63
+ return null;
64
+ let d = new Date(Date.parse(value));
65
+ d.setMinutes(d.getMinutes() + d.getTimezoneOffset());
66
+ return d;
67
+ },
68
+ inputType: InputTypes.date,
69
+ toDb: (val) => {
70
+ if (!val)
71
+ return null;
72
+ return ValueConverters.DateOnly.fromJson(ValueConverters.DateOnly.toJson(val));
73
+ } //when using date storage, the database expects and returns a date local and every where else we reflect on date iso
74
+ ,
75
+ fromDb: (val) => {
76
+ return ValueConverters.Date.fromDb(val);
77
+ },
78
+ fieldTypeInDb: 'date',
79
+ displayValue: (value) => {
80
+ if (!value)
81
+ return '';
82
+ return value.toLocaleDateString(undefined);
83
+ }
84
+ };
85
+ static DateOnlyString = {
86
+ ...ValueConverters.DateOnly,
87
+ toDb: (d) => {
88
+ let val = ValueConverters.DateOnly.toJson(d);
89
+ if (!val)
90
+ return undefined;
91
+ return val.replace(/-/g, '');
92
+ },
93
+ fromDb: (val) => {
94
+ if (val === null)
95
+ return null;
96
+ if (!val)
97
+ return undefined;
98
+ return new Date(val.substring(0, 4) + '-' + val.substring(4, 6) + '-' + val.substring(6, 8));
99
+ }
100
+ };
101
+ static Boolean = {
102
+ toDb: (val) => val,
103
+ inputType: InputTypes.checkbox,
104
+ fromDb: (value) => {
105
+ return ValueConverters.Boolean.fromJson(value);
106
+ },
107
+ fromJson: value => {
108
+ if (typeof value === "boolean")
109
+ return value;
110
+ if (value === 1)
111
+ return true;
112
+ if (value !== undefined && value !== null) {
113
+ return value.toString().trim().toLowerCase() == 'true';
114
+ }
115
+ return value;
116
+ },
117
+ toJson: x => x,
118
+ fromInput: x => ValueConverters.Boolean.fromJson(x),
119
+ toInput: x => ValueConverters.Boolean.toJson(x)
120
+ };
121
+ static Number = {
122
+ fromDb: value => {
123
+ if (value === null)
124
+ return null;
125
+ if (value !== undefined)
126
+ return +value;
127
+ return undefined;
128
+ },
129
+ toDb: value => value,
130
+ fromJson: value => ValueConverters.Number.fromDb(value),
131
+ toJson: value => ValueConverters.Number.toDb(value),
132
+ fromInput: (x, type) => {
133
+ let r = +x;
134
+ if (!x)
135
+ return undefined;
136
+ return r;
137
+ },
138
+ toInput: (x, type) => {
139
+ return x?.toString();
140
+ },
141
+ inputType: InputTypes.number
142
+ };
143
+ static String = {
144
+ fromDb: enforceString,
145
+ toDb: enforceString,
146
+ fromJson: enforceString,
147
+ toJson: enforceString,
148
+ fromInput: enforceString,
149
+ toInput: enforceString,
150
+ };
151
+ static Integer = {
152
+ ...ValueConverters.Number,
153
+ toJson: value => {
154
+ let val = ValueConverters.Number.toDb(value);
155
+ if (!val)
156
+ return val;
157
+ return +(+val).toFixed(0);
158
+ },
159
+ toDb: value => ValueConverters.Integer.toJson(value),
160
+ fieldTypeInDb: 'integer'
161
+ };
162
+ static Default = {
163
+ fromJson: x => x,
164
+ toJson: x => x,
165
+ fromDb: x => ValueConverters.JsonString.fromDb(x),
166
+ toDb: x => ValueConverters.JsonString.toDb(x),
167
+ fromInput: x => ValueConverters.Default.fromJson(x),
168
+ toInput: x => ValueConverters.Default.toJson(x),
169
+ displayValue: x => x + '',
170
+ fieldTypeInDb: '',
171
+ inputType: 'text'
172
+ };
173
+ static JsonString = {
174
+ fromJson: x => x,
175
+ toJson: x => x,
176
+ fromDb: x => x == null ? null : x ? JSON.parse(ValueConverters.JsonString.fromJson(x)) : undefined,
177
+ toDb: x => x !== undefined ? x === null ? null : JSON.stringify(ValueConverters.JsonString.toJson(x)) : undefined,
178
+ fromInput: x => ValueConverters.JsonString.fromJson(x),
179
+ toInput: x => ValueConverters.JsonString.toJson(x)
180
+ };
181
+ static JsonValue = {
182
+ fromJson: x => x,
183
+ toJson: x => x,
184
+ fromDb: x => x,
185
+ toDb: x => x,
186
+ fromInput: x => ValueConverters.JsonString.fromJson(x),
187
+ toInput: x => ValueConverters.JsonString.toJson(x),
188
+ fieldTypeInDb: 'json'
189
+ };
190
+ }
191
+ function enforceString(value) {
192
+ if (value === null || value === undefined)
193
+ return value;
194
+ if (typeof (value) !== "string")
195
+ return value.toString();
196
+ return value;
197
+ }
@@ -0,0 +1,6 @@
1
+ export declare class UrlBuilder {
2
+ url: string;
3
+ constructor(url: string);
4
+ add(key: string, value: any): void;
5
+ addObject(object: any, suffix?: string): void;
6
+ }
@@ -0,0 +1,20 @@
1
+ export class UrlBuilder {
2
+ url;
3
+ constructor(url) {
4
+ this.url = url;
5
+ }
6
+ add(key, value) {
7
+ if (this.url.indexOf('?') >= 0)
8
+ this.url += '&';
9
+ else
10
+ this.url += '?';
11
+ this.url += encodeURIComponent(key) + '=' + encodeURIComponent(value);
12
+ }
13
+ addObject(object, suffix = '') {
14
+ if (object != undefined)
15
+ for (var key in object) {
16
+ let val = object[key];
17
+ this.add(key + suffix, val);
18
+ }
19
+ }
20
+ }