remult 0.22.5 → 0.22.6-exp.2

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 (358) hide show
  1. package/esm/graphql.js +29 -28
  2. package/esm/internals.js +7 -0
  3. package/esm/migrations/compare-migration-snapshots.js +61 -0
  4. package/esm/migrations/generate-migrations.js +68 -0
  5. package/esm/migrations/index.js +2 -0
  6. package/esm/migrations/migrate.js +85 -0
  7. package/esm/migrations/migration-types.js +36 -0
  8. package/esm/migrations/update-migrations-ts-file.js +115 -0
  9. package/esm/package.json +3 -0
  10. package/esm/postgres/schema-builder.js +4 -4
  11. package/esm/remult-better-sqlite3.js +47 -0
  12. package/esm/remult-bun-sqlite.js +41 -0
  13. package/esm/remult-duckdb.js +111 -0
  14. package/esm/remult-hapi.js +114 -0
  15. package/esm/remult-hono.js +104 -0
  16. package/esm/remult-mongo.js +1 -1
  17. package/esm/remult-nuxt.js +54 -0
  18. package/esm/remult-solid-start.js +97 -0
  19. package/esm/remult-sql-js.js +41 -0
  20. package/esm/remult-sqlite-core.js +137 -0
  21. package/esm/remult-sqlite3.js +61 -0
  22. package/esm/remult-turso.js +59 -0
  23. package/esm/server/get-remult-admin-html.js +3 -0
  24. package/esm/server/initDataProviderOrJson.js +6 -0
  25. package/esm/server/remult-admin.js +95 -0
  26. package/esm/server/remult-api-server.js +1157 -0
  27. package/esm/src/CompoundIdField.js +62 -0
  28. package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +11 -10
  29. package/esm/src/data-api.js +4 -2
  30. package/esm/src/data-providers/json-entity-opfs-storage.js +26 -0
  31. package/esm/src/isOfType.js +9 -0
  32. package/esm/src/live-query/SubscriptionServer.js +2 -2
  33. package/esm/src/remult-static.js +43 -0
  34. package/esm/src/remult3/Fields.js +335 -0
  35. package/esm/src/remult3/IdEntity.js +10 -0
  36. package/esm/src/remult3/RepositoryImplementation.js +7 -4
  37. package/esm/src/remult3/__updateEntityBasedOnWhere.js +28 -0
  38. package/esm/src/remult3/addValidator.js +15 -0
  39. package/esm/{core/src/remult3/DecoratorReplacer.js → src/remult3/classDescribers.js} +18 -3
  40. package/esm/src/remult3/entity.js +70 -0
  41. package/esm/src/remult3/getEntityRef.js +36 -0
  42. package/esm/src/remult3/relation-loader.js +153 -0
  43. package/esm/src/remult3/relationInfoMember.js +116 -0
  44. package/esm/src/remult3/repository-internals.js +7 -0
  45. package/esm/src/server-action-info.js +1 -0
  46. package/esm/src/shared-tests/db-tests.db-tests.js +1 -1
  47. package/graphql.js +2 -1
  48. package/internals.d.ts +15 -0
  49. package/internals.js +18 -0
  50. package/migrations/compare-migration-snapshots.d.ts +27 -0
  51. package/migrations/compare-migration-snapshots.js +164 -0
  52. package/migrations/generate-migrations.d.ts +21 -0
  53. package/migrations/generate-migrations.js +103 -0
  54. package/migrations/index.d.ts +3 -0
  55. package/migrations/index.js +7 -0
  56. package/migrations/migrate.d.ts +27 -0
  57. package/migrations/migrate.js +170 -0
  58. package/migrations/migration-types.d.ts +48 -0
  59. package/migrations/migration-types.js +88 -0
  60. package/migrations/update-migrations-ts-file.d.ts +1 -0
  61. package/migrations/update-migrations-ts-file.js +140 -0
  62. package/package.json +1 -1
  63. package/remult-better-sqlite3.d.ts +12 -0
  64. package/remult-better-sqlite3.js +64 -0
  65. package/remult-bun-sqlite.d.ts +11 -0
  66. package/remult-bun-sqlite.js +56 -0
  67. package/remult-duckdb.d.ts +9 -0
  68. package/remult-duckdb.js +150 -0
  69. package/remult-hapi.d.ts +6 -0
  70. package/remult-hapi.js +127 -0
  71. package/remult-hono.d.ts +7 -0
  72. package/remult-hono.js +115 -0
  73. package/remult-mongo.js +1 -1
  74. package/remult-nuxt.d.ts +6 -0
  75. package/remult-nuxt.js +78 -0
  76. package/remult-solid-start.d.ts +12 -0
  77. package/remult-solid-start.js +133 -0
  78. package/remult-sql-js.d.ts +5 -0
  79. package/remult-sql-js.js +73 -0
  80. package/remult-sqlite-core.d.ts +25 -0
  81. package/remult-sqlite-core.js +314 -0
  82. package/remult-sqlite3.d.ts +5 -0
  83. package/remult-sqlite3.js +76 -0
  84. package/remult-turso.d.ts +8 -0
  85. package/remult-turso.js +100 -0
  86. package/server/get-remult-admin-html.d.ts +1 -0
  87. package/server/get-remult-admin-html.js +6 -0
  88. package/server/initDataProviderOrJson.d.ts +2 -0
  89. package/server/initDataProviderOrJson.js +16 -0
  90. package/server/remult-admin.d.ts +43 -0
  91. package/server/remult-admin.js +123 -0
  92. package/{esm/core/server/expressBridge.d.ts → server/remult-api-server.d.ts} +75 -77
  93. package/server/remult-api-server.js +1626 -0
  94. package/src/CompoundIdField.d.ts +27 -0
  95. package/src/CompoundIdField.js +72 -0
  96. package/src/backend-tests/backend-database-test-setup.backend-spec.js +11 -10
  97. package/src/data-api.js +4 -2
  98. package/src/data-providers/json-entity-opfs-storage.d.ts +5 -0
  99. package/src/data-providers/json-entity-opfs-storage.js +74 -0
  100. package/src/isOfType.d.ts +2 -0
  101. package/src/isOfType.js +13 -0
  102. package/src/live-query/SubscriptionServer.js +2 -2
  103. package/src/remult-static.d.ts +26 -0
  104. package/src/remult-static.js +50 -0
  105. package/src/remult3/Fields.d.ts +170 -0
  106. package/src/remult3/Fields.js +419 -0
  107. package/src/remult3/IdEntity.d.ts +4 -0
  108. package/src/remult3/IdEntity.js +18 -0
  109. package/src/remult3/RepositoryImplementation.js +24 -22
  110. package/src/remult3/__updateEntityBasedOnWhere.d.ts +2 -0
  111. package/src/remult3/__updateEntityBasedOnWhere.js +31 -0
  112. package/src/remult3/addValidator.d.ts +2 -0
  113. package/src/remult3/addValidator.js +19 -0
  114. package/src/remult3/classDescribers.d.ts +16 -0
  115. package/src/remult3/classDescribers.js +40 -0
  116. package/src/remult3/columnInfo.d.ts +6 -0
  117. package/src/remult3/columnInfo.js +2 -0
  118. package/src/remult3/entity.d.ts +28 -0
  119. package/src/remult3/entity.js +86 -0
  120. package/src/remult3/getEntityRef.d.ts +18 -0
  121. package/src/remult3/getEntityRef.js +45 -0
  122. package/src/remult3/relation-loader-types.d.ts +7 -0
  123. package/src/remult3/relation-loader-types.js +2 -0
  124. package/src/remult3/relation-loader.d.ts +40 -0
  125. package/src/remult3/relation-loader.js +245 -0
  126. package/src/remult3/relationInfoMember.d.ts +30 -0
  127. package/src/remult3/relationInfoMember.js +149 -0
  128. package/src/remult3/repository-internals.d.ts +20 -0
  129. package/src/remult3/repository-internals.js +11 -0
  130. package/src/server-action-info.d.ts +1 -0
  131. package/src/server-action-info.js +4 -0
  132. package/src/shared-tests/db-tests.db-tests.js +1 -1
  133. package/esm/angular/interfaces/index.d.ts +0 -1
  134. package/esm/angular/interfaces/index.js +0 -1
  135. package/esm/angular/interfaces/src/column-collection.d.ts +0 -70
  136. package/esm/angular/interfaces/src/column-collection.js +0 -341
  137. package/esm/angular/interfaces/src/data-area-settings.d.ts +0 -15
  138. package/esm/angular/interfaces/src/data-area-settings.js +0 -35
  139. package/esm/angular/interfaces/src/data-control-interfaces.d.ts +0 -36
  140. package/esm/angular/interfaces/src/data-control-interfaces.js +0 -57
  141. package/esm/angular/interfaces/src/dataList.d.ts +0 -13
  142. package/esm/angular/interfaces/src/dataList.js +0 -42
  143. package/esm/angular/interfaces/src/filter-helper.d.ts +0 -13
  144. package/esm/angular/interfaces/src/filter-helper.js +0 -59
  145. package/esm/angular/interfaces/src/grid-settings.d.ts +0 -145
  146. package/esm/angular/interfaces/src/grid-settings.js +0 -387
  147. package/esm/angular/interfaces/src/public_api.d.ts +0 -4
  148. package/esm/angular/interfaces/src/public_api.js +0 -4
  149. package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +0 -4
  150. package/esm/angular/src/angular/RemultAngularPluginsService.js +0 -3
  151. package/esm/angular/src/angular/data-control/data-control2.component.d.ts +0 -49
  152. package/esm/angular/src/angular/data-control/data-control2.component.js +0 -138
  153. package/esm/core/SseSubscriptionServer.d.ts +0 -33
  154. package/esm/core/SseSubscriptionServer.js +0 -107
  155. package/esm/core/assign.d.ts +0 -1
  156. package/esm/core/assign.js +0 -5
  157. package/esm/core/classType.d.ts +0 -3
  158. package/esm/core/index.d.ts +0 -27
  159. package/esm/core/index.js +0 -25
  160. package/esm/core/inputTypes.d.ts +0 -9
  161. package/esm/core/inputTypes.js +0 -9
  162. package/esm/core/live-query/data-provider-live-query-storage.d.ts +0 -22
  163. package/esm/core/live-query/data-provider-live-query-storage.js +0 -71
  164. package/esm/core/postgres/index.d.ts +0 -2
  165. package/esm/core/postgres/index.js +0 -2
  166. package/esm/core/postgres/postgres-data-provider.d.ts +0 -36
  167. package/esm/core/postgres/postgres-data-provider.js +0 -120
  168. package/esm/core/postgres/schema-builder.d.ts +0 -17
  169. package/esm/core/postgres/schema-builder.js +0 -153
  170. package/esm/core/remult-fresh.d.ts +0 -17
  171. package/esm/core/remult-fresh.js +0 -29
  172. package/esm/core/remult-knex/index.d.ts +0 -30
  173. package/esm/core/remult-knex/index.js +0 -446
  174. package/esm/core/remult-mongo.d.ts +0 -24
  175. package/esm/core/remult-mongo.js +0 -254
  176. package/esm/core/server/JsonEntityFileStorage.d.ts +0 -10
  177. package/esm/core/server/JsonEntityFileStorage.js +0 -25
  178. package/esm/core/server/core.d.ts +0 -4
  179. package/esm/core/server/core.js +0 -4
  180. package/esm/core/server/expressBridge.js +0 -938
  181. package/esm/core/server/index.d.ts +0 -6
  182. package/esm/core/server/index.js +0 -9
  183. package/esm/core/server/initAsyncHooks.d.ts +0 -1
  184. package/esm/core/server/initAsyncHooks.js +0 -9
  185. package/esm/core/server/initDataProvider.d.ts +0 -2
  186. package/esm/core/server/initDataProvider.js +0 -14
  187. package/esm/core/src/__EntityValueProvider.d.ts +0 -11
  188. package/esm/core/src/__RowsOfDataForTesting.d.ts +0 -3
  189. package/esm/core/src/__RowsOfDataForTesting.js +0 -1
  190. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -6
  191. package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +0 -147
  192. package/esm/core/src/backend-tests/my-test.backend-spec.d.ts +0 -1
  193. package/esm/core/src/backend-tests/my-test.backend-spec.js +0 -197
  194. package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
  195. package/esm/core/src/backend-tests/test-http-server.backend-spec.js +0 -167
  196. package/esm/core/src/buildRestDataProvider.d.ts +0 -31
  197. package/esm/core/src/buildRestDataProvider.js +0 -113
  198. package/esm/core/src/column-interfaces.d.ts +0 -154
  199. package/esm/core/src/column-interfaces.js +0 -7
  200. package/esm/core/src/column.d.ts +0 -58
  201. package/esm/core/src/column.js +0 -174
  202. package/esm/core/src/context.d.ts +0 -134
  203. package/esm/core/src/context.js +0 -286
  204. package/esm/core/src/data-api.d.ts +0 -39
  205. package/esm/core/src/data-api.js +0 -279
  206. package/esm/core/src/data-interfaces.d.ts +0 -41
  207. package/esm/core/src/data-interfaces.js +0 -12
  208. package/esm/core/src/data-providers/array-entity-data-provider.d.ts +0 -22
  209. package/esm/core/src/data-providers/array-entity-data-provider.js +0 -252
  210. package/esm/core/src/data-providers/in-memory-database.d.ts +0 -9
  211. package/esm/core/src/data-providers/in-memory-database.js +0 -14
  212. package/esm/core/src/data-providers/json-data-provider.d.ts +0 -12
  213. package/esm/core/src/data-providers/json-data-provider.js +0 -55
  214. package/esm/core/src/data-providers/rest-data-provider.d.ts +0 -49
  215. package/esm/core/src/data-providers/rest-data-provider.js +0 -256
  216. package/esm/core/src/data-providers/sql-database.d.ts +0 -33
  217. package/esm/core/src/data-providers/sql-database.js +0 -384
  218. package/esm/core/src/data-providers/web-sql-data-provider.d.ts +0 -24
  219. package/esm/core/src/data-providers/web-sql-data-provider.js +0 -143
  220. package/esm/core/src/entity.d.ts +0 -91
  221. package/esm/core/src/entity.js +0 -1
  222. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -50
  223. package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +0 -150
  224. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -1
  225. package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +0 -1
  226. package/esm/core/src/filter/filter-interfaces.d.ts +0 -85
  227. package/esm/core/src/filter/filter-interfaces.js +0 -477
  228. package/esm/core/src/live-query/LiveQueryClient.d.ts +0 -20
  229. package/esm/core/src/live-query/LiveQueryClient.js +0 -188
  230. package/esm/core/src/live-query/SseSubscriptionClient.d.ts +0 -5
  231. package/esm/core/src/live-query/SseSubscriptionClient.js +0 -86
  232. package/esm/core/src/live-query/SubscriptionChannel.d.ts +0 -72
  233. package/esm/core/src/live-query/SubscriptionChannel.js +0 -123
  234. package/esm/core/src/live-query/SubscriptionServer.d.ts +0 -53
  235. package/esm/core/src/live-query/SubscriptionServer.js +0 -111
  236. package/esm/core/src/live-query/live-query-tests.spec.d.ts +0 -6
  237. package/esm/core/src/live-query/live-query-tests.spec.js +0 -952
  238. package/esm/core/src/remult-proxy.d.ts +0 -35
  239. package/esm/core/src/remult-proxy.js +0 -113
  240. package/esm/core/src/remult3/DecoratorReplacer.d.ts +0 -10
  241. package/esm/core/src/remult3/RepositoryImplementation.d.ts +0 -355
  242. package/esm/core/src/remult3/RepositoryImplementation.js +0 -2109
  243. package/esm/core/src/remult3/index.d.ts +0 -2
  244. package/esm/core/src/remult3/index.js +0 -2
  245. package/esm/core/src/remult3/remult3.d.ts +0 -395
  246. package/esm/core/src/remult3/remult3.js +0 -2
  247. package/esm/core/src/server-action.d.ts +0 -81
  248. package/esm/core/src/server-action.js +0 -394
  249. package/esm/core/src/shared-tests/db-tests-setup.d.ts +0 -32
  250. package/esm/core/src/shared-tests/db-tests-setup.js +0 -78
  251. package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +0 -25
  252. package/esm/core/src/shared-tests/db-tests.db-tests.js +0 -810
  253. package/esm/core/src/shared-tests/deleteAll.d.ts +0 -2
  254. package/esm/core/src/shared-tests/deleteAll.js +0 -4
  255. package/esm/core/src/shared-tests/entityWithValidations.d.ts +0 -14
  256. package/esm/core/src/shared-tests/entityWithValidations.js +0 -43
  257. package/esm/core/src/shared-tests/index.d.ts +0 -4
  258. package/esm/core/src/shared-tests/index.js +0 -4
  259. package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +0 -1
  260. package/esm/core/src/shared-tests/test-custom-id-column.spec.js +0 -67
  261. package/esm/core/src/shared-tests/test-special-value.spec.d.ts +0 -10
  262. package/esm/core/src/shared-tests/test-special-value.spec.js +0 -73
  263. package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +0 -1
  264. package/esm/core/src/shared-tests/test-update-with-null.spec.js +0 -31
  265. package/esm/core/src/sort.d.ts +0 -16
  266. package/esm/core/src/sort.js +0 -103
  267. package/esm/core/src/sql-command.d.ts +0 -19
  268. package/esm/core/src/sql-command.js +0 -1
  269. package/esm/core/src/test.d.ts +0 -3
  270. package/esm/core/src/test.js +0 -12
  271. package/esm/core/src/tests/Done.d.ts +0 -5
  272. package/esm/core/src/tests/Done.js +0 -9
  273. package/esm/core/src/tests/RowProvider.spec.d.ts +0 -16
  274. package/esm/core/src/tests/RowProvider.spec.js +0 -631
  275. package/esm/core/src/tests/TestDataApiResponse.d.ts +0 -10
  276. package/esm/core/src/tests/TestDataApiResponse.js +0 -22
  277. package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +0 -8
  278. package/esm/core/src/tests/basicRowFunctionality.spec.js +0 -2103
  279. package/esm/core/src/tests/c.d.ts +0 -8
  280. package/esm/core/src/tests/c.js +0 -13
  281. package/esm/core/src/tests/createData.d.ts +0 -7
  282. package/esm/core/src/tests/createData.js +0 -22
  283. package/esm/core/src/tests/d.d.ts +0 -6
  284. package/esm/core/src/tests/d.js +0 -11
  285. package/esm/core/src/tests/dWithPrefilter.d.ts +0 -7
  286. package/esm/core/src/tests/dWithPrefilter.js +0 -18
  287. package/esm/core/src/tests/entityForCustomFilter.d.ts +0 -16
  288. package/esm/core/src/tests/entityForCustomFilter.js +0 -33
  289. package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +0 -5
  290. package/esm/core/src/tests/entityWithValidationsOnColumn.js +0 -13
  291. package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +0 -4
  292. package/esm/core/src/tests/frontend-database-tests-setup.spec.js +0 -37
  293. package/esm/core/src/tests/h.d.ts +0 -6
  294. package/esm/core/src/tests/h.js +0 -24
  295. package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +0 -1
  296. package/esm/core/src/tests/remult-3-basic-tests.spec.js +0 -236
  297. package/esm/core/src/tests/remult-3-entities.d.ts +0 -23
  298. package/esm/core/src/tests/remult-3-entities.js +0 -39
  299. package/esm/core/src/tests/tasks.d.ts +0 -6
  300. package/esm/core/src/tests/tasks.js +0 -10
  301. package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
  302. package/esm/core/src/tests/test-context-as-storage.spec.js +0 -1
  303. package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +0 -1
  304. package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +0 -389
  305. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +0 -5
  306. package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +0 -152
  307. package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +0 -1
  308. package/esm/core/src/tests/test-decorator-precedence.spec.js +0 -38
  309. package/esm/core/src/tests/test-default-value.spec.d.ts +0 -1
  310. package/esm/core/src/tests/test-default-value.spec.js +0 -33
  311. package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +0 -14
  312. package/esm/core/src/tests/test-entity-inheritance.spec.js +0 -82
  313. package/esm/core/src/tests/test-exceptions.spec.d.ts +0 -1
  314. package/esm/core/src/tests/test-exceptions.spec.js +0 -375
  315. package/esm/core/src/tests/test-json.spec.d.ts +0 -1
  316. package/esm/core/src/tests/test-json.spec.js +0 -115
  317. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +0 -9
  318. package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +0 -809
  319. package/esm/core/src/tests/test-non-active-record.spec.d.ts +0 -1
  320. package/esm/core/src/tests/test-non-active-record.spec.js +0 -66
  321. package/esm/core/src/tests/test-object-column.spec.d.ts +0 -1
  322. package/esm/core/src/tests/test-object-column.spec.js +0 -189
  323. package/esm/core/src/tests/test-paged-foreach.spec.d.ts +0 -1
  324. package/esm/core/src/tests/test-paged-foreach.spec.js +0 -328
  325. package/esm/core/src/tests/test-remult-angular.spec.d.ts +0 -1
  326. package/esm/core/src/tests/test-remult-angular.spec.js +0 -23
  327. package/esm/core/src/tests/test-server-controller.spec.d.ts +0 -7
  328. package/esm/core/src/tests/test-server-controller.spec.js +0 -489
  329. package/esm/core/src/tests/test-server-expressions.spec.d.ts +0 -1
  330. package/esm/core/src/tests/test-server-expressions.spec.js +0 -178
  331. package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +0 -1
  332. package/esm/core/src/tests/test-server-method-on-entity.spec.js +0 -306
  333. package/esm/core/src/tests/test-sql-expression.spec.d.ts +0 -5
  334. package/esm/core/src/tests/test-sql-expression.spec.js +0 -205
  335. package/esm/core/src/tests/test-sql.spec.d.ts +0 -1
  336. package/esm/core/src/tests/test-sql.spec.js +0 -170
  337. package/esm/core/src/tests/test-subscribe.spec.d.ts +0 -1
  338. package/esm/core/src/tests/test-subscribe.spec.js +0 -135
  339. package/esm/core/src/tests/test-type-recovery.spec.d.ts +0 -1
  340. package/esm/core/src/tests/test-type-recovery.spec.js +0 -49
  341. package/esm/core/src/tests/test-where-api.spec.d.ts +0 -1
  342. package/esm/core/src/tests/test-where-api.spec.js +0 -434
  343. package/esm/core/src/tests/testHelper.spec.d.ts +0 -36
  344. package/esm/core/src/tests/testHelper.spec.js +0 -226
  345. package/esm/core/src/tests/testModel/models.d.ts +0 -16
  346. package/esm/core/src/tests/testModel/models.js +0 -25
  347. package/esm/core/src/validators.d.ts +0 -14
  348. package/esm/core/src/validators.js +0 -33
  349. package/esm/core/src/valueConverters.d.ts +0 -13
  350. package/esm/core/src/valueConverters.js +0 -197
  351. package/esm/core/urlBuilder.d.ts +0 -6
  352. package/esm/core/urlBuilder.js +0 -20
  353. package/esm/test-servers/shared/Task.d.ts +0 -9
  354. package/esm/test-servers/shared/Task.js +0 -32
  355. package/esm/test.d.ts +0 -5
  356. package/esm/test.js +0 -6
  357. /package/esm/{core/classType.js → src/remult3/columnInfo.js} +0 -0
  358. /package/esm/{core/src/__EntityValueProvider.js → src/remult3/relation-loader-types.js} +0 -0
@@ -0,0 +1,111 @@
1
+ import { SqliteCoreDataProvider } from './remult-sqlite-core.js';
2
+ import { ValueConverters, dbNamesOf, } from './index.js';
3
+ import { shouldNotCreateField } from './src/filter/filter-consumer-bridge-to-sql-request.js';
4
+ import { isAutoIncrement } from './src/remult3/RepositoryImplementation.js';
5
+ export class DuckDBDataProvider extends SqliteCoreDataProvider {
6
+ constructor(db) {
7
+ super(() => new DuckDBCommand(db), async () => (await db).close(), false, true);
8
+ }
9
+ wrapIdentifier(name) {
10
+ return `"${name}"`;
11
+ }
12
+ async getCreateTableSql(entity) {
13
+ let result = '';
14
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
15
+ let sql = '';
16
+ for (const x of entity.fields) {
17
+ if (!shouldNotCreateField(x, e) || isAutoIncrement(x)) {
18
+ if (result.length != 0)
19
+ result += ',';
20
+ result += '\r\n ';
21
+ if (isAutoIncrement(x)) {
22
+ const sequenceName = `${entity.dbName}_${x.dbName}_seq`;
23
+ sql += `create sequence if not exists "${sequenceName}";\r\n`;
24
+ result += `${e.$dbNameOf(x)} integer default nextval('${sequenceName}')`;
25
+ }
26
+ else {
27
+ result += this.addColumnSqlSyntax(x, e.$dbNameOf(x), false);
28
+ }
29
+ }
30
+ }
31
+ result += `,\r\n primary key (${entity.idMetadata.fields
32
+ .map((f) => e.$dbNameOf(f))
33
+ .join(',')})`;
34
+ sql +=
35
+ 'create table if not exists ' + e.$entityName + ' (' + result + '\r\n)';
36
+ return [sql];
37
+ }
38
+ addColumnSqlSyntax(x, dbName, isAlterColumn) {
39
+ let result = dbName;
40
+ var allowNull = x.allowNull;
41
+ if (!allowNull && isAlterColumn) {
42
+ allowNull = true;
43
+ console.log('DuckDB does not support altering columns to allow null on existing tables');
44
+ }
45
+ if (x.valueType == Number) {
46
+ if (!x.valueConverter.fieldTypeInDb)
47
+ result += ' numeric' + (allowNull ? '' : ' default 0 not null');
48
+ else
49
+ result +=
50
+ ' ' +
51
+ x.valueConverter.fieldTypeInDb +
52
+ (allowNull ? '' : ' default 0 not null');
53
+ }
54
+ else if (x.valueType == Date) {
55
+ if (!x.valueConverter.fieldTypeInDb)
56
+ if (x.valueConverter == ValueConverters.DateOnly)
57
+ result += ' date';
58
+ else
59
+ result += ' timestamp';
60
+ else
61
+ result += ' ' + x.valueConverter.fieldTypeInDb;
62
+ }
63
+ else if (x.valueType == Boolean)
64
+ result += ' boolean' + (allowNull ? '' : ' default false not null');
65
+ else if (x.valueConverter.fieldTypeInDb) {
66
+ result += ' ' + x.valueConverter.fieldTypeInDb;
67
+ if (!allowNull && x.valueConverter.fieldTypeInDb == 'integer') {
68
+ result += ' default 0 not null';
69
+ }
70
+ }
71
+ else
72
+ result += ' varchar' + (allowNull ? '' : " default '' not null");
73
+ return result;
74
+ }
75
+ }
76
+ class DuckDBCommand {
77
+ db;
78
+ values = [];
79
+ constructor(db) {
80
+ this.db = db;
81
+ }
82
+ async execute(sql) {
83
+ return new Promise((resolve, error) => {
84
+ this.db.all(sql, ...this.values, (err, rows) => {
85
+ if (err)
86
+ error(err);
87
+ else
88
+ resolve(new DuckDBSqlResult(rows));
89
+ });
90
+ });
91
+ }
92
+ addParameterAndReturnSqlToken(val) {
93
+ return this.param(val);
94
+ }
95
+ param(val) {
96
+ const key = '?';
97
+ this.values.push(val);
98
+ return key;
99
+ }
100
+ }
101
+ class DuckDBSqlResult {
102
+ result;
103
+ constructor(result) {
104
+ this.result = result;
105
+ this.rows = result;
106
+ }
107
+ rows;
108
+ getColumnKeyInResultForIndexInSelect(index) {
109
+ return Object.keys(this.result[0])[index];
110
+ }
111
+ }
@@ -0,0 +1,114 @@
1
+ import { createRemultServer, } from './server/index.js';
2
+ import { PassThrough } from 'stream';
3
+ export function remultHapi(options) {
4
+ const api = createRemultServer(options, {
5
+ buildGenericRequestInfo: (req) => ({
6
+ method: req.method,
7
+ params: req.params,
8
+ query: req.query,
9
+ url: req.url.pathname,
10
+ on: (e, do1) => {
11
+ req.raw.req.on('close', do1);
12
+ },
13
+ }),
14
+ getRequestBody: async (req) => req.payload,
15
+ });
16
+ const routesPlugin = {
17
+ name: 'remultPlugin',
18
+ register: async (server) => {
19
+ function hapiHandler(handler) {
20
+ return (request, h) => {
21
+ return new Promise((res, rej) => {
22
+ let status = 200;
23
+ let stream;
24
+ let r = {
25
+ status(statusCode) {
26
+ status = statusCode;
27
+ return r;
28
+ },
29
+ end() {
30
+ res(h.response().code(status));
31
+ },
32
+ send(html) {
33
+ res(h.response(html).code(status));
34
+ },
35
+ json(data) {
36
+ res(h.response(data).code(status));
37
+ },
38
+ write(data) {
39
+ stream.write(data);
40
+ },
41
+ writeHead(status, headers) {
42
+ stream = new PassThrough();
43
+ res(h
44
+ .response(stream)
45
+ .header('content-type', 'text/event-stream')
46
+ .header('content-encoding', 'identity'));
47
+ },
48
+ };
49
+ try {
50
+ Object.assign(request, {
51
+ on(event, listener) {
52
+ request.raw.req.on('close', () => {
53
+ listener();
54
+ console.log('Connection closed');
55
+ });
56
+ },
57
+ });
58
+ handler(request, r, () => { });
59
+ }
60
+ catch (err) {
61
+ rej(err);
62
+ }
63
+ });
64
+ };
65
+ }
66
+ let hapiRouter = {
67
+ route(path) {
68
+ path = path.replace(/:id\b/g, '{id}');
69
+ let r = {
70
+ get(handler) {
71
+ server.route({
72
+ method: 'GET',
73
+ path,
74
+ handler: hapiHandler(handler),
75
+ });
76
+ return r;
77
+ },
78
+ post(handler) {
79
+ server.route({
80
+ method: 'POST',
81
+ path,
82
+ handler: hapiHandler(handler),
83
+ });
84
+ return r;
85
+ },
86
+ put(handler) {
87
+ server.route({
88
+ method: 'PUT',
89
+ path,
90
+ handler: hapiHandler(handler),
91
+ });
92
+ return r;
93
+ },
94
+ delete(handler) {
95
+ server.route({
96
+ method: 'DELETE',
97
+ path,
98
+ handler: hapiHandler(handler),
99
+ });
100
+ return r;
101
+ },
102
+ };
103
+ return r;
104
+ },
105
+ };
106
+ api.registerRouter(hapiRouter);
107
+ },
108
+ };
109
+ return Object.assign(routesPlugin, {
110
+ getRemult: (x) => api.getRemult(x),
111
+ openApiDoc: (x) => api.openApiDoc(x),
112
+ withRemult: (req, what) => api.withRemultAsync(req, what),
113
+ });
114
+ }
@@ -0,0 +1,104 @@
1
+ import { Hono } from 'hono';
2
+ import { streamSSE } from 'hono/streaming';
3
+ import { createRemultServer, } from './server/index.js';
4
+ export function remultHono(options) {
5
+ let app = new Hono();
6
+ const api = createRemultServer(options, {
7
+ buildGenericRequestInfo: (c) => {
8
+ return {
9
+ method: c.req.method,
10
+ params: c.req.param(),
11
+ query: new Proxy(c.req, {
12
+ get: (target, prop) => {
13
+ const r = c.req.queries(prop);
14
+ if (r?.length == 1)
15
+ return r[0];
16
+ return r;
17
+ },
18
+ }),
19
+ url: c.req.url,
20
+ on: (e, do1) => {
21
+ ;
22
+ c['_tempOnClose'](() => do1());
23
+ // c.req.on('close', do1)
24
+ },
25
+ };
26
+ },
27
+ getRequestBody: async (c) => {
28
+ return c.req.json();
29
+ },
30
+ });
31
+ let honoRouter = {
32
+ route(path) {
33
+ let r = {
34
+ get(handler) {
35
+ app.get(path, honoHandler(handler));
36
+ return r;
37
+ },
38
+ post(handler) {
39
+ app.post(path, honoHandler(handler));
40
+ return r;
41
+ },
42
+ put(handler) {
43
+ app.put(path, honoHandler(handler));
44
+ return r;
45
+ },
46
+ delete(handler) {
47
+ app.delete(path, honoHandler(handler));
48
+ return r;
49
+ },
50
+ };
51
+ return r;
52
+ function honoHandler(handler) {
53
+ return (c) => {
54
+ return new Promise((res, rej) => {
55
+ try {
56
+ let result;
57
+ let sse;
58
+ const gRes = {
59
+ json: (data) => {
60
+ res(c.json(data));
61
+ },
62
+ status: (status) => {
63
+ result = c.status(status);
64
+ return gRes;
65
+ },
66
+ end: () => {
67
+ if (sse)
68
+ sse.close();
69
+ else
70
+ res(c.body(null));
71
+ },
72
+ send: (data) => {
73
+ res(c.html(data));
74
+ },
75
+ write: (data) => {
76
+ sse.write(data);
77
+ },
78
+ writeHead: (status, headers) => {
79
+ res(streamSSE(c, (s) => {
80
+ sse = s;
81
+ return new Promise((res) => {
82
+ ;
83
+ c['_tempOnClose'] = (x) => sse.onAbort(() => x());
84
+ });
85
+ }));
86
+ },
87
+ };
88
+ handler(c, gRes, () => { });
89
+ }
90
+ catch (err) {
91
+ rej(err);
92
+ }
93
+ });
94
+ };
95
+ }
96
+ },
97
+ };
98
+ api.registerRouter(honoRouter);
99
+ return Object.assign(app, {
100
+ getRemult: (c) => api.getRemult(c),
101
+ openApiDoc: (options) => api.openApiDoc(options),
102
+ withRemult: async (c, what) => api.withRemultAsync(c, what),
103
+ });
104
+ }
@@ -233,7 +233,7 @@ class FilterConsumerBridgeToMongo {
233
233
  this.add(col, val, '$lt');
234
234
  }
235
235
  containsCaseInsensitive(col, val) {
236
- throw 'containsCaseInsensitive not yet implemented';
236
+ this.add(col, val, '$regex');
237
237
  // this.promises.push(col.getDbName().then(colName => {
238
238
  // this.result.push(b => b.whereRaw(
239
239
  // 'lower (' + colName + ") like lower ('%" + val.replace(/'/g, '\'\'') + "%')"));
@@ -0,0 +1,54 @@
1
+ import { readBody, setResponseStatus } from 'h3';
2
+ import { createRemultServer } from './server/index.js';
3
+ export function remultNuxt(options) {
4
+ const result = createRemultServer(options, {
5
+ buildGenericRequestInfo: (event) => {
6
+ return {
7
+ method: event.node.req.method,
8
+ url: event.node.req.url,
9
+ on: (a, b) => event.node.req.on('close', () => {
10
+ b();
11
+ }),
12
+ };
13
+ },
14
+ getRequestBody: async (event) => await readBody(event),
15
+ });
16
+ const handler = async (event) => {
17
+ let sse = false;
18
+ const response = {
19
+ end: () => { },
20
+ send: () => { },
21
+ json: () => { },
22
+ status: () => {
23
+ return response;
24
+ },
25
+ write: (what) => {
26
+ event.node.res.write(what);
27
+ },
28
+ writeHead: (status, headers) => {
29
+ sse = true;
30
+ event.node.res.writeHead(status, headers);
31
+ },
32
+ };
33
+ const r = await result.handle(event, response);
34
+ if (sse) {
35
+ await new Promise((resolve) => {
36
+ event.node.req.on('close', () => resolve({}));
37
+ });
38
+ }
39
+ if (r) {
40
+ if (r.statusCode !== 200)
41
+ setResponseStatus(event, r.statusCode);
42
+ if (r.html)
43
+ return r.html;
44
+ return r.data;
45
+ }
46
+ };
47
+ return Object.assign(handler, {
48
+ getRemult: (req) => result.getRemult(req),
49
+ openApiDoc: (options) => result.openApiDoc(options),
50
+ withRemult(request, what) {
51
+ return result.withRemultAsync(request, what);
52
+ },
53
+ });
54
+ }
@@ -0,0 +1,97 @@
1
+ import { getRequestEvent } from 'solid-js/web';
2
+ import { createRemultServer } from './server/index.js';
3
+ export function remultSolidStart(options) {
4
+ let result = createRemultServer(options, {
5
+ buildGenericRequestInfo: (event) => ({
6
+ url: event.request.url,
7
+ method: event.request.method,
8
+ on: (e, do1) => {
9
+ if (e === 'close') {
10
+ event.locals['_tempOnClose'] = do1;
11
+ }
12
+ },
13
+ }),
14
+ getRequestBody: (event) => event.request.json(),
15
+ });
16
+ const serverHandler = async () => {
17
+ const event = await getRequestEvent();
18
+ let sseResponse = undefined;
19
+ if (event)
20
+ event.locals['_tempOnClose'] = () => { };
21
+ const response = {
22
+ end: () => { },
23
+ json: () => { },
24
+ send: () => { },
25
+ status: () => {
26
+ return response;
27
+ },
28
+ write: () => { },
29
+ writeHead: (status, headers) => {
30
+ if (status === 200 && headers) {
31
+ const contentType = headers['Content-Type'];
32
+ if (contentType === 'text/event-stream') {
33
+ const messages = [];
34
+ response.write = (x) => messages.push(x);
35
+ const stream = new ReadableStream({
36
+ start: (controller) => {
37
+ for (const message of messages) {
38
+ controller.enqueue(message);
39
+ }
40
+ response.write = (data) => {
41
+ controller.enqueue(data);
42
+ };
43
+ },
44
+ cancel: () => {
45
+ response.write = () => { };
46
+ event?.locals?.['_tempOnClose']?.();
47
+ },
48
+ });
49
+ sseResponse = new Response(stream, { headers });
50
+ }
51
+ }
52
+ },
53
+ };
54
+ const responseFromRemultHandler = await result.handle(event, response);
55
+ if (sseResponse !== undefined) {
56
+ return sseResponse;
57
+ }
58
+ if (responseFromRemultHandler) {
59
+ if (responseFromRemultHandler.html)
60
+ return new Response(responseFromRemultHandler.html, {
61
+ status: responseFromRemultHandler.statusCode,
62
+ headers: {
63
+ 'Content-Type': 'text/html',
64
+ },
65
+ });
66
+ const res = new Response(JSON.stringify(responseFromRemultHandler.data), {
67
+ status: responseFromRemultHandler.statusCode,
68
+ });
69
+ return res;
70
+ }
71
+ return new Response('Not Found', {
72
+ status: 404,
73
+ });
74
+ };
75
+ const handler = {}; //async ({ event, resolve }) => {
76
+ // if (event.url.pathname.startsWith(options!.rootPath!)) {
77
+ // const result = await serverHandler(event)
78
+ // if (result != null && result?.status != 404) return result
79
+ // }
80
+ // return new Promise<Response>((res) => {
81
+ // result.withRemult(event, undefined!, async () => {
82
+ // res(await resolve(event))
83
+ // })
84
+ // })
85
+ // }
86
+ return Object.assign(handler, {
87
+ getRemult: (req) => result.getRemult(req),
88
+ openApiDoc: (options) => result.openApiDoc(options),
89
+ async withRemult(what) {
90
+ return result.withRemultAsync(await getRequestEvent(), what);
91
+ },
92
+ GET: serverHandler,
93
+ PUT: serverHandler,
94
+ POST: serverHandler,
95
+ DELETE: serverHandler,
96
+ });
97
+ }
@@ -0,0 +1,41 @@
1
+ import { SqliteCoreDataProvider } from './remult-sqlite-core.js';
2
+ export class SqlJsDataProvider extends SqliteCoreDataProvider {
3
+ constructor(db) {
4
+ super(() => new SqlJsCommand(db), async () => (await db).close());
5
+ }
6
+ }
7
+ class SqlJsCommand {
8
+ db;
9
+ values = {};
10
+ i = 0;
11
+ constructor(db) {
12
+ this.db = db;
13
+ }
14
+ async execute(sql) {
15
+ if (this.i == 0)
16
+ return new SqlJsSqlResult((await this.db).exec(sql));
17
+ return new SqlJsSqlResult((await this.db).exec(sql, this.values));
18
+ }
19
+ addParameterAndReturnSqlToken(val) {
20
+ return this.param(val);
21
+ }
22
+ param(val) {
23
+ if (val instanceof Date)
24
+ val = val.valueOf();
25
+ const key = ':' + ++this.i;
26
+ this.values[key] = val;
27
+ return key;
28
+ }
29
+ }
30
+ class SqlJsSqlResult {
31
+ result;
32
+ constructor(result) {
33
+ this.result = result;
34
+ this.rows =
35
+ result[0]?.values.map((row) => row.reduce((prev, curr, i) => ({ ...prev, [result[0].columns[i]]: curr }), {})) ?? [];
36
+ }
37
+ rows;
38
+ getColumnKeyInResultForIndexInSelect(index) {
39
+ return this.result[0]?.columns[index];
40
+ }
41
+ }
@@ -0,0 +1,137 @@
1
+ import { SqlDatabase } from './src/data-providers/sql-database.js';
2
+ import { dbNamesOf, shouldNotCreateField, } from './src/filter/filter-consumer-bridge-to-sql-request.js';
3
+ import { isAutoIncrement } from './src/remult3/RepositoryImplementation.js';
4
+ export class SqliteCoreDataProvider {
5
+ createCommand;
6
+ end;
7
+ doesNotSupportReturningSyntax;
8
+ doesNotSupportReturningSyntaxOnlyForUpdate;
9
+ constructor(createCommand, end, doesNotSupportReturningSyntax = false, doesNotSupportReturningSyntaxOnlyForUpdate = false) {
10
+ this.createCommand = createCommand;
11
+ this.end = end;
12
+ this.doesNotSupportReturningSyntax = doesNotSupportReturningSyntax;
13
+ this.doesNotSupportReturningSyntaxOnlyForUpdate = doesNotSupportReturningSyntaxOnlyForUpdate;
14
+ }
15
+ orderByNullsFirst;
16
+ getLimitSqlSyntax(limit, offset) {
17
+ return ' limit ' + limit + ' offset ' + offset;
18
+ }
19
+ afterMutation;
20
+ provideMigrationBuilder(builder) {
21
+ let self = this;
22
+ return {
23
+ createTable: async (entity) => {
24
+ await (await self.getCreateTableSql(entity)).map(builder.addSql);
25
+ },
26
+ addColumn: async (entity, field) => {
27
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
28
+ let sql = `alter table ${e.$entityName} add column ${self.addColumnSqlSyntax(field, e.$dbNameOf(field), true)}`;
29
+ builder.addSql(sql);
30
+ },
31
+ };
32
+ }
33
+ async transaction(action) {
34
+ await this.createCommand().execute('Begin Transaction');
35
+ try {
36
+ await action(this);
37
+ await this.createCommand().execute('Commit');
38
+ }
39
+ catch (err) {
40
+ await this.createCommand().execute('Rollback');
41
+ throw err;
42
+ }
43
+ }
44
+ async entityIsUsedForTheFirstTime(entity) { }
45
+ async ensureSchema(entities) {
46
+ for (const entity of entities) {
47
+ await this.createTableIfNotExist(entity);
48
+ await this.verifyAllColumns(entity);
49
+ }
50
+ }
51
+ async verifyAllColumns(entity) {
52
+ try {
53
+ let cmd = this.createCommand();
54
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
55
+ let cols = (await cmd.execute(`PRAGMA table_info(${e.$entityName})`)).rows.map((x) => this.wrapIdentifier(x.name.toLocaleLowerCase()));
56
+ for (const col of entity.fields) {
57
+ if (!shouldNotCreateField(col, e)) {
58
+ let colName = e.$dbNameOf(col).toLocaleLowerCase();
59
+ if (!cols.includes(colName)) {
60
+ let sql = `ALTER table ${e.$entityName} ` +
61
+ `add column ${this.addColumnSqlSyntax(col, e.$dbNameOf(col), true)}`;
62
+ await this.createCommand().execute(sql);
63
+ }
64
+ }
65
+ }
66
+ }
67
+ catch (err) {
68
+ console.error(err);
69
+ }
70
+ }
71
+ async dropTable(entity) {
72
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
73
+ let sql = 'drop table if exists ' + e.$entityName;
74
+ if (SqlDatabase.LogToConsole)
75
+ console.info(sql);
76
+ await this.createCommand().execute(sql);
77
+ }
78
+ addColumnSqlSyntax(x, dbName, isAlterTable) {
79
+ let result = dbName;
80
+ const nullNumber = x.allowNull ? '' : ' default 0 not null';
81
+ if (x.valueType == Date)
82
+ result += ' integer';
83
+ else if (x.valueType == Boolean)
84
+ result += ' integer ' + nullNumber;
85
+ else if (x.valueType == Number) {
86
+ if (!x.valueConverter.fieldTypeInDb)
87
+ result += ' numeric ' + nullNumber;
88
+ else
89
+ result += ' ' + x.valueConverter.fieldTypeInDb + ' ' + nullNumber;
90
+ }
91
+ else
92
+ result += ' text' + (x.allowNull ? ' ' : " default '' not null ");
93
+ return result;
94
+ }
95
+ async createTableIfNotExist(entity) {
96
+ let sql = await this.getCreateTableSql(entity);
97
+ for (const element of sql) {
98
+ await this.createCommand().execute(element);
99
+ }
100
+ }
101
+ supportsJsonColumnType;
102
+ async getCreateTableSql(entity) {
103
+ let result = '';
104
+ let e = await dbNamesOf(entity, this.wrapIdentifier);
105
+ for (const x of entity.fields) {
106
+ if (!shouldNotCreateField(x, e) || isAutoIncrement(x)) {
107
+ if (result.length != 0)
108
+ result += ',';
109
+ result += '\r\n ';
110
+ if (isAutoIncrement(x)) {
111
+ if (x.key != entity.idMetadata.field.key)
112
+ throw 'in sqlite, autoincrement is only allowed for primary key';
113
+ result += e.$dbNameOf(x) + ' integer primary key autoincrement';
114
+ }
115
+ else {
116
+ result += this.addColumnSqlSyntax(x, e.$dbNameOf(x), false);
117
+ if (x.key == entity.idMetadata.field.key) {
118
+ result += ' primary key';
119
+ }
120
+ }
121
+ }
122
+ }
123
+ let sql = [
124
+ 'create table if not exists ' + e.$entityName + ' (' + result + '\r\n)',
125
+ ];
126
+ if (entity.idMetadata.fields.length > 1) {
127
+ sql.push(`create unique index ${this.wrapIdentifier(entity.dbName + '_primary_key')} on ${e.$entityName} (${entity.idMetadata.fields
128
+ .map((x) => e.$dbNameOf(x))
129
+ .join(',')})`);
130
+ }
131
+ return sql;
132
+ }
133
+ wrapIdentifier(name) {
134
+ //return name
135
+ return '`' + name + '`';
136
+ }
137
+ }