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/graphql.js
CHANGED
|
@@ -16,7 +16,7 @@ export function remultGraphql(options) {
|
|
|
16
16
|
}
|
|
17
17
|
const entities = (() => {
|
|
18
18
|
const remult = new Remult();
|
|
19
|
-
return options.entities?.map(x => remult.repo(x).metadata) || [];
|
|
19
|
+
return options.entities?.map((x) => remult.repo(x).metadata) || [];
|
|
20
20
|
})();
|
|
21
21
|
const types = [];
|
|
22
22
|
const root = {};
|
|
@@ -24,7 +24,7 @@ export function remultGraphql(options) {
|
|
|
24
24
|
const resolversMutation = {};
|
|
25
25
|
const resolvers = { Query: resolversQuery, Mutation: resolversMutation };
|
|
26
26
|
function upsertTypes(key, kind = 'type', order = 0) {
|
|
27
|
-
let t = types.find(t => t.key === key);
|
|
27
|
+
let t = types.find((t) => t.key === key);
|
|
28
28
|
if (!t) {
|
|
29
29
|
types.push((t = {
|
|
30
30
|
key,
|
|
@@ -49,6 +49,13 @@ export function remultGraphql(options) {
|
|
|
49
49
|
}
|
|
50
50
|
return t;
|
|
51
51
|
}
|
|
52
|
+
function upsertUnion(key, values, order) {
|
|
53
|
+
const u = upsertTypes(key, 'union', order);
|
|
54
|
+
u.fields = values.map((value) => {
|
|
55
|
+
return { key: value, value: { Union: true } };
|
|
56
|
+
});
|
|
57
|
+
return u;
|
|
58
|
+
}
|
|
52
59
|
// Where - GraphQL primitives
|
|
53
60
|
for (const whereType of ['String', 'Int', 'Float', 'Boolean', 'ID']) {
|
|
54
61
|
const currentWhere = upsertTypes(`Where${whereType}`, 'input', 20);
|
|
@@ -59,13 +66,17 @@ export function remultGraphql(options) {
|
|
|
59
66
|
for (const operator of [...operatorType, ...operatorTypeArray]) {
|
|
60
67
|
const field = {
|
|
61
68
|
key: operator,
|
|
62
|
-
value: operatorTypeArray.includes(operator)
|
|
69
|
+
value: operatorTypeArray.includes(operator)
|
|
70
|
+
? `[${whereType}!]`
|
|
71
|
+
: whereType,
|
|
63
72
|
};
|
|
64
73
|
currentWhere.fields.push(field);
|
|
65
74
|
currentWhereNullable.fields.push(field);
|
|
66
75
|
}
|
|
67
76
|
// only for specific types
|
|
68
|
-
if (whereType === 'String' ||
|
|
77
|
+
if (whereType === 'String' ||
|
|
78
|
+
whereType === 'Int' ||
|
|
79
|
+
whereType === 'Float') {
|
|
69
80
|
for (const operator of ['gt', 'gte', 'lt', 'lte']) {
|
|
70
81
|
const field = {
|
|
71
82
|
key: operator,
|
|
@@ -101,6 +112,7 @@ export function remultGraphql(options) {
|
|
|
101
112
|
comment: `The globally unique \`ID\` _(_typename:id)_`,
|
|
102
113
|
};
|
|
103
114
|
const argClientMutationId = { key: 'clientMutationId', value: `String` };
|
|
115
|
+
const argErrorDetail = { key: 'error', value: `ErrorDetail` };
|
|
104
116
|
for (const meta of entities) {
|
|
105
117
|
const orderByFields = [];
|
|
106
118
|
const key = meta.key;
|
|
@@ -126,7 +138,7 @@ export function remultGraphql(options) {
|
|
|
126
138
|
notFound: () => (err = 'not found'),
|
|
127
139
|
progress: () => { },
|
|
128
140
|
};
|
|
129
|
-
work(response, x => (result = x), arg1, req)
|
|
141
|
+
work(response, (x) => (result = x), arg1, req)
|
|
130
142
|
.then(() => {
|
|
131
143
|
if (err) {
|
|
132
144
|
error(err);
|
|
@@ -134,7 +146,7 @@ export function remultGraphql(options) {
|
|
|
134
146
|
}
|
|
135
147
|
res(result);
|
|
136
148
|
})
|
|
137
|
-
.catch(err => error(err));
|
|
149
|
+
.catch((err) => error(err));
|
|
138
150
|
});
|
|
139
151
|
};
|
|
140
152
|
};
|
|
@@ -146,49 +158,103 @@ export function remultGraphql(options) {
|
|
|
146
158
|
await work(dApi, response, setResult, arg1, meta);
|
|
147
159
|
});
|
|
148
160
|
};
|
|
161
|
+
const handleMutationWithErrors = (work) => {
|
|
162
|
+
return handleRequestWithDataApiContext(async (dApi, response, origSetResult, arg1, req) => {
|
|
163
|
+
const setResult = (item) => {
|
|
164
|
+
origSetResult({
|
|
165
|
+
clientMutationId: arg1.clientMutationId,
|
|
166
|
+
...item,
|
|
167
|
+
});
|
|
168
|
+
};
|
|
169
|
+
return work(dApi, {
|
|
170
|
+
...response,
|
|
171
|
+
forbidden: () => {
|
|
172
|
+
setResult({
|
|
173
|
+
error: {
|
|
174
|
+
__typename: 'ForbiddenError',
|
|
175
|
+
message: 'forbidden',
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
},
|
|
179
|
+
notFound: () => {
|
|
180
|
+
setResult({
|
|
181
|
+
error: {
|
|
182
|
+
__typename: 'NotFoundError',
|
|
183
|
+
message: 'not found',
|
|
184
|
+
},
|
|
185
|
+
});
|
|
186
|
+
},
|
|
187
|
+
error: (err) => {
|
|
188
|
+
const modelState = [];
|
|
189
|
+
if (err.modelState)
|
|
190
|
+
for (const key in err.modelState) {
|
|
191
|
+
modelState.push({
|
|
192
|
+
field: key,
|
|
193
|
+
message: err.modelState[key],
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
setResult({
|
|
197
|
+
error: {
|
|
198
|
+
__typename: 'ValidationError',
|
|
199
|
+
message: err.message,
|
|
200
|
+
modelState,
|
|
201
|
+
},
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
}, setResult, arg1, req);
|
|
205
|
+
});
|
|
206
|
+
};
|
|
149
207
|
const queryArgsConnection = [
|
|
150
208
|
{
|
|
151
209
|
key: 'limit',
|
|
152
210
|
value: 'Int',
|
|
153
|
-
comment: `
|
|
154
|
-
For **page by page** pagination.
|
|
155
|
-
Limit the number of result.
|
|
211
|
+
comment: `
|
|
212
|
+
For **page by page** pagination.
|
|
213
|
+
Limit the number of result.
|
|
156
214
|
_Side note: \`Math.ceil(totalCount / limit)\` to determine how many pages there are._`,
|
|
157
215
|
},
|
|
158
216
|
{
|
|
159
217
|
key: 'page',
|
|
160
218
|
value: 'Int',
|
|
161
|
-
comment: `
|
|
162
|
-
For **page by page** pagination.
|
|
219
|
+
comment: `
|
|
220
|
+
For **page by page** pagination.
|
|
163
221
|
Select a dedicated page.`,
|
|
164
222
|
},
|
|
165
|
-
{
|
|
166
|
-
|
|
223
|
+
{
|
|
224
|
+
key: 'orderBy',
|
|
225
|
+
value: `${key}OrderBy`,
|
|
226
|
+
comment: `Remult sorting options`,
|
|
227
|
+
},
|
|
228
|
+
{
|
|
229
|
+
key: 'where',
|
|
230
|
+
value: `${key}Where`,
|
|
231
|
+
comment: `Remult filtering options`,
|
|
232
|
+
},
|
|
167
233
|
];
|
|
168
234
|
if (v2ConnectionAndPagination) {
|
|
169
235
|
queryArgsConnection.push({
|
|
170
236
|
key: 'first',
|
|
171
237
|
value: 'Int',
|
|
172
|
-
comment: `
|
|
173
|
-
For **forward cursor** pagination
|
|
238
|
+
comment: `
|
|
239
|
+
For **forward cursor** pagination
|
|
174
240
|
Takes the \`first\`: \`n\` elements from the list.`,
|
|
175
241
|
}, {
|
|
176
242
|
key: 'after',
|
|
177
243
|
value: 'String',
|
|
178
|
-
comment: `
|
|
179
|
-
For **forward cursor** pagination
|
|
244
|
+
comment: `
|
|
245
|
+
For **forward cursor** pagination
|
|
180
246
|
\`after\` this \`cursor\`.`,
|
|
181
247
|
}, {
|
|
182
248
|
key: 'last',
|
|
183
249
|
value: 'Int',
|
|
184
|
-
comment: `
|
|
185
|
-
For **backward cursor** pagination
|
|
250
|
+
comment: `
|
|
251
|
+
For **backward cursor** pagination
|
|
186
252
|
Takes the \`last\`: \`n\` elements from the list.`,
|
|
187
253
|
}, {
|
|
188
254
|
key: 'before',
|
|
189
255
|
value: 'String',
|
|
190
|
-
comment: `
|
|
191
|
-
For **backward cursor** pagination
|
|
256
|
+
comment: `
|
|
257
|
+
For **backward cursor** pagination
|
|
192
258
|
\`before\` this \`cursor\`.`,
|
|
193
259
|
});
|
|
194
260
|
}
|
|
@@ -202,8 +268,8 @@ Select a dedicated page.`,
|
|
|
202
268
|
root[getSingleEntityKey] = handleRequestWithDataApiContext(async (dApi, response, setResult, arg1, req) => {
|
|
203
269
|
await dApi.get({
|
|
204
270
|
...response,
|
|
205
|
-
success: y => {
|
|
206
|
-
currentType.query.resultProcessors.forEach(z => z(y));
|
|
271
|
+
success: (y) => {
|
|
272
|
+
currentType.query.resultProcessors.forEach((z) => z(y));
|
|
207
273
|
setResult(y);
|
|
208
274
|
},
|
|
209
275
|
}, arg1.id);
|
|
@@ -259,7 +325,7 @@ Select a dedicated page.`,
|
|
|
259
325
|
...response,
|
|
260
326
|
success: (x) => {
|
|
261
327
|
setResult(x.map((y) => {
|
|
262
|
-
currentType.query.resultProcessors.forEach(z => z(y));
|
|
328
|
+
currentType.query.resultProcessors.forEach((z) => z(y));
|
|
263
329
|
return y;
|
|
264
330
|
}));
|
|
265
331
|
},
|
|
@@ -270,7 +336,7 @@ Select a dedicated page.`,
|
|
|
270
336
|
[totalCountKey]: createResultPromise(async (response, setResult) => {
|
|
271
337
|
await dApi.count({
|
|
272
338
|
...response,
|
|
273
|
-
success: x => setResult(x.count),
|
|
339
|
+
success: (x) => setResult(x.count),
|
|
274
340
|
}, {
|
|
275
341
|
get: bridgeQueryOptionsToDataApiGet(arg1),
|
|
276
342
|
}, translateWhereToRestBody(meta.fields, arg1));
|
|
@@ -282,15 +348,21 @@ Select a dedicated page.`,
|
|
|
282
348
|
};
|
|
283
349
|
// Mutation
|
|
284
350
|
const root_mutation = upsertTypes('Mutation', 'type', -9);
|
|
285
|
-
const checkCanExist = (rule) => rule !== false &&
|
|
351
|
+
const checkCanExist = (rule) => rule !== false &&
|
|
352
|
+
!(rule === undefined &&
|
|
353
|
+
(meta.options.allowApiCrud === false ||
|
|
354
|
+
meta.options.allowApiCrud === undefined));
|
|
286
355
|
if (checkCanExist(meta.options.allowApiInsert)) {
|
|
287
356
|
// create
|
|
357
|
+
const createResolverKey = `create${getMetaType(meta)}`;
|
|
288
358
|
const createInput = `Create${getMetaType(meta)}Input`;
|
|
289
359
|
const createPayload = `Create${getMetaType(meta)}Payload`;
|
|
290
|
-
const createResolverKey = `create${getMetaType(meta)}`;
|
|
291
360
|
root_mutation.fields.push({
|
|
292
361
|
key: createResolverKey,
|
|
293
|
-
args: [
|
|
362
|
+
args: [
|
|
363
|
+
{ key: 'input', value: `${createInput}!` },
|
|
364
|
+
argClientMutationId,
|
|
365
|
+
],
|
|
294
366
|
value: `${createPayload}`,
|
|
295
367
|
comment: `Create a new \`${getMetaType(meta)}\``,
|
|
296
368
|
});
|
|
@@ -298,13 +370,13 @@ Select a dedicated page.`,
|
|
|
298
370
|
currentType.mutation.create.payload = upsertTypes(createPayload);
|
|
299
371
|
currentType.mutation.create.payload.fields.push({
|
|
300
372
|
key: `${toCamelCase(getMetaType(meta))}`,
|
|
301
|
-
value:
|
|
302
|
-
}, argClientMutationId);
|
|
303
|
-
root[createResolverKey] =
|
|
373
|
+
value: getMetaType(meta),
|
|
374
|
+
}, argErrorDetail, argClientMutationId);
|
|
375
|
+
root[createResolverKey] = handleMutationWithErrors(async (dApi, response, setResult, arg1, req) => {
|
|
304
376
|
await dApi.post({
|
|
305
377
|
...response,
|
|
306
|
-
created: y => {
|
|
307
|
-
currentType.query.resultProcessors.forEach(z => z(y));
|
|
378
|
+
created: (y) => {
|
|
379
|
+
currentType.query.resultProcessors.forEach((z) => z(y));
|
|
308
380
|
setResult({
|
|
309
381
|
[toCamelCase(getMetaType(meta))]: y,
|
|
310
382
|
});
|
|
@@ -320,7 +392,11 @@ Select a dedicated page.`,
|
|
|
320
392
|
const updateResolverKey = `update${getMetaType(meta)}`;
|
|
321
393
|
root_mutation.fields.push({
|
|
322
394
|
key: updateResolverKey,
|
|
323
|
-
args: [
|
|
395
|
+
args: [
|
|
396
|
+
argId,
|
|
397
|
+
{ key: 'patch', value: `${updateInput}!` },
|
|
398
|
+
argClientMutationId,
|
|
399
|
+
],
|
|
324
400
|
value: `${updatePayload}`,
|
|
325
401
|
comment: `Update a \`${getMetaType(meta)}\``,
|
|
326
402
|
});
|
|
@@ -329,12 +405,12 @@ Select a dedicated page.`,
|
|
|
329
405
|
currentType.mutation.update.payload.fields.push({
|
|
330
406
|
key: `${toCamelCase(getMetaType(meta))}`,
|
|
331
407
|
value: `${getMetaType(meta)}`,
|
|
332
|
-
}, argClientMutationId);
|
|
333
|
-
root[updateResolverKey] =
|
|
408
|
+
}, argErrorDetail, argClientMutationId);
|
|
409
|
+
root[updateResolverKey] = handleMutationWithErrors(async (dApi, response, setResult, arg1, req) => {
|
|
334
410
|
await dApi.put({
|
|
335
411
|
...response,
|
|
336
|
-
success: y => {
|
|
337
|
-
currentType.query.resultProcessors.forEach(z => z(y));
|
|
412
|
+
success: (y) => {
|
|
413
|
+
currentType.query.resultProcessors.forEach((z) => z(y));
|
|
338
414
|
setResult({
|
|
339
415
|
[toCamelCase(getMetaType(meta))]: y,
|
|
340
416
|
});
|
|
@@ -358,8 +434,8 @@ Select a dedicated page.`,
|
|
|
358
434
|
currentType.mutation.delete.payload.fields.push({
|
|
359
435
|
key: deletedResultKey,
|
|
360
436
|
value: 'ID',
|
|
361
|
-
}, argClientMutationId);
|
|
362
|
-
root[deleteResolverKey] =
|
|
437
|
+
}, argErrorDetail, argClientMutationId);
|
|
438
|
+
root[deleteResolverKey] = handleMutationWithErrors(async (dApi, response, setResult, arg1, req) => {
|
|
363
439
|
await dApi.delete({
|
|
364
440
|
...response,
|
|
365
441
|
deleted: () => {
|
|
@@ -389,7 +465,7 @@ Select a dedicated page.`,
|
|
|
389
465
|
break;
|
|
390
466
|
}
|
|
391
467
|
const ref = entities.find((i) => i.entityType === f.valueType);
|
|
392
|
-
currentType.query.resultProcessors.push(r => {
|
|
468
|
+
currentType.query.resultProcessors.push((r) => {
|
|
393
469
|
r[nodeIdKey] = () => getMetaType(meta) + ':' + meta.idMetadata.getId(r);
|
|
394
470
|
});
|
|
395
471
|
if (ref !== undefined) {
|
|
@@ -400,7 +476,7 @@ Select a dedicated page.`,
|
|
|
400
476
|
comment: f.caption,
|
|
401
477
|
});
|
|
402
478
|
const refKey = ref.key;
|
|
403
|
-
currentType.query.resultProcessors.push(r => {
|
|
479
|
+
currentType.query.resultProcessors.push((r) => {
|
|
404
480
|
const val = r[f.key];
|
|
405
481
|
if (val === null || val === undefined)
|
|
406
482
|
return null;
|
|
@@ -424,7 +500,7 @@ Select a dedicated page.`,
|
|
|
424
500
|
order: 10,
|
|
425
501
|
comment: `List all \`${getMetaType(meta)}\` of \`${refKey}\``,
|
|
426
502
|
});
|
|
427
|
-
refT.query.resultProcessors.push(r => {
|
|
503
|
+
refT.query.resultProcessors.push((r) => {
|
|
428
504
|
const val = r.id;
|
|
429
505
|
r[key] = async (args, req, gqlInfo) => {
|
|
430
506
|
return await root[key]({
|
|
@@ -522,6 +598,46 @@ Select a dedicated page.`,
|
|
|
522
598
|
const nodeInterface = upsertTypes('Node', 'interface', 31);
|
|
523
599
|
nodeInterface.comment = `Node interface of remult entities (eg: nodeId: \`Task:1\` so \`__typename:id\`)`;
|
|
524
600
|
nodeInterface.fields.push(argNodeId);
|
|
601
|
+
upsertUnion(argErrorDetail.value, ['ValidationError', 'ForbiddenError', 'NotFoundError'], 32);
|
|
602
|
+
const errorInterface = upsertTypes('Error', 'interface', 33);
|
|
603
|
+
errorInterface.comment = `Error interface of remult entities`;
|
|
604
|
+
errorInterface.fields.push({
|
|
605
|
+
key: 'message',
|
|
606
|
+
value: 'String!',
|
|
607
|
+
});
|
|
608
|
+
const validationErrorInterface = upsertTypes('ValidationError', 'type_impl_error', 34);
|
|
609
|
+
validationErrorInterface.comment = `Validation Error`;
|
|
610
|
+
validationErrorInterface.fields.push({
|
|
611
|
+
key: 'message',
|
|
612
|
+
value: 'String!',
|
|
613
|
+
});
|
|
614
|
+
validationErrorInterface.fields.push({
|
|
615
|
+
key: 'modelState',
|
|
616
|
+
value: '[ValidationErrorModelState!]!',
|
|
617
|
+
});
|
|
618
|
+
const validationErrorModelStateInterface = upsertTypes('ValidationErrorModelState', 'type', 34);
|
|
619
|
+
validationErrorModelStateInterface.comment = `Validation Error Model State`;
|
|
620
|
+
validationErrorModelStateInterface.fields.push({
|
|
621
|
+
key: 'field',
|
|
622
|
+
value: 'String!',
|
|
623
|
+
});
|
|
624
|
+
validationErrorModelStateInterface.fields.push({
|
|
625
|
+
key: 'message',
|
|
626
|
+
value: 'String!',
|
|
627
|
+
});
|
|
628
|
+
// progress: () => { },
|
|
629
|
+
const forbiddenErrorInterface = upsertTypes('ForbiddenError', 'type_impl_error', 34);
|
|
630
|
+
forbiddenErrorInterface.comment = `Forbidden Error`;
|
|
631
|
+
forbiddenErrorInterface.fields.push({
|
|
632
|
+
key: 'message',
|
|
633
|
+
value: 'String!',
|
|
634
|
+
});
|
|
635
|
+
const notFoundErrorInterface = upsertTypes('NotFoundError', 'type_impl_error', 34);
|
|
636
|
+
notFoundErrorInterface.comment = `Not Found Error`;
|
|
637
|
+
notFoundErrorInterface.fields.push({
|
|
638
|
+
key: 'message',
|
|
639
|
+
value: 'String!',
|
|
640
|
+
});
|
|
525
641
|
return {
|
|
526
642
|
resolvers,
|
|
527
643
|
rootValue: root,
|
|
@@ -533,19 +649,26 @@ Select a dedicated page.`,
|
|
|
533
649
|
if (kind === 'type_impl_node') {
|
|
534
650
|
prefix = `type ${key} implements Node`;
|
|
535
651
|
}
|
|
536
|
-
|
|
537
|
-
prefix
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
652
|
+
if (kind === 'type_impl_error') {
|
|
653
|
+
prefix = `type ${key} implements Error`;
|
|
654
|
+
}
|
|
655
|
+
const type = kind === 'union'
|
|
656
|
+
? `union ${key} = ${fields.map((field) => field.key).join(' | ')}`
|
|
657
|
+
: blockFormat({
|
|
658
|
+
prefix,
|
|
659
|
+
data: fields
|
|
660
|
+
.sort((a, b) => (a.order ? a.order : 0) - (b.order ? b.order : 0))
|
|
661
|
+
.map((field) => fieldFormat(field)),
|
|
662
|
+
comment: comment ?? `The ${kind} for \`${key}\``,
|
|
663
|
+
});
|
|
543
664
|
const orderByStr = orderBy.length > 0 ? `\n\n${orderBy.join('\n\n')}` : ``;
|
|
544
665
|
const whereTypeStr = whereType.length > 0 ? `\n\n${whereType.join('\n\n')}` : ``;
|
|
545
|
-
const whereTypeSubFieldsStr = whereTypeSubFields.length > 0
|
|
666
|
+
const whereTypeSubFieldsStr = whereTypeSubFields.length > 0
|
|
667
|
+
? `\n\n${whereTypeSubFields.join('\n\n')}`
|
|
668
|
+
: ``;
|
|
546
669
|
return `${type}${orderByStr}${whereTypeStr}${whereTypeSubFieldsStr}`;
|
|
547
670
|
})
|
|
548
|
-
.join(`\n\n`)}
|
|
671
|
+
.join(`\n\n`)}
|
|
549
672
|
`,
|
|
550
673
|
};
|
|
551
674
|
}
|
|
@@ -567,12 +690,12 @@ function blockFormat(obj) {
|
|
|
567
690
|
if (obj.data.length === 0) {
|
|
568
691
|
return ``;
|
|
569
692
|
}
|
|
570
|
-
const str = `${obj.prefix} {
|
|
571
|
-
${obj.data.join('\n ')}
|
|
693
|
+
const str = `${obj.prefix} {
|
|
694
|
+
${obj.data.join('\n ')}
|
|
572
695
|
}`;
|
|
573
|
-
let commentsStr = `"""
|
|
574
|
-
${obj.comment}
|
|
575
|
-
"""
|
|
696
|
+
let commentsStr = `"""
|
|
697
|
+
${obj.comment}
|
|
698
|
+
"""
|
|
576
699
|
`;
|
|
577
700
|
if (_removeComments) {
|
|
578
701
|
commentsStr = ``;
|
|
@@ -582,17 +705,17 @@ ${obj.comment}
|
|
|
582
705
|
function argsFormat(args) {
|
|
583
706
|
if (args) {
|
|
584
707
|
return `(${args
|
|
585
|
-
.map(arg => {
|
|
586
|
-
let strComment = `
|
|
587
|
-
"""
|
|
588
|
-
${arg.comment}
|
|
589
|
-
"""
|
|
708
|
+
.map((arg) => {
|
|
709
|
+
let strComment = `
|
|
710
|
+
"""
|
|
711
|
+
${arg.comment}
|
|
712
|
+
"""
|
|
590
713
|
`;
|
|
591
714
|
if (_removeComments || !arg.comment) {
|
|
592
715
|
strComment = ``;
|
|
593
716
|
}
|
|
594
717
|
if (strComment) {
|
|
595
|
-
return `${strComment} ${arg.key}: ${arg.value}
|
|
718
|
+
return `${strComment} ${arg.key}: ${arg.value}
|
|
596
719
|
`;
|
|
597
720
|
}
|
|
598
721
|
return `${arg.key}: ${arg.value}`;
|
|
@@ -603,9 +726,9 @@ function argsFormat(args) {
|
|
|
603
726
|
}
|
|
604
727
|
function fieldFormat(field) {
|
|
605
728
|
// First, the comment
|
|
606
|
-
let strComment = `"""
|
|
607
|
-
${field.comment}
|
|
608
|
-
"""
|
|
729
|
+
let strComment = `"""
|
|
730
|
+
${field.comment}
|
|
731
|
+
"""
|
|
609
732
|
`;
|
|
610
733
|
if (_removeComments || !field.comment) {
|
|
611
734
|
strComment = ``;
|
|
@@ -638,7 +761,7 @@ function bridgeQueryOptionsToDataApiGet(arg1) {
|
|
|
638
761
|
if (orderBy) {
|
|
639
762
|
if (key === '_sort') {
|
|
640
763
|
const sort_keys = [];
|
|
641
|
-
Object.keys(orderBy).forEach(sort_key => {
|
|
764
|
+
Object.keys(orderBy).forEach((sort_key) => {
|
|
642
765
|
sort_keys.push(sort_key);
|
|
643
766
|
});
|
|
644
767
|
if (sort_keys.length > 0) {
|
|
@@ -647,7 +770,7 @@ function bridgeQueryOptionsToDataApiGet(arg1) {
|
|
|
647
770
|
}
|
|
648
771
|
else if (key === '_order') {
|
|
649
772
|
const sort_directions = [];
|
|
650
|
-
Object.keys(orderBy).forEach(sort_key => {
|
|
773
|
+
Object.keys(orderBy).forEach((sort_key) => {
|
|
651
774
|
const direction = orderBy[sort_key].toLowerCase();
|
|
652
775
|
sort_directions.push(direction);
|
|
653
776
|
});
|
|
@@ -674,10 +797,10 @@ export function translateWhereToRestBody(fields, { where }) {
|
|
|
674
797
|
what(val);
|
|
675
798
|
};
|
|
676
799
|
for (const op of ['gt', 'gte', 'lt', 'lte', 'ne', 'in']) {
|
|
677
|
-
tr(op, val => (result[field.key + '.' + op] = val));
|
|
800
|
+
tr(op, (val) => (result[field.key + '.' + op] = val));
|
|
678
801
|
}
|
|
679
|
-
tr('nin', x => (result[field.key + '.ne'] = x));
|
|
680
|
-
tr('eq', x => (result[field.key] = x));
|
|
802
|
+
tr('nin', (x) => (result[field.key + '.ne'] = x));
|
|
803
|
+
tr('eq', (x) => (result[field.key] = x));
|
|
681
804
|
}
|
|
682
805
|
}
|
|
683
806
|
if (where.OR) {
|
|
@@ -685,5 +808,3 @@ export function translateWhereToRestBody(fields, { where }) {
|
|
|
685
808
|
}
|
|
686
809
|
return result;
|
|
687
810
|
}
|
|
688
|
-
//[ ] - when fetching a related entity - make sure it's include in api is true in the specific context.
|
|
689
|
-
//[ ] - test graphql where in entity definitions there is a reference to static remult
|
package/esm/index.d.ts
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
export { Field, Fields, FieldsMetadata, Entity, IdEntity, EntityBase, ControllerBase, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, QueryResult, QueryOptions, Repository, FieldType, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, getFields, EntityRef, getEntityRef, SortSegments, ValueListFieldType, getValueList, ValueListFieldOptions, ValueListInfo, OmitEB, Paginator, CaptionTransformer, LiveQuery, LiveQueryChangeInfo } from './src/remult3';
|
|
1
|
+
export { Field, Fields, FieldsMetadata, Entity, IdEntity, EntityBase, ControllerBase, FieldRef, IdFieldRef, FieldsRef, EntityMetadata, EntityOrderBy, EntityFilter, FindOptions, QueryResult, QueryOptions, Repository, FieldType, FindFirstOptions, ComparisonValueFilter, ValueFilter, IdFilter, ContainsStringValueFilter, getFields, EntityRef, getEntityRef, SortSegments, ValueListFieldType, getValueList, ValueListFieldOptions, ValueListInfo, OmitEB, Paginator, CaptionTransformer, LiveQuery, LiveQueryChangeInfo, } from './src/remult3';
|
|
2
2
|
export { StringFieldOptions } from './src/remult3/RepositoryImplementation';
|
|
3
3
|
export { describeClass } from './src/remult3/DecoratorReplacer';
|
|
4
4
|
export { EntityOptions } from './src/entity';
|
|
5
|
-
export { DataProvider, EntityDataProvider, EntityDataProviderFindOptions, ErrorInfo, RestDataProviderHttpProvider } from './src/data-interfaces';
|
|
5
|
+
export { DataProvider, EntityDataProvider, EntityDataProviderFindOptions, ErrorInfo, RestDataProviderHttpProvider, } from './src/data-interfaces';
|
|
6
6
|
export { SqlCommand, SqlImplementation, SqlResult } from './src/sql-command';
|
|
7
7
|
export { FieldMetadata, FieldOptions, FieldValidator, ValueConverter, ValueListItem, // reconsider, maybe it should go to remult angular as the abstraction ?
|
|
8
|
-
ValueOrExpression } from './src/column-interfaces';
|
|
8
|
+
ValueOrExpression, } from './src/column-interfaces';
|
|
9
9
|
export { RestDataProvider } from './src/data-providers/rest-data-provider';
|
|
10
10
|
export { InMemoryDataProvider } from './src/data-providers/in-memory-database';
|
|
11
11
|
export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider';
|
|
12
12
|
export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider';
|
|
13
|
-
export { SqlDatabase
|
|
14
|
-
export { CustomSqlFilterObject, CustomSqlFilterBuilder, dbNamesOf } from './src/filter/filter-consumer-bridge-to-sql-request';
|
|
15
|
-
export { JsonDataProvider, JsonEntityStorage } from './src/data-providers/json-data-provider';
|
|
16
|
-
export { Controller, BackendMethodOptions, BackendMethod, ProgressListener } from './src/server-action';
|
|
17
|
-
export { Allowed, Allow, Remult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource, UserInfo } from './src/context';
|
|
13
|
+
export { SqlDatabase } from './src/data-providers/sql-database';
|
|
14
|
+
export { CustomSqlFilterObject, CustomSqlFilterBuilder, dbNamesOf, } from './src/filter/filter-consumer-bridge-to-sql-request';
|
|
15
|
+
export { JsonDataProvider, JsonEntityStorage, } from './src/data-providers/json-data-provider';
|
|
16
|
+
export { Controller, BackendMethodOptions, BackendMethod, ProgressListener, } from './src/server-action';
|
|
17
|
+
export { Allowed, Allow, Remult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource, UserInfo, } from './src/context';
|
|
18
18
|
export { ExternalHttpProvider } from './src/buildRestDataProvider';
|
|
19
19
|
export { SortSegment, Sort } from './src/sort';
|
|
20
20
|
export { OneToMany, CompoundIdField } from './src/column';
|
|
@@ -23,5 +23,5 @@ export { UrlBuilder } from './urlBuilder';
|
|
|
23
23
|
export { Validators } from './src/validators';
|
|
24
24
|
export { ValueConverters } from './src/valueConverters';
|
|
25
25
|
export { remult } from './src/remult-proxy';
|
|
26
|
-
export { SubscriptionServer, LiveQueryStorage, StoredQuery, InMemoryLiveQueryStorage } from
|
|
27
|
-
export { SubscriptionListener, SubscriptionClientConnection, SubscriptionClient, SubscriptionChannel, LiveQueryChange, Unsubscribe } from './src/live-query/SubscriptionChannel';
|
|
26
|
+
export { SubscriptionServer, LiveQueryStorage, StoredQuery, InMemoryLiveQueryStorage, } from './src/live-query/SubscriptionServer';
|
|
27
|
+
export { SubscriptionListener, SubscriptionClientConnection, SubscriptionClient, SubscriptionChannel, LiveQueryChange, Unsubscribe, } from './src/live-query/SubscriptionChannel';
|
package/esm/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/*
|
|
2
2
|
* Public API Surface of remult
|
|
3
3
|
*/
|
|
4
|
-
export { Field, Fields, Entity, IdEntity, EntityBase, ControllerBase, FieldType, getFields, getEntityRef, ValueListFieldType, getValueList, ValueListInfo, CaptionTransformer } from './src/remult3';
|
|
4
|
+
export { Field, Fields, Entity, IdEntity, EntityBase, ControllerBase, FieldType, getFields, getEntityRef, ValueListFieldType, getValueList, ValueListInfo, CaptionTransformer, } from './src/remult3';
|
|
5
5
|
export { describeClass } from './src/remult3/DecoratorReplacer';
|
|
6
6
|
export { RestDataProvider } from './src/data-providers/rest-data-provider'; //V
|
|
7
7
|
export { InMemoryDataProvider } from './src/data-providers/in-memory-database'; //V
|
|
8
8
|
export { ArrayEntityDataProvider } from './src/data-providers/array-entity-data-provider'; //V
|
|
9
9
|
export { WebSqlDataProvider } from './src/data-providers/web-sql-data-provider'; //V
|
|
10
|
-
export { SqlDatabase
|
|
11
|
-
export { CustomSqlFilterBuilder, dbNamesOf } from './src/filter/filter-consumer-bridge-to-sql-request';
|
|
12
|
-
export { JsonDataProvider } from './src/data-providers/json-data-provider'; //V
|
|
10
|
+
export { SqlDatabase } from './src/data-providers/sql-database'; //V
|
|
11
|
+
export { CustomSqlFilterBuilder, dbNamesOf, } from './src/filter/filter-consumer-bridge-to-sql-request';
|
|
12
|
+
export { JsonDataProvider, } from './src/data-providers/json-data-provider'; //V
|
|
13
13
|
//export * from './src/data-api'; //reconsider if to make internal
|
|
14
|
-
export { Controller, BackendMethod, ProgressListener } from './src/server-action';
|
|
15
|
-
export { Allow, Remult, isBackend, EventSource } from './src/context';
|
|
14
|
+
export { Controller, BackendMethod, ProgressListener, } from './src/server-action';
|
|
15
|
+
export { Allow, Remult, isBackend, EventSource, } from './src/context';
|
|
16
16
|
export { Sort } from './src/sort';
|
|
17
17
|
export { OneToMany, CompoundIdField } from './src/column';
|
|
18
18
|
export { Filter } from './src/filter/filter-interfaces';
|
|
@@ -21,5 +21,5 @@ export { Validators } from './src/validators';
|
|
|
21
21
|
export { ValueConverters } from './src/valueConverters';
|
|
22
22
|
export { remult } from './src/remult-proxy';
|
|
23
23
|
//export { getId } from './src/remult3/getId';
|
|
24
|
-
export { InMemoryLiveQueryStorage } from
|
|
25
|
-
export { SubscriptionChannel } from './src/live-query/SubscriptionChannel';
|
|
24
|
+
export { InMemoryLiveQueryStorage, } from './src/live-query/SubscriptionServer';
|
|
25
|
+
export { SubscriptionChannel, } from './src/live-query/SubscriptionChannel';
|
package/esm/inputTypes.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Storage, DataProvider } from
|
|
2
|
-
import { LiveQueryStorage, StoredQuery } from
|
|
3
|
-
import { EntityBase, Repository } from
|
|
1
|
+
import { Storage, DataProvider } from '../src/data-interfaces';
|
|
2
|
+
import { LiveQueryStorage, StoredQuery } from '../src/live-query/SubscriptionServer';
|
|
3
|
+
import { EntityBase, Repository } from '../src/remult3';
|
|
4
4
|
export declare class DataProviderLiveQueryStorage implements LiveQueryStorage, Storage {
|
|
5
5
|
repo: Promise<Repository<LiveQueryStorageEntity>>;
|
|
6
6
|
dataProvider: Promise<DataProvider>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { initDataProvider } from
|
|
3
|
-
import { allEntities, Remult } from
|
|
4
|
-
import { Entity, EntityBase, Fields } from
|
|
2
|
+
import { initDataProvider } from '../server/initDataProvider';
|
|
3
|
+
import { allEntities, Remult } from '../src/context';
|
|
4
|
+
import { Entity, EntityBase, Fields } from '../src/remult3';
|
|
5
5
|
export class DataProviderLiveQueryStorage {
|
|
6
6
|
constructor(dataProvider) {
|
|
7
7
|
this.dataProvider = initDataProvider(dataProvider);
|
|
8
|
-
this.repo = this.dataProvider.then(dp => new Remult(dp).repo(LiveQueryStorageEntity));
|
|
8
|
+
this.repo = this.dataProvider.then((dp) => new Remult(dp).repo(LiveQueryStorageEntity));
|
|
9
9
|
}
|
|
10
10
|
async ensureSchema() {
|
|
11
11
|
const dp = await this.dataProvider;
|
|
@@ -19,11 +19,13 @@ export class DataProviderLiveQueryStorage {
|
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
21
|
async remove(queryId) {
|
|
22
|
-
await this.repo
|
|
22
|
+
await this.repo
|
|
23
|
+
.then(async (repo) => {
|
|
23
24
|
const r = await repo.findId(queryId);
|
|
24
25
|
if (r)
|
|
25
26
|
await repo.delete(r);
|
|
26
|
-
})
|
|
27
|
+
})
|
|
28
|
+
.catch(() => { });
|
|
27
29
|
}
|
|
28
30
|
async forEach(entityKey, callback) {
|
|
29
31
|
const repo = await this.repo;
|
|
@@ -35,7 +37,8 @@ export class DataProviderLiveQueryStorage {
|
|
|
35
37
|
await repo.delete(query);
|
|
36
38
|
else {
|
|
37
39
|
await callback({
|
|
38
|
-
query,
|
|
40
|
+
query,
|
|
41
|
+
setData: async (data) => {
|
|
39
42
|
query.data = data;
|
|
40
43
|
await repo.save(query);
|
|
41
44
|
},
|
|
@@ -48,7 +51,7 @@ export class DataProviderLiveQueryStorage {
|
|
|
48
51
|
for (const query of await repo.find({ where: { id: queryIds } })) {
|
|
49
52
|
query.lastUsedIso = new Date().toISOString();
|
|
50
53
|
await repo.save(query);
|
|
51
|
-
queryIds = queryIds.filter(x => x !== query.id);
|
|
54
|
+
queryIds = queryIds.filter((x) => x !== query.id);
|
|
52
55
|
}
|
|
53
56
|
return queryIds;
|
|
54
57
|
}
|
|
@@ -81,7 +84,7 @@ __decorate([
|
|
|
81
84
|
], LiveQueryStorageEntity.prototype, "lastUsedIso", void 0);
|
|
82
85
|
LiveQueryStorageEntity = __decorate([
|
|
83
86
|
Entity(undefined, {
|
|
84
|
-
dbName: 'remult_live_query_storage'
|
|
87
|
+
dbName: 'remult_live_query_storage',
|
|
85
88
|
})
|
|
86
89
|
/*@internal */
|
|
87
90
|
], LiveQueryStorageEntity);
|