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.
- package/README.md +47 -46
- package/SseSubscriptionServer.js +9 -9
- package/ably.js +1 -1
- package/esm/SseSubscriptionServer.js +11 -11
- package/esm/ably.js +2 -2
- package/esm/angular/interfaces/index.d.ts +1 -0
- package/esm/angular/interfaces/index.js +1 -0
- package/esm/angular/interfaces/src/column-collection.d.ts +70 -0
- package/esm/angular/interfaces/src/column-collection.js +341 -0
- package/esm/angular/interfaces/src/data-area-settings.d.ts +15 -0
- package/esm/angular/interfaces/src/data-area-settings.js +35 -0
- package/esm/angular/interfaces/src/data-control-interfaces.d.ts +36 -0
- package/esm/angular/interfaces/src/data-control-interfaces.js +57 -0
- package/esm/angular/interfaces/src/dataList.d.ts +13 -0
- package/esm/angular/interfaces/src/dataList.js +42 -0
- package/esm/angular/interfaces/src/filter-helper.d.ts +13 -0
- package/esm/angular/interfaces/src/filter-helper.js +59 -0
- package/esm/angular/interfaces/src/grid-settings.d.ts +145 -0
- package/esm/angular/interfaces/src/grid-settings.js +387 -0
- package/esm/angular/interfaces/src/public_api.d.ts +4 -0
- package/esm/angular/interfaces/src/public_api.js +4 -0
- package/esm/angular/src/angular/RemultAngularPluginsService.d.ts +4 -0
- package/esm/angular/src/angular/RemultAngularPluginsService.js +3 -0
- package/esm/angular/src/angular/data-control/data-control2.component.d.ts +49 -0
- package/esm/angular/src/angular/data-control/data-control2.component.js +138 -0
- package/esm/core/SseSubscriptionServer.d.ts +33 -0
- package/esm/core/SseSubscriptionServer.js +107 -0
- package/esm/core/assign.d.ts +1 -0
- package/esm/core/assign.js +5 -0
- package/esm/core/classType.d.ts +3 -0
- package/esm/core/classType.js +1 -0
- package/esm/core/index.d.ts +27 -0
- package/esm/core/index.js +25 -0
- package/esm/core/inputTypes.d.ts +9 -0
- package/esm/core/inputTypes.js +9 -0
- package/esm/core/live-query/data-provider-live-query-storage.d.ts +22 -0
- package/esm/core/live-query/data-provider-live-query-storage.js +71 -0
- package/esm/core/postgres/index.d.ts +2 -0
- package/esm/core/postgres/index.js +2 -0
- package/esm/core/postgres/postgres-data-provider.d.ts +36 -0
- package/esm/core/postgres/postgres-data-provider.js +120 -0
- package/esm/core/postgres/schema-builder.d.ts +17 -0
- package/esm/core/postgres/schema-builder.js +153 -0
- package/esm/core/remult-fresh.d.ts +17 -0
- package/esm/core/remult-fresh.js +29 -0
- package/esm/core/remult-knex/index.d.ts +30 -0
- package/esm/core/remult-knex/index.js +446 -0
- package/esm/core/remult-mongo.d.ts +24 -0
- package/esm/core/remult-mongo.js +254 -0
- package/esm/core/server/JsonEntityFileStorage.d.ts +10 -0
- package/esm/core/server/JsonEntityFileStorage.js +25 -0
- package/esm/core/server/core.d.ts +4 -0
- package/esm/core/server/core.js +4 -0
- package/esm/core/server/expressBridge.d.ts +182 -0
- package/esm/core/server/expressBridge.js +938 -0
- package/esm/core/server/index.d.ts +6 -0
- package/esm/core/server/index.js +9 -0
- package/esm/core/server/initAsyncHooks.d.ts +1 -0
- package/esm/core/server/initAsyncHooks.js +9 -0
- package/esm/core/server/initDataProvider.d.ts +2 -0
- package/esm/core/server/initDataProvider.js +14 -0
- package/esm/core/src/__EntityValueProvider.d.ts +11 -0
- package/esm/core/src/__EntityValueProvider.js +1 -0
- package/esm/core/src/__RowsOfDataForTesting.d.ts +3 -0
- package/esm/core/src/__RowsOfDataForTesting.js +1 -0
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +6 -0
- package/esm/core/src/backend-tests/backend-database-test-setup.backend-spec.js +147 -0
- package/esm/core/src/backend-tests/my-test.backend-spec.d.ts +1 -0
- package/esm/core/src/backend-tests/my-test.backend-spec.js +197 -0
- package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +1 -0
- package/esm/core/src/backend-tests/test-http-server.backend-spec.js +167 -0
- package/esm/core/src/buildRestDataProvider.d.ts +31 -0
- package/esm/core/src/buildRestDataProvider.js +113 -0
- package/esm/core/src/column-interfaces.d.ts +154 -0
- package/esm/core/src/column-interfaces.js +7 -0
- package/esm/core/src/column.d.ts +58 -0
- package/esm/core/src/column.js +174 -0
- package/esm/core/src/context.d.ts +134 -0
- package/esm/core/src/context.js +286 -0
- package/esm/core/src/data-api.d.ts +39 -0
- package/esm/core/src/data-api.js +279 -0
- package/esm/core/src/data-interfaces.d.ts +41 -0
- package/esm/core/src/data-interfaces.js +12 -0
- package/esm/core/src/data-providers/array-entity-data-provider.d.ts +22 -0
- package/esm/core/src/data-providers/array-entity-data-provider.js +252 -0
- package/esm/core/src/data-providers/in-memory-database.d.ts +9 -0
- package/esm/core/src/data-providers/in-memory-database.js +14 -0
- package/esm/core/src/data-providers/json-data-provider.d.ts +12 -0
- package/esm/core/src/data-providers/json-data-provider.js +55 -0
- package/esm/core/src/data-providers/rest-data-provider.d.ts +49 -0
- package/esm/core/src/data-providers/rest-data-provider.js +256 -0
- package/esm/core/src/data-providers/sql-database.d.ts +33 -0
- package/esm/core/src/data-providers/sql-database.js +384 -0
- package/esm/core/src/data-providers/web-sql-data-provider.d.ts +24 -0
- package/esm/core/src/data-providers/web-sql-data-provider.js +143 -0
- package/esm/core/src/entity.d.ts +91 -0
- package/esm/core/src/entity.js +1 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.d.ts +50 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-sql-request.js +150 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.d.ts +1 -0
- package/esm/core/src/filter/filter-consumer-bridge-to-url-builder.js +1 -0
- package/esm/core/src/filter/filter-interfaces.d.ts +85 -0
- package/esm/core/src/filter/filter-interfaces.js +477 -0
- package/esm/core/src/live-query/LiveQueryClient.d.ts +20 -0
- package/esm/core/src/live-query/LiveQueryClient.js +188 -0
- package/esm/core/src/live-query/SseSubscriptionClient.d.ts +5 -0
- package/esm/core/src/live-query/SseSubscriptionClient.js +86 -0
- package/esm/core/src/live-query/SubscriptionChannel.d.ts +72 -0
- package/esm/core/src/live-query/SubscriptionChannel.js +123 -0
- package/esm/core/src/live-query/SubscriptionServer.d.ts +53 -0
- package/esm/core/src/live-query/SubscriptionServer.js +111 -0
- package/esm/core/src/live-query/live-query-tests.spec.d.ts +6 -0
- package/esm/core/src/live-query/live-query-tests.spec.js +952 -0
- package/esm/core/src/remult-proxy.d.ts +35 -0
- package/esm/core/src/remult-proxy.js +113 -0
- package/esm/core/src/remult3/DecoratorReplacer.d.ts +10 -0
- package/esm/core/src/remult3/DecoratorReplacer.js +20 -0
- package/esm/core/src/remult3/RepositoryImplementation.d.ts +355 -0
- package/esm/core/src/remult3/RepositoryImplementation.js +2109 -0
- package/esm/core/src/remult3/index.d.ts +2 -0
- package/esm/core/src/remult3/index.js +2 -0
- package/esm/core/src/remult3/remult3.d.ts +395 -0
- package/esm/core/src/remult3/remult3.js +2 -0
- package/esm/core/src/server-action.d.ts +81 -0
- package/esm/core/src/server-action.js +394 -0
- package/esm/core/src/shared-tests/db-tests-setup.d.ts +32 -0
- package/esm/core/src/shared-tests/db-tests-setup.js +78 -0
- package/esm/core/src/shared-tests/db-tests.db-tests.d.ts +25 -0
- package/esm/core/src/shared-tests/db-tests.db-tests.js +810 -0
- package/esm/core/src/shared-tests/deleteAll.d.ts +2 -0
- package/esm/core/src/shared-tests/deleteAll.js +4 -0
- package/esm/core/src/shared-tests/entityWithValidations.d.ts +14 -0
- package/esm/core/src/shared-tests/entityWithValidations.js +43 -0
- package/esm/core/src/shared-tests/index.d.ts +4 -0
- package/esm/core/src/shared-tests/index.js +4 -0
- package/esm/core/src/shared-tests/test-custom-id-column.spec.d.ts +1 -0
- package/esm/core/src/shared-tests/test-custom-id-column.spec.js +67 -0
- package/esm/core/src/shared-tests/test-special-value.spec.d.ts +10 -0
- package/esm/core/src/shared-tests/test-special-value.spec.js +73 -0
- package/esm/core/src/shared-tests/test-update-with-null.spec.d.ts +1 -0
- package/esm/core/src/shared-tests/test-update-with-null.spec.js +31 -0
- package/esm/core/src/sort.d.ts +16 -0
- package/esm/core/src/sort.js +103 -0
- package/esm/core/src/sql-command.d.ts +19 -0
- package/esm/core/src/sql-command.js +1 -0
- package/esm/core/src/test.d.ts +3 -0
- package/esm/core/src/test.js +12 -0
- package/esm/core/src/tests/Done.d.ts +5 -0
- package/esm/core/src/tests/Done.js +9 -0
- package/esm/core/src/tests/RowProvider.spec.d.ts +16 -0
- package/esm/core/src/tests/RowProvider.spec.js +631 -0
- package/esm/core/src/tests/TestDataApiResponse.d.ts +10 -0
- package/esm/core/src/tests/TestDataApiResponse.js +22 -0
- package/esm/core/src/tests/basicRowFunctionality.spec.d.ts +8 -0
- package/esm/core/src/tests/basicRowFunctionality.spec.js +2103 -0
- package/esm/core/src/tests/c.d.ts +8 -0
- package/esm/core/src/tests/c.js +13 -0
- package/esm/core/src/tests/createData.d.ts +7 -0
- package/esm/core/src/tests/createData.js +22 -0
- package/esm/core/src/tests/d.d.ts +6 -0
- package/esm/core/src/tests/d.js +11 -0
- package/esm/core/src/tests/dWithPrefilter.d.ts +7 -0
- package/esm/core/src/tests/dWithPrefilter.js +18 -0
- package/esm/core/src/tests/entityForCustomFilter.d.ts +16 -0
- package/esm/core/src/tests/entityForCustomFilter.js +33 -0
- package/esm/core/src/tests/entityWithValidationsOnColumn.d.ts +5 -0
- package/esm/core/src/tests/entityWithValidationsOnColumn.js +13 -0
- package/esm/core/src/tests/frontend-database-tests-setup.spec.d.ts +4 -0
- package/esm/core/src/tests/frontend-database-tests-setup.spec.js +37 -0
- package/esm/core/src/tests/h.d.ts +6 -0
- package/esm/core/src/tests/h.js +24 -0
- package/esm/core/src/tests/remult-3-basic-tests.spec.d.ts +1 -0
- package/esm/core/src/tests/remult-3-basic-tests.spec.js +236 -0
- package/esm/core/src/tests/remult-3-entities.d.ts +23 -0
- package/esm/core/src/tests/remult-3-entities.js +39 -0
- package/esm/core/src/tests/tasks.d.ts +6 -0
- package/esm/core/src/tests/tasks.js +10 -0
- package/esm/core/src/tests/test-context-as-storage.spec.d.ts +0 -0
- package/esm/core/src/tests/test-context-as-storage.spec.js +1 -0
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.d.ts +1 -0
- package/esm/core/src/tests/test-data-api/predefined-filter.spec.js +389 -0
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.d.ts +5 -0
- package/esm/core/src/tests/test-data-api/test-put-with-validation.spec.js +152 -0
- package/esm/core/src/tests/test-decorator-precedence.spec.d.ts +1 -0
- package/esm/core/src/tests/test-decorator-precedence.spec.js +38 -0
- package/esm/core/src/tests/test-default-value.spec.d.ts +1 -0
- package/esm/core/src/tests/test-default-value.spec.js +33 -0
- package/esm/core/src/tests/test-entity-inheritance.spec.d.ts +14 -0
- package/esm/core/src/tests/test-entity-inheritance.spec.js +82 -0
- package/esm/core/src/tests/test-exceptions.spec.d.ts +1 -0
- package/esm/core/src/tests/test-exceptions.spec.js +375 -0
- package/esm/core/src/tests/test-json.spec.d.ts +1 -0
- package/esm/core/src/tests/test-json.spec.js +115 -0
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.d.ts +9 -0
- package/esm/core/src/tests/test-many-to-one-relation-in-entity.spec.js +809 -0
- package/esm/core/src/tests/test-non-active-record.spec.d.ts +1 -0
- package/esm/core/src/tests/test-non-active-record.spec.js +66 -0
- package/esm/core/src/tests/test-object-column.spec.d.ts +1 -0
- package/esm/core/src/tests/test-object-column.spec.js +189 -0
- package/esm/core/src/tests/test-paged-foreach.spec.d.ts +1 -0
- package/esm/core/src/tests/test-paged-foreach.spec.js +328 -0
- package/esm/core/src/tests/test-remult-angular.spec.d.ts +1 -0
- package/esm/core/src/tests/test-remult-angular.spec.js +23 -0
- package/esm/core/src/tests/test-server-controller.spec.d.ts +7 -0
- package/esm/core/src/tests/test-server-controller.spec.js +489 -0
- package/esm/core/src/tests/test-server-expressions.spec.d.ts +1 -0
- package/esm/core/src/tests/test-server-expressions.spec.js +178 -0
- package/esm/core/src/tests/test-server-method-on-entity.spec.d.ts +1 -0
- package/esm/core/src/tests/test-server-method-on-entity.spec.js +306 -0
- package/esm/core/src/tests/test-sql-expression.spec.d.ts +5 -0
- package/esm/core/src/tests/test-sql-expression.spec.js +205 -0
- package/esm/core/src/tests/test-sql.spec.d.ts +1 -0
- package/esm/core/src/tests/test-sql.spec.js +170 -0
- package/esm/core/src/tests/test-subscribe.spec.d.ts +1 -0
- package/esm/core/src/tests/test-subscribe.spec.js +135 -0
- package/esm/core/src/tests/test-type-recovery.spec.d.ts +1 -0
- package/esm/core/src/tests/test-type-recovery.spec.js +49 -0
- package/esm/core/src/tests/test-where-api.spec.d.ts +1 -0
- package/esm/core/src/tests/test-where-api.spec.js +434 -0
- package/esm/core/src/tests/testHelper.spec.d.ts +36 -0
- package/esm/core/src/tests/testHelper.spec.js +226 -0
- package/esm/core/src/tests/testModel/models.d.ts +16 -0
- package/esm/core/src/tests/testModel/models.js +25 -0
- package/esm/core/src/validators.d.ts +14 -0
- package/esm/core/src/validators.js +33 -0
- package/esm/core/src/valueConverters.d.ts +13 -0
- package/esm/core/src/valueConverters.js +197 -0
- package/esm/core/urlBuilder.d.ts +6 -0
- package/esm/core/urlBuilder.js +20 -0
- package/esm/graphql.js +194 -73
- package/esm/index.d.ts +10 -10
- package/esm/index.js +8 -8
- package/esm/inputTypes.js +1 -1
- package/esm/live-query/data-provider-live-query-storage.d.ts +3 -3
- package/esm/live-query/data-provider-live-query-storage.js +12 -9
- package/esm/myLog.js +2 -2
- package/esm/postgres/postgres-data-provider.d.ts +2 -2
- package/esm/postgres/postgres-data-provider.js +20 -14
- package/esm/postgres/schema-builder.d.ts +1 -1
- package/esm/postgres/schema-builder.js +28 -21
- package/esm/remult-express.js +2 -2
- package/esm/remult-fastify.js +9 -7
- package/esm/remult-fresh.d.ts +1 -1
- package/esm/remult-fresh.js +5 -8
- package/esm/remult-knex/index.d.ts +4 -4
- package/esm/remult-knex/index.js +75 -59
- package/esm/remult-mongo.js +36 -27
- package/esm/remult-next.d.ts +3 -3
- package/esm/remult-next.js +17 -11
- package/esm/remult-sveltekit.js +10 -10
- package/esm/server/JsonEntityFileStorage.js +3 -1
- package/esm/server/core.d.ts +2 -2
- package/esm/server/core.js +2 -2
- package/esm/server/expressBridge.d.ts +3 -12
- package/esm/server/expressBridge.js +265 -278
- package/esm/server/index.d.ts +2 -2
- package/esm/server/index.js +5 -2
- package/esm/server/initAsyncHooks.js +1 -1
- package/esm/server/initDataProvider.js +1 -1
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
- package/esm/src/backend-tests/backend-database-test-setup.backend-spec.js +47 -38
- package/esm/src/buildRestDataProvider.d.ts +1 -1
- package/esm/src/buildRestDataProvider.js +21 -13
- package/esm/src/column-interfaces.d.ts +9 -9
- package/esm/src/column.d.ts +4 -0
- package/esm/src/column.js +23 -11
- package/esm/src/context.d.ts +20 -8
- package/esm/src/context.js +65 -24
- package/esm/src/data-api.d.ts +0 -1
- package/esm/src/data-api.js +38 -37
- package/esm/src/data-interfaces.d.ts +1 -1
- package/esm/src/data-interfaces.js +1 -1
- package/esm/src/data-providers/array-entity-data-provider.js +9 -9
- package/esm/src/data-providers/in-memory-database.d.ts +1 -1
- package/esm/src/data-providers/in-memory-database.js +3 -1
- package/esm/src/data-providers/json-data-provider.js +8 -8
- package/esm/src/data-providers/rest-data-provider.d.ts +1 -1
- package/esm/src/data-providers/rest-data-provider.js +52 -36
- package/esm/src/data-providers/sql-database.d.ts +5 -5
- package/esm/src/data-providers/sql-database.js +53 -36
- package/esm/src/data-providers/web-sql-data-provider.d.ts +4 -4
- package/esm/src/data-providers/web-sql-data-provider.js +15 -13
- package/esm/src/entity.d.ts +24 -24
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.d.ts +4 -4
- package/esm/src/filter/filter-consumer-bridge-to-sql-request.js +35 -20
- package/esm/src/filter/filter-interfaces.d.ts +7 -7
- package/esm/src/filter/filter-interfaces.js +108 -88
- package/esm/src/live-query/LiveQueryClient.js +37 -29
- package/esm/src/live-query/SseSubscriptionClient.d.ts +1 -1
- package/esm/src/live-query/SseSubscriptionClient.js +14 -14
- package/esm/src/live-query/SubscriptionChannel.d.ts +3 -3
- package/esm/src/live-query/SubscriptionChannel.js +27 -25
- package/esm/src/live-query/SubscriptionServer.js +24 -20
- package/esm/src/remult-proxy.d.ts +1 -1
- package/esm/src/remult-proxy.js +87 -29
- package/esm/src/remult3/DecoratorReplacer.d.ts +2 -2
- package/esm/src/remult3/RepositoryImplementation.d.ts +51 -41
- package/esm/src/remult3/RepositoryImplementation.js +336 -206
- package/esm/src/remult3/remult3.d.ts +56 -51
- package/esm/src/remult3/remult3.js +0 -1
- package/esm/src/server-action.d.ts +12 -5
- package/esm/src/server-action.js +79 -53
- package/esm/src/shared-tests/db-tests-setup.d.ts +8 -8
- package/esm/src/shared-tests/db-tests-setup.js +10 -10
- package/esm/src/shared-tests/db-tests.db-tests.d.ts +1 -1
- package/esm/src/shared-tests/db-tests.db-tests.js +279 -177
- package/esm/src/shared-tests/deleteAll.d.ts +1 -1
- package/esm/src/shared-tests/deleteAll.js +1 -1
- package/esm/src/shared-tests/entityWithValidations.js +1 -1
- package/esm/src/shared-tests/test-custom-id-column.spec.js +4 -4
- package/esm/src/shared-tests/test-special-value.spec.js +12 -12
- package/esm/src/shared-tests/test-update-with-null.spec.js +10 -6
- package/esm/src/sort.d.ts +2 -2
- package/esm/src/sort.js +12 -10
- package/esm/src/tests/TestDataApiResponse.d.ts +1 -1
- package/esm/src/tests/TestDataApiResponse.js +3 -4
- package/esm/src/tests/createData.js +2 -2
- package/esm/src/tests/d.js +1 -1
- package/esm/src/tests/dWithPrefilter.js +1 -1
- package/esm/src/tests/entityForCustomFilter.d.ts +4 -4
- package/esm/src/tests/entityForCustomFilter.js +12 -4
- package/esm/src/tests/entityWithValidationsOnColumn.js +1 -1
- package/esm/src/tests/frontend-database-tests-setup.spec.d.ts +1 -1
- package/esm/src/tests/frontend-database-tests-setup.spec.js +14 -14
- package/esm/src/tests/h.js +4 -4
- package/esm/src/tests/remult-3-entities.d.ts +2 -2
- package/esm/src/tests/remult-3-entities.js +6 -6
- package/esm/src/tests/testHelper.spec.d.ts +7 -7
- package/esm/src/tests/testHelper.spec.js +50 -39
- package/esm/src/tests/testModel/models.js +4 -4
- package/esm/src/validators.d.ts +1 -1
- package/esm/src/validators.js +10 -7
- package/esm/src/valueConverters.d.ts +1 -1
- package/esm/src/valueConverters.js +68 -55
- package/esm/test-servers/shared/Task.d.ts +9 -0
- package/esm/test-servers/shared/Task.js +32 -0
- package/esm/test.d.ts +5 -0
- package/esm/test.js +6 -0
- package/graphql.js +157 -45
- package/index.d.ts +10 -10
- package/inputTypes.js +1 -1
- package/live-query/data-provider-live-query-storage.d.ts +3 -3
- package/live-query/data-provider-live-query-storage.js +7 -4
- package/myLog.js +2 -2
- package/package.json +2 -2
- package/postgres/postgres-data-provider.d.ts +2 -2
- package/postgres/postgres-data-provider.js +21 -16
- package/postgres/schema-builder.d.ts +1 -1
- package/postgres/schema-builder.js +22 -15
- package/remult-express.js +1 -1
- package/remult-fastify.js +7 -7
- package/remult-fresh.d.ts +1 -1
- package/remult-fresh.js +1 -4
- package/remult-knex/index.d.ts +4 -4
- package/remult-knex/index.js +50 -35
- package/remult-mongo.js +33 -23
- package/remult-next.d.ts +3 -3
- package/remult-next.js +15 -11
- package/remult-sveltekit.js +14 -15
- package/server/core.d.ts +2 -2
- package/server/expressBridge.d.ts +3 -12
- package/server/expressBridge.js +278 -279
- package/server/index.d.ts +2 -2
- package/server/index.js +5 -2
- package/server/initAsyncHooks.js +2 -2
- package/server/initDataProvider.js +1 -1
- package/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +1 -1
- package/src/backend-tests/backend-database-test-setup.backend-spec.js +40 -31
- package/src/buildRestDataProvider.d.ts +1 -1
- package/src/buildRestDataProvider.js +18 -10
- package/src/column-interfaces.d.ts +9 -9
- package/src/column.d.ts +4 -0
- package/src/column.js +20 -8
- package/src/context.d.ts +20 -8
- package/src/context.js +61 -18
- package/src/data-api.d.ts +0 -1
- package/src/data-api.js +40 -43
- package/src/data-interfaces.d.ts +1 -1
- package/src/data-providers/array-entity-data-provider.js +2 -2
- package/src/data-providers/in-memory-database.d.ts +1 -1
- package/src/data-providers/in-memory-database.js +3 -1
- package/src/data-providers/json-data-provider.js +33 -15
- package/src/data-providers/rest-data-provider.d.ts +1 -1
- package/src/data-providers/rest-data-provider.js +47 -32
- package/src/data-providers/sql-database.d.ts +5 -5
- package/src/data-providers/sql-database.js +41 -24
- package/src/data-providers/web-sql-data-provider.d.ts +4 -4
- package/src/data-providers/web-sql-data-provider.js +10 -8
- package/src/entity.d.ts +24 -24
- package/src/filter/filter-consumer-bridge-to-sql-request.d.ts +4 -4
- package/src/filter/filter-consumer-bridge-to-sql-request.js +34 -17
- package/src/filter/filter-interfaces.d.ts +7 -7
- package/src/filter/filter-interfaces.js +73 -47
- package/src/live-query/LiveQueryClient.js +35 -25
- package/src/live-query/SseSubscriptionClient.d.ts +1 -1
- package/src/live-query/SseSubscriptionClient.js +80 -76
- package/src/live-query/SubscriptionChannel.d.ts +3 -3
- package/src/live-query/SubscriptionChannel.js +26 -18
- package/src/live-query/SubscriptionServer.js +23 -17
- package/src/remult-proxy.d.ts +1 -1
- package/src/remult-proxy.js +84 -35
- package/src/remult3/DecoratorReplacer.d.ts +2 -2
- package/src/remult3/RepositoryImplementation.d.ts +51 -41
- package/src/remult3/RepositoryImplementation.js +402 -257
- package/src/remult3/remult3.d.ts +56 -51
- package/src/remult3/remult3.js +0 -1
- package/src/server-action.d.ts +12 -5
- package/src/server-action.js +78 -48
- package/src/shared-tests/db-tests-setup.d.ts +8 -8
- package/src/shared-tests/db-tests-setup.js +6 -6
- package/src/shared-tests/db-tests.db-tests.d.ts +1 -1
- package/src/shared-tests/db-tests.db-tests.js +350 -153
- package/src/shared-tests/deleteAll.d.ts +1 -1
- package/src/shared-tests/entityWithValidations.js +1 -1
- package/src/shared-tests/test-custom-id-column.spec.js +4 -4
- package/src/shared-tests/test-special-value.spec.js +9 -9
- package/src/shared-tests/test-update-with-null.spec.js +8 -4
- package/src/sort.d.ts +2 -2
- package/src/sort.js +9 -7
- package/src/tests/TestDataApiResponse.d.ts +1 -1
- package/src/tests/TestDataApiResponse.js +3 -4
- package/src/tests/createData.js +1 -1
- package/src/tests/d.js +1 -1
- package/src/tests/dWithPrefilter.js +1 -1
- package/src/tests/entityForCustomFilter.d.ts +4 -4
- package/src/tests/entityForCustomFilter.js +16 -6
- package/src/tests/entityWithValidationsOnColumn.js +1 -1
- package/src/tests/frontend-database-tests-setup.spec.d.ts +1 -1
- package/src/tests/frontend-database-tests-setup.spec.js +8 -8
- package/src/tests/h.js +3 -3
- package/src/tests/remult-3-entities.d.ts +2 -2
- package/src/tests/remult-3-entities.js +8 -4
- package/src/tests/testHelper.spec.d.ts +7 -7
- package/src/tests/testHelper.spec.js +38 -27
- package/src/tests/testModel/models.js +3 -3
- package/src/validators.d.ts +1 -1
- package/src/validators.js +18 -9
- package/src/valueConverters.d.ts +1 -1
- package/src/valueConverters.js +38 -21
- package/esm/remult-svletekit.d.ts +0 -3
- package/esm/remult-svletekit.js +0 -83
- package/esm/src/id-entity.d.ts +0 -4
- package/esm/src/id-entity.js +0 -8
- package/esm/src/remult3/getId.d.ts +0 -2
- package/esm/src/remult3/getId.js +0 -7
- package/postgres/getEntityTypescriptPostgres.d.ts +0 -1
- package/postgres/getEntityTypescriptPostgres.js +0 -125
- package/src/id-entity.d.ts +0 -4
- package/src/id-entity.js +0 -17
- package/src/remult3/getId.d.ts +0 -2
- package/src/remult3/getId.js +0 -11
package/esm/src/context.js
CHANGED
|
@@ -1,12 +1,44 @@
|
|
|
1
1
|
import { actionInfo, serverActionField } from './server-action';
|
|
2
2
|
import { RestDataProvider } from './data-providers/rest-data-provider';
|
|
3
|
-
import { RepositoryImplementation } from
|
|
4
|
-
import { LiveQueryClient } from
|
|
5
|
-
import { SseSubscriptionClient } from
|
|
6
|
-
import { RemultProxy } from
|
|
7
|
-
import { buildRestDataProvider, isExternalHttpProvider } from
|
|
3
|
+
import { RepositoryImplementation } from './remult3/RepositoryImplementation';
|
|
4
|
+
import { LiveQueryClient } from './live-query/LiveQueryClient';
|
|
5
|
+
import { SseSubscriptionClient } from './live-query/SseSubscriptionClient';
|
|
6
|
+
import { RemultProxy, remult } from './remult-proxy';
|
|
7
|
+
import { buildRestDataProvider, isExternalHttpProvider, } from './buildRestDataProvider';
|
|
8
|
+
export class RemultAsyncLocalStorage {
|
|
9
|
+
constructor(remultObjectStorage) {
|
|
10
|
+
this.remultObjectStorage = remultObjectStorage;
|
|
11
|
+
}
|
|
12
|
+
static enable() {
|
|
13
|
+
;
|
|
14
|
+
remult.remultFactory = () => {
|
|
15
|
+
const r = RemultAsyncLocalStorage.instance.getRemult();
|
|
16
|
+
if (r)
|
|
17
|
+
return r;
|
|
18
|
+
else
|
|
19
|
+
throw new Error('remult object was requested outside of a valid context, try running it within initApi or a remult request cycle');
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
static disable() {
|
|
23
|
+
;
|
|
24
|
+
remult.resetFactory();
|
|
25
|
+
}
|
|
26
|
+
run(remult, callback) {
|
|
27
|
+
if (this.remultObjectStorage)
|
|
28
|
+
this.remultObjectStorage.run(remult, callback);
|
|
29
|
+
else
|
|
30
|
+
callback();
|
|
31
|
+
}
|
|
32
|
+
getRemult() {
|
|
33
|
+
if (!this.remultObjectStorage) {
|
|
34
|
+
throw new Error("can't use static remult in this environment, `async_hooks` were not initialized");
|
|
35
|
+
}
|
|
36
|
+
return this.remultObjectStorage.getStore();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
RemultAsyncLocalStorage.instance = new RemultAsyncLocalStorage(undefined);
|
|
8
40
|
export function isBackend() {
|
|
9
|
-
return actionInfo.runningOnServer;
|
|
41
|
+
return actionInfo.runningOnServer || !remult.dataProvider.isProxy;
|
|
10
42
|
}
|
|
11
43
|
export class Remult {
|
|
12
44
|
constructor(provider) {
|
|
@@ -16,7 +48,7 @@ export class Remult {
|
|
|
16
48
|
this.repCache = new Map();
|
|
17
49
|
/* @internal*/
|
|
18
50
|
this.liveQueryPublisher = {
|
|
19
|
-
itemChanged: async () => { }
|
|
51
|
+
itemChanged: async () => { },
|
|
20
52
|
};
|
|
21
53
|
/* @internal*/
|
|
22
54
|
this.liveQuerySubscriber = new LiveQueryClient(() => this.apiClient, () => this.user?.id);
|
|
@@ -25,7 +57,7 @@ export class Remult {
|
|
|
25
57
|
/** The api client that will be used by `remult` to perform calls to the `api` */
|
|
26
58
|
this.apiClient = {
|
|
27
59
|
url: '/api',
|
|
28
|
-
subscriptionClient: new SseSubscriptionClient()
|
|
60
|
+
subscriptionClient: new SseSubscriptionClient(),
|
|
29
61
|
};
|
|
30
62
|
if (provider && provider.getEntityDataProvider) {
|
|
31
63
|
this.dataProvider = provider;
|
|
@@ -34,7 +66,7 @@ export class Remult {
|
|
|
34
66
|
if (isExternalHttpProvider(provider)) {
|
|
35
67
|
this.apiClient.httpClient = provider;
|
|
36
68
|
}
|
|
37
|
-
else if (typeof
|
|
69
|
+
else if (typeof provider === 'function')
|
|
38
70
|
this.apiClient.httpClient = provider;
|
|
39
71
|
else if (provider) {
|
|
40
72
|
const apiClient = provider;
|
|
@@ -60,10 +92,10 @@ export class Remult {
|
|
|
60
92
|
dataProvider = this.dataProvider;
|
|
61
93
|
let dpCache = this.repCache.get(dataProvider);
|
|
62
94
|
if (!dpCache)
|
|
63
|
-
this.repCache.set(dataProvider, dpCache = new Map());
|
|
95
|
+
this.repCache.set(dataProvider, (dpCache = new Map()));
|
|
64
96
|
let r = dpCache.get(entity);
|
|
65
97
|
if (!r) {
|
|
66
|
-
dpCache.set(entity, r = new RepositoryImplementation(entity, this, dataProvider));
|
|
98
|
+
dpCache.set(entity, (r = new RepositoryImplementation(entity, this, dataProvider)));
|
|
67
99
|
}
|
|
68
100
|
return r;
|
|
69
101
|
}
|
|
@@ -111,7 +143,7 @@ export class Remult {
|
|
|
111
143
|
}
|
|
112
144
|
}
|
|
113
145
|
}
|
|
114
|
-
else if (typeof
|
|
146
|
+
else if (typeof allowed === 'function') {
|
|
115
147
|
return allowed(instance, this);
|
|
116
148
|
}
|
|
117
149
|
else
|
|
@@ -124,22 +156,31 @@ export class Remult {
|
|
|
124
156
|
* @param backendMethod - the backend method to call
|
|
125
157
|
* @param classInstance - the class instance of the backend method, for static backend methods use undefined
|
|
126
158
|
* @param args - the arguments to send to the backend method
|
|
127
|
-
|
|
159
|
+
*/
|
|
128
160
|
call(backendMethod, classInstance, ...args) {
|
|
129
|
-
const z =
|
|
161
|
+
const z = backendMethod[serverActionField];
|
|
130
162
|
if (!z.doWork)
|
|
131
|
-
throw Error(
|
|
163
|
+
throw Error('The method received is not a valid backend method');
|
|
132
164
|
//@ts-ignore
|
|
133
165
|
return z.doWork(args, classInstance, this.apiClient.url, buildRestDataProvider(this.apiClient.httpClient));
|
|
134
166
|
}
|
|
135
167
|
clearAllCache() {
|
|
136
168
|
this.repCache.clear();
|
|
137
169
|
}
|
|
170
|
+
static run(callback, options) {
|
|
171
|
+
const remult = new Remult();
|
|
172
|
+
if (options.dataProvider)
|
|
173
|
+
remult.dataProvider = options.dataProvider;
|
|
174
|
+
let r;
|
|
175
|
+
RemultAsyncLocalStorage.instance.run(remult, () => {
|
|
176
|
+
r = callback();
|
|
177
|
+
});
|
|
178
|
+
return r;
|
|
179
|
+
}
|
|
138
180
|
}
|
|
139
181
|
/** A helper callback that can be used to debug and trace all find operations. Useful in debugging scenarios */
|
|
140
182
|
Remult.onFind = (metadata, options) => { };
|
|
141
183
|
RemultProxy.defaultRemult = new Remult();
|
|
142
|
-
;
|
|
143
184
|
export const allEntities = [];
|
|
144
185
|
export const classHelpers = new Map();
|
|
145
186
|
export class ClassHelper {
|
|
@@ -152,7 +193,7 @@ export function setControllerSettings(target, options) {
|
|
|
152
193
|
while (true) {
|
|
153
194
|
let helper = classHelpers.get(r);
|
|
154
195
|
if (!helper)
|
|
155
|
-
classHelpers.set(r, helper = new ClassHelper());
|
|
196
|
+
classHelpers.set(r, (helper = new ClassHelper()));
|
|
156
197
|
helper.classes.set(target, options);
|
|
157
198
|
let p = Object.getPrototypeOf(r.prototype);
|
|
158
199
|
if (p == null)
|
|
@@ -171,10 +212,10 @@ Allow.authenticated = (...args) => {
|
|
|
171
212
|
if (args[0].authenticated)
|
|
172
213
|
return args[0].authenticated();
|
|
173
214
|
}
|
|
174
|
-
return
|
|
215
|
+
return remult.authenticated();
|
|
175
216
|
};
|
|
176
217
|
export const queryConfig = {
|
|
177
|
-
defaultPageSize: 200
|
|
218
|
+
defaultPageSize: 200,
|
|
178
219
|
};
|
|
179
220
|
export class EventSource {
|
|
180
221
|
constructor() {
|
|
@@ -184,9 +225,9 @@ export class EventSource {
|
|
|
184
225
|
this.listeners.push(what);
|
|
185
226
|
await what();
|
|
186
227
|
return () => {
|
|
187
|
-
this.listeners = this.listeners.filter(x => x != what);
|
|
228
|
+
this.listeners = this.listeners.filter((x) => x != what);
|
|
188
229
|
};
|
|
189
|
-
}
|
|
230
|
+
},
|
|
190
231
|
};
|
|
191
232
|
}
|
|
192
233
|
async fire() {
|
|
@@ -199,7 +240,7 @@ export async function doTransaction(remult, what) {
|
|
|
199
240
|
const trans = new transactionLiveQueryPublisher(remult.liveQueryPublisher);
|
|
200
241
|
let ok = true;
|
|
201
242
|
const result = await remult.dataProvider.transaction(async (ds) => {
|
|
202
|
-
remult.dataProvider =
|
|
243
|
+
remult.dataProvider = ds;
|
|
203
244
|
remult.liveQueryPublisher = trans;
|
|
204
245
|
await what();
|
|
205
246
|
ok = true;
|
|
@@ -215,11 +256,11 @@ class transactionLiveQueryPublisher {
|
|
|
215
256
|
async itemChanged(entityKey, changes) {
|
|
216
257
|
let items = this.transactionItems.get(entityKey);
|
|
217
258
|
if (!items) {
|
|
218
|
-
this.transactionItems.set(entityKey, items = []);
|
|
259
|
+
this.transactionItems.set(entityKey, (items = []));
|
|
219
260
|
}
|
|
220
261
|
for (const c of changes) {
|
|
221
262
|
if (c.oldId !== undefined) {
|
|
222
|
-
const item = items.find(y => y.id === c.oldId);
|
|
263
|
+
const item = items.find((y) => y.id === c.oldId);
|
|
223
264
|
if (item !== undefined) {
|
|
224
265
|
if (c.deleted)
|
|
225
266
|
item.deleted = true;
|
package/esm/src/data-api.d.ts
CHANGED
|
@@ -36,4 +36,3 @@ export interface DataApiRequest {
|
|
|
36
36
|
}
|
|
37
37
|
export declare function determineSort(sortUrlParm: string, dirUrlParam: string): any;
|
|
38
38
|
export declare function serializeError(data: ErrorInfo): ErrorInfo<any>;
|
|
39
|
-
export declare function getLiveQueryChannel(queryId: string, userId: string): string;
|
package/esm/src/data-api.js
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import { customUrlToken, buildFilterFromRequestParameters } from './filter/filter-interfaces';
|
|
1
|
+
import { customUrlToken, buildFilterFromRequestParameters, } from './filter/filter-interfaces';
|
|
2
2
|
import { doTransaction } from './context';
|
|
3
3
|
import { Filter } from './filter/filter-interfaces';
|
|
4
4
|
import { ForbiddenError } from './server-action';
|
|
5
|
-
import { findOptionsToJson, liveQueryAction } from './data-providers/rest-data-provider';
|
|
5
|
+
import { findOptionsToJson, liveQueryAction, } from './data-providers/rest-data-provider';
|
|
6
6
|
export class DataApi {
|
|
7
7
|
constructor(repository, remult) {
|
|
8
8
|
this.repository = repository;
|
|
9
9
|
this.remult = remult;
|
|
10
10
|
}
|
|
11
11
|
httpGet(res, req, serializeContext) {
|
|
12
|
-
const action = req?.get(
|
|
12
|
+
const action = req?.get('__action');
|
|
13
13
|
if (action?.startsWith(liveQueryAction))
|
|
14
|
-
return this.liveQuery(res, req, undefined, serializeContext,
|
|
14
|
+
return this.liveQuery(res, req, undefined, serializeContext, action.substring(liveQueryAction.length));
|
|
15
15
|
switch (action) {
|
|
16
|
-
case
|
|
17
|
-
case
|
|
16
|
+
case 'get':
|
|
17
|
+
case 'count':
|
|
18
18
|
return this.count(res, req, undefined);
|
|
19
19
|
}
|
|
20
20
|
return this.getArray(res, req, undefined);
|
|
21
21
|
}
|
|
22
22
|
async httpPost(res, req, body, serializeContext) {
|
|
23
|
-
const action = req?.get(
|
|
23
|
+
const action = req?.get('__action');
|
|
24
24
|
if (action?.startsWith(liveQueryAction))
|
|
25
|
-
return this.liveQuery(res, req, undefined, serializeContext,
|
|
25
|
+
return this.liveQuery(res, req, undefined, serializeContext, action.substring(liveQueryAction.length));
|
|
26
26
|
switch (action) {
|
|
27
|
-
case
|
|
27
|
+
case 'get':
|
|
28
28
|
return this.getArray(res, req, body);
|
|
29
|
-
case
|
|
29
|
+
case 'count':
|
|
30
30
|
return this.count(res, req, body);
|
|
31
|
-
case
|
|
32
|
-
await this.remult.liveQueryStorage.remove(
|
|
33
|
-
res.success(
|
|
31
|
+
case 'endLiveQuery':
|
|
32
|
+
await this.remult.liveQueryStorage.remove(body.id);
|
|
33
|
+
res.success('ok');
|
|
34
34
|
return;
|
|
35
35
|
default:
|
|
36
36
|
return this.post(res, body);
|
|
@@ -49,7 +49,9 @@ export class DataApi {
|
|
|
49
49
|
return;
|
|
50
50
|
}
|
|
51
51
|
try {
|
|
52
|
-
response.success({
|
|
52
|
+
response.success({
|
|
53
|
+
count: +(await this.repository.count(await this.buildWhere(request, filterBody))),
|
|
54
|
+
});
|
|
53
55
|
}
|
|
54
56
|
catch (err) {
|
|
55
57
|
response.error(err);
|
|
@@ -59,16 +61,16 @@ export class DataApi {
|
|
|
59
61
|
let findOptions = { load: () => [] };
|
|
60
62
|
findOptions.where = await this.buildWhere(request, filterBody);
|
|
61
63
|
if (request) {
|
|
62
|
-
let sort = request.get(
|
|
64
|
+
let sort = request.get('_sort');
|
|
63
65
|
if (sort != undefined) {
|
|
64
66
|
let dir = request.get('_order');
|
|
65
67
|
findOptions.orderBy = determineSort(sort, dir);
|
|
66
68
|
}
|
|
67
|
-
let limit = +request.get(
|
|
69
|
+
let limit = +request.get('_limit');
|
|
68
70
|
if (!limit && DataApi.defaultGetLimit)
|
|
69
71
|
limit = DataApi.defaultGetLimit;
|
|
70
72
|
findOptions.limit = limit;
|
|
71
|
-
findOptions.page = +request.get(
|
|
73
|
+
findOptions.page = +request.get('_page');
|
|
72
74
|
}
|
|
73
75
|
if (this.remult.isAllowed(this.repository.metadata.options.apiRequireId)) {
|
|
74
76
|
let hasId = false;
|
|
@@ -90,7 +92,7 @@ export class DataApi {
|
|
|
90
92
|
isLessThan: () => { },
|
|
91
93
|
isNotNull: () => { },
|
|
92
94
|
isNull: () => { },
|
|
93
|
-
or: () => { }
|
|
95
|
+
or: () => { },
|
|
94
96
|
});
|
|
95
97
|
}
|
|
96
98
|
if (!hasId) {
|
|
@@ -98,8 +100,7 @@ export class DataApi {
|
|
|
98
100
|
throw new ForbiddenError();
|
|
99
101
|
}
|
|
100
102
|
}
|
|
101
|
-
const r = await this.repository.find(findOptions)
|
|
102
|
-
.then(async (r) => {
|
|
103
|
+
const r = await this.repository.find(findOptions).then(async (r) => {
|
|
103
104
|
return await Promise.all(r.map(async (y) => this.repository.getEntityRef(y).toApiJson()));
|
|
104
105
|
});
|
|
105
106
|
return { r, findOptions };
|
|
@@ -130,12 +131,12 @@ export class DataApi {
|
|
|
130
131
|
const data = {
|
|
131
132
|
requestJson: await serializeContext(),
|
|
132
133
|
findOptionsJson: findOptionsToJson(r.findOptions, this.repository.metadata),
|
|
133
|
-
lastIds: r.r.map(y => this.repository.metadata.idMetadata.getId(y))
|
|
134
|
+
lastIds: r.r.map((y) => this.repository.metadata.idMetadata.getId(y)),
|
|
134
135
|
};
|
|
135
136
|
await this.remult.liveQueryStorage.add({
|
|
136
137
|
entityKey: this.repository.metadata.key,
|
|
137
138
|
id: queryChannel,
|
|
138
|
-
data
|
|
139
|
+
data,
|
|
139
140
|
});
|
|
140
141
|
response.success(r.r);
|
|
141
142
|
}
|
|
@@ -149,19 +150,19 @@ export class DataApi {
|
|
|
149
150
|
async buildWhere(request, filterBody) {
|
|
150
151
|
var where = [];
|
|
151
152
|
if (this.repository.metadata.options.apiPrefilter) {
|
|
152
|
-
if (typeof this.repository.metadata.options.apiPrefilter ===
|
|
153
|
+
if (typeof this.repository.metadata.options.apiPrefilter === 'function')
|
|
153
154
|
where.push(await this.repository.metadata.options.apiPrefilter());
|
|
154
155
|
else
|
|
155
156
|
where.push(this.repository.metadata.options.apiPrefilter);
|
|
156
157
|
}
|
|
157
158
|
if (request) {
|
|
158
159
|
where.push(buildFilterFromRequestParameters(this.repository.metadata, {
|
|
159
|
-
get: key => {
|
|
160
|
+
get: (key) => {
|
|
160
161
|
let result = request.get(key);
|
|
161
|
-
if (key.startsWith(customUrlToken) && result)
|
|
162
|
+
if (key.startsWith(customUrlToken) && result && typeof result === "string")
|
|
162
163
|
return JSON.parse(result);
|
|
163
164
|
return result;
|
|
164
|
-
}
|
|
165
|
+
},
|
|
165
166
|
}));
|
|
166
167
|
}
|
|
167
168
|
if (filterBody)
|
|
@@ -170,21 +171,24 @@ export class DataApi {
|
|
|
170
171
|
}
|
|
171
172
|
async doOnId(response, id, what) {
|
|
172
173
|
try {
|
|
173
|
-
var where = [
|
|
174
|
+
var where = [
|
|
175
|
+
this.repository.metadata.idMetadata.getIdFilter(id),
|
|
176
|
+
];
|
|
174
177
|
if (this.repository.metadata.options.apiPrefilter) {
|
|
175
|
-
if (typeof this.repository.metadata.options.apiPrefilter ===
|
|
178
|
+
if (typeof this.repository.metadata.options.apiPrefilter === 'function')
|
|
176
179
|
where.push(await this.repository.metadata.options.apiPrefilter());
|
|
177
180
|
else
|
|
178
181
|
where.push(this.repository.metadata.options.apiPrefilter);
|
|
179
182
|
}
|
|
180
|
-
await this.repository
|
|
181
|
-
|
|
183
|
+
await this.repository
|
|
184
|
+
.find({
|
|
185
|
+
where: { $and: where },
|
|
182
186
|
})
|
|
183
187
|
.then(async (r) => {
|
|
184
188
|
if (r.length == 0)
|
|
185
189
|
response.notFound();
|
|
186
190
|
else if (r.length > 1)
|
|
187
|
-
response.error({ message:
|
|
191
|
+
response.error({ message: 'id is not unique' });
|
|
188
192
|
else
|
|
189
193
|
await what(r[0]);
|
|
190
194
|
});
|
|
@@ -254,10 +258,10 @@ export function determineSort(sortUrlParm, dirUrlParam) {
|
|
|
254
258
|
let result = {};
|
|
255
259
|
sortUrlParm.split(',').map((name, i) => {
|
|
256
260
|
let key = name.trim();
|
|
257
|
-
if (i < dirItems.length && dirItems[i].toLowerCase().trim().startsWith(
|
|
258
|
-
return result[key] =
|
|
261
|
+
if (i < dirItems.length && dirItems[i].toLowerCase().trim().startsWith('d'))
|
|
262
|
+
return (result[key] = 'desc');
|
|
259
263
|
else
|
|
260
|
-
return result[key] =
|
|
264
|
+
return (result[key] = 'asc');
|
|
261
265
|
});
|
|
262
266
|
return result;
|
|
263
267
|
}
|
|
@@ -272,6 +276,3 @@ export function serializeError(data) {
|
|
|
272
276
|
data = { message: x };
|
|
273
277
|
return data;
|
|
274
278
|
}
|
|
275
|
-
export function getLiveQueryChannel(queryId, userId) {
|
|
276
|
-
return `users:${userId}:queries:${queryId}`;
|
|
277
|
-
}
|
|
@@ -4,8 +4,8 @@ import { EntityMetadata, OmitEB } from './remult3';
|
|
|
4
4
|
export interface DataProvider {
|
|
5
5
|
getEntityDataProvider(entity: EntityMetadata): EntityDataProvider;
|
|
6
6
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
7
|
-
supportsRawFilter?: boolean;
|
|
8
7
|
ensureSchema?(entities: EntityMetadata[]): Promise<void>;
|
|
8
|
+
isProxy?: boolean;
|
|
9
9
|
}
|
|
10
10
|
export interface Storage {
|
|
11
11
|
ensureSchema(): Promise<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { customDatabaseFilterToken, Filter } from '../filter/filter-interfaces';
|
|
1
|
+
import { customDatabaseFilterToken, Filter, } from '../filter/filter-interfaces';
|
|
2
2
|
import { CompoundIdField } from '../column';
|
|
3
3
|
export class ArrayEntityDataProvider {
|
|
4
4
|
constructor(entity, rows) {
|
|
@@ -15,8 +15,8 @@ export class ArrayEntityDataProvider {
|
|
|
15
15
|
static rawFilter(filter) {
|
|
16
16
|
return {
|
|
17
17
|
[customDatabaseFilterToken]: {
|
|
18
|
-
arrayFilter: filter
|
|
19
|
-
}
|
|
18
|
+
arrayFilter: filter,
|
|
19
|
+
},
|
|
20
20
|
};
|
|
21
21
|
}
|
|
22
22
|
verifyThatRowHasAllNotNullColumns(r) {
|
|
@@ -58,7 +58,7 @@ export class ArrayEntityDataProvider {
|
|
|
58
58
|
let rows = this.rows;
|
|
59
59
|
if (options) {
|
|
60
60
|
if (options.where) {
|
|
61
|
-
rows = rows.filter(i => {
|
|
61
|
+
rows = rows.filter((i) => {
|
|
62
62
|
let x = new FilterConsumerBridgeToObject(i);
|
|
63
63
|
options.where.__applyToConsumer(x);
|
|
64
64
|
return x.ok;
|
|
@@ -72,7 +72,7 @@ export class ArrayEntityDataProvider {
|
|
|
72
72
|
rows = pageArray(rows, options);
|
|
73
73
|
}
|
|
74
74
|
if (rows)
|
|
75
|
-
return rows.map(i => {
|
|
75
|
+
return rows.map((i) => {
|
|
76
76
|
return this.translateFromJson(i);
|
|
77
77
|
});
|
|
78
78
|
}
|
|
@@ -91,7 +91,7 @@ export class ArrayEntityDataProvider {
|
|
|
91
91
|
return result;
|
|
92
92
|
}
|
|
93
93
|
idMatches(id) {
|
|
94
|
-
return item => {
|
|
94
|
+
return (item) => {
|
|
95
95
|
let x = new FilterConsumerBridgeToObject(item);
|
|
96
96
|
Filter.fromEntityFilter(this.entity, this.entity.idMetadata.getIdFilter(id)).__applyToConsumer(x);
|
|
97
97
|
return x.ok;
|
|
@@ -139,9 +139,9 @@ export class ArrayEntityDataProvider {
|
|
|
139
139
|
}
|
|
140
140
|
}
|
|
141
141
|
if (data[idf.key])
|
|
142
|
-
this.rows.forEach(i => {
|
|
142
|
+
this.rows.forEach((i) => {
|
|
143
143
|
if (data[idf.key] == i[idf.key])
|
|
144
|
-
throw Error(
|
|
144
|
+
throw Error('id already exists');
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
147
|
let j = this.translateToJson(data);
|
|
@@ -161,7 +161,7 @@ function pageArray(rows, options) {
|
|
|
161
161
|
if (page < 1)
|
|
162
162
|
page = 1;
|
|
163
163
|
let x = 0;
|
|
164
|
-
return rows.filter(i => {
|
|
164
|
+
return rows.filter((i) => {
|
|
165
165
|
x++;
|
|
166
166
|
let max = page * options.limit;
|
|
167
167
|
let min = max - options.limit;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DataProvider, EntityDataProvider } from '../data-interfaces';
|
|
2
|
-
import { __RowsOfDataForTesting } from
|
|
2
|
+
import { __RowsOfDataForTesting } from '../__RowsOfDataForTesting';
|
|
3
3
|
import { EntityMetadata } from '../remult3';
|
|
4
4
|
export declare class InMemoryDataProvider implements DataProvider, __RowsOfDataForTesting {
|
|
5
5
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
@@ -26,27 +26,27 @@ class JsonEntityDataProvider {
|
|
|
26
26
|
return what(dp, () => this.helper.setItem(dbName, JSON.stringify(data, undefined, 2)));
|
|
27
27
|
}
|
|
28
28
|
find(options) {
|
|
29
|
-
return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.find(options)));
|
|
29
|
+
return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.find(options))));
|
|
30
30
|
}
|
|
31
31
|
count(where) {
|
|
32
|
-
return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.count(where)));
|
|
32
|
+
return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.count(where))));
|
|
33
33
|
}
|
|
34
34
|
update(id, data) {
|
|
35
|
-
return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.update(id, data).then(x => {
|
|
35
|
+
return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.update(id, data).then((x) => {
|
|
36
36
|
save();
|
|
37
37
|
return x;
|
|
38
|
-
})));
|
|
38
|
+
}))));
|
|
39
39
|
}
|
|
40
40
|
delete(id) {
|
|
41
|
-
return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.delete(id).then(x => {
|
|
41
|
+
return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.delete(id).then((x) => {
|
|
42
42
|
save();
|
|
43
43
|
return x;
|
|
44
|
-
})));
|
|
44
|
+
}))));
|
|
45
45
|
}
|
|
46
46
|
async insert(data) {
|
|
47
|
-
return this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.insert(data).then(x => {
|
|
47
|
+
return (this.p = this.p.then(() => this.loadEntityData((dp, save) => dp.insert(data).then((x) => {
|
|
48
48
|
save();
|
|
49
49
|
return x;
|
|
50
|
-
})));
|
|
50
|
+
}))));
|
|
51
51
|
}
|
|
52
52
|
}
|
|
@@ -8,7 +8,7 @@ export declare class RestDataProvider implements DataProvider {
|
|
|
8
8
|
constructor(apiProvider: () => ApiClient);
|
|
9
9
|
getEntityDataProvider(entity: EntityMetadata): RestEntityDataProvider;
|
|
10
10
|
transaction(action: (dataProvider: DataProvider) => Promise<void>): Promise<void>;
|
|
11
|
-
|
|
11
|
+
isProxy: boolean;
|
|
12
12
|
}
|
|
13
13
|
export declare class RestEntityDataProvider implements EntityDataProvider {
|
|
14
14
|
private url;
|