remult 0.17.0-exp.9 → 0.18.1-exp.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 +5 -28
- package/{core/assign.d.ts → assign.d.ts} +0 -0
- package/{core/assign.js → assign.js} +0 -0
- package/{core/classType.d.ts → classType.d.ts} +0 -0
- package/{core/classType.js → classType.js} +0 -0
- package/esm/{core/assign.d.ts → assign.d.ts} +0 -0
- package/esm/{core/assign.js → assign.js} +0 -0
- package/esm/{core/classType.d.ts → classType.d.ts} +0 -0
- package/esm/{core/classType.js → classType.js} +0 -0
- package/{core → esm}/graphql.d.ts +0 -0
- package/esm/{core/graphql.js → graphql.js} +0 -0
- package/{core → esm}/index.d.ts +4 -2
- package/esm/{core/index.js → index.js} +0 -0
- package/{core → esm}/inputTypes.d.ts +0 -0
- package/esm/{core/inputTypes.js → inputTypes.js} +0 -0
- package/esm/live-query/ably.d.ts +13 -0
- package/esm/live-query/ably.js +25 -0
- package/esm/live-query/index.d.ts +3 -0
- package/esm/live-query/index.js +3 -0
- package/{core → esm}/postgres/index.d.ts +0 -0
- package/esm/{core/postgres → postgres}/index.js +0 -0
- package/{core → esm}/postgres/postgres-data-provider.d.ts +0 -0
- package/esm/{core/postgres → postgres}/postgres-data-provider.js +0 -0
- package/{core → esm}/postgres/schema-builder.d.ts +0 -0
- package/esm/{core/postgres → postgres}/schema-builder.js +4 -4
- package/esm/remult-express.d.ts +31 -0
- package/esm/remult-express.js +157 -0
- package/{core → esm}/remult-fastify.d.ts +0 -0
- package/esm/{core/remult-fastify.js → remult-fastify.js} +1 -1
- package/{core → esm}/remult-fresh.d.ts +0 -0
- package/esm/{core/remult-fresh.js → remult-fresh.js} +2 -2
- package/{core → esm}/remult-knex/index.d.ts +0 -0
- package/esm/{core/remult-knex → remult-knex}/index.js +4 -11
- package/{core → esm}/remult-mongo.d.ts +0 -0
- package/esm/{core/remult-mongo.js → remult-mongo.js} +0 -0
- package/{core → esm}/server/JsonEntityFileStorage.d.ts +0 -0
- package/esm/{core/server → server}/JsonEntityFileStorage.js +0 -0
- package/{core → esm}/server/core.d.ts +0 -0
- package/esm/{core/server → server}/core.js +0 -0
- package/esm/{core/server → server}/expressBridge.d.ts +49 -11
- package/esm/{core/server → server}/expressBridge.js +48 -24
- package/esm/server/index.d.ts +2 -0
- package/esm/server/index.js +2 -0
- package/{core → esm}/server/initAsyncHooks.d.ts +0 -0
- package/esm/{core/server → server}/initAsyncHooks.js +0 -0
- package/{core → esm}/src/__EntityValueProvider.d.ts +0 -0
- package/esm/{core/src → src}/__EntityValueProvider.js +0 -0
- package/{core → esm}/src/__RowsOfDataForTesting.d.ts +0 -0
- package/esm/{core/src → src}/__RowsOfDataForTesting.js +0 -0
- package/{core → esm}/src/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -1
- package/esm/{core/src → src}/backend-tests/backend-database-test-setup.backend-spec.js +0 -10
- package/{core → esm}/src/backend-tests/my-test.backend-spec.d.ts +0 -0
- package/esm/{core/src → src}/backend-tests/my-test.backend-spec.js +0 -48
- package/esm/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
- package/esm/{core/src → src}/backend-tests/test-http-server.backend-spec.js +48 -32
- package/esm/src/buildRestDataProvider.d.ts +31 -0
- package/esm/src/buildRestDataProvider.js +110 -0
- package/{core → esm}/src/column-interfaces.d.ts +0 -0
- package/esm/{core/src → src}/column-interfaces.js +0 -0
- package/{core → esm}/src/column.d.ts +3 -3
- package/esm/{core/src → src}/column.js +0 -0
- package/esm/{core/src → src}/context.d.ts +21 -30
- package/esm/{core/src → src}/context.js +87 -110
- package/esm/{core/src → src}/data-api.d.ts +8 -3
- package/esm/src/data-api.js +260 -0
- package/{core → esm}/src/data-interfaces.d.ts +0 -0
- package/esm/{core/src → src}/data-interfaces.js +0 -0
- package/{core → esm}/src/data-providers/array-entity-data-provider.d.ts +0 -0
- package/esm/{core/src → src}/data-providers/array-entity-data-provider.js +1 -16
- package/{core → esm}/src/data-providers/in-memory-database.d.ts +0 -0
- package/esm/{core/src → src}/data-providers/in-memory-database.js +0 -0
- package/{core → esm}/src/data-providers/json-data-provider.d.ts +0 -0
- package/esm/{core/src → src}/data-providers/json-data-provider.js +0 -0
- package/{core → esm}/src/data-providers/rest-data-provider.d.ts +12 -1
- package/esm/{core/src → src}/data-providers/rest-data-provider.js +29 -9
- package/{core → esm}/src/data-providers/sql-database.d.ts +0 -0
- package/esm/{core/src → src}/data-providers/sql-database.js +1 -1
- package/{core → esm}/src/data-providers/web-sql-data-provider.d.ts +0 -0
- package/esm/{core/src → src}/data-providers/web-sql-data-provider.js +1 -1
- package/{core → esm}/src/entity.d.ts +0 -0
- package/esm/{core/src → src}/entity.js +0 -0
- package/{core → esm}/src/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -0
- package/esm/{core/src → src}/filter/filter-consumer-bridge-to-sql-request.js +0 -0
- package/{core → esm}/src/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -0
- package/esm/{core/src → src}/filter/filter-consumer-bridge-to-url-builder.js +0 -0
- package/{core → esm}/src/filter/filter-interfaces.d.ts +0 -0
- package/esm/{core/src → src}/filter/filter-interfaces.js +0 -0
- package/{core → esm}/src/id-entity.d.ts +0 -0
- package/esm/{core/src → src}/id-entity.js +0 -0
- package/esm/src/live-query/EventSourceLiveQueryProvider.d.ts +4 -0
- package/esm/src/live-query/EventSourceLiveQueryProvider.js +78 -0
- package/esm/src/live-query/LiveQueryClient.d.ts +19 -0
- package/esm/src/live-query/LiveQueryClient.js +147 -0
- package/esm/src/live-query/LiveQueryPublisher.d.ts +48 -0
- package/esm/src/live-query/LiveQueryPublisher.js +112 -0
- package/esm/src/live-query/LiveQuerySubscriber.d.ts +67 -0
- package/esm/src/live-query/LiveQuerySubscriber.js +99 -0
- package/esm/src/remult-proxy.d.ts +2 -0
- package/esm/{core/src → src}/remult-proxy.js +11 -9
- package/{core → esm}/src/remult3/DecoratorReplacer.d.ts +0 -0
- package/esm/{core/src → src}/remult3/DecoratorReplacer.js +0 -0
- package/esm/{core/src → src}/remult3/RepositoryImplementation.d.ts +6 -3
- package/esm/{core/src → src}/remult3/RepositoryImplementation.js +38 -22
- package/esm/src/remult3/getId.d.ts +2 -0
- package/esm/src/remult3/getId.js +7 -0
- package/{core → esm}/src/remult3/index.d.ts +0 -0
- package/esm/{core/src → src}/remult3/index.js +0 -0
- package/{core → esm}/src/remult3/remult3.d.ts +10 -6
- package/esm/{core/src → src}/remult3/remult3.js +0 -0
- package/{core → esm}/src/server-action.d.ts +4 -0
- package/esm/{core/src → src}/server-action.js +11 -12
- package/esm/{core/src → src}/shared-tests/db-tests-setup.d.ts +1 -1
- package/esm/{core/src → src}/shared-tests/db-tests-setup.js +1 -3
- package/{core → esm}/src/shared-tests/db-tests.db-tests.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/db-tests.db-tests.js +0 -0
- package/{core → esm}/src/shared-tests/deleteAll.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/deleteAll.js +0 -0
- package/{core → esm}/src/shared-tests/entityWithValidations.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/entityWithValidations.js +0 -0
- package/{core → esm}/src/shared-tests/index.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/index.js +0 -0
- package/{core → esm}/src/shared-tests/test-custom-id-column.spec.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/test-custom-id-column.spec.js +0 -0
- package/{core → esm}/src/shared-tests/test-special-value.spec.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/test-special-value.spec.js +0 -0
- package/{core → esm}/src/shared-tests/test-update-with-null.spec.d.ts +0 -0
- package/esm/{core/src → src}/shared-tests/test-update-with-null.spec.js +0 -0
- package/esm/{core/src → src}/sort.d.ts +1 -0
- package/esm/{core/src → src}/sort.js +18 -0
- package/{core → esm}/src/sql-command.d.ts +0 -0
- package/esm/{core/src → src}/sql-command.js +0 -0
- package/{core → esm}/src/tests/Done.d.ts +0 -0
- package/esm/{core/src → src}/tests/Done.js +0 -0
- package/{core → esm}/src/tests/TestDataApiResponse.d.ts +0 -0
- package/esm/{core/src → src}/tests/TestDataApiResponse.js +0 -0
- package/{core → esm}/src/tests/c.d.ts +0 -0
- package/esm/{core/src → src}/tests/c.js +0 -0
- package/{core → esm}/src/tests/createData.d.ts +0 -0
- package/esm/{core/src → src}/tests/createData.js +0 -0
- package/{core → esm}/src/tests/d.d.ts +0 -0
- package/esm/{core/src → src}/tests/d.js +0 -0
- package/{core → esm}/src/tests/dWithPrefilter.d.ts +0 -0
- package/esm/{core/src → src}/tests/dWithPrefilter.js +0 -0
- package/{core → esm}/src/tests/entityForCustomFilter.d.ts +0 -0
- package/esm/{core/src → src}/tests/entityForCustomFilter.js +0 -0
- package/{core → esm}/src/tests/entityWithValidationsOnColumn.d.ts +0 -0
- package/esm/{core/src → src}/tests/entityWithValidationsOnColumn.js +0 -0
- package/{core → esm}/src/tests/frontend-database-tests-setup.spec.d.ts +0 -0
- package/esm/{core/src → src}/tests/frontend-database-tests-setup.spec.js +0 -0
- package/{core → esm}/src/tests/h.d.ts +0 -0
- package/esm/{core/src → src}/tests/h.js +0 -0
- package/{core → esm}/src/tests/remult-3-entities.d.ts +0 -0
- package/esm/{core/src → src}/tests/remult-3-entities.js +0 -0
- package/{core → esm}/src/tests/tasks.d.ts +0 -0
- package/esm/{core/src → src}/tests/tasks.js +0 -0
- package/esm/{core/src → src}/tests/testHelper.spec.d.ts +2 -0
- package/esm/{core/src → src}/tests/testHelper.spec.js +62 -58
- package/{core → esm}/src/tests/testModel/models.d.ts +0 -0
- package/esm/{core/src → src}/tests/testModel/models.js +0 -0
- package/{core → esm}/src/validators.d.ts +0 -0
- package/esm/{core/src → src}/validators.js +0 -0
- package/{core → esm}/src/valueConverters.d.ts +0 -0
- package/esm/{core/src → src}/valueConverters.js +1 -3
- package/{core → esm}/urlBuilder.d.ts +0 -0
- package/esm/{core/urlBuilder.js → urlBuilder.js} +0 -0
- package/{esm/core/graphql.d.ts → graphql.d.ts} +0 -0
- package/{core/graphql.js → graphql.js} +0 -0
- package/{esm/core/index.d.ts → index.d.ts} +4 -2
- package/{core/index.js → index.js} +0 -0
- package/{esm/core/inputTypes.d.ts → inputTypes.d.ts} +0 -0
- package/{core/inputTypes.js → inputTypes.js} +0 -0
- package/live-query/ably.d.ts +13 -0
- package/live-query/ably.js +38 -0
- package/live-query/index.d.ts +3 -0
- package/live-query/index.js +10 -0
- package/package.json +17 -1
- package/{esm/core/postgres → postgres}/index.d.ts +0 -0
- package/{core/postgres → postgres}/index.js +0 -0
- package/{esm/core/postgres → postgres}/postgres-data-provider.d.ts +0 -0
- package/{core/postgres → postgres}/postgres-data-provider.js +0 -0
- package/{esm/core/postgres → postgres}/schema-builder.d.ts +0 -0
- package/{core/postgres → postgres}/schema-builder.js +4 -4
- package/remult-express.d.ts +31 -0
- package/remult-express.js +260 -0
- package/{esm/core/remult-fastify.d.ts → remult-fastify.d.ts} +0 -0
- package/{core/remult-fastify.js → remult-fastify.js} +2 -2
- package/{esm/core/remult-fresh.d.ts → remult-fresh.d.ts} +0 -0
- package/{core/remult-fresh.js → remult-fresh.js} +1 -1
- package/{esm/core/remult-knex → remult-knex}/index.d.ts +0 -0
- package/{core/remult-knex → remult-knex}/index.js +10 -18
- package/{esm/core/remult-mongo.d.ts → remult-mongo.d.ts} +0 -0
- package/{core/remult-mongo.js → remult-mongo.js} +0 -0
- package/{esm/core/server → server}/JsonEntityFileStorage.d.ts +0 -0
- package/{core/server → server}/JsonEntityFileStorage.js +0 -0
- package/{esm/core/server → server}/core.d.ts +0 -0
- package/{core/server → server}/core.js +0 -0
- package/{core/server → server}/expressBridge.d.ts +49 -11
- package/{core/server → server}/expressBridge.js +91 -43
- package/server/index.d.ts +2 -0
- package/{core/server → server}/index.js +2 -7
- package/{esm/core/server → server}/initAsyncHooks.d.ts +0 -0
- package/{core/server → server}/initAsyncHooks.js +0 -0
- package/{esm/core/src → src}/__EntityValueProvider.d.ts +0 -0
- package/{core/src → src}/__EntityValueProvider.js +0 -0
- package/{esm/core/src → src}/__RowsOfDataForTesting.d.ts +0 -0
- package/{core/src → src}/__RowsOfDataForTesting.js +0 -0
- package/{esm/core/src → src}/backend-tests/backend-database-test-setup.backend-spec.d.ts +0 -1
- package/{core/src → src}/backend-tests/backend-database-test-setup.backend-spec.js +1 -11
- package/{esm/core/src → src}/backend-tests/my-test.backend-spec.d.ts +0 -0
- package/{core/src → src}/backend-tests/my-test.backend-spec.js +0 -57
- package/src/backend-tests/test-http-server.backend-spec.d.ts +6 -0
- package/{core/src → src}/backend-tests/test-http-server.backend-spec.js +50 -59
- package/src/buildRestDataProvider.d.ts +31 -0
- package/src/buildRestDataProvider.js +162 -0
- package/{esm/core/src → src}/column-interfaces.d.ts +0 -0
- package/{core/src → src}/column-interfaces.js +0 -0
- package/{esm/core/src → src}/column.d.ts +3 -3
- package/{core/src → src}/column.js +0 -0
- package/{core/src → src}/context.d.ts +21 -30
- package/{core/src → src}/context.js +142 -159
- package/{core/src → src}/data-api.d.ts +8 -3
- package/{core/src → src}/data-api.js +198 -79
- package/{esm/core/src → src}/data-interfaces.d.ts +0 -0
- package/{core/src → src}/data-interfaces.js +0 -0
- package/{esm/core/src → src}/data-providers/array-entity-data-provider.d.ts +0 -0
- package/{core/src → src}/data-providers/array-entity-data-provider.js +1 -16
- package/{esm/core/src → src}/data-providers/in-memory-database.d.ts +0 -0
- package/{core/src → src}/data-providers/in-memory-database.js +0 -0
- package/{esm/core/src → src}/data-providers/json-data-provider.d.ts +0 -0
- package/{core/src → src}/data-providers/json-data-provider.js +0 -0
- package/{esm/core/src → src}/data-providers/rest-data-provider.d.ts +12 -1
- package/{core/src → src}/data-providers/rest-data-provider.js +34 -12
- package/{esm/core/src → src}/data-providers/sql-database.d.ts +0 -0
- package/{core/src → src}/data-providers/sql-database.js +1 -1
- package/{esm/core/src → src}/data-providers/web-sql-data-provider.d.ts +0 -0
- package/{core/src → src}/data-providers/web-sql-data-provider.js +1 -1
- package/{esm/core/src → src}/entity.d.ts +0 -0
- package/{core/src → src}/entity.js +0 -0
- package/{esm/core/src → src}/filter/filter-consumer-bridge-to-sql-request.d.ts +0 -0
- package/{core/src → src}/filter/filter-consumer-bridge-to-sql-request.js +0 -0
- package/{esm/core/src → src}/filter/filter-consumer-bridge-to-url-builder.d.ts +0 -0
- package/{core/src → src}/filter/filter-consumer-bridge-to-url-builder.js +0 -0
- package/{esm/core/src → src}/filter/filter-interfaces.d.ts +0 -0
- package/{core/src → src}/filter/filter-interfaces.js +0 -0
- package/{esm/core/src → src}/id-entity.d.ts +0 -0
- package/{core/src → src}/id-entity.js +0 -0
- package/src/live-query/EventSourceLiveQueryProvider.d.ts +4 -0
- package/src/live-query/EventSourceLiveQueryProvider.js +119 -0
- package/src/live-query/LiveQueryClient.d.ts +19 -0
- package/src/live-query/LiveQueryClient.js +208 -0
- package/src/live-query/LiveQueryPublisher.d.ts +48 -0
- package/src/live-query/LiveQueryPublisher.js +238 -0
- package/src/live-query/LiveQuerySubscriber.d.ts +67 -0
- package/src/live-query/LiveQuerySubscriber.js +201 -0
- package/src/remult-proxy.d.ts +2 -0
- package/{core/src → src}/remult-proxy.js +19 -9
- package/{esm/core/src → src}/remult3/DecoratorReplacer.d.ts +0 -0
- package/{core/src → src}/remult3/DecoratorReplacer.js +0 -0
- package/{core/src → src}/remult3/RepositoryImplementation.d.ts +6 -3
- package/{core/src → src}/remult3/RepositoryImplementation.js +68 -42
- package/src/remult3/getId.d.ts +2 -0
- package/src/remult3/getId.js +11 -0
- package/{esm/core/src → src}/remult3/index.d.ts +0 -0
- package/{core/src → src}/remult3/index.js +0 -0
- package/{esm/core/src → src}/remult3/remult3.d.ts +10 -6
- package/{core/src → src}/remult3/remult3.js +0 -0
- package/{esm/core/src → src}/server-action.d.ts +4 -0
- package/{core/src → src}/server-action.js +11 -11
- package/{core/src → src}/shared-tests/db-tests-setup.d.ts +1 -1
- package/{core/src → src}/shared-tests/db-tests-setup.js +1 -3
- package/{esm/core/src → src}/shared-tests/db-tests.db-tests.d.ts +0 -0
- package/{core/src → src}/shared-tests/db-tests.db-tests.js +0 -0
- package/{esm/core/src → src}/shared-tests/deleteAll.d.ts +0 -0
- package/{core/src → src}/shared-tests/deleteAll.js +0 -0
- package/{esm/core/src → src}/shared-tests/entityWithValidations.d.ts +0 -0
- package/{core/src → src}/shared-tests/entityWithValidations.js +0 -0
- package/{esm/core/src → src}/shared-tests/index.d.ts +0 -0
- package/{core/src → src}/shared-tests/index.js +0 -0
- package/{esm/core/src → src}/shared-tests/test-custom-id-column.spec.d.ts +0 -0
- package/{core/src → src}/shared-tests/test-custom-id-column.spec.js +0 -0
- package/{esm/core/src → src}/shared-tests/test-special-value.spec.d.ts +0 -0
- package/{core/src → src}/shared-tests/test-special-value.spec.js +0 -0
- package/{esm/core/src → src}/shared-tests/test-update-with-null.spec.d.ts +0 -0
- package/{core/src → src}/shared-tests/test-update-with-null.spec.js +0 -0
- package/{core/src → src}/sort.d.ts +1 -0
- package/{core/src → src}/sort.js +18 -0
- package/{esm/core/src → src}/sql-command.d.ts +0 -0
- package/{core/src → src}/sql-command.js +0 -0
- package/{esm/core/src → src}/tests/Done.d.ts +0 -0
- package/{core/src → src}/tests/Done.js +0 -0
- package/{esm/core/src → src}/tests/TestDataApiResponse.d.ts +0 -0
- package/{core/src → src}/tests/TestDataApiResponse.js +0 -0
- package/{esm/core/src → src}/tests/c.d.ts +0 -0
- package/{core/src → src}/tests/c.js +0 -0
- package/{esm/core/src → src}/tests/createData.d.ts +0 -0
- package/{core/src → src}/tests/createData.js +0 -0
- package/{esm/core/src → src}/tests/d.d.ts +0 -0
- package/{core/src → src}/tests/d.js +0 -0
- package/{esm/core/src → src}/tests/dWithPrefilter.d.ts +0 -0
- package/{core/src → src}/tests/dWithPrefilter.js +0 -0
- package/{esm/core/src → src}/tests/entityForCustomFilter.d.ts +0 -0
- package/{core/src → src}/tests/entityForCustomFilter.js +0 -0
- package/{esm/core/src → src}/tests/entityWithValidationsOnColumn.d.ts +0 -0
- package/{core/src → src}/tests/entityWithValidationsOnColumn.js +0 -0
- package/{esm/core/src → src}/tests/frontend-database-tests-setup.spec.d.ts +0 -0
- package/{core/src → src}/tests/frontend-database-tests-setup.spec.js +0 -0
- package/{esm/core/src → src}/tests/h.d.ts +0 -0
- package/{core/src → src}/tests/h.js +0 -0
- package/{esm/core/src → src}/tests/remult-3-entities.d.ts +0 -0
- package/{core/src → src}/tests/remult-3-entities.js +0 -0
- package/{esm/core/src → src}/tests/tasks.d.ts +0 -0
- package/{core/src → src}/tests/tasks.js +0 -0
- package/{core/src → src}/tests/testHelper.spec.d.ts +2 -0
- package/{core/src → src}/tests/testHelper.spec.js +100 -95
- package/{esm/core/src → src}/tests/testModel/models.d.ts +0 -0
- package/{core/src → src}/tests/testModel/models.js +0 -0
- package/{esm/core/src → src}/validators.d.ts +0 -0
- package/{core/src → src}/validators.js +0 -0
- package/{esm/core/src → src}/valueConverters.d.ts +0 -0
- package/{core/src → src}/valueConverters.js +1 -3
- package/{esm/core/urlBuilder.d.ts → urlBuilder.d.ts} +0 -0
- package/{core/urlBuilder.js → urlBuilder.js} +0 -0
- package/core/remult-express.d.ts +0 -6
- package/core/remult-express.js +0 -34
- package/core/server/index.d.ts +0 -4
- package/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
- package/core/src/remult-proxy.d.ts +0 -2
- package/esm/core/remult-express.d.ts +0 -6
- package/esm/core/remult-express.js +0 -23
- package/esm/core/server/index.d.ts +0 -4
- package/esm/core/server/index.js +0 -7
- package/esm/core/src/backend-tests/test-http-server.backend-spec.d.ts +0 -1
- package/esm/core/src/data-api.js +0 -204
- package/esm/core/src/remult-proxy.d.ts +0 -2
- package/esm/test-servers/shared/Task.d.ts +0 -9
- package/esm/test-servers/shared/Task.js +0 -62
- package/test-servers/shared/Task.d.ts +0 -9
- package/test-servers/shared/Task.js +0 -81
package/README.md
CHANGED
|
@@ -3,7 +3,6 @@
|
|
|
3
3
|
<img src="https://github.com/remult/remult/raw/master/docs/.vuepress/public/logo.png" width="140" height="140">
|
|
4
4
|
</a>
|
|
5
5
|
<h1>Remult</h1>
|
|
6
|
-
<p>A CRUD framework for full-stack TypeScript</p>
|
|
7
6
|
<a href="https://circleci.com/gh/remult/remult/tree/master" rel="nofollow">
|
|
8
7
|
<img alt="CircleCI" src="https://circleci.com/gh/remult/remult/tree/master.svg?style=shield">
|
|
9
8
|
</a>
|
|
@@ -25,29 +24,14 @@
|
|
|
25
24
|
<a href="https://twitter.com/intent/tweet?text=Remult%20-%20open-source%20CRUD%20framework%20for%20full-stack%20TypeScript%0A%0A%40remultjs%0A&url=https%3A%2F%2Fgithub.com%2Fremult%2Fremult">
|
|
26
25
|
<img alt="Twitter URL" src="https://img.shields.io/twitter/url?style=social&url=https%3A%2F%2Ftwitter.com%2Fintent%2Ftweet%3Ftext%3DRemult%2520-%2520open-source%2520CRUD%2520framework%2520for%2520full-stack%2520TypeScript%250A%250A%2540remultjs%250A%26url%3Dhttps%253A%252F%252Fgithub.com%252Fremult%252Fremult">
|
|
27
26
|
</a>
|
|
27
|
+
<a href="https://twitter.com/remultjs" rel="nofollow">
|
|
28
|
+
<img alt="Twitter Follow" src="https://img.shields.io/twitter/url.svg?label=Follow%20%40remultjs&style=social&url=https%3A%2F%2Ftwitter.com%2FRemultJs">
|
|
29
|
+
</a>
|
|
28
30
|
</div>
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
<br/>
|
|
32
|
-
|
|
33
|
-
<div align="center">
|
|
34
|
-
<a href="#getting-started">Getting Started</a> |
|
|
35
|
-
<a href="#documentation">Documentation</a> |
|
|
36
|
-
<a href="#example-apps">Example Apps</a>
|
|
37
|
-
</div>
|
|
38
|
-
|
|
39
31
|
<hr/>
|
|
40
|
-
<br/>
|
|
41
32
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
<img src="https://github.com/remult/remult/raw/master/static/images/video-thumbnail.jpg" alt="Video thumbnail" />
|
|
45
|
-
</p>
|
|
46
|
-
</a>
|
|
47
|
-
|
|
48
|
-
<a href="https://www.youtube.com/watch?v=rEoScmSVNUE" target="_blank">
|
|
49
|
-
<p align="center">Watch code demo on YouTube here (14 mins)</p>
|
|
50
|
-
</a>
|
|
33
|
+
[Getting Started](#getting-started) | [Documentation](#documentation) |
|
|
34
|
+
[Example Apps](#example-apps)
|
|
51
35
|
|
|
52
36
|
## What is Remult?
|
|
53
37
|
|
|
@@ -55,13 +39,6 @@
|
|
|
55
39
|
as a single source of truth for your API, frontend type-safe API client and
|
|
56
40
|
backend ORM**.
|
|
57
41
|
|
|
58
|
-
* :zap: Zero-boilerplate CRUD API routes with paging, sorting, and filtering for Express / Fastify / Next.js / NestJS / Koa / others...
|
|
59
|
-
* :ok_hand: Fullstack type-safety for API queries, mutations and RPC, without code generation
|
|
60
|
-
* :sparkles: Input validation, defined once, runs both on the backend and on the frontend for best UX
|
|
61
|
-
* :lock: Fine-grained code-based API authorization
|
|
62
|
-
* :relieved: Incrementally adoptable
|
|
63
|
-
* :rocket: Production ready
|
|
64
|
-
|
|
65
42
|
### Status
|
|
66
43
|
|
|
67
44
|
Remult is **production-ready** and, in fact, used in production apps since 2018.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/{core → esm}/index.d.ts
RENAMED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { Field, Fields,
|
|
1
|
+
export { Field, Fields, FieldsMetadata, Entity, 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 } from './src/remult3';
|
|
2
|
+
export { StringFieldOptions } from './src/remult3/RepositoryImplementation';
|
|
2
3
|
export { describeClass } from './src/remult3/DecoratorReplacer';
|
|
3
4
|
export { EntityOptions } from './src/entity';
|
|
4
5
|
export { DataProvider, EntityDataProvider, EntityDataProviderFindOptions, ErrorInfo, RestDataProviderHttpProvider } from './src/data-interfaces';
|
|
@@ -13,7 +14,8 @@ export { SqlDatabase, } from './src/data-providers/sql-database';
|
|
|
13
14
|
export { CustomSqlFilterObject, CustomSqlFilterBuilder } from './src/filter/filter-consumer-bridge-to-sql-request';
|
|
14
15
|
export { JsonDataProvider, JsonEntityStorage } from './src/data-providers/json-data-provider';
|
|
15
16
|
export { Controller, BackendMethodOptions, BackendMethod, ProgressListener } from './src/server-action';
|
|
16
|
-
export { Allowed, Allow, Remult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource,
|
|
17
|
+
export { Allowed, Allow, Remult, RemultContext, ApiClient, isBackend, AllowedForInstance, EventDispatcher, EventSource, Unobserve, UserInfo } from './src/context';
|
|
18
|
+
export { ExternalHttpProvider } from './src/buildRestDataProvider';
|
|
17
19
|
export { IdEntity } from './src/id-entity';
|
|
18
20
|
export { SortSegment, Sort } from './src/sort';
|
|
19
21
|
export { OneToMany, CompoundIdField } from './src/column';
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type * as Ably from 'ably';
|
|
2
|
+
import type { ServerEventDispatcher } from '../src/live-query/LiveQueryPublisher';
|
|
3
|
+
import type { LiveQueryProvider, PubSubClient } from '../src/live-query/LiveQuerySubscriber';
|
|
4
|
+
export declare class AblyLiveQueryProvider implements LiveQueryProvider {
|
|
5
|
+
private ably;
|
|
6
|
+
constructor(ably: Ably.Types.RealtimePromise);
|
|
7
|
+
openStreamAndReturnCloseFunction(onReconnect: VoidFunction): Promise<PubSubClient>;
|
|
8
|
+
}
|
|
9
|
+
export declare class AblyServerEventDispatcher implements ServerEventDispatcher {
|
|
10
|
+
private ably;
|
|
11
|
+
constructor(ably: Ably.Types.RealtimePromise);
|
|
12
|
+
sendChannelMessage<T>(channel: string, message: T): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class AblyLiveQueryProvider {
|
|
2
|
+
constructor(ably) {
|
|
3
|
+
this.ably = ably;
|
|
4
|
+
}
|
|
5
|
+
async openStreamAndReturnCloseFunction(onReconnect) {
|
|
6
|
+
return {
|
|
7
|
+
disconnect: () => {
|
|
8
|
+
this.ably.connection.close();
|
|
9
|
+
},
|
|
10
|
+
subscribe: (channel, handler) => {
|
|
11
|
+
let myHandler = (y) => handler(y.data);
|
|
12
|
+
this.ably.channels.get(channel).subscribe(y => myHandler(y));
|
|
13
|
+
return () => { myHandler = () => { }; };
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export class AblyServerEventDispatcher {
|
|
19
|
+
constructor(ably) {
|
|
20
|
+
this.ably = ably;
|
|
21
|
+
}
|
|
22
|
+
sendChannelMessage(channel, message) {
|
|
23
|
+
this.ably.channels.get(channel).publish({ data: message });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { LiveQueryPublisher, ServerEventDispatcher, LiveQueryStorage, LiveQueryStorageInMemoryImplementation } from "../src/live-query/LiveQueryPublisher";
|
|
2
|
+
export { PubSubClient, LiveQueryProvider, AMessageChannel } from '../src/live-query/LiveQuerySubscriber';
|
|
3
|
+
export { LiveQueryClient } from '../src/live-query/LiveQueryClient';
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -43,7 +43,7 @@ export class PostgresSchemaBuilder {
|
|
|
43
43
|
}
|
|
44
44
|
}
|
|
45
45
|
async verifyStructureOfAllEntities(remult) {
|
|
46
|
-
console.log("start verify structure");
|
|
46
|
+
console.log("start verify structure"); //keep me
|
|
47
47
|
for (const entityClass of allEntities) {
|
|
48
48
|
let entity = remult.repo(entityClass).metadata;
|
|
49
49
|
let e = await getDbNameProvider(entity);
|
|
@@ -56,7 +56,7 @@ export class PostgresSchemaBuilder {
|
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
catch (err) {
|
|
59
|
-
console.log("failed verify structure of " + e.entityName + " ", err);
|
|
59
|
+
/*keep me */ console.log("failed verify structure of " + e.entityName + " ", err);
|
|
60
60
|
}
|
|
61
61
|
}
|
|
62
62
|
}
|
|
@@ -102,7 +102,7 @@ export class PostgresSchemaBuilder {
|
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
104
|
catch (err) {
|
|
105
|
-
console.
|
|
105
|
+
console.error(err);
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
108
|
async verifyAllColumns(entity) {
|
|
@@ -122,7 +122,7 @@ export class PostgresSchemaBuilder {
|
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
catch (err) {
|
|
125
|
-
console.
|
|
125
|
+
console.error(err);
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as express from 'express';
|
|
2
|
+
import { RemultServer, RemultServerOptions } from './server/expressBridge';
|
|
3
|
+
import { Remult } from './src/context';
|
|
4
|
+
import { ServerEventChannelSubscribeDTO } from './src/live-query/LiveQuerySubscriber';
|
|
5
|
+
import { ServerEventDispatcher } from './src/live-query/LiveQueryPublisher';
|
|
6
|
+
export declare function remultExpress(options?: RemultServerOptions<express.Request> & {
|
|
7
|
+
bodyParser?: boolean;
|
|
8
|
+
bodySizeLimit?: string;
|
|
9
|
+
serverEventDispatcher?: (router: express.Router, server: RemultServer) => ServerEventDispatcher;
|
|
10
|
+
}): express.RequestHandler & RemultServer;
|
|
11
|
+
export declare class ServerEventsController implements ServerEventDispatcher {
|
|
12
|
+
private canUserConnectToChannel?;
|
|
13
|
+
subscribeToChannel({ channel, clientId }: ServerEventChannelSubscribeDTO, res: import('express').Response, remult: Remult, remove?: boolean): void;
|
|
14
|
+
connections: clientConnection[];
|
|
15
|
+
constructor(canUserConnectToChannel?: (channel: string, remult: Remult) => boolean);
|
|
16
|
+
sendChannelMessage<T>(channel: string, message: any): void;
|
|
17
|
+
openHttpServerStream(req: import('express').Request, res: import('express').Response): clientConnection;
|
|
18
|
+
debug(): void;
|
|
19
|
+
debugFileSaver: (x: any) => void;
|
|
20
|
+
}
|
|
21
|
+
declare class clientConnection {
|
|
22
|
+
response: import('express').Response;
|
|
23
|
+
channels: Record<string, boolean>;
|
|
24
|
+
close(): void;
|
|
25
|
+
closed: boolean;
|
|
26
|
+
write(eventData: string, eventType?: string): void;
|
|
27
|
+
connectionId: any;
|
|
28
|
+
constructor(response: import('express').Response);
|
|
29
|
+
sendLiveMessage(): void;
|
|
30
|
+
}
|
|
31
|
+
export {};
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
import * as express from 'express';
|
|
2
|
+
import { createRemultServer } from './server/expressBridge';
|
|
3
|
+
import { liveQueryKeepAliveRoute, streamUrl } from './src/live-query/LiveQuerySubscriber';
|
|
4
|
+
import { LiveQueryPublisher, LiveQueryStorageInMemoryImplementation } from './src/live-query/LiveQueryPublisher';
|
|
5
|
+
import { v4 as uuid } from 'uuid';
|
|
6
|
+
import { remult } from './src/remult-proxy';
|
|
7
|
+
import { getEntityKey } from './src/remult3';
|
|
8
|
+
export function remultExpress(options) {
|
|
9
|
+
let app = express.Router();
|
|
10
|
+
if (!options) {
|
|
11
|
+
options = {};
|
|
12
|
+
}
|
|
13
|
+
if (options.bodySizeLimit === undefined) {
|
|
14
|
+
options.bodySizeLimit = '10mb';
|
|
15
|
+
}
|
|
16
|
+
if (options?.bodyParser !== false) {
|
|
17
|
+
app.use(express.json({ limit: options.bodySizeLimit }));
|
|
18
|
+
app.use(express.urlencoded({ extended: true, limit: options.bodySizeLimit }));
|
|
19
|
+
}
|
|
20
|
+
const server = createRemultServer(options);
|
|
21
|
+
server.registerRouter(app);
|
|
22
|
+
if (!options.serverEventDispatcher) {
|
|
23
|
+
options.serverEventDispatcher = (router, server) => {
|
|
24
|
+
return buildHttpServerEventDispatcher(router, options.rootPath, server);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
app.post(options.rootPath + liveQueryKeepAliveRoute, (r, res, n) => server.withRemult(r, res, n), async (req, res) => {
|
|
28
|
+
res.send(await remult.liveQueryPublisher.storage.keepAliveAndReturnUnknownIds(req.body));
|
|
29
|
+
});
|
|
30
|
+
server.liveQueryManager = new LiveQueryPublisher(options.serverEventDispatcher(app, server), new LiveQueryStorageInMemoryImplementation(), async (req, entityKey, what) => {
|
|
31
|
+
for (const e of options.entities) {
|
|
32
|
+
let key = getEntityKey(e);
|
|
33
|
+
if (key === entityKey) {
|
|
34
|
+
await new Promise((result) => {
|
|
35
|
+
server.withRemult(options.requestSerializer.fromJson(req), undefined, async () => {
|
|
36
|
+
await what(remult.repo(e));
|
|
37
|
+
result({});
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
throw new Error("Couldn't find entity " + entityKey);
|
|
44
|
+
});
|
|
45
|
+
return Object.assign(app, {
|
|
46
|
+
getRemult: (req) => server.getRemult(req),
|
|
47
|
+
openApiDoc: (options) => server.openApiDoc(options),
|
|
48
|
+
registerRouter: x => server.registerRouter(x),
|
|
49
|
+
withRemult: (...args) => server.withRemult(...args)
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
export class ServerEventsController {
|
|
53
|
+
constructor(canUserConnectToChannel) {
|
|
54
|
+
this.canUserConnectToChannel = canUserConnectToChannel;
|
|
55
|
+
this.connections = [];
|
|
56
|
+
this.debugFileSaver = () => { };
|
|
57
|
+
if (!this.canUserConnectToChannel) {
|
|
58
|
+
this.canUserConnectToChannel = () => true;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
subscribeToChannel({ channel, clientId }, res, remult, remove = false) {
|
|
62
|
+
for (const c of this.connections) {
|
|
63
|
+
if (c.connectionId === clientId) {
|
|
64
|
+
if (this.canUserConnectToChannel(channel, remult)) {
|
|
65
|
+
if (remove)
|
|
66
|
+
delete c.channels[channel];
|
|
67
|
+
else
|
|
68
|
+
c.channels[channel] = true;
|
|
69
|
+
res.json("ok");
|
|
70
|
+
this.debug();
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
res.sendStatus(403);
|
|
75
|
+
this.debug();
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
res.sendStatus(404);
|
|
81
|
+
}
|
|
82
|
+
sendChannelMessage(channel, message) {
|
|
83
|
+
const data = JSON.stringify({ channel, data: message });
|
|
84
|
+
for (const sc of this.connections) {
|
|
85
|
+
if (sc.channels[channel]) {
|
|
86
|
+
sc.write(data);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
openHttpServerStream(req, res) {
|
|
91
|
+
res.writeHead(200, {
|
|
92
|
+
'Content-Type': 'text/event-stream',
|
|
93
|
+
'Cache-Control': 'no-cache',
|
|
94
|
+
'Connection': 'keep-alive'
|
|
95
|
+
});
|
|
96
|
+
const cc = new clientConnection(res);
|
|
97
|
+
//const lastEventId = req.headers['last-event-id'];
|
|
98
|
+
this.connections.push(cc);
|
|
99
|
+
this.debug();
|
|
100
|
+
req.on("close", () => {
|
|
101
|
+
cc.close();
|
|
102
|
+
this.connections = this.connections.filter(s => s !== cc);
|
|
103
|
+
this.debug();
|
|
104
|
+
});
|
|
105
|
+
return cc;
|
|
106
|
+
}
|
|
107
|
+
debug() {
|
|
108
|
+
this.debugFileSaver(this.connections.map(x => ({
|
|
109
|
+
id: x.connectionId,
|
|
110
|
+
channels: x.channels
|
|
111
|
+
})));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
class clientConnection {
|
|
115
|
+
constructor(response) {
|
|
116
|
+
this.response = response;
|
|
117
|
+
this.channels = {};
|
|
118
|
+
this.closed = false;
|
|
119
|
+
this.connectionId = uuid();
|
|
120
|
+
this.write(this.connectionId, "connectionId");
|
|
121
|
+
this.sendLiveMessage();
|
|
122
|
+
}
|
|
123
|
+
close() {
|
|
124
|
+
this.closed = true;
|
|
125
|
+
}
|
|
126
|
+
write(eventData, eventType = "message") {
|
|
127
|
+
let event = "event:" + eventType;
|
|
128
|
+
// if (id != undefined)
|
|
129
|
+
// event += "\nid:" + id;
|
|
130
|
+
this.response.write(event + "\ndata:" + eventData + "\n\n");
|
|
131
|
+
let r = this.response;
|
|
132
|
+
if (r.flush)
|
|
133
|
+
r.flush();
|
|
134
|
+
}
|
|
135
|
+
sendLiveMessage() {
|
|
136
|
+
if (this.closed)
|
|
137
|
+
return;
|
|
138
|
+
this.write("", "keep-alive");
|
|
139
|
+
setTimeout(() => {
|
|
140
|
+
this.sendLiveMessage();
|
|
141
|
+
}, 45000);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function buildHttpServerEventDispatcher(router, apiPath, server) {
|
|
145
|
+
const streamPath = apiPath + '/' + streamUrl;
|
|
146
|
+
let httpServerEvents = new ServerEventsController();
|
|
147
|
+
router.get(streamPath, (r, res, next) => server.withRemult(r, res, next), (req, res) => {
|
|
148
|
+
remult.liveQueryPublisher.dispatcher.openHttpServerStream(req, res);
|
|
149
|
+
});
|
|
150
|
+
router.post(streamPath + '/subscribe', (r, res, next) => server.withRemult(r, res, next), (req, res) => {
|
|
151
|
+
remult.liveQueryPublisher.dispatcher.subscribeToChannel(req.body, res, remult);
|
|
152
|
+
});
|
|
153
|
+
router.post(streamPath + '/unsubscribe', (r, res, next) => server.withRemult(r, res, next), (req, res) => {
|
|
154
|
+
remult.liveQueryPublisher.dispatcher.subscribeToChannel(req.body, res, remult, true);
|
|
155
|
+
});
|
|
156
|
+
return httpServerEvents;
|
|
157
|
+
}
|
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createRemultServer } from "./server/expressBridge";
|
|
2
2
|
export function remultFresh(options, response) {
|
|
3
|
-
const server =
|
|
3
|
+
const server = createRemultServer(options);
|
|
4
4
|
return {
|
|
5
5
|
getRemult: r => server.getRemult(r),
|
|
6
6
|
openApiDoc: x => server.openApiDoc(x),
|
|
File without changes
|
|
@@ -153,15 +153,8 @@ class KnexEntityDataProvider {
|
|
|
153
153
|
}
|
|
154
154
|
let insert = this.knex(e.entityName).insert(insertObject);
|
|
155
155
|
if (isAutoIncrement(this.entity.idMetadata.field)) {
|
|
156
|
-
let
|
|
157
|
-
|
|
158
|
-
let result = await insert;
|
|
159
|
-
newId = result[0];
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
let result = await insert.returning(this.entity.idMetadata.field.key);
|
|
163
|
-
newId = result[0].id;
|
|
164
|
-
}
|
|
156
|
+
let result = await insert.returning(this.entity.idMetadata.field.key);
|
|
157
|
+
let newId = result[0].id;
|
|
165
158
|
resultFilter = new Filter(x => x.isEqualTo(this.entity.idMetadata.field, newId));
|
|
166
159
|
}
|
|
167
160
|
else
|
|
@@ -263,7 +256,7 @@ export class KnexSchemaBuilder {
|
|
|
263
256
|
this.additionalWhere = '';
|
|
264
257
|
}
|
|
265
258
|
async verifyStructureOfAllEntities(remult) {
|
|
266
|
-
console.
|
|
259
|
+
console.info("start verify structure");
|
|
267
260
|
for (const entity of allEntities) {
|
|
268
261
|
let metadata = remult.repo(entity).metadata;
|
|
269
262
|
try {
|
|
@@ -326,7 +319,7 @@ export class KnexSchemaBuilder {
|
|
|
326
319
|
}
|
|
327
320
|
}
|
|
328
321
|
catch (err) {
|
|
329
|
-
console.
|
|
322
|
+
console.error(err);
|
|
330
323
|
}
|
|
331
324
|
}
|
|
332
325
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { queuedJobInfoResponse } from '../src/server-action';
|
|
1
|
+
import { ActionInterface, queuedJobInfoResponse } from '../src/server-action';
|
|
2
2
|
import { DataProvider } from '../src/data-interfaces';
|
|
3
|
-
import {
|
|
3
|
+
import { DataApi, DataApiRequest, DataApiResponse } from '../src/data-api';
|
|
4
|
+
import { AllowedForInstance, Remult, UserInfo } from '../src/context';
|
|
4
5
|
import { ClassType } from '../classType';
|
|
5
6
|
import { Repository } from '../src/remult3';
|
|
6
7
|
import { IdEntity } from '../src/id-entity';
|
|
8
|
+
import { LiveQueryPublisher } from '../src/live-query/LiveQueryPublisher';
|
|
7
9
|
export interface RemultServerOptions<RequestType extends GenericRequest> {
|
|
8
10
|
/** Sets a database connection for Remult.
|
|
9
11
|
*
|
|
@@ -12,6 +14,10 @@ export interface RemultServerOptions<RequestType extends GenericRequest> {
|
|
|
12
14
|
dataProvider?: DataProvider | Promise<DataProvider> | (() => Promise<DataProvider | undefined>);
|
|
13
15
|
queueStorage?: QueueStorage;
|
|
14
16
|
initRequest?: (remult: Remult, origReq: RequestType) => Promise<void>;
|
|
17
|
+
requestSerializer?: {
|
|
18
|
+
toJson: (request: RequestType) => any;
|
|
19
|
+
fromJson: (request: any) => RequestType;
|
|
20
|
+
};
|
|
15
21
|
getUser?: (request: RequestType) => Promise<UserInfo>;
|
|
16
22
|
initApi?: (remult: Remult) => void | Promise<void>;
|
|
17
23
|
logApiEndPoints?: boolean;
|
|
@@ -20,7 +26,7 @@ export interface RemultServerOptions<RequestType extends GenericRequest> {
|
|
|
20
26
|
controllers?: ClassType<any>[];
|
|
21
27
|
rootPath?: string;
|
|
22
28
|
}
|
|
23
|
-
export declare function
|
|
29
|
+
export declare function createRemultServer<RequestType extends GenericRequest = GenericRequest>(options?: RemultServerOptions<RequestType>): RemultServer;
|
|
24
30
|
export declare type GenericRequestHandler = (req: GenericRequest, res: GenericResponse, next: VoidFunction) => void;
|
|
25
31
|
export interface ServerHandleResponse {
|
|
26
32
|
data?: any;
|
|
@@ -57,14 +63,39 @@ export interface GenericResponse {
|
|
|
57
63
|
status(statusCode: number): GenericResponse;
|
|
58
64
|
end(): any;
|
|
59
65
|
}
|
|
60
|
-
export declare class
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
constructor(
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
export declare class RemultServerImplementation implements RemultServer {
|
|
67
|
+
queue: inProcessQueueHandler;
|
|
68
|
+
options: RemultServerOptions<GenericRequest>;
|
|
69
|
+
dataProvider: DataProvider | Promise<DataProvider>;
|
|
70
|
+
constructor(queue: inProcessQueueHandler, options: RemultServerOptions<GenericRequest>, dataProvider: DataProvider | Promise<DataProvider>);
|
|
71
|
+
liveQueryManager: LiveQueryPublisher;
|
|
72
|
+
withRemult<T>(req: GenericRequest, res: GenericResponse, next: VoidFunction): void;
|
|
73
|
+
routeImpl: RouteImplementation;
|
|
74
|
+
handle(req: GenericRequest, gRes?: GenericResponse): Promise<ServerHandleResponse>;
|
|
75
|
+
registeredRouter: boolean;
|
|
76
|
+
registerRouter(r: GenericRouter): void;
|
|
77
|
+
add(key: string, dataApiFactory: ((req: Remult) => DataApi), r: GenericRouter): void;
|
|
78
|
+
process(what: (remult: Remult, myReq: DataApiRequest, myRes: DataApiResponse, origReq: GenericRequest) => Promise<void>): (req: GenericRequest, res: GenericResponse) => Promise<void>;
|
|
79
|
+
getRemult(req: GenericRequest): Promise<Remult>;
|
|
80
|
+
hasQueue: boolean;
|
|
81
|
+
addAction(action: ActionInterface, r: GenericRouter): void;
|
|
82
|
+
openApiDoc(options: {
|
|
83
|
+
title: string;
|
|
84
|
+
version?: string;
|
|
85
|
+
}): any;
|
|
86
|
+
backendMethodsOpenApi: {
|
|
87
|
+
path: string;
|
|
88
|
+
allowed: AllowedForInstance<any>;
|
|
89
|
+
tag: string;
|
|
90
|
+
}[];
|
|
91
|
+
}
|
|
92
|
+
declare class inProcessQueueHandler {
|
|
93
|
+
private storage;
|
|
94
|
+
constructor(storage: QueueStorage);
|
|
95
|
+
submitJob(url: string, req: Remult, body: any): Promise<string>;
|
|
96
|
+
mapQueuedAction(url: string, what: (data: any, r: Remult, res: ApiActionResponse) => void): void;
|
|
97
|
+
actions: Map<string, (data: any, r: Remult, res: ApiActionResponse) => void>;
|
|
98
|
+
getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
|
|
68
99
|
}
|
|
69
100
|
export interface queuedJobInfo {
|
|
70
101
|
info: queuedJobInfoResponse;
|
|
@@ -90,6 +121,12 @@ export declare class EntityQueueStorage implements QueueStorage {
|
|
|
90
121
|
getJobInfo(queuedJobId: string): Promise<queuedJobInfo>;
|
|
91
122
|
createJob(url: string, userId: string): Promise<string>;
|
|
92
123
|
}
|
|
124
|
+
declare class RouteImplementation {
|
|
125
|
+
map: Map<string, Map<string, GenericRequestHandler>>;
|
|
126
|
+
route(path: string): SpecificRoute;
|
|
127
|
+
handle(req: GenericRequest, gRes?: GenericResponse): Promise<ServerHandleResponse | undefined>;
|
|
128
|
+
middleware(req: GenericRequest, res: GenericResponse, next: VoidFunction): void;
|
|
129
|
+
}
|
|
93
130
|
export declare class JobsInQueueEntity extends IdEntity {
|
|
94
131
|
userId: string;
|
|
95
132
|
url: string;
|
|
@@ -100,3 +137,4 @@ export declare class JobsInQueueEntity extends IdEntity {
|
|
|
100
137
|
error: boolean;
|
|
101
138
|
progress: number;
|
|
102
139
|
}
|
|
140
|
+
export {};
|