@webda/core 4.0.0-beta.2 → 4.0.0-beta.4
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 +252 -0
- package/lib/application/application.d.ts +468 -0
- package/lib/application/application.d.ts.map +1 -0
- package/lib/application/application.js +845 -0
- package/lib/application/application.js.map +1 -0
- package/lib/application/deployment.d.ts +93 -0
- package/lib/application/deployment.d.ts.map +1 -0
- package/lib/application/deployment.js +99 -0
- package/lib/application/deployment.js.map +1 -0
- package/lib/application/hooks.d.ts +34 -0
- package/lib/application/hooks.d.ts.map +1 -0
- package/lib/application/hooks.js +57 -0
- package/lib/application/hooks.js.map +1 -0
- package/lib/application/iapplication.d.ts +43 -0
- package/lib/application/iapplication.d.ts.map +1 -0
- package/lib/application/iapplication.js +2 -0
- package/lib/application/iapplication.js.map +1 -0
- package/lib/application/iconfiguration.d.ts +176 -0
- package/lib/application/iconfiguration.d.ts.map +1 -0
- package/lib/application/iconfiguration.js +8 -0
- package/lib/application/iconfiguration.js.map +1 -0
- package/lib/application/runner.d.ts +8 -0
- package/lib/application/runner.d.ts.map +1 -0
- package/lib/application/runner.js +26 -0
- package/lib/application/runner.js.map +1 -0
- package/lib/{unpackedapplication.d.ts → application/unpackedapplication.d.ts} +43 -23
- package/lib/application/unpackedapplication.d.ts.map +1 -0
- package/lib/application/unpackedapplication.js +500 -0
- package/lib/application/unpackedapplication.js.map +1 -0
- package/lib/bin/cli-phase.d.ts +28 -0
- package/lib/bin/cli-phase.d.ts.map +1 -0
- package/lib/bin/cli-phase.js +44 -0
- package/lib/bin/cli-phase.js.map +1 -0
- package/lib/bin/cli.d.ts +196 -0
- package/lib/bin/cli.d.ts.map +1 -0
- package/lib/bin/cli.js +934 -0
- package/lib/bin/cli.js.map +1 -0
- package/lib/bin/launcher.d.ts +3 -0
- package/lib/bin/launcher.d.ts.map +1 -0
- package/lib/bin/launcher.js +50 -0
- package/lib/bin/launcher.js.map +1 -0
- package/lib/cache/cache.d.ts +33 -0
- package/lib/cache/cache.d.ts.map +1 -0
- package/lib/cache/cache.js +8 -0
- package/lib/cache/cache.js.map +1 -0
- package/lib/{services/configuration.d.ts → configurations/configuration.service.d.ts} +58 -58
- package/lib/configurations/configuration.service.d.ts.map +1 -0
- package/lib/configurations/configuration.service.js +248 -0
- package/lib/configurations/configuration.service.js.map +1 -0
- package/lib/configurations/fileconfiguration.service.d.ts +30 -0
- package/lib/configurations/fileconfiguration.service.d.ts.map +1 -0
- package/lib/configurations/fileconfiguration.service.js +65 -0
- package/lib/configurations/fileconfiguration.service.js.map +1 -0
- package/lib/configurations/kubernetesconfiguration.service.d.ts +43 -0
- package/lib/configurations/kubernetesconfiguration.service.d.ts.map +1 -0
- package/lib/configurations/kubernetesconfiguration.service.js +83 -0
- package/lib/configurations/kubernetesconfiguration.service.js.map +1 -0
- package/lib/contexts/execution.d.ts +33 -0
- package/lib/contexts/execution.d.ts.map +1 -0
- package/lib/contexts/execution.js +73 -0
- package/lib/contexts/execution.js.map +1 -0
- package/lib/contexts/globalcontext.d.ts +29 -0
- package/lib/contexts/globalcontext.d.ts.map +1 -0
- package/lib/contexts/globalcontext.js +38 -0
- package/lib/contexts/globalcontext.js.map +1 -0
- package/lib/{utils → contexts}/httpcontext.d.ts +44 -19
- package/lib/contexts/httpcontext.d.ts.map +1 -0
- package/lib/{utils → contexts}/httpcontext.js +95 -27
- package/lib/contexts/httpcontext.js.map +1 -0
- package/lib/contexts/icontext.d.ts +236 -0
- package/lib/contexts/icontext.d.ts.map +1 -0
- package/lib/contexts/icontext.js +230 -0
- package/lib/contexts/icontext.js.map +1 -0
- package/lib/contexts/operationcontext.d.ts +182 -0
- package/lib/contexts/operationcontext.d.ts.map +1 -0
- package/lib/contexts/operationcontext.js +361 -0
- package/lib/contexts/operationcontext.js.map +1 -0
- package/lib/contexts/simplecontext.d.ts +31 -0
- package/lib/contexts/simplecontext.d.ts.map +1 -0
- package/lib/contexts/simplecontext.js +45 -0
- package/lib/contexts/simplecontext.js.map +1 -0
- package/lib/contexts/webcontext.d.ts +218 -0
- package/lib/contexts/webcontext.d.ts.map +1 -0
- package/lib/contexts/webcontext.js +389 -0
- package/lib/contexts/webcontext.js.map +1 -0
- package/lib/core/authorizer.d.ts +23 -0
- package/lib/core/authorizer.d.ts.map +1 -0
- package/lib/core/authorizer.js +17 -0
- package/lib/core/authorizer.js.map +1 -0
- package/lib/core/core.d.ts +225 -0
- package/lib/core/core.d.ts.map +1 -0
- package/lib/core/core.js +576 -0
- package/lib/core/core.js.map +1 -0
- package/lib/core/hooks.d.ts +94 -0
- package/lib/core/hooks.d.ts.map +1 -0
- package/lib/core/hooks.js +97 -0
- package/lib/core/hooks.js.map +1 -0
- package/lib/core/icore.d.ts +249 -0
- package/lib/core/icore.d.ts.map +1 -0
- package/lib/core/icore.js +15 -0
- package/lib/core/icore.js.map +1 -0
- package/lib/core/instancestorage.d.ts +61 -0
- package/lib/core/instancestorage.d.ts.map +1 -0
- package/lib/core/instancestorage.js +75 -0
- package/lib/core/instancestorage.js.map +1 -0
- package/lib/core/operations.d.ts +181 -0
- package/lib/core/operations.d.ts.map +1 -0
- package/lib/core/operations.js +559 -0
- package/lib/core/operations.js.map +1 -0
- package/lib/deployers/deployer.d.ts +157 -0
- package/lib/deployers/deployer.d.ts.map +1 -0
- package/lib/deployers/deployer.js +81 -0
- package/lib/deployers/deployer.js.map +1 -0
- package/lib/deployers/git.d.ts +27 -0
- package/lib/deployers/git.d.ts.map +1 -0
- package/lib/deployers/git.js +66 -0
- package/lib/deployers/git.js.map +1 -0
- package/lib/deployers/packager.d.ts +85 -0
- package/lib/deployers/packager.d.ts.map +1 -0
- package/lib/deployers/packager.js +259 -0
- package/lib/deployers/packager.js.map +1 -0
- package/lib/errors/errors.d.ts +126 -0
- package/lib/errors/errors.d.ts.map +1 -0
- package/lib/errors/errors.js +165 -0
- package/lib/errors/errors.js.map +1 -0
- package/lib/events/asynceventemitter.d.ts +159 -0
- package/lib/events/asynceventemitter.d.ts.map +1 -0
- package/lib/events/asynceventemitter.js +152 -0
- package/lib/events/asynceventemitter.js.map +1 -0
- package/lib/events/events.d.ts +112 -0
- package/lib/events/events.d.ts.map +1 -0
- package/lib/events/events.js +45 -0
- package/lib/events/events.js.map +1 -0
- package/lib/index.d.ts +88 -54
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +88 -64
- package/lib/index.js.map +1 -1
- package/lib/loggers/console.service.d.ts +24 -0
- package/lib/loggers/console.service.d.ts.map +1 -0
- package/lib/loggers/console.service.js +30 -0
- package/lib/loggers/console.service.js.map +1 -0
- package/lib/loggers/file.service.d.ts +25 -0
- package/lib/loggers/file.service.d.ts.map +1 -0
- package/lib/loggers/file.service.js +33 -0
- package/lib/loggers/file.service.js.map +1 -0
- package/lib/loggers/hooks.d.ts +20 -0
- package/lib/loggers/hooks.d.ts.map +1 -0
- package/lib/loggers/hooks.js +40 -0
- package/lib/loggers/hooks.js.map +1 -0
- package/lib/loggers/ilogger.d.ts +76 -0
- package/lib/loggers/ilogger.d.ts.map +1 -0
- package/lib/loggers/ilogger.js +108 -0
- package/lib/loggers/ilogger.js.map +1 -0
- package/lib/loggers/logger.d.ts +13 -0
- package/lib/loggers/logger.d.ts.map +1 -0
- package/lib/loggers/logger.js +18 -0
- package/lib/loggers/logger.js.map +1 -0
- package/lib/loggers/memory.service.d.ts +18 -0
- package/lib/loggers/memory.service.d.ts.map +1 -0
- package/lib/loggers/memory.service.js +21 -0
- package/lib/loggers/memory.service.js.map +1 -0
- package/lib/loggers/params.d.ts +47 -0
- package/lib/loggers/params.d.ts.map +1 -0
- package/lib/loggers/params.js +56 -0
- package/lib/loggers/params.js.map +1 -0
- package/lib/metrics/metrics.d.ts +25 -0
- package/lib/metrics/metrics.d.ts.map +1 -0
- package/lib/metrics/metrics.js +51 -0
- package/lib/metrics/metrics.js.map +1 -0
- package/lib/models/aclmodel.d.ts +20 -76
- package/lib/models/aclmodel.d.ts.map +1 -1
- package/lib/models/aclmodel.js +27 -203
- package/lib/models/aclmodel.js.map +1 -1
- package/lib/models/coremodel.model.d.ts +5 -0
- package/lib/models/coremodel.model.d.ts.map +1 -0
- package/lib/models/coremodel.model.js +5 -0
- package/lib/models/coremodel.model.js.map +1 -0
- package/lib/models/decorator.d.ts +67 -0
- package/lib/models/decorator.d.ts.map +1 -0
- package/lib/models/decorator.js +67 -0
- package/lib/models/decorator.js.map +1 -0
- package/lib/models/deployment.d.ts +2 -21
- package/lib/models/deployment.d.ts.map +1 -1
- package/lib/models/encrypted.model.d.ts +46 -0
- package/lib/models/encrypted.model.d.ts.map +1 -0
- package/lib/models/encrypted.model.js +87 -0
- package/lib/models/encrypted.model.js.map +1 -0
- package/lib/models/ident.model.d.ts +128 -0
- package/lib/models/ident.model.d.ts.map +1 -0
- package/lib/models/ident.model.js +207 -0
- package/lib/models/ident.model.js.map +1 -0
- package/lib/models/ownermodel.model.d.ts +68 -0
- package/lib/models/ownermodel.model.d.ts.map +1 -0
- package/lib/models/ownermodel.model.js +113 -0
- package/lib/models/ownermodel.model.js.map +1 -0
- package/lib/models/password.model.d.ts +78 -0
- package/lib/models/password.model.d.ts.map +1 -0
- package/lib/models/password.model.js +171 -0
- package/lib/models/password.model.js.map +1 -0
- package/lib/models/refreshtoken.model.d.ts +30 -0
- package/lib/models/refreshtoken.model.d.ts.map +1 -0
- package/lib/models/refreshtoken.model.js +29 -0
- package/lib/models/refreshtoken.model.js.map +1 -0
- package/lib/models/registry.model.d.ts +76 -0
- package/lib/models/registry.model.d.ts.map +1 -0
- package/lib/models/registry.model.js +104 -0
- package/lib/models/registry.model.js.map +1 -0
- package/lib/models/rolemodel.model.d.ts +28 -0
- package/lib/models/rolemodel.model.d.ts.map +1 -0
- package/lib/models/{rolemodel.js → rolemodel.model.js} +23 -5
- package/lib/models/rolemodel.model.js.map +1 -0
- package/lib/models/simpleuser.model.d.ts +78 -0
- package/lib/models/simpleuser.model.d.ts.map +1 -0
- package/lib/models/simpleuser.model.js +124 -0
- package/lib/models/simpleuser.model.js.map +1 -0
- package/lib/models/types.d.ts +113 -0
- package/lib/models/types.d.ts.map +1 -0
- package/lib/models/types.js +2 -0
- package/lib/models/types.js.map +1 -0
- package/lib/models/user.model.d.ts +103 -0
- package/lib/models/user.model.d.ts.map +1 -0
- package/lib/models/user.model.js +164 -0
- package/lib/models/user.model.js.map +1 -0
- package/lib/queues/{memoryqueue.d.ts → memoryqueue.service.d.ts} +26 -13
- package/lib/queues/memoryqueue.service.d.ts.map +1 -0
- package/lib/queues/{memoryqueue.js → memoryqueue.service.js} +55 -31
- package/lib/queues/memoryqueue.service.js.map +1 -0
- package/lib/queues/pubsubservice.d.ts +8 -6
- package/lib/queues/pubsubservice.d.ts.map +1 -1
- package/lib/queues/pubsubservice.js +5 -4
- package/lib/queues/pubsubservice.js.map +1 -1
- package/lib/queues/queueservice.d.ts +9 -11
- package/lib/queues/queueservice.d.ts.map +1 -1
- package/lib/queues/queueservice.js +41 -13
- package/lib/queues/queueservice.js.map +1 -1
- package/lib/rest/hooks.d.ts +8 -0
- package/lib/rest/hooks.d.ts.map +1 -0
- package/lib/rest/hooks.js +10 -0
- package/lib/rest/hooks.js.map +1 -0
- package/lib/rest/irest.d.ts +212 -0
- package/lib/rest/irest.d.ts.map +1 -0
- package/lib/rest/irest.js +39 -0
- package/lib/rest/irest.js.map +1 -0
- package/lib/rest/originfilter.d.ts +38 -0
- package/lib/rest/originfilter.d.ts.map +1 -0
- package/lib/rest/originfilter.js +61 -0
- package/lib/rest/originfilter.js.map +1 -0
- package/lib/rest/restoperationstransport.service.d.ts +193 -0
- package/lib/rest/restoperationstransport.service.d.ts.map +1 -0
- package/lib/rest/restoperationstransport.service.js +780 -0
- package/lib/rest/restoperationstransport.service.js.map +1 -0
- package/lib/rest/router.service.d.ts +244 -0
- package/lib/rest/router.service.d.ts.map +1 -0
- package/lib/rest/router.service.js +843 -0
- package/lib/rest/router.service.js.map +1 -0
- package/lib/schemas/hooks.d.ts +48 -0
- package/lib/schemas/hooks.d.ts.map +1 -0
- package/lib/schemas/hooks.js +152 -0
- package/lib/schemas/hooks.js.map +1 -0
- package/lib/services/audit.model.d.ts +208 -0
- package/lib/services/audit.model.d.ts.map +1 -0
- package/lib/services/audit.model.js +432 -0
- package/lib/services/audit.model.js.map +1 -0
- package/lib/services/binary.service.d.ts +808 -0
- package/lib/services/binary.service.d.ts.map +1 -0
- package/lib/services/binary.service.js +1365 -0
- package/lib/services/binary.service.js.map +1 -0
- package/lib/services/cloudbinary.d.ts +17 -12
- package/lib/services/cloudbinary.d.ts.map +1 -1
- package/lib/services/cloudbinary.js +23 -17
- package/lib/services/cloudbinary.js.map +1 -1
- package/lib/services/command.d.ts +118 -0
- package/lib/services/command.d.ts.map +1 -0
- package/lib/services/command.js +97 -0
- package/lib/services/command.js.map +1 -0
- package/lib/services/cron.service.d.ts +142 -0
- package/lib/services/cron.service.d.ts.map +1 -0
- package/lib/services/cron.service.js +291 -0
- package/lib/services/cron.service.js.map +1 -0
- package/lib/services/{cryptoservice.d.ts → cryptoservice.service.d.ts} +75 -141
- package/lib/services/cryptoservice.service.d.ts.map +1 -0
- package/lib/services/cryptoservice.service.js +527 -0
- package/lib/services/cryptoservice.service.js.map +1 -0
- package/lib/services/debugmailer.service.d.ts +49 -0
- package/lib/services/debugmailer.service.d.ts.map +1 -0
- package/lib/services/{debugmailer.js → debugmailer.service.js} +25 -10
- package/lib/services/debugmailer.service.js.map +1 -0
- package/lib/services/domainservice.service.d.ts +242 -0
- package/lib/services/domainservice.service.d.ts.map +1 -0
- package/lib/services/domainservice.service.js +676 -0
- package/lib/services/domainservice.service.js.map +1 -0
- package/lib/services/httpserver.service.d.ts +248 -0
- package/lib/services/httpserver.service.d.ts.map +1 -0
- package/lib/services/httpserver.service.js +673 -0
- package/lib/services/httpserver.service.js.map +1 -0
- package/lib/services/iauthentication.d.ts +202 -0
- package/lib/services/iauthentication.d.ts.map +1 -0
- package/lib/services/iauthentication.js +2 -0
- package/lib/services/iauthentication.js.map +1 -0
- package/lib/services/icryptoservice.d.ts +127 -0
- package/lib/services/icryptoservice.d.ts.map +1 -0
- package/lib/services/icryptoservice.js +68 -0
- package/lib/services/icryptoservice.js.map +1 -0
- package/lib/services/imailer.d.ts +17 -0
- package/lib/services/imailer.d.ts.map +1 -0
- package/lib/services/imailer.js +2 -0
- package/lib/services/imailer.js.map +1 -0
- package/lib/services/iservice.d.ts +104 -0
- package/lib/services/iservice.d.ts.map +1 -0
- package/lib/services/iservice.js +63 -0
- package/lib/services/iservice.js.map +1 -0
- package/lib/services/mailer.service.d.ts +220 -0
- package/lib/services/mailer.service.d.ts.map +1 -0
- package/lib/services/mailer.service.js +251 -0
- package/lib/services/mailer.service.js.map +1 -0
- package/lib/services/{notificationservice.d.ts → notificationservice.service.d.ts} +10 -11
- package/lib/services/notificationservice.service.d.ts.map +1 -0
- package/lib/services/{notificationservice.js → notificationservice.service.js} +24 -12
- package/lib/services/notificationservice.service.js.map +1 -0
- package/lib/services/operationstransport.d.ts +65 -0
- package/lib/services/operationstransport.d.ts.map +1 -0
- package/lib/services/operationstransport.js +103 -0
- package/lib/services/operationstransport.js.map +1 -0
- package/lib/services/{prometheus.d.ts → prometheus.service.d.ts} +13 -12
- package/lib/services/prometheus.service.d.ts.map +1 -0
- package/lib/services/prometheus.service.js +203 -0
- package/lib/services/prometheus.service.js.map +1 -0
- package/lib/services/{resource.d.ts → resource.service.d.ts} +34 -15
- package/lib/services/resource.service.d.ts.map +1 -0
- package/lib/services/resource.service.js +301 -0
- package/lib/services/resource.service.js.map +1 -0
- package/lib/services/service.d.ts +87 -188
- package/lib/services/service.d.ts.map +1 -1
- package/lib/services/service.js +407 -422
- package/lib/services/service.js.map +1 -1
- package/lib/services/servicecommands.d.ts +99 -0
- package/lib/services/servicecommands.d.ts.map +1 -0
- package/lib/services/servicecommands.js +171 -0
- package/lib/services/servicecommands.js.map +1 -0
- package/lib/services/serviceparameters.d.ts +33 -0
- package/lib/services/serviceparameters.d.ts.map +1 -0
- package/lib/services/serviceparameters.js +79 -0
- package/lib/services/serviceparameters.js.map +1 -0
- package/lib/services/token.service.d.ts +95 -0
- package/lib/services/token.service.d.ts.map +1 -0
- package/lib/services/token.service.js +182 -0
- package/lib/services/token.service.js.map +1 -0
- package/lib/{utils → session}/cookie.d.ts +32 -19
- package/lib/session/cookie.d.ts.map +1 -0
- package/lib/{utils → session}/cookie.js +76 -23
- package/lib/session/cookie.js.map +1 -0
- package/lib/session/manager.model.d.ts +87 -0
- package/lib/session/manager.model.d.ts.map +1 -0
- package/lib/session/manager.model.js +212 -0
- package/lib/session/manager.model.js.map +1 -0
- package/lib/session/session.d.ts +100 -0
- package/lib/session/session.d.ts.map +1 -0
- package/lib/session/session.js +175 -0
- package/lib/session/session.js.map +1 -0
- package/lib/stores/istore.d.ts +99 -0
- package/lib/stores/istore.d.ts.map +1 -0
- package/lib/stores/istore.js +26 -0
- package/lib/stores/istore.js.map +1 -0
- package/lib/stores/memory.service.d.ts +114 -0
- package/lib/stores/memory.service.d.ts.map +1 -0
- package/lib/stores/memory.service.js +344 -0
- package/lib/stores/memory.service.js.map +1 -0
- package/lib/stores/store.d.ts +126 -626
- package/lib/stores/store.d.ts.map +1 -1
- package/lib/stores/store.js +257 -1117
- package/lib/stores/store.js.map +1 -1
- package/lib/templates/templates.d.ts +47 -0
- package/lib/templates/templates.d.ts.map +1 -0
- package/lib/templates/templates.js +101 -0
- package/lib/templates/templates.js.map +1 -0
- package/lib/test/application.d.ts +174 -0
- package/lib/test/application.d.ts.map +1 -0
- package/lib/test/application.js +288 -0
- package/lib/test/application.js.map +1 -0
- package/lib/test/asyncstorage.d.ts +16 -0
- package/lib/test/asyncstorage.d.ts.map +1 -0
- package/lib/test/asyncstorage.js +32 -0
- package/lib/test/asyncstorage.js.map +1 -0
- package/lib/test/behavior-fixture.model.d.ts +30 -0
- package/lib/test/behavior-fixture.model.d.ts.map +1 -0
- package/lib/test/behavior-fixture.model.js +63 -0
- package/lib/test/behavior-fixture.model.js.map +1 -0
- package/lib/test/core.d.ts +63 -0
- package/lib/test/core.d.ts.map +1 -0
- package/lib/test/core.js +190 -0
- package/lib/test/core.js.map +1 -0
- package/lib/test/index.d.ts +7 -0
- package/lib/test/index.d.ts.map +1 -0
- package/lib/test/index.js +8 -0
- package/lib/test/index.js.map +1 -0
- package/lib/test/internal.d.ts +34 -0
- package/lib/test/internal.d.ts.map +1 -0
- package/lib/test/internal.js +156 -0
- package/lib/test/internal.js.map +1 -0
- package/lib/test/legacyident.fixture.model.d.ts +98 -0
- package/lib/test/legacyident.fixture.model.d.ts.map +1 -0
- package/lib/test/legacyident.fixture.model.js +125 -0
- package/lib/test/legacyident.fixture.model.js.map +1 -0
- package/lib/test/objects.d.ts +318 -0
- package/lib/test/objects.d.ts.map +1 -0
- package/lib/test/objects.js +443 -0
- package/lib/test/objects.js.map +1 -0
- package/lib/utils/abstractdeployer.d.ts +4 -2
- package/lib/utils/abstractdeployer.d.ts.map +1 -1
- package/lib/utils/abstractdeployer.js +3 -0
- package/lib/utils/abstractdeployer.js.map +1 -1
- package/package.json +102 -60
- package/test/cachedapp/webda.config.json +1 -5
- package/test/config-cached.json +3 -6
- package/test/config.json +3 -10
- package/test/my-cnf.json +9 -0
- package/webda.module.json +3755 -2496
- package/lib/application.d.ts +0 -888
- package/lib/application.d.ts.map +0 -1
- package/lib/application.js +0 -768
- package/lib/application.js.map +0 -1
- package/lib/application.spec.d.ts +0 -2
- package/lib/application.spec.d.ts.map +0 -1
- package/lib/application.spec.js +0 -248
- package/lib/application.spec.js.map +0 -1
- package/lib/core.d.ts +0 -743
- package/lib/core.d.ts.map +0 -1
- package/lib/core.js +0 -1334
- package/lib/core.js.map +0 -1
- package/lib/core.spec.d.ts +0 -2
- package/lib/core.spec.d.ts.map +0 -1
- package/lib/core.spec.js +0 -790
- package/lib/core.spec.js.map +0 -1
- package/lib/errors.d.ts +0 -64
- package/lib/errors.d.ts.map +0 -1
- package/lib/errors.js +0 -97
- package/lib/errors.js.map +0 -1
- package/lib/errors.spec.d.ts +0 -2
- package/lib/errors.spec.d.ts.map +0 -1
- package/lib/errors.spec.js +0 -33
- package/lib/errors.spec.js.map +0 -1
- package/lib/models/aclmodel.spec.d.ts +0 -2
- package/lib/models/aclmodel.spec.d.ts.map +0 -1
- package/lib/models/aclmodel.spec.js +0 -187
- package/lib/models/aclmodel.spec.js.map +0 -1
- package/lib/models/coremodel.d.ts +0 -896
- package/lib/models/coremodel.d.ts.map +0 -1
- package/lib/models/coremodel.js +0 -1214
- package/lib/models/coremodel.js.map +0 -1
- package/lib/models/coremodel.spec.d.ts +0 -2
- package/lib/models/coremodel.spec.d.ts.map +0 -1
- package/lib/models/coremodel.spec.js +0 -464
- package/lib/models/coremodel.spec.js.map +0 -1
- package/lib/models/ident.d.ts +0 -68
- package/lib/models/ident.d.ts.map +0 -1
- package/lib/models/ident.js +0 -26
- package/lib/models/ident.js.map +0 -1
- package/lib/models/ident.spec.d.ts +0 -2
- package/lib/models/ident.spec.d.ts.map +0 -1
- package/lib/models/ident.spec.js +0 -24
- package/lib/models/ident.spec.js.map +0 -1
- package/lib/models/ownermodel.d.ts +0 -51
- package/lib/models/ownermodel.d.ts.map +0 -1
- package/lib/models/ownermodel.js +0 -65
- package/lib/models/ownermodel.js.map +0 -1
- package/lib/models/ownermodel.spec.d.ts +0 -2
- package/lib/models/ownermodel.spec.d.ts.map +0 -1
- package/lib/models/ownermodel.spec.js +0 -215
- package/lib/models/ownermodel.spec.js.map +0 -1
- package/lib/models/relations.d.ts +0 -182
- package/lib/models/relations.d.ts.map +0 -1
- package/lib/models/relations.js +0 -157
- package/lib/models/relations.js.map +0 -1
- package/lib/models/relations.spec.d.ts +0 -14
- package/lib/models/relations.spec.d.ts.map +0 -1
- package/lib/models/relations.spec.js +0 -217
- package/lib/models/relations.spec.js.map +0 -1
- package/lib/models/rolemodel.d.ts +0 -11
- package/lib/models/rolemodel.d.ts.map +0 -1
- package/lib/models/rolemodel.js.map +0 -1
- package/lib/models/rolemodel.spec.d.ts +0 -2
- package/lib/models/rolemodel.spec.d.ts.map +0 -1
- package/lib/models/rolemodel.spec.js +0 -90
- package/lib/models/rolemodel.spec.js.map +0 -1
- package/lib/models/simpleuser.d.ts +0 -47
- package/lib/models/simpleuser.d.ts.map +0 -1
- package/lib/models/simpleuser.js +0 -84
- package/lib/models/simpleuser.js.map +0 -1
- package/lib/models/test.d.ts +0 -11
- package/lib/models/test.d.ts.map +0 -1
- package/lib/models/test.js +0 -7
- package/lib/models/test.js.map +0 -1
- package/lib/models/user.d.ts +0 -67
- package/lib/models/user.d.ts.map +0 -1
- package/lib/models/user.js +0 -86
- package/lib/models/user.js.map +0 -1
- package/lib/models/user.spec.d.ts +0 -2
- package/lib/models/user.spec.d.ts.map +0 -1
- package/lib/models/user.spec.js +0 -89
- package/lib/models/user.spec.js.map +0 -1
- package/lib/queues/filequeue.d.ts +0 -59
- package/lib/queues/filequeue.d.ts.map +0 -1
- package/lib/queues/filequeue.js +0 -131
- package/lib/queues/filequeue.js.map +0 -1
- package/lib/queues/filequeue.spec.d.ts +0 -2
- package/lib/queues/filequeue.spec.d.ts.map +0 -1
- package/lib/queues/filequeue.spec.js +0 -84
- package/lib/queues/filequeue.spec.js.map +0 -1
- package/lib/queues/memoryqueue.d.ts.map +0 -1
- package/lib/queues/memoryqueue.js.map +0 -1
- package/lib/queues/memoryqueue.spec.d.ts +0 -2
- package/lib/queues/memoryqueue.spec.d.ts.map +0 -1
- package/lib/queues/memoryqueue.spec.js +0 -203
- package/lib/queues/memoryqueue.spec.js.map +0 -1
- package/lib/queues/queue.spec.d.ts +0 -6
- package/lib/queues/queue.spec.d.ts.map +0 -1
- package/lib/queues/queue.spec.js +0 -55
- package/lib/queues/queue.spec.js.map +0 -1
- package/lib/rest/restdomainservice.d.ts +0 -63
- package/lib/rest/restdomainservice.d.ts.map +0 -1
- package/lib/rest/restdomainservice.js +0 -687
- package/lib/rest/restdomainservice.js.map +0 -1
- package/lib/rest/restdomainservice.spec.d.ts +0 -2
- package/lib/rest/restdomainservice.spec.d.ts.map +0 -1
- package/lib/rest/restdomainservice.spec.js +0 -124
- package/lib/rest/restdomainservice.spec.js.map +0 -1
- package/lib/rest/router.d.ts +0 -174
- package/lib/rest/router.d.ts.map +0 -1
- package/lib/rest/router.js +0 -429
- package/lib/rest/router.js.map +0 -1
- package/lib/rest/router.spec.d.ts +0 -2
- package/lib/rest/router.spec.d.ts.map +0 -1
- package/lib/rest/router.spec.js +0 -255
- package/lib/rest/router.spec.js.map +0 -1
- package/lib/services/asyncevents.d.ts +0 -152
- package/lib/services/asyncevents.d.ts.map +0 -1
- package/lib/services/asyncevents.js +0 -217
- package/lib/services/asyncevents.js.map +0 -1
- package/lib/services/asyncevents.spec.d.ts +0 -2
- package/lib/services/asyncevents.spec.d.ts.map +0 -1
- package/lib/services/asyncevents.spec.js +0 -118
- package/lib/services/asyncevents.spec.js.map +0 -1
- package/lib/services/authentication.d.ts +0 -361
- package/lib/services/authentication.d.ts.map +0 -1
- package/lib/services/authentication.js +0 -773
- package/lib/services/authentication.js.map +0 -1
- package/lib/services/authentication.spec.d.ts +0 -2
- package/lib/services/authentication.spec.d.ts.map +0 -1
- package/lib/services/authentication.spec.js +0 -458
- package/lib/services/authentication.spec.js.map +0 -1
- package/lib/services/binary.d.ts +0 -477
- package/lib/services/binary.d.ts.map +0 -1
- package/lib/services/binary.js +0 -617
- package/lib/services/binary.js.map +0 -1
- package/lib/services/binary.spec.d.ts +0 -41
- package/lib/services/binary.spec.d.ts.map +0 -1
- package/lib/services/binary.spec.js +0 -151
- package/lib/services/binary.spec.js.map +0 -1
- package/lib/services/cloudbinary.spec.d.ts +0 -6
- package/lib/services/cloudbinary.spec.d.ts.map +0 -1
- package/lib/services/cloudbinary.spec.js +0 -66
- package/lib/services/cloudbinary.spec.js.map +0 -1
- package/lib/services/configuration.d.ts.map +0 -1
- package/lib/services/configuration.js +0 -193
- package/lib/services/configuration.js.map +0 -1
- package/lib/services/configuration.spec.d.ts +0 -2
- package/lib/services/configuration.spec.d.ts.map +0 -1
- package/lib/services/configuration.spec.js +0 -130
- package/lib/services/configuration.spec.js.map +0 -1
- package/lib/services/cron.d.ts +0 -74
- package/lib/services/cron.d.ts.map +0 -1
- package/lib/services/cron.js +0 -141
- package/lib/services/cron.js.map +0 -1
- package/lib/services/cron.spec.d.ts +0 -2
- package/lib/services/cron.spec.d.ts.map +0 -1
- package/lib/services/cron.spec.js +0 -76
- package/lib/services/cron.spec.js.map +0 -1
- package/lib/services/cryptoservice.d.ts.map +0 -1
- package/lib/services/cryptoservice.js +0 -433
- package/lib/services/cryptoservice.js.map +0 -1
- package/lib/services/cryptoservice.spec.d.ts +0 -2
- package/lib/services/cryptoservice.spec.d.ts.map +0 -1
- package/lib/services/cryptoservice.spec.js +0 -177
- package/lib/services/cryptoservice.spec.js.map +0 -1
- package/lib/services/debugmailer.d.ts +0 -36
- package/lib/services/debugmailer.d.ts.map +0 -1
- package/lib/services/debugmailer.js.map +0 -1
- package/lib/services/debugmailer.spec.d.ts +0 -2
- package/lib/services/debugmailer.spec.d.ts.map +0 -1
- package/lib/services/debugmailer.spec.js +0 -32
- package/lib/services/debugmailer.spec.js.map +0 -1
- package/lib/services/domainservice.d.ts +0 -272
- package/lib/services/domainservice.d.ts.map +0 -1
- package/lib/services/domainservice.js +0 -651
- package/lib/services/domainservice.js.map +0 -1
- package/lib/services/domainservice.spec.d.ts +0 -2
- package/lib/services/domainservice.spec.d.ts.map +0 -1
- package/lib/services/domainservice.spec.js +0 -592
- package/lib/services/domainservice.spec.js.map +0 -1
- package/lib/services/filebinary.d.ts +0 -136
- package/lib/services/filebinary.d.ts.map +0 -1
- package/lib/services/filebinary.js +0 -373
- package/lib/services/filebinary.js.map +0 -1
- package/lib/services/filebinary.spec.d.ts +0 -25
- package/lib/services/filebinary.spec.d.ts.map +0 -1
- package/lib/services/filebinary.spec.js +0 -428
- package/lib/services/filebinary.spec.js.map +0 -1
- package/lib/services/fileconfiguration.d.ts +0 -23
- package/lib/services/fileconfiguration.d.ts.map +0 -1
- package/lib/services/fileconfiguration.js +0 -48
- package/lib/services/fileconfiguration.js.map +0 -1
- package/lib/services/fileconfiguration.spec.d.ts +0 -2
- package/lib/services/fileconfiguration.spec.d.ts.map +0 -1
- package/lib/services/fileconfiguration.spec.js +0 -215
- package/lib/services/fileconfiguration.spec.js.map +0 -1
- package/lib/services/invitationservice.d.ts +0 -223
- package/lib/services/invitationservice.d.ts.map +0 -1
- package/lib/services/invitationservice.js +0 -529
- package/lib/services/invitationservice.js.map +0 -1
- package/lib/services/invitationservice.spec.d.ts +0 -2
- package/lib/services/invitationservice.spec.d.ts.map +0 -1
- package/lib/services/invitationservice.spec.js +0 -567
- package/lib/services/invitationservice.spec.js.map +0 -1
- package/lib/services/kubernetesconfiguration.d.ts +0 -27
- package/lib/services/kubernetesconfiguration.d.ts.map +0 -1
- package/lib/services/kubernetesconfiguration.js +0 -52
- package/lib/services/kubernetesconfiguration.js.map +0 -1
- package/lib/services/kubernetesconfiguration.spec.d.ts +0 -2
- package/lib/services/kubernetesconfiguration.spec.d.ts.map +0 -1
- package/lib/services/kubernetesconfiguration.spec.js +0 -206
- package/lib/services/kubernetesconfiguration.spec.js.map +0 -1
- package/lib/services/mailer.d.ts +0 -166
- package/lib/services/mailer.d.ts.map +0 -1
- package/lib/services/mailer.js +0 -176
- package/lib/services/mailer.js.map +0 -1
- package/lib/services/mailer.spec.d.ts +0 -2
- package/lib/services/mailer.spec.d.ts.map +0 -1
- package/lib/services/mailer.spec.js +0 -158
- package/lib/services/mailer.spec.js.map +0 -1
- package/lib/services/notificationservice.d.ts.map +0 -1
- package/lib/services/notificationservice.js.map +0 -1
- package/lib/services/notificationservice.spec.d.ts +0 -2
- package/lib/services/notificationservice.spec.d.ts.map +0 -1
- package/lib/services/notificationservice.spec.js +0 -83
- package/lib/services/notificationservice.spec.js.map +0 -1
- package/lib/services/oauth.d.ts +0 -226
- package/lib/services/oauth.d.ts.map +0 -1
- package/lib/services/oauth.js +0 -294
- package/lib/services/oauth.js.map +0 -1
- package/lib/services/oauth.spec.d.ts +0 -2
- package/lib/services/oauth.spec.d.ts.map +0 -1
- package/lib/services/oauth.spec.js +0 -208
- package/lib/services/oauth.spec.js.map +0 -1
- package/lib/services/prometheus.d.ts.map +0 -1
- package/lib/services/prometheus.js +0 -160
- package/lib/services/prometheus.js.map +0 -1
- package/lib/services/prometheus.spec.d.ts +0 -2
- package/lib/services/prometheus.spec.d.ts.map +0 -1
- package/lib/services/prometheus.spec.js +0 -76
- package/lib/services/prometheus.spec.js.map +0 -1
- package/lib/services/resource.d.ts.map +0 -1
- package/lib/services/resource.js +0 -170
- package/lib/services/resource.js.map +0 -1
- package/lib/services/resource.spec.d.ts +0 -2
- package/lib/services/resource.spec.d.ts.map +0 -1
- package/lib/services/resource.spec.js +0 -140
- package/lib/services/resource.spec.js.map +0 -1
- package/lib/services/service.spec.d.ts +0 -2
- package/lib/services/service.spec.d.ts.map +0 -1
- package/lib/services/service.spec.js +0 -286
- package/lib/services/service.spec.js.map +0 -1
- package/lib/stores/aggregator.d.ts +0 -48
- package/lib/stores/aggregator.d.ts.map +0 -1
- package/lib/stores/aggregator.js +0 -80
- package/lib/stores/aggregator.js.map +0 -1
- package/lib/stores/file.d.ts +0 -108
- package/lib/stores/file.d.ts.map +0 -1
- package/lib/stores/file.js +0 -188
- package/lib/stores/file.js.map +0 -1
- package/lib/stores/file.spec.d.ts +0 -13
- package/lib/stores/file.spec.d.ts.map +0 -1
- package/lib/stores/file.spec.js +0 -138
- package/lib/stores/file.spec.js.map +0 -1
- package/lib/stores/mapper.d.ts +0 -150
- package/lib/stores/mapper.d.ts.map +0 -1
- package/lib/stores/mapper.js +0 -293
- package/lib/stores/mapper.js.map +0 -1
- package/lib/stores/mapper.spec.d.ts +0 -2
- package/lib/stores/mapper.spec.d.ts.map +0 -1
- package/lib/stores/mapper.spec.js +0 -167
- package/lib/stores/mapper.spec.js.map +0 -1
- package/lib/stores/memory.d.ts +0 -152
- package/lib/stores/memory.d.ts.map +0 -1
- package/lib/stores/memory.js +0 -371
- package/lib/stores/memory.js.map +0 -1
- package/lib/stores/memory.spec.d.ts +0 -14
- package/lib/stores/memory.spec.d.ts.map +0 -1
- package/lib/stores/memory.spec.js +0 -263
- package/lib/stores/memory.spec.js.map +0 -1
- package/lib/stores/modelmapper.d.ts +0 -62
- package/lib/stores/modelmapper.d.ts.map +0 -1
- package/lib/stores/modelmapper.js +0 -197
- package/lib/stores/modelmapper.js.map +0 -1
- package/lib/stores/store.spec.d.ts +0 -57
- package/lib/stores/store.spec.d.ts.map +0 -1
- package/lib/stores/store.spec.js +0 -737
- package/lib/stores/store.spec.js.map +0 -1
- package/lib/test.d.ts +0 -265
- package/lib/test.d.ts.map +0 -1
- package/lib/test.js +0 -622
- package/lib/test.js.map +0 -1
- package/lib/unpackedapplication.d.ts.map +0 -1
- package/lib/unpackedapplication.js +0 -350
- package/lib/unpackedapplication.js.map +0 -1
- package/lib/utils/abstractdeployer.spec.d.ts +0 -2
- package/lib/utils/abstractdeployer.spec.d.ts.map +0 -1
- package/lib/utils/abstractdeployer.spec.js +0 -21
- package/lib/utils/abstractdeployer.spec.js.map +0 -1
- package/lib/utils/case.d.ts +0 -8
- package/lib/utils/case.d.ts.map +0 -1
- package/lib/utils/case.js +0 -43
- package/lib/utils/case.js.map +0 -1
- package/lib/utils/case.spec.d.ts +0 -2
- package/lib/utils/case.spec.d.ts.map +0 -1
- package/lib/utils/case.spec.js +0 -50
- package/lib/utils/case.spec.js.map +0 -1
- package/lib/utils/context.d.ts +0 -482
- package/lib/utils/context.d.ts.map +0 -1
- package/lib/utils/context.js +0 -739
- package/lib/utils/context.js.map +0 -1
- package/lib/utils/context.spec.d.ts +0 -10
- package/lib/utils/context.spec.d.ts.map +0 -1
- package/lib/utils/context.spec.js +0 -383
- package/lib/utils/context.spec.js.map +0 -1
- package/lib/utils/cookie.d.ts.map +0 -1
- package/lib/utils/cookie.js.map +0 -1
- package/lib/utils/cookie.spec.d.ts +0 -2
- package/lib/utils/cookie.spec.d.ts.map +0 -1
- package/lib/utils/cookie.spec.js +0 -88
- package/lib/utils/cookie.spec.js.map +0 -1
- package/lib/utils/esm.d.ts +0 -14
- package/lib/utils/esm.d.ts.map +0 -1
- package/lib/utils/esm.js +0 -19
- package/lib/utils/esm.js.map +0 -1
- package/lib/utils/httpcontext.d.ts.map +0 -1
- package/lib/utils/httpcontext.js.map +0 -1
- package/lib/utils/httpcontext.spec.d.ts +0 -5
- package/lib/utils/httpcontext.spec.d.ts.map +0 -1
- package/lib/utils/httpcontext.spec.js +0 -77
- package/lib/utils/httpcontext.spec.js.map +0 -1
- package/lib/utils/logger.d.ts +0 -92
- package/lib/utils/logger.d.ts.map +0 -1
- package/lib/utils/logger.js +0 -121
- package/lib/utils/logger.js.map +0 -1
- package/lib/utils/logger.spec.d.ts +0 -2
- package/lib/utils/logger.spec.d.ts.map +0 -1
- package/lib/utils/logger.spec.js +0 -48
- package/lib/utils/logger.spec.js.map +0 -1
- package/lib/utils/serializers.d.ts +0 -162
- package/lib/utils/serializers.d.ts.map +0 -1
- package/lib/utils/serializers.js +0 -420
- package/lib/utils/serializers.js.map +0 -1
- package/lib/utils/serializers.spec.d.ts +0 -2
- package/lib/utils/serializers.spec.d.ts.map +0 -1
- package/lib/utils/serializers.spec.js +0 -311
- package/lib/utils/serializers.spec.js.map +0 -1
- package/lib/utils/session.d.ts +0 -123
- package/lib/utils/session.d.ts.map +0 -1
- package/lib/utils/session.js +0 -156
- package/lib/utils/session.js.map +0 -1
- package/lib/utils/session.spec.d.ts +0 -2
- package/lib/utils/session.spec.d.ts.map +0 -1
- package/lib/utils/session.spec.js +0 -81
- package/lib/utils/session.spec.js.map +0 -1
- package/lib/utils/throttler.d.ts +0 -99
- package/lib/utils/throttler.d.ts.map +0 -1
- package/lib/utils/throttler.js +0 -160
- package/lib/utils/throttler.js.map +0 -1
- package/lib/utils/throttler.spec.d.ts +0 -2
- package/lib/utils/throttler.spec.d.ts.map +0 -1
- package/lib/utils/throttler.spec.js +0 -53
- package/lib/utils/throttler.spec.js.map +0 -1
- package/lib/utils/waiter.d.ts +0 -94
- package/lib/utils/waiter.d.ts.map +0 -1
- package/lib/utils/waiter.js +0 -148
- package/lib/utils/waiter.js.map +0 -1
- package/lib/utils/waiter.spec.d.ts +0 -2
- package/lib/utils/waiter.spec.d.ts.map +0 -1
- package/lib/utils/waiter.spec.js +0 -98
- package/lib/utils/waiter.spec.js.map +0 -1
- package/test/jsonutils/mdocs.yaml +0 -56
- package/test/jsonutils/test.json +0 -3
- package/test/jsonutils/test.yml +0 -5
|
@@ -0,0 +1,843 @@
|
|
|
1
|
+
var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
|
|
2
|
+
var useValue = arguments.length > 2;
|
|
3
|
+
for (var i = 0; i < initializers.length; i++) {
|
|
4
|
+
value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
|
|
5
|
+
}
|
|
6
|
+
return useValue ? value : void 0;
|
|
7
|
+
};
|
|
8
|
+
var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
|
|
9
|
+
function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
|
|
10
|
+
var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
|
|
11
|
+
var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
|
|
12
|
+
var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
|
|
13
|
+
var _, done = false;
|
|
14
|
+
for (var i = decorators.length - 1; i >= 0; i--) {
|
|
15
|
+
var context = {};
|
|
16
|
+
for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
|
|
17
|
+
for (var p in contextIn.access) context.access[p] = contextIn.access[p];
|
|
18
|
+
context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
|
|
19
|
+
var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
|
|
20
|
+
if (kind === "accessor") {
|
|
21
|
+
if (result === void 0) continue;
|
|
22
|
+
if (result === null || typeof result !== "object") throw new TypeError("Object expected");
|
|
23
|
+
if (_ = accept(result.get)) descriptor.get = _;
|
|
24
|
+
if (_ = accept(result.set)) descriptor.set = _;
|
|
25
|
+
if (_ = accept(result.init)) initializers.unshift(_);
|
|
26
|
+
}
|
|
27
|
+
else if (_ = accept(result)) {
|
|
28
|
+
if (kind === "field") initializers.unshift(_);
|
|
29
|
+
else descriptor[key] = _;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (target) Object.defineProperty(target, contextIn.name, descriptor);
|
|
33
|
+
done = true;
|
|
34
|
+
};
|
|
35
|
+
import uriTemplates from "uri-templates";
|
|
36
|
+
import { useApplication, useModelId } from "../application/hooks.js";
|
|
37
|
+
import { Command } from "../services/command.js";
|
|
38
|
+
import { useLog, useOutput } from "../loggers/hooks.js";
|
|
39
|
+
import { useParameters } from "../application/hooks.js";
|
|
40
|
+
import { useDynamicService } from "../core/hooks.js";
|
|
41
|
+
import { deepmerge } from "deepmerge-ts";
|
|
42
|
+
import { Service } from "../services/service.js";
|
|
43
|
+
import { ServiceParameters } from "../services/serviceparameters.js";
|
|
44
|
+
import { getMetadata } from "@webda/decorators";
|
|
45
|
+
import { templateVariables } from "../templates/templates.js";
|
|
46
|
+
import { emitCoreEvent, useCoreEvents } from "../events/events.js";
|
|
47
|
+
import { useInstanceStorage } from "../core/instancestorage.js";
|
|
48
|
+
import { FileUtils } from "@webda/utils";
|
|
49
|
+
/** Parameters for the Router service */
|
|
50
|
+
export class RouterParameters extends ServiceParameters {
|
|
51
|
+
/**
|
|
52
|
+
* Display a WARNING if a route is overriden
|
|
53
|
+
*/
|
|
54
|
+
overrideWarning;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Manage Route resolution
|
|
58
|
+
* @category CoreFeatures
|
|
59
|
+
*
|
|
60
|
+
* @WebdaModda
|
|
61
|
+
*/
|
|
62
|
+
let Router = (() => {
|
|
63
|
+
let _classSuper = Service;
|
|
64
|
+
let _instanceExtraInitializers = [];
|
|
65
|
+
let _openapi_decorators;
|
|
66
|
+
return class Router extends _classSuper {
|
|
67
|
+
static {
|
|
68
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
69
|
+
_openapi_decorators = [Command("openapi", { description: "Export the OpenAPI definition", requires: ["router", "rest-domain"] })];
|
|
70
|
+
__esDecorate(this, null, _openapi_decorators, { kind: "method", name: "openapi", static: false, private: false, access: { has: obj => "openapi" in obj, get: obj => obj.openapi }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
71
|
+
if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Routes
|
|
75
|
+
*/
|
|
76
|
+
routes = (__runInitializers(this, _instanceExtraInitializers), new Map());
|
|
77
|
+
/**
|
|
78
|
+
*
|
|
79
|
+
*/
|
|
80
|
+
pathMap;
|
|
81
|
+
models = new Map();
|
|
82
|
+
/**
|
|
83
|
+
* Request filters to apply
|
|
84
|
+
*/
|
|
85
|
+
_requestFilters = [];
|
|
86
|
+
/**
|
|
87
|
+
* Request filters to apply for CORS
|
|
88
|
+
*/
|
|
89
|
+
_requestCORSFilters = [];
|
|
90
|
+
/**
|
|
91
|
+
* Registration of a model
|
|
92
|
+
* @param model - the model to use
|
|
93
|
+
* @param url - the URL
|
|
94
|
+
*/
|
|
95
|
+
registerModelUrl(model, url) {
|
|
96
|
+
this.models.set(model, url);
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Resolve dependencies and wire up core lifecycle listeners.
|
|
100
|
+
*
|
|
101
|
+
* The Router pulls its inputs from events rather than being driven by
|
|
102
|
+
* `Core.init()` directly:
|
|
103
|
+
* - `Webda.Init.Services` — scan every resolved service for
|
|
104
|
+
* `@Route` metadata and filter capabilities.
|
|
105
|
+
* - `Webda.Init` — finalize the URI template index after all routes
|
|
106
|
+
* (dynamic or decorator-based) have been registered.
|
|
107
|
+
*
|
|
108
|
+
* @returns the result
|
|
109
|
+
*/
|
|
110
|
+
resolve() {
|
|
111
|
+
// Register as the instance router
|
|
112
|
+
useInstanceStorage().router = this;
|
|
113
|
+
// Discover routes + filters once every service is resolved and initialized
|
|
114
|
+
useCoreEvents("Webda.Init.Services", services => {
|
|
115
|
+
const list = Object.values(services);
|
|
116
|
+
this.discoverFilters(list);
|
|
117
|
+
this.discoverRoutes(list);
|
|
118
|
+
});
|
|
119
|
+
// Remap route
|
|
120
|
+
useCoreEvents("Webda.Init", () => {
|
|
121
|
+
this.remapRoutes();
|
|
122
|
+
});
|
|
123
|
+
return super.resolve();
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Return the route for model
|
|
127
|
+
* @param model - the model to use
|
|
128
|
+
* @returns the result
|
|
129
|
+
*/
|
|
130
|
+
getModelUrl(model) {
|
|
131
|
+
if (typeof model !== "string") {
|
|
132
|
+
model = useModelId(model);
|
|
133
|
+
}
|
|
134
|
+
return this.models.get(model);
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Include prefix to the url if not present
|
|
138
|
+
* @param url - the URL
|
|
139
|
+
* @returns the result string
|
|
140
|
+
*/
|
|
141
|
+
getFinalUrl(url) {
|
|
142
|
+
// We have to replace all @ by %40 as it is allowed in url rfc (https://www.rfc-editor.org/rfc/rfc3986#page-22)
|
|
143
|
+
// But disallowed in https://www.rfc-editor.org/rfc/rfc6570#section-3.2.1
|
|
144
|
+
// Similar for / in query string
|
|
145
|
+
url = url.replace(/@/g, "%40");
|
|
146
|
+
if (url.includes("?")) {
|
|
147
|
+
url = url.substring(0, url.indexOf("?")) + "?" + url.substring(url.indexOf("?") + 1).replace(/\//g, "%2F");
|
|
148
|
+
}
|
|
149
|
+
const prefix = useParameters().routePrefix || "";
|
|
150
|
+
if (prefix && url.startsWith(prefix)) {
|
|
151
|
+
return url;
|
|
152
|
+
}
|
|
153
|
+
// Absolute url
|
|
154
|
+
if (url.startsWith("//")) {
|
|
155
|
+
return url.substring(1);
|
|
156
|
+
}
|
|
157
|
+
return `${prefix}${url}`;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Return routes
|
|
161
|
+
* @returns the result
|
|
162
|
+
*/
|
|
163
|
+
getRoutes() {
|
|
164
|
+
return this.routes;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Add a route dynamicaly
|
|
168
|
+
*
|
|
169
|
+
* @param {String} url of the route can contains dynamic part like {uuid}
|
|
170
|
+
* @param {Object} info the type of executor
|
|
171
|
+
*/
|
|
172
|
+
addRouteToRouter(url, info) {
|
|
173
|
+
const finalUrl = this.getFinalUrl(url);
|
|
174
|
+
useLog("TRACE", `Add route ${info.methods.join(",")} ${finalUrl}`);
|
|
175
|
+
info.openapi ??= {};
|
|
176
|
+
if (this.routes[finalUrl]) {
|
|
177
|
+
// If route is already added do not do anything
|
|
178
|
+
if (this.routes[finalUrl].includes(info)) {
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
// Check and add warning if same method is used
|
|
182
|
+
if (this.parameters.overrideWarning) {
|
|
183
|
+
const methods = this.routes[finalUrl].map((r) => r.methods).flat();
|
|
184
|
+
info.methods.forEach(m => {
|
|
185
|
+
if (methods.indexOf(m) >= 0) {
|
|
186
|
+
if (!info.override) {
|
|
187
|
+
useLog("WARN", `${m} ${finalUrl} overlap with another defined route`);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
// Last added need to be overriding
|
|
193
|
+
this.routes[finalUrl].unshift(info);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
this.routes[finalUrl] = [info];
|
|
197
|
+
}
|
|
198
|
+
if (this.getState() === "running") {
|
|
199
|
+
this.remapRoutes();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Remove a route dynamicly
|
|
204
|
+
*
|
|
205
|
+
* @param {String} url to remove
|
|
206
|
+
* @param info - the information object
|
|
207
|
+
*/
|
|
208
|
+
removeRoute(url, info = undefined) {
|
|
209
|
+
const finalUrl = this.getFinalUrl(url);
|
|
210
|
+
if (!info) {
|
|
211
|
+
delete this.routes[finalUrl];
|
|
212
|
+
}
|
|
213
|
+
else if (this.routes[finalUrl] && this.routes[finalUrl].includes(info)) {
|
|
214
|
+
this.routes[finalUrl].splice(this.routes[finalUrl].indexOf(info), 1);
|
|
215
|
+
}
|
|
216
|
+
this.remapRoutes();
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Reinit all routes
|
|
220
|
+
*
|
|
221
|
+
* It will readd the URITemplates if needed
|
|
222
|
+
* Sort all routes again
|
|
223
|
+
*/
|
|
224
|
+
remapRoutes() {
|
|
225
|
+
// Might need to ensure each routes is prefixed
|
|
226
|
+
const prefix = useParameters().routePrefix || "";
|
|
227
|
+
if (prefix) {
|
|
228
|
+
Object.keys(this.routes)
|
|
229
|
+
.filter(k => !k.startsWith(prefix))
|
|
230
|
+
.forEach(k => {
|
|
231
|
+
this.routes[this.getFinalUrl(k)] = this.routes[k];
|
|
232
|
+
delete this.routes[k];
|
|
233
|
+
});
|
|
234
|
+
}
|
|
235
|
+
this.initURITemplates(this.routes);
|
|
236
|
+
// Order path desc
|
|
237
|
+
this.pathMap = [];
|
|
238
|
+
for (const i in this.routes) {
|
|
239
|
+
// Might need to trail the query string
|
|
240
|
+
this.routes[i].forEach((config) => {
|
|
241
|
+
this.pathMap.push({
|
|
242
|
+
url: i,
|
|
243
|
+
config
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
this.pathMap.sort(this.comparePath);
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* Compare two route paths for sorting, prioritizing literal segments over parameters
|
|
251
|
+
* @param a - the first route
|
|
252
|
+
* @param b - the second route
|
|
253
|
+
* @returns the result number
|
|
254
|
+
*/
|
|
255
|
+
comparePath(a, b) {
|
|
256
|
+
// Normal node works with localeCompare but not Lambda...
|
|
257
|
+
// Local compare { to a return: 26 on Lambda
|
|
258
|
+
const bs = b.url.replace(/\{[^{}]+}/, "{}").split("/");
|
|
259
|
+
const as = a.url.replace(/\{[^{}]+}/, "{}").split("/");
|
|
260
|
+
for (const i in as) {
|
|
261
|
+
if (bs[i] === undefined)
|
|
262
|
+
return -1;
|
|
263
|
+
if (as[i] === bs[i])
|
|
264
|
+
continue;
|
|
265
|
+
if (as[i][0] === "{" && bs[i][0] !== "{")
|
|
266
|
+
return 1;
|
|
267
|
+
if (as[i][0] !== "{" && bs[i][0] === "{")
|
|
268
|
+
return -1;
|
|
269
|
+
return bs[i] < as[i] ? -1 : 1;
|
|
270
|
+
}
|
|
271
|
+
return 1;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* @hidden
|
|
275
|
+
* @param config - the configuration
|
|
276
|
+
*/
|
|
277
|
+
initURITemplates(config) {
|
|
278
|
+
// Prepare tbe URI parser
|
|
279
|
+
for (const map in config) {
|
|
280
|
+
if (map.indexOf("{") !== -1) {
|
|
281
|
+
config[map].forEach((e) => {
|
|
282
|
+
const idx = map.indexOf("{?");
|
|
283
|
+
let queryOptional = true;
|
|
284
|
+
if (idx >= 0) {
|
|
285
|
+
const query = map.substring(idx + 2, map.length - 1);
|
|
286
|
+
e._queryParams = [];
|
|
287
|
+
query.split(",").forEach(q => {
|
|
288
|
+
if (q.endsWith("*")) {
|
|
289
|
+
e._queryCatchAll = q.substring(0, q.length - 1);
|
|
290
|
+
return;
|
|
291
|
+
}
|
|
292
|
+
else if (q.endsWith("+")) {
|
|
293
|
+
e._queryCatchAll = q.substring(0, q.length - 1);
|
|
294
|
+
queryOptional = false;
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
else if (q.endsWith("?")) {
|
|
298
|
+
e._queryParams.push({ name: q.substring(0, q.length - 1), required: false });
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
queryOptional = false;
|
|
302
|
+
e._queryParams.push({ name: q, required: true });
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
// We do not use uri-templates for query parsing
|
|
306
|
+
//map = map.substring(0, idx) + "?{+URITemplateQuery}";
|
|
307
|
+
const templates = [uriTemplates(map.substring(0, idx) + "?{+URITemplateQuery}")];
|
|
308
|
+
const pathTemplate = uriTemplates(map.substring(0, idx));
|
|
309
|
+
if (queryOptional) {
|
|
310
|
+
templates.push(pathTemplate);
|
|
311
|
+
}
|
|
312
|
+
e._uriTemplateParse = {
|
|
313
|
+
fromUri: (url) => {
|
|
314
|
+
return templates.reduce((v, t) => (v ? v : t.fromUri(url)), undefined);
|
|
315
|
+
},
|
|
316
|
+
varNames: [...pathTemplate.varNames, ...e._queryParams.map(q => q.name)]
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
else {
|
|
320
|
+
e._uriTemplateParse = uriTemplates(map);
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* What a request URL is matched against for a route: a route declaring a
|
|
328
|
+
* query template (`{?q,page?}`, `{?rest*}`) matches the whole URL, any other
|
|
329
|
+
* route matches the path alone, so an extra query string (`?v=123`) neither
|
|
330
|
+
* prevents the match nor ends up in a path variable
|
|
331
|
+
* @param routeUrl - the route URL
|
|
332
|
+
* @param finalUrl - the request URL, from `getFinalUrl`
|
|
333
|
+
* @returns the URL to match
|
|
334
|
+
*/
|
|
335
|
+
getMatchTarget(routeUrl, finalUrl) {
|
|
336
|
+
return routeUrl.includes("{?") ? finalUrl : finalUrl.split("?")[0];
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Get all method for a specific url
|
|
340
|
+
* @param config - the configuration
|
|
341
|
+
* @param method - the HTTP method
|
|
342
|
+
* @param url - the URL
|
|
343
|
+
* @returns the list of results
|
|
344
|
+
*/
|
|
345
|
+
getRouteMethodsFromUrl(url) {
|
|
346
|
+
const finalUrl = this.getFinalUrl(url);
|
|
347
|
+
const methods = new Set();
|
|
348
|
+
for (const i in this.pathMap) {
|
|
349
|
+
const routeUrl = this.pathMap[i].url;
|
|
350
|
+
const map = this.pathMap[i].config;
|
|
351
|
+
const target = this.getMatchTarget(routeUrl, finalUrl);
|
|
352
|
+
if (routeUrl !== target &&
|
|
353
|
+
(map._uriTemplateParse === undefined || map._uriTemplateParse.fromUri(target, { strict: true }) === undefined)) {
|
|
354
|
+
continue;
|
|
355
|
+
}
|
|
356
|
+
map.methods.forEach(m => methods.add(m));
|
|
357
|
+
}
|
|
358
|
+
return Array.from(methods);
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Get the route from a method / url
|
|
362
|
+
* @param ctx - the operation context
|
|
363
|
+
* @param method - the HTTP method
|
|
364
|
+
* @param url - the URL
|
|
365
|
+
* @returns the result
|
|
366
|
+
*/
|
|
367
|
+
getRouteFromUrl(ctx, method, url) {
|
|
368
|
+
const finalUrl = this.getFinalUrl(url);
|
|
369
|
+
// Search for the route
|
|
370
|
+
for (const i in this.pathMap) {
|
|
371
|
+
const routeUrl = this.pathMap[i].url;
|
|
372
|
+
const map = this.pathMap[i].config;
|
|
373
|
+
// Check method
|
|
374
|
+
if (map.methods.indexOf(method) === -1) {
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
377
|
+
const target = this.getMatchTarget(routeUrl, finalUrl);
|
|
378
|
+
// If url is strictly equal
|
|
379
|
+
if (routeUrl === target) {
|
|
380
|
+
return map;
|
|
381
|
+
}
|
|
382
|
+
// If the url
|
|
383
|
+
if (map._uriTemplateParse === undefined) {
|
|
384
|
+
continue;
|
|
385
|
+
}
|
|
386
|
+
const parse_result = map._uriTemplateParse.fromUri(target, { strict: true });
|
|
387
|
+
if (parse_result !== undefined) {
|
|
388
|
+
const parseUrl = new URL(`http://localhost${finalUrl}`);
|
|
389
|
+
if (map._queryCatchAll) {
|
|
390
|
+
parse_result[map._queryCatchAll] = {};
|
|
391
|
+
parseUrl.searchParams.forEach((v, k) => {
|
|
392
|
+
if (!map._queryParams?.find(q => q.name === k)) {
|
|
393
|
+
parse_result[map._queryCatchAll][k] = v;
|
|
394
|
+
}
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
// Check for each params
|
|
398
|
+
let mandatoryParams = true;
|
|
399
|
+
map._queryParams?.forEach(q => {
|
|
400
|
+
if (!parseUrl.searchParams.has(q.name)) {
|
|
401
|
+
mandatoryParams &&= !q.required;
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
parse_result[q.name] = parseUrl.searchParams.get(q.name);
|
|
405
|
+
});
|
|
406
|
+
// Skip if we miss mandatory params
|
|
407
|
+
if (!mandatoryParams) {
|
|
408
|
+
continue;
|
|
409
|
+
}
|
|
410
|
+
if (parse_result.URITemplateQuery) {
|
|
411
|
+
delete parse_result.URITemplateQuery;
|
|
412
|
+
}
|
|
413
|
+
ctx.setParameters(parse_result);
|
|
414
|
+
return map;
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
/**
|
|
419
|
+
* Convert a schema name or object to an OpenAPI $ref or inline schema
|
|
420
|
+
* @param schema - the schema object
|
|
421
|
+
* @returns the result
|
|
422
|
+
*/
|
|
423
|
+
getOpenAPISchema(schema) {
|
|
424
|
+
if (!schema) {
|
|
425
|
+
return {
|
|
426
|
+
$ref: "#/components/schemas/Object"
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
else if (typeof schema === "string") {
|
|
430
|
+
return {
|
|
431
|
+
$ref: "#/components/schemas/" + schema
|
|
432
|
+
};
|
|
433
|
+
}
|
|
434
|
+
return schema;
|
|
435
|
+
}
|
|
436
|
+
/**
|
|
437
|
+
* Add all known routes to paths
|
|
438
|
+
*
|
|
439
|
+
* @param openapi to complete
|
|
440
|
+
* @param skipHidden add hidden routes or not
|
|
441
|
+
*/
|
|
442
|
+
completeOpenAPI(openapi, skipHidden = true) {
|
|
443
|
+
const hasTag = tag => openapi.tags.find(t => t.name === tag) !== undefined;
|
|
444
|
+
for (const i in this.routes) {
|
|
445
|
+
this.routes[i].forEach((route) => {
|
|
446
|
+
route.openapi = templateVariables(route.openapi || {}, useDynamicService(route.executor).getOpenApiReplacements());
|
|
447
|
+
if (route.openapi.hidden && skipHidden) {
|
|
448
|
+
return;
|
|
449
|
+
}
|
|
450
|
+
route.openapi.hidden = false;
|
|
451
|
+
let path = i;
|
|
452
|
+
if (i.indexOf("{?") >= 0) {
|
|
453
|
+
path = i.substring(0, i.indexOf("{?"));
|
|
454
|
+
}
|
|
455
|
+
openapi.paths[path] = openapi.paths[path] || {};
|
|
456
|
+
if (route._uriTemplateParse) {
|
|
457
|
+
openapi.paths[path].parameters = [];
|
|
458
|
+
route._uriTemplateParse.varNames.forEach(varName => {
|
|
459
|
+
const queryParam = route._queryParams?.find(i => i.name === varName);
|
|
460
|
+
if (queryParam) {
|
|
461
|
+
let name = varName;
|
|
462
|
+
if (name.startsWith("*")) {
|
|
463
|
+
name = name.substr(1);
|
|
464
|
+
}
|
|
465
|
+
openapi.paths[path].parameters.push({
|
|
466
|
+
name,
|
|
467
|
+
in: "query",
|
|
468
|
+
required: queryParam.required,
|
|
469
|
+
schema: {
|
|
470
|
+
type: "string"
|
|
471
|
+
}
|
|
472
|
+
});
|
|
473
|
+
return;
|
|
474
|
+
}
|
|
475
|
+
openapi.paths[path].parameters.push({
|
|
476
|
+
// ^[a-zA-Z0-9._$-]+$] is the official regex of AWS
|
|
477
|
+
name: varName.replace(/[^a-zA-Z0-9._$-]/g, ""),
|
|
478
|
+
in: "path",
|
|
479
|
+
required: true,
|
|
480
|
+
schema: {
|
|
481
|
+
type: "string"
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
route.methods.forEach(method => {
|
|
487
|
+
let responses;
|
|
488
|
+
let schema;
|
|
489
|
+
let description;
|
|
490
|
+
let summary;
|
|
491
|
+
let operationId;
|
|
492
|
+
let requestBody;
|
|
493
|
+
const tags = route.openapi.tags ?? [];
|
|
494
|
+
// Refactor here
|
|
495
|
+
if (route.openapi[method.toLowerCase()]) {
|
|
496
|
+
responses = route.openapi[method.toLowerCase()].responses;
|
|
497
|
+
schema = this.getOpenAPISchema(route.openapi[method.toLowerCase()].schemas?.output);
|
|
498
|
+
description = route.openapi[method.toLowerCase()].description;
|
|
499
|
+
summary = route.openapi[method.toLowerCase()].summary;
|
|
500
|
+
operationId = route.openapi[method.toLowerCase()].operationId;
|
|
501
|
+
tags.push(...(route.openapi[method.toLowerCase()].tags || []));
|
|
502
|
+
requestBody = route.openapi[method.toLowerCase()].requestBody;
|
|
503
|
+
}
|
|
504
|
+
responses = responses || {
|
|
505
|
+
200: {
|
|
506
|
+
description: "Operation success"
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
for (const j in responses) {
|
|
510
|
+
// Add default answer
|
|
511
|
+
const code = parseInt(j);
|
|
512
|
+
if (code < 300 && code >= 200 && !responses[j].description) {
|
|
513
|
+
responses[j].description = "Operation success";
|
|
514
|
+
responses[j].content ??= {};
|
|
515
|
+
responses[j].content["application/json"] = {
|
|
516
|
+
schema
|
|
517
|
+
};
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
// Add the service name if no tags are defined
|
|
521
|
+
if (tags.length === 0) {
|
|
522
|
+
tags.push(route.executor);
|
|
523
|
+
}
|
|
524
|
+
const desc = {
|
|
525
|
+
tags,
|
|
526
|
+
responses: responses,
|
|
527
|
+
description,
|
|
528
|
+
summary,
|
|
529
|
+
operationId,
|
|
530
|
+
requestBody
|
|
531
|
+
};
|
|
532
|
+
if (method.toLowerCase().startsWith("p") && route.openapi[method.toLowerCase()]?.schemas?.input) {
|
|
533
|
+
// Add request schema if exist
|
|
534
|
+
desc.requestBody ??= {
|
|
535
|
+
content: {
|
|
536
|
+
"application/json": {
|
|
537
|
+
schema: this.getOpenAPISchema(route.openapi[method.toLowerCase()]?.schemas?.input)
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
};
|
|
541
|
+
}
|
|
542
|
+
openapi.paths[path][method.toLowerCase()] = desc;
|
|
543
|
+
tags
|
|
544
|
+
.filter(tag => !hasTag(tag))
|
|
545
|
+
.forEach(tag => openapi.tags.push({
|
|
546
|
+
name: tag
|
|
547
|
+
}));
|
|
548
|
+
});
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
/**
|
|
553
|
+
* Execute the matched route handler for a web context
|
|
554
|
+
* @param ctx - the operation context
|
|
555
|
+
*/
|
|
556
|
+
async execute(ctx) {
|
|
557
|
+
const httpContext = ctx.getHttpContext();
|
|
558
|
+
const method = httpContext.getMethod();
|
|
559
|
+
// Routes are relative to the prefix (API Gateway stage, custom domain base path…)
|
|
560
|
+
const url = httpContext.getRelativeUri();
|
|
561
|
+
// Handle CORS preflight
|
|
562
|
+
if (method === "OPTIONS") {
|
|
563
|
+
const methods = this.getRouteMethodsFromUrl(url);
|
|
564
|
+
if (methods.length > 0 && (await this.checkCORSRequest(ctx))) {
|
|
565
|
+
ctx.setHeader("Access-Control-Allow-Methods", methods.join(","));
|
|
566
|
+
ctx.writeHead(204);
|
|
567
|
+
return;
|
|
568
|
+
}
|
|
569
|
+
this.writeNotFound(ctx, method, url);
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
const info = this.getRouteFromUrl(ctx, method, url);
|
|
573
|
+
if (!info) {
|
|
574
|
+
this.writeNotFound(ctx, method, url);
|
|
575
|
+
return;
|
|
576
|
+
}
|
|
577
|
+
// Check request filters (authentication, etc.)
|
|
578
|
+
if (!(await this.checkRequest(ctx))) {
|
|
579
|
+
ctx.writeHead(403);
|
|
580
|
+
return;
|
|
581
|
+
}
|
|
582
|
+
// Execute the route handler
|
|
583
|
+
if (typeof info._method === "function") {
|
|
584
|
+
await info._method(ctx);
|
|
585
|
+
}
|
|
586
|
+
else if (info._method && info.executor) {
|
|
587
|
+
const service = useDynamicService(info.executor);
|
|
588
|
+
if (service && typeof service[info._method] === "function") {
|
|
589
|
+
await service[info._method](ctx);
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
/**
|
|
594
|
+
* Answer a request no route matches: 404 with the same error body a thrown
|
|
595
|
+
* `NotFound` gets, so clients don't receive an empty response
|
|
596
|
+
* @param ctx - the web context
|
|
597
|
+
* @param method - the HTTP method
|
|
598
|
+
* @param url - the requested URL
|
|
599
|
+
*/
|
|
600
|
+
writeNotFound(ctx, method, url) {
|
|
601
|
+
emitCoreEvent("Webda.404", { context: ctx });
|
|
602
|
+
ctx.writeHead(404);
|
|
603
|
+
ctx.write({ error: { code: "NOT_FOUND", message: `No route for ${method} ${url}` } });
|
|
604
|
+
}
|
|
605
|
+
/**
|
|
606
|
+
* Verify if a request can be done
|
|
607
|
+
*
|
|
608
|
+
* @param context Context of the request
|
|
609
|
+
* @param ctx - the operation context
|
|
610
|
+
* @returns true if the condition is met
|
|
611
|
+
*/
|
|
612
|
+
async checkRequest(ctx) {
|
|
613
|
+
// Do not need to filter on OPTIONS as CORS is for that
|
|
614
|
+
if (ctx.getHttpContext().getMethod() === "OPTIONS" || this._requestFilters.length === 0) {
|
|
615
|
+
return true;
|
|
616
|
+
}
|
|
617
|
+
return (await Promise.all(this._requestFilters.map(filter => filter.checkRequest(ctx, "AUTH")))).some(v => v);
|
|
618
|
+
}
|
|
619
|
+
/**
|
|
620
|
+
* Verify if an origin is allowed to do request on the API
|
|
621
|
+
*
|
|
622
|
+
* @param context Context of the request
|
|
623
|
+
* @param ctx - the operation context
|
|
624
|
+
* @returns true if the condition is met
|
|
625
|
+
*/
|
|
626
|
+
async checkCORSRequest(ctx) {
|
|
627
|
+
return (await Promise.all(this._requestCORSFilters.map(filter => filter.checkRequest(ctx, "CORS")))).some(v => v);
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Export the OpenAPI definition as JSON to stdout
|
|
631
|
+
* @param output - file path to write to (prints to stdout if omitted)
|
|
632
|
+
* @param includeHidden - include hidden routes in the output
|
|
633
|
+
*/
|
|
634
|
+
openapi(
|
|
635
|
+
/** @alias o @description Output file path (stdout if omitted) */
|
|
636
|
+
output,
|
|
637
|
+
/** @description Include hidden routes */
|
|
638
|
+
includeHidden) {
|
|
639
|
+
const doc = this.exportOpenAPI(!includeHidden);
|
|
640
|
+
const json = JSON.stringify(doc, undefined, 2);
|
|
641
|
+
if (output) {
|
|
642
|
+
FileUtils.save(doc, output);
|
|
643
|
+
useLog("INFO", `OpenAPI definition written to ${output}`);
|
|
644
|
+
}
|
|
645
|
+
else {
|
|
646
|
+
useOutput(json);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
649
|
+
/**
|
|
650
|
+
* Export OpenAPI
|
|
651
|
+
* @param skipHidden - whether to skip hidden entries
|
|
652
|
+
* @returns the result
|
|
653
|
+
*/
|
|
654
|
+
exportOpenAPI(skipHidden = true) {
|
|
655
|
+
const packageInfo = useApplication().getPackageDescription();
|
|
656
|
+
let contact;
|
|
657
|
+
if (typeof packageInfo.author === "string") {
|
|
658
|
+
contact = {
|
|
659
|
+
name: packageInfo.author
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
else if (packageInfo.author) {
|
|
663
|
+
contact = packageInfo.author;
|
|
664
|
+
}
|
|
665
|
+
let license;
|
|
666
|
+
if (typeof packageInfo.license === "string") {
|
|
667
|
+
license = {
|
|
668
|
+
name: packageInfo.license
|
|
669
|
+
};
|
|
670
|
+
}
|
|
671
|
+
else if (packageInfo.license) {
|
|
672
|
+
license = packageInfo.license;
|
|
673
|
+
}
|
|
674
|
+
const openapi = deepmerge({
|
|
675
|
+
openapi: "3.0.3",
|
|
676
|
+
info: {
|
|
677
|
+
description: packageInfo.description,
|
|
678
|
+
version: packageInfo.version || "0.0.0",
|
|
679
|
+
title: packageInfo.title || "Webda-based application",
|
|
680
|
+
termsOfService: packageInfo.termsOfService,
|
|
681
|
+
contact,
|
|
682
|
+
license
|
|
683
|
+
},
|
|
684
|
+
components: {
|
|
685
|
+
schemas: {
|
|
686
|
+
Object: {
|
|
687
|
+
type: "object"
|
|
688
|
+
}
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
paths: {},
|
|
692
|
+
tags: []
|
|
693
|
+
}, useApplication().getCurrentConfiguration().openapi || {});
|
|
694
|
+
const app = useApplication();
|
|
695
|
+
const models = app.getModels();
|
|
696
|
+
const schemas = app.getSchemas();
|
|
697
|
+
// Copy all input/output from actions
|
|
698
|
+
for (const i in schemas) {
|
|
699
|
+
if (!(i.endsWith(".input") || i.endsWith(".output"))) {
|
|
700
|
+
continue;
|
|
701
|
+
}
|
|
702
|
+
// @ts-ignore
|
|
703
|
+
openapi.components.schemas[i] ??= schemas[i];
|
|
704
|
+
// Not sure how to test following
|
|
705
|
+
/* c8 ignore next 5 */
|
|
706
|
+
for (const j in schemas[i].definitions) {
|
|
707
|
+
// @ts-ignore
|
|
708
|
+
openapi.components.schemas[j] ??= schemas[i].definitions[j];
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
for (const i in models) {
|
|
712
|
+
const model = models[i];
|
|
713
|
+
let desc = {
|
|
714
|
+
type: "object"
|
|
715
|
+
};
|
|
716
|
+
const modelName = model.name || i.split("/").pop();
|
|
717
|
+
const schema = useApplication().getSchema(i);
|
|
718
|
+
if (schema) {
|
|
719
|
+
for (const j in schema.definitions) {
|
|
720
|
+
// @ts-ignore
|
|
721
|
+
openapi.components.schemas[j] ??= schema.definitions[j];
|
|
722
|
+
}
|
|
723
|
+
delete schema.definitions;
|
|
724
|
+
desc = schema;
|
|
725
|
+
}
|
|
726
|
+
// Remove empty required as openapi does not like that
|
|
727
|
+
// Our compiler is not generating this anymore but it is additional protection
|
|
728
|
+
/* c8 ignore next 3 */
|
|
729
|
+
if (desc.required && desc.required.length === 0) {
|
|
730
|
+
delete desc.required;
|
|
731
|
+
}
|
|
732
|
+
// Remove $schema
|
|
733
|
+
delete desc.$schema;
|
|
734
|
+
// Rename all #/definitions/ by #/components/schemas/
|
|
735
|
+
openapi.components.schemas[modelName] = JSON.parse(JSON.stringify(desc).replace(/#\/definitions\//g, "#/components/schemas/"));
|
|
736
|
+
}
|
|
737
|
+
this.completeOpenAPI(openapi, skipHidden);
|
|
738
|
+
openapi.tags.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase()));
|
|
739
|
+
const paths = {};
|
|
740
|
+
Object.keys(openapi.paths)
|
|
741
|
+
.sort()
|
|
742
|
+
.forEach(i => (paths[i] = openapi.paths[i]));
|
|
743
|
+
openapi.paths = paths;
|
|
744
|
+
return openapi;
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* Register a request filtering
|
|
748
|
+
*
|
|
749
|
+
* Will apply to all requests regardless of the devMode
|
|
750
|
+
* @param filter - the filter to apply
|
|
751
|
+
*/
|
|
752
|
+
registerRequestFilter(filter) {
|
|
753
|
+
this._requestFilters.push(filter);
|
|
754
|
+
}
|
|
755
|
+
/**
|
|
756
|
+
* Register a CORS request filtering
|
|
757
|
+
*
|
|
758
|
+
* Does not apply in devMode
|
|
759
|
+
* @param filter - the filter to apply
|
|
760
|
+
*/
|
|
761
|
+
registerCORSFilter(filter) {
|
|
762
|
+
this._requestCORSFilters.push(filter);
|
|
763
|
+
}
|
|
764
|
+
/**
|
|
765
|
+
* Auto-discover services that declare `request-filter` or `cors-filter` capabilities
|
|
766
|
+
* and register them with the Router.
|
|
767
|
+
*
|
|
768
|
+
* Called during framework initialization (after all services are resolved and
|
|
769
|
+
* initialized) to replace manual `registerRequestFilter(this)` calls. Iterates
|
|
770
|
+
* all services, checks their {@link Service.getCapabilities} return value, and
|
|
771
|
+
* registers matching services as request or CORS filters.
|
|
772
|
+
*
|
|
773
|
+
* @param services - Iterable of initialized services to scan for filter capabilities
|
|
774
|
+
*
|
|
775
|
+
* @example
|
|
776
|
+
* ```typescript
|
|
777
|
+
* // Called automatically by Core.init():
|
|
778
|
+
* router.discoverFilters(Object.values(this.services));
|
|
779
|
+
*
|
|
780
|
+
* // A service with "request-filter" capability is auto-registered:
|
|
781
|
+
* class HawkService extends Service implements RequestFilter {
|
|
782
|
+
* // getCapabilities() returns { "request-filter": {}, "cors-filter": {} }
|
|
783
|
+
* // → automatically registered with router as both request and CORS filter
|
|
784
|
+
* }
|
|
785
|
+
* ```
|
|
786
|
+
*/
|
|
787
|
+
discoverFilters(services) {
|
|
788
|
+
for (const service of services) {
|
|
789
|
+
// Services that failed to construct are kept as undefined entries
|
|
790
|
+
if (!service)
|
|
791
|
+
continue;
|
|
792
|
+
const caps = service.getCapabilities();
|
|
793
|
+
if ("request-filter" in caps) {
|
|
794
|
+
this.registerRequestFilter(service);
|
|
795
|
+
}
|
|
796
|
+
if ("cors-filter" in caps) {
|
|
797
|
+
this.registerCORSFilter(service);
|
|
798
|
+
}
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
/**
|
|
802
|
+
* Auto-discover routes declared with `@Route` (or the legacy
|
|
803
|
+
* `constructor.routes` bucket) on each service, and register them with the
|
|
804
|
+
* router. Called once from `Core.init()` after all services have resolved —
|
|
805
|
+
* services don't have to push their own routes anymore.
|
|
806
|
+
*
|
|
807
|
+
* @param services - iterable of initialized services to scan
|
|
808
|
+
*/
|
|
809
|
+
discoverRoutes(services) {
|
|
810
|
+
for (const service of services) {
|
|
811
|
+
if (!service)
|
|
812
|
+
continue;
|
|
813
|
+
// @ts-ignore — back-compat for subclasses that still populate this
|
|
814
|
+
const legacy = service.constructor.routes || {};
|
|
815
|
+
const fromMetadata = getMetadata(service.constructor)?.["webda.route"] || {};
|
|
816
|
+
const routes = { ...legacy };
|
|
817
|
+
for (const path in fromMetadata) {
|
|
818
|
+
routes[path] = [...(routes[path] || []), ...fromMetadata[path]];
|
|
819
|
+
}
|
|
820
|
+
for (const path in routes) {
|
|
821
|
+
for (const route of routes[path]) {
|
|
822
|
+
const executor = service[route.executor];
|
|
823
|
+
if (typeof executor !== "function") {
|
|
824
|
+
useLog("WARN", `@Route on ${service.getName()} references non-method ${route.executor}`);
|
|
825
|
+
continue;
|
|
826
|
+
}
|
|
827
|
+
const finalUrl = service.getUrl(path, route.methods);
|
|
828
|
+
if (!finalUrl)
|
|
829
|
+
continue;
|
|
830
|
+
this.addRouteToRouter(finalUrl, {
|
|
831
|
+
_method: executor.bind(service),
|
|
832
|
+
executor: service.getName(),
|
|
833
|
+
openapi: route.openapi,
|
|
834
|
+
methods: route.methods
|
|
835
|
+
});
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
}
|
|
840
|
+
};
|
|
841
|
+
})();
|
|
842
|
+
export { Router };
|
|
843
|
+
//# sourceMappingURL=router.service.js.map
|