@fougere/core 0.9.2-alpha.0 → 0.10.0-alpha.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/dist/AdapterConfig.d.ts +10 -0
- package/dist/AdapterConfig.d.ts.map +1 -0
- package/dist/AdapterConfig.js +3 -0
- package/dist/AdapterConfig.js.map +1 -0
- package/dist/AnswerFor.d.ts +5 -0
- package/dist/AnswerFor.d.ts.map +1 -0
- package/dist/AnswerFor.js +2 -0
- package/dist/AnswerFor.js.map +1 -0
- package/dist/Binding.d.ts +4 -0
- package/dist/Binding.d.ts.map +1 -0
- package/dist/Binding.js +2 -0
- package/dist/Binding.js.map +1 -0
- package/dist/{identity.d.ts → CallIdentity.d.ts} +4 -17
- package/dist/CallIdentity.d.ts.map +1 -0
- package/dist/{identity.js → CallIdentity.js} +1 -6
- package/dist/CallIdentity.js.map +1 -0
- package/dist/Constraint.d.ts +3 -0
- package/dist/Constraint.d.ts.map +1 -0
- package/dist/Constraint.js +2 -0
- package/dist/Constraint.js.map +1 -0
- package/dist/{conventions.d.ts → Conventions.d.ts} +14 -8
- package/dist/Conventions.d.ts.map +1 -0
- package/dist/{conventions.js → Conventions.js} +7 -3
- package/dist/Conventions.js.map +1 -0
- package/dist/ConventionsInput.d.ts +8 -0
- package/dist/ConventionsInput.d.ts.map +1 -0
- package/dist/ConventionsInput.js +2 -0
- package/dist/ConventionsInput.js.map +1 -0
- package/dist/Ctor.d.ts +3 -0
- package/dist/Ctor.d.ts.map +1 -0
- package/dist/Ctor.js +2 -0
- package/dist/Ctor.js.map +1 -0
- package/dist/Declared.d.ts +8 -0
- package/dist/Declared.d.ts.map +1 -0
- package/dist/Declared.js +2 -0
- package/dist/Declared.js.map +1 -0
- package/dist/DeclaredHandler.d.ts +18 -0
- package/dist/DeclaredHandler.d.ts.map +1 -0
- package/dist/DeclaredHandler.js +2 -0
- package/dist/DeclaredHandler.js.map +1 -0
- package/dist/DeclaredSubject.d.ts +7 -0
- package/dist/DeclaredSubject.d.ts.map +1 -0
- package/dist/DeclaredSubject.js +2 -0
- package/dist/DeclaredSubject.js.map +1 -0
- package/dist/{graph.d.ts → DomainCluster.d.ts} +3 -12
- package/dist/DomainCluster.d.ts.map +1 -0
- package/dist/{graph.js → DomainCluster.js} +1 -1
- package/dist/DomainCluster.js.map +1 -0
- package/dist/EffectiveCollector.d.ts +8 -0
- package/dist/EffectiveCollector.d.ts.map +1 -0
- package/dist/EffectiveCollector.js +2 -0
- package/dist/EffectiveCollector.js.map +1 -0
- package/dist/EffectiveOperation.d.ts +65 -0
- package/dist/EffectiveOperation.d.ts.map +1 -0
- package/dist/EffectiveOperation.js +2 -0
- package/dist/EffectiveOperation.js.map +1 -0
- package/dist/EffectiveOperationModel.d.ts +24 -0
- package/dist/EffectiveOperationModel.d.ts.map +1 -0
- package/dist/{effective-operation.js → EffectiveOperationModel.js} +26 -23
- package/dist/EffectiveOperationModel.js.map +1 -0
- package/dist/EffectiveOperationOptions.d.ts +7 -0
- package/dist/EffectiveOperationOptions.d.ts.map +1 -0
- package/dist/EffectiveOperationOptions.js +2 -0
- package/dist/EffectiveOperationOptions.js.map +1 -0
- package/dist/EffectiveOperationSemantics.d.ts +8 -0
- package/dist/EffectiveOperationSemantics.d.ts.map +1 -0
- package/dist/EffectiveOperationSemantics.js +8 -0
- package/dist/EffectiveOperationSemantics.js.map +1 -0
- package/dist/EffectiveOperationsMap.d.ts +3 -0
- package/dist/EffectiveOperationsMap.d.ts.map +1 -0
- package/dist/EffectiveOperationsMap.js +2 -0
- package/dist/EffectiveOperationsMap.js.map +1 -0
- package/dist/EffectiveParameter.d.ts +14 -0
- package/dist/EffectiveParameter.d.ts.map +1 -0
- package/dist/EffectiveParameter.js +2 -0
- package/dist/EffectiveParameter.js.map +1 -0
- package/dist/EntityNode.d.ts +7 -0
- package/dist/EntityNode.d.ts.map +1 -0
- package/dist/EntityNode.js +2 -0
- package/dist/EntityNode.js.map +1 -0
- package/dist/{config-loader.d.ts → FougereConfig.d.ts} +16 -17
- package/dist/FougereConfig.d.ts.map +1 -0
- package/dist/{config-loader.js → FougereConfig.js} +1 -2
- package/dist/FougereConfig.js.map +1 -0
- package/dist/FougereNames.d.ts +4 -0
- package/dist/FougereNames.d.ts.map +1 -0
- package/dist/FougereNames.js +2 -0
- package/dist/FougereNames.js.map +1 -0
- package/dist/FougerePorts.d.ts +9 -0
- package/dist/FougerePorts.d.ts.map +1 -0
- package/dist/FougerePorts.js +2 -0
- package/dist/FougerePorts.js.map +1 -0
- package/dist/FrondConfig.d.ts +36 -0
- package/dist/FrondConfig.d.ts.map +1 -0
- package/dist/{frond-config.js → FrondConfig.js} +1 -1
- package/dist/FrondConfig.js.map +1 -0
- package/dist/{declare.d.ts → FrondDeclaration.d.ts} +7 -29
- package/dist/FrondDeclaration.d.ts.map +1 -0
- package/dist/{declare.js → FrondDeclaration.js} +2 -3
- package/dist/FrondDeclaration.js.map +1 -0
- package/dist/FrondIdentity.d.ts +8 -0
- package/dist/FrondIdentity.d.ts.map +1 -0
- package/dist/FrondIdentity.js +2 -0
- package/dist/FrondIdentity.js.map +1 -0
- package/dist/NameOf.d.ts +10 -0
- package/dist/NameOf.d.ts.map +1 -0
- package/dist/NameOf.js +2 -0
- package/dist/NameOf.js.map +1 -0
- package/dist/OperationOverride.d.ts +38 -0
- package/dist/OperationOverride.d.ts.map +1 -0
- package/dist/OperationOverride.js +2 -0
- package/dist/OperationOverride.js.map +1 -0
- package/dist/PortChoice.d.ts +13 -0
- package/dist/PortChoice.d.ts.map +1 -0
- package/dist/PortChoice.js +2 -0
- package/dist/PortChoice.js.map +1 -0
- package/dist/{source.d.ts → Source.d.ts} +5 -24
- package/dist/Source.d.ts.map +1 -0
- package/dist/{source.js → Source.js} +1 -1
- package/dist/{source.js.map → Source.js.map} +1 -1
- package/dist/SourceConfig.d.ts +10 -0
- package/dist/SourceConfig.d.ts.map +1 -0
- package/dist/SourceConfig.js +2 -0
- package/dist/SourceConfig.js.map +1 -0
- package/dist/SourceView.d.ts +13 -0
- package/dist/SourceView.d.ts.map +1 -0
- package/dist/SourceView.js +2 -0
- package/dist/SourceView.js.map +1 -0
- package/dist/VerifiedCall.d.ts +8 -0
- package/dist/VerifiedCall.d.ts.map +1 -0
- package/dist/VerifiedCall.js +2 -0
- package/dist/VerifiedCall.js.map +1 -0
- package/dist/boot/App.d.ts +71 -0
- package/dist/boot/App.d.ts.map +1 -0
- package/dist/boot/App.js +2 -0
- package/dist/boot/App.js.map +1 -0
- package/dist/boot/AppLifecycle.d.ts +2 -19
- package/dist/boot/AppLifecycle.d.ts.map +1 -1
- package/dist/boot/AppLifecycle.js.map +1 -1
- package/dist/boot/AuthConfig.d.ts +14 -0
- package/dist/boot/AuthConfig.d.ts.map +1 -0
- package/dist/boot/AuthConfig.js +2 -0
- package/dist/boot/AuthConfig.js.map +1 -0
- package/dist/boot/AuthContext.d.ts +12 -0
- package/dist/boot/AuthContext.d.ts.map +1 -0
- package/dist/boot/AuthContext.js +2 -0
- package/dist/boot/AuthContext.js.map +1 -0
- package/dist/boot/AuthRuntime.d.ts +19 -0
- package/dist/boot/AuthRuntime.d.ts.map +1 -0
- package/dist/boot/AuthRuntime.js +2 -0
- package/dist/boot/AuthRuntime.js.map +1 -0
- package/dist/boot/CreateAppOptions.d.ts +81 -0
- package/dist/boot/CreateAppOptions.d.ts.map +1 -0
- package/dist/boot/CreateAppOptions.js +2 -0
- package/dist/boot/CreateAppOptions.js.map +1 -0
- package/dist/boot/Emissions.d.ts +11 -7
- package/dist/boot/Emissions.d.ts.map +1 -1
- package/dist/boot/Emissions.js +83 -45
- package/dist/boot/Emissions.js.map +1 -1
- package/dist/boot/Extension.d.ts +20 -0
- package/dist/boot/Extension.d.ts.map +1 -0
- package/dist/boot/Extension.js +2 -0
- package/dist/boot/Extension.js.map +1 -0
- package/dist/boot/apply.d.ts +1 -1
- package/dist/boot/apply.js +1 -1
- package/dist/boot/apply.js.map +1 -1
- package/dist/boot/bootstrap.d.ts +2 -1
- package/dist/boot/bootstrap.d.ts.map +1 -1
- package/dist/boot/bootstrap.js +77 -42
- package/dist/boot/bootstrap.js.map +1 -1
- package/dist/boot/card.d.ts +2 -2
- package/dist/boot/card.d.ts.map +1 -1
- package/dist/boot/card.js +11 -8
- package/dist/boot/card.js.map +1 -1
- package/dist/boot/declared.d.ts +29 -0
- package/dist/boot/declared.d.ts.map +1 -0
- package/dist/boot/declared.js +67 -0
- package/dist/boot/declared.js.map +1 -0
- package/dist/boot/frame.d.ts +1 -1
- package/dist/boot/frame.js +1 -1
- package/dist/boot/hosted.d.ts +1 -1
- package/dist/boot/hosted.d.ts.map +1 -1
- package/dist/boot/install.d.ts +11 -7
- package/dist/boot/install.d.ts.map +1 -1
- package/dist/boot/install.js +30 -24
- package/dist/boot/install.js.map +1 -1
- package/dist/boot/ownership.d.ts +8 -4
- package/dist/boot/ownership.d.ts.map +1 -1
- package/dist/boot/ownership.js +91 -33
- package/dist/boot/ownership.js.map +1 -1
- package/dist/boot/ports.d.ts +4 -3
- package/dist/boot/ports.d.ts.map +1 -1
- package/dist/boot/ports.js +48 -37
- package/dist/boot/ports.js.map +1 -1
- package/dist/boot/remote.d.ts +3 -8
- package/dist/boot/remote.d.ts.map +1 -1
- package/dist/boot/remote.js +19 -15
- package/dist/boot/remote.js.map +1 -1
- package/dist/boot/runner.d.ts +2 -2
- package/dist/boot/runner.d.ts.map +1 -1
- package/dist/boot/seed.d.ts +4 -3
- package/dist/boot/seed.d.ts.map +1 -1
- package/dist/boot/seed.js +6 -6
- package/dist/boot/seed.js.map +1 -1
- package/dist/boot/statement-drift.d.ts +4 -3
- package/dist/boot/statement-drift.d.ts.map +1 -1
- package/dist/boot/statement-drift.js.map +1 -1
- package/dist/boot/together.d.ts +8 -4
- package/dist/boot/together.d.ts.map +1 -1
- package/dist/boot/together.js +60 -27
- package/dist/boot/together.js.map +1 -1
- package/dist/builtin/Carry.d.ts +29 -0
- package/dist/builtin/Carry.d.ts.map +1 -0
- package/dist/builtin/Carry.js +46 -0
- package/dist/builtin/Carry.js.map +1 -0
- package/dist/builtin/LogLevel.d.ts +2 -0
- package/dist/builtin/LogLevel.d.ts.map +1 -0
- package/dist/builtin/LogLevel.js +2 -0
- package/dist/builtin/LogLevel.js.map +1 -0
- package/dist/builtin/LogRecord.d.ts +12 -0
- package/dist/builtin/LogRecord.d.ts.map +1 -0
- package/dist/builtin/LogRecord.js +2 -0
- package/dist/builtin/LogRecord.js.map +1 -0
- package/dist/builtin/LogSink.d.ts +4 -0
- package/dist/builtin/LogSink.d.ts.map +1 -0
- package/dist/builtin/LogSink.js +2 -0
- package/dist/builtin/LogSink.js.map +1 -0
- package/dist/builtin/Logger.d.ts +27 -0
- package/dist/builtin/Logger.d.ts.map +1 -0
- package/dist/builtin/{logger.js → Logger.js} +1 -47
- package/dist/builtin/Logger.js.map +1 -0
- package/dist/builtin/LoggerOptions.d.ts +14 -0
- package/dist/builtin/LoggerOptions.d.ts.map +1 -0
- package/dist/builtin/LoggerOptions.js +2 -0
- package/dist/builtin/LoggerOptions.js.map +1 -0
- package/dist/builtin/Rendered.d.ts +21 -0
- package/dist/builtin/Rendered.d.ts.map +1 -0
- package/dist/builtin/Rendered.js +2 -0
- package/dist/builtin/Rendered.js.map +1 -0
- package/dist/contract.d.ts +34 -13
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +9 -6
- package/dist/contract.js.map +1 -1
- package/dist/crypto/CryptoPort.d.ts +12 -0
- package/dist/crypto/CryptoPort.d.ts.map +1 -0
- package/dist/crypto/CryptoPort.js +2 -0
- package/dist/crypto/CryptoPort.js.map +1 -0
- package/dist/crypto/PublicJwk.d.ts +8 -0
- package/dist/crypto/PublicJwk.d.ts.map +1 -0
- package/dist/crypto/PublicJwk.js +2 -0
- package/dist/crypto/PublicJwk.js.map +1 -0
- package/dist/crypto/Signer.d.ts +5 -0
- package/dist/crypto/Signer.d.ts.map +1 -0
- package/dist/crypto/Signer.js +2 -0
- package/dist/crypto/Signer.js.map +1 -0
- package/dist/crypto/Verifier.d.ts +6 -0
- package/dist/crypto/Verifier.d.ts.map +1 -0
- package/dist/crypto/Verifier.js +2 -0
- package/dist/crypto/Verifier.js.map +1 -0
- package/dist/crypto/node.d.ts +4 -1
- package/dist/crypto/node.d.ts.map +1 -1
- package/dist/crypto/node.js.map +1 -1
- package/dist/crypto/webcrypto.d.ts +4 -1
- package/dist/crypto/webcrypto.d.ts.map +1 -1
- package/dist/crypto/webcrypto.js.map +1 -1
- package/dist/define.d.ts +1 -1
- package/dist/descriptor/CollectorEntry.d.ts +12 -0
- package/dist/descriptor/CollectorEntry.d.ts.map +1 -0
- package/dist/descriptor/CollectorEntry.js +2 -0
- package/dist/descriptor/CollectorEntry.js.map +1 -0
- package/dist/descriptor/EntityEntry.d.ts +13 -0
- package/dist/descriptor/EntityEntry.d.ts.map +1 -0
- package/dist/descriptor/EntityEntry.js +2 -0
- package/dist/descriptor/EntityEntry.js.map +1 -0
- package/dist/descriptor/ExtensionEntry.d.ts +20 -0
- package/dist/descriptor/ExtensionEntry.d.ts.map +1 -0
- package/dist/descriptor/ExtensionEntry.js +2 -0
- package/dist/descriptor/ExtensionEntry.js.map +1 -0
- package/dist/descriptor/FrondDescriptor.d.ts +61 -0
- package/dist/descriptor/FrondDescriptor.d.ts.map +1 -0
- package/dist/descriptor/{frond.js → FrondDescriptor.js} +1 -1
- package/dist/descriptor/FrondDescriptor.js.map +1 -0
- package/dist/descriptor/FrondSource.d.ts +8 -0
- package/dist/descriptor/FrondSource.d.ts.map +1 -0
- package/dist/descriptor/FrondSource.js +2 -0
- package/dist/descriptor/FrondSource.js.map +1 -0
- package/dist/descriptor/Fronds.d.ts +2 -1
- package/dist/descriptor/Fronds.d.ts.map +1 -1
- package/dist/descriptor/Fronds.js.map +1 -1
- package/dist/descriptor/HandlerEntry.d.ts +27 -0
- package/dist/descriptor/HandlerEntry.d.ts.map +1 -0
- package/dist/descriptor/HandlerEntry.js +2 -0
- package/dist/descriptor/HandlerEntry.js.map +1 -0
- package/dist/descriptor/MiddlewareEntry.d.ts +17 -0
- package/dist/descriptor/MiddlewareEntry.d.ts.map +1 -0
- package/dist/descriptor/MiddlewareEntry.js +2 -0
- package/dist/descriptor/MiddlewareEntry.js.map +1 -0
- package/dist/descriptor/PresenterEntry.d.ts +23 -0
- package/dist/descriptor/PresenterEntry.d.ts.map +1 -0
- package/dist/descriptor/PresenterEntry.js +2 -0
- package/dist/descriptor/PresenterEntry.js.map +1 -0
- package/dist/descriptor/PresenterFieldMeta.d.ts +14 -0
- package/dist/descriptor/PresenterFieldMeta.d.ts.map +1 -0
- package/dist/descriptor/PresenterFieldMeta.js +2 -0
- package/dist/descriptor/PresenterFieldMeta.js.map +1 -0
- package/dist/descriptor/ProviderEntry.d.ts +19 -0
- package/dist/descriptor/ProviderEntry.d.ts.map +1 -0
- package/dist/descriptor/ProviderEntry.js +2 -0
- package/dist/descriptor/ProviderEntry.js.map +1 -0
- package/dist/descriptor/SeedEntry.d.ts +11 -0
- package/dist/descriptor/SeedEntry.d.ts.map +1 -0
- package/dist/descriptor/SeedEntry.js +2 -0
- package/dist/descriptor/SeedEntry.js.map +1 -0
- package/dist/descriptor/SeedFactory.d.ts +3 -0
- package/dist/descriptor/SeedFactory.d.ts.map +1 -0
- package/dist/descriptor/SeedFactory.js +2 -0
- package/dist/descriptor/SeedFactory.js.map +1 -0
- package/dist/descriptor/bases.d.ts +17 -0
- package/dist/descriptor/bases.d.ts.map +1 -0
- package/dist/descriptor/bases.js +26 -0
- package/dist/descriptor/bases.js.map +1 -0
- package/dist/descriptor/index.d.ts +22 -6
- package/dist/descriptor/index.d.ts.map +1 -1
- package/dist/descriptor/index.js +19 -5
- package/dist/descriptor/index.js.map +1 -1
- package/dist/descriptor/surface.d.ts +3 -2
- package/dist/descriptor/surface.d.ts.map +1 -1
- package/dist/descriptor/surface.js +1 -1
- package/dist/descriptor/surface.js.map +1 -1
- package/dist/diagnostic.d.ts +33 -0
- package/dist/diagnostic.d.ts.map +1 -0
- package/dist/diagnostic.js +12 -0
- package/dist/diagnostic.js.map +1 -0
- package/dist/dispatch/ArgumentResolver.d.ts +2 -5
- package/dist/dispatch/ArgumentResolver.d.ts.map +1 -1
- package/dist/dispatch/ArgumentResolver.js.map +1 -1
- package/dist/dispatch/CollectorLookup.d.ts +3 -0
- package/dist/dispatch/CollectorLookup.d.ts.map +1 -0
- package/dist/dispatch/CollectorLookup.js +2 -0
- package/dist/dispatch/CollectorLookup.js.map +1 -0
- package/dist/dispatch/CollectorResolver.d.ts +5 -0
- package/dist/dispatch/CollectorResolver.d.ts.map +1 -0
- package/dist/dispatch/CollectorResolver.js +2 -0
- package/dist/dispatch/CollectorResolver.js.map +1 -0
- package/dist/dispatch/DispatchEvent.d.ts +3 -4
- package/dist/dispatch/DispatchEvent.d.ts.map +1 -1
- package/dist/dispatch/DispatchEvent.js.map +1 -1
- package/dist/dispatch/DispatchLifecycle.d.ts +2 -1
- package/dist/dispatch/DispatchLifecycle.d.ts.map +1 -1
- package/dist/dispatch/DispatchLifecycle.js.map +1 -1
- package/dist/dispatch/DispatchObserver.d.ts +3 -0
- package/dist/dispatch/DispatchObserver.d.ts.map +1 -0
- package/dist/dispatch/DispatchObserver.js +2 -0
- package/dist/dispatch/DispatchObserver.js.map +1 -0
- package/dist/dispatch/DispatchPort.d.ts +1 -1
- package/dist/dispatch/DispatchStage.d.ts +2 -0
- package/dist/dispatch/DispatchStage.d.ts.map +1 -0
- package/dist/dispatch/DispatchStage.js +2 -0
- package/dist/dispatch/DispatchStage.js.map +1 -0
- package/dist/dispatch/Dispatcher.d.ts +1 -1
- package/dist/dispatch/Facade.d.ts +25 -0
- package/dist/dispatch/Facade.d.ts.map +1 -0
- package/dist/dispatch/Facade.js +2 -0
- package/dist/dispatch/Facade.js.map +1 -0
- package/dist/dispatch/GuardReport.d.ts +9 -0
- package/dist/dispatch/GuardReport.d.ts.map +1 -0
- package/dist/dispatch/GuardReport.js +2 -0
- package/dist/dispatch/GuardReport.js.map +1 -0
- package/dist/dispatch/HandlerFacade.d.ts +9 -28
- package/dist/dispatch/HandlerFacade.d.ts.map +1 -1
- package/dist/dispatch/HandlerFacade.js +19 -19
- package/dist/dispatch/HandlerFacade.js.map +1 -1
- package/dist/dispatch/InFlight.d.ts.map +1 -1
- package/dist/dispatch/InFlight.js +2 -1
- package/dist/dispatch/InFlight.js.map +1 -1
- package/dist/dispatch/LocalRoutePolicy.d.ts +1 -1
- package/dist/dispatch/LocalRoutePolicy.d.ts.map +1 -1
- package/dist/dispatch/LocalRoutePolicy.js +2 -1
- package/dist/dispatch/LocalRoutePolicy.js.map +1 -1
- package/dist/dispatch/OperationRoute.d.ts +2 -2
- package/dist/dispatch/OperationRoute.d.ts.map +1 -1
- package/dist/dispatch/OperationRoute.js.map +1 -1
- package/dist/dispatch/PresenterArgs.d.ts +2 -0
- package/dist/dispatch/PresenterArgs.d.ts.map +1 -0
- package/dist/dispatch/PresenterArgs.js +2 -0
- package/dist/dispatch/PresenterArgs.js.map +1 -0
- package/dist/dispatch/PresenterExecutor.d.ts +1 -1
- package/dist/dispatch/PresenterExecutor.d.ts.map +1 -1
- package/dist/dispatch/PresenterExecutor.js +2 -1
- package/dist/dispatch/PresenterExecutor.js.map +1 -1
- package/dist/dispatch/Route.d.ts +3 -2
- package/dist/dispatch/Route.d.ts.map +1 -1
- package/dist/dispatch/RouteExecution.d.ts +3 -0
- package/dist/dispatch/RouteExecution.d.ts.map +1 -0
- package/dist/dispatch/RouteExecution.js +2 -0
- package/dist/dispatch/RouteExecution.js.map +1 -0
- package/dist/dispatch/RoutePolicy.d.ts +1 -1
- package/dist/dispatch/StorageGuard.d.ts +6 -12
- package/dist/dispatch/StorageGuard.d.ts.map +1 -1
- package/dist/dispatch/StorageGuard.js +12 -11
- package/dist/dispatch/StorageGuard.js.map +1 -1
- package/dist/dispatch/presenterArguments.d.ts +3 -3
- package/dist/dispatch/presenterArguments.d.ts.map +1 -1
- package/dist/dispatch/routeNotFound.d.ts +2 -2
- package/dist/dispatch/routeNotFound.d.ts.map +1 -1
- package/dist/dispatch/routeNotFound.js +2 -1
- package/dist/dispatch/routeNotFound.js.map +1 -1
- package/dist/dispatch/validateInput.d.ts +1 -1
- package/dist/dispatch/validateInput.d.ts.map +1 -1
- package/dist/dispatch/validateInput.js +2 -1
- package/dist/dispatch/validateInput.js.map +1 -1
- package/dist/entry/facade.js +1 -1
- package/dist/entry/transport.d.ts +1 -1
- package/dist/entry/transport.d.ts.map +1 -1
- package/dist/entry/transport.js +1 -1
- package/dist/index.d.ts +94 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -13
- package/dist/index.js.map +1 -1
- package/dist/node.d.ts +2 -2
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +2 -2
- package/dist/node.js.map +1 -1
- package/dist/prefab/AggregateConstructor.d.ts +8 -0
- package/dist/prefab/AggregateConstructor.d.ts.map +1 -0
- package/dist/prefab/AggregateConstructor.js +2 -0
- package/dist/prefab/AggregateConstructor.js.map +1 -0
- package/dist/prefab/AggregateOf.d.ts +7 -0
- package/dist/prefab/AggregateOf.d.ts.map +1 -0
- package/dist/prefab/AggregateOf.js +2 -0
- package/dist/prefab/AggregateOf.js.map +1 -0
- package/dist/prefab/AggregateShape.d.ts +9 -0
- package/dist/prefab/AggregateShape.d.ts.map +1 -0
- package/dist/prefab/AggregateShape.js +2 -0
- package/dist/prefab/AggregateShape.js.map +1 -0
- package/dist/prefab/{crud.d.ts → CrudConstructor.d.ts} +5 -21
- package/dist/prefab/CrudConstructor.d.ts.map +1 -0
- package/dist/prefab/{crud.js → CrudConstructor.js} +6 -3
- package/dist/prefab/CrudConstructor.js.map +1 -0
- package/dist/prefab/CrudOpName.d.ts +3 -0
- package/dist/prefab/CrudOpName.d.ts.map +1 -0
- package/dist/prefab/CrudOpName.js +2 -0
- package/dist/prefab/CrudOpName.js.map +1 -0
- package/dist/prefab/CrudOps.d.ts +20 -0
- package/dist/prefab/CrudOps.d.ts.map +1 -0
- package/dist/prefab/CrudOps.js +2 -0
- package/dist/prefab/CrudOps.js.map +1 -0
- package/dist/prefab/CrudViews.d.ts +5 -0
- package/dist/prefab/CrudViews.d.ts.map +1 -0
- package/dist/prefab/CrudViews.js +2 -0
- package/dist/prefab/CrudViews.js.map +1 -0
- package/dist/prefab/MirrorConstructor.d.ts +9 -0
- package/dist/prefab/MirrorConstructor.d.ts.map +1 -0
- package/dist/prefab/{mirror.js → MirrorConstructor.js} +1 -1
- package/dist/prefab/MirrorConstructor.js.map +1 -0
- package/dist/prefab/MirrorOf.d.ts +19 -0
- package/dist/prefab/MirrorOf.d.ts.map +1 -0
- package/dist/prefab/MirrorOf.js +2 -0
- package/dist/prefab/MirrorOf.js.map +1 -0
- package/dist/prefab/Refreshed.d.ts +10 -0
- package/dist/prefab/Refreshed.d.ts.map +1 -0
- package/dist/prefab/Refreshed.js +2 -0
- package/dist/prefab/Refreshed.js.map +1 -0
- package/dist/prefab/RepositoryConstructor.d.ts +15 -0
- package/dist/prefab/RepositoryConstructor.d.ts.map +1 -0
- package/dist/prefab/{repository.js → RepositoryConstructor.js} +1 -1
- package/dist/prefab/RepositoryConstructor.js.map +1 -0
- package/dist/prefab/RepositoryOf.d.ts +7 -0
- package/dist/prefab/RepositoryOf.d.ts.map +1 -0
- package/dist/prefab/RepositoryOf.js +2 -0
- package/dist/prefab/RepositoryOf.js.map +1 -0
- package/dist/scan.d.ts +3 -22
- package/dist/scan.d.ts.map +1 -1
- package/dist/storage/{criterion.d.ts → Comparison.d.ts} +2 -3
- package/dist/storage/Comparison.d.ts.map +1 -0
- package/dist/storage/{criterion.js → Comparison.js} +1 -2
- package/dist/storage/Comparison.js.map +1 -0
- package/dist/storage/ComparisonName.d.ts +3 -0
- package/dist/storage/ComparisonName.d.ts.map +1 -0
- package/dist/storage/ComparisonName.js +2 -0
- package/dist/storage/ComparisonName.js.map +1 -0
- package/dist/storage/ListOptions.d.ts +23 -0
- package/dist/storage/ListOptions.d.ts.map +1 -0
- package/dist/storage/ListOptions.js +2 -0
- package/dist/storage/ListOptions.js.map +1 -0
- package/dist/storage/ListResult.d.ts +10 -0
- package/dist/storage/ListResult.d.ts.map +1 -0
- package/dist/storage/ListResult.js +2 -0
- package/dist/storage/ListResult.js.map +1 -0
- package/dist/storage/SelectOption.d.ts +6 -0
- package/dist/storage/SelectOption.d.ts.map +1 -0
- package/dist/storage/SelectOption.js +2 -0
- package/dist/storage/SelectOption.js.map +1 -0
- package/dist/storage/{port.d.ts → Storage.d.ts} +4 -47
- package/dist/storage/Storage.d.ts.map +1 -0
- package/dist/storage/{port.js → Storage.js} +1 -1
- package/dist/storage/Storage.js.map +1 -0
- package/dist/storage/StorageFactory.d.ts +8 -0
- package/dist/storage/StorageFactory.d.ts.map +1 -0
- package/dist/storage/StorageFactory.js +2 -0
- package/dist/storage/StorageFactory.js.map +1 -0
- package/dist/storage/{store.d.ts → Store.d.ts} +3 -5
- package/dist/storage/Store.d.ts.map +1 -0
- package/dist/storage/{store.js → Store.js} +3 -4
- package/dist/storage/Store.js.map +1 -0
- package/dist/storage/Together.d.ts +8 -0
- package/dist/storage/Together.d.ts.map +1 -0
- package/dist/storage/Together.js +2 -0
- package/dist/storage/Together.js.map +1 -0
- package/dist/storage/Values.d.ts +3 -0
- package/dist/storage/Values.d.ts.map +1 -0
- package/dist/storage/Values.js +2 -0
- package/dist/storage/Values.js.map +1 -0
- package/dist/verify.d.ts +6 -15
- package/dist/verify.d.ts.map +1 -1
- package/dist/verify.js +5 -5
- package/dist/verify.js.map +1 -1
- package/dist/wire/Addresses.d.ts +16 -0
- package/dist/wire/Addresses.d.ts.map +1 -0
- package/dist/wire/Addresses.js +2 -0
- package/dist/wire/Addresses.js.map +1 -0
- package/dist/wire/Answer.d.ts +3 -0
- package/dist/wire/Answer.d.ts.map +1 -0
- package/dist/wire/Answer.js +2 -0
- package/dist/wire/Answer.js.map +1 -0
- package/dist/wire/AnyHandler.d.ts +3 -0
- package/dist/wire/AnyHandler.d.ts.map +1 -0
- package/dist/wire/AnyHandler.js +2 -0
- package/dist/wire/AnyHandler.js.map +1 -0
- package/dist/wire/AppMiddleware.d.ts +8 -0
- package/dist/wire/AppMiddleware.d.ts.map +1 -0
- package/dist/wire/{middleware.js → AppMiddleware.js} +1 -2
- package/dist/wire/AppMiddleware.js.map +1 -0
- package/dist/wire/AppNext.d.ts +2 -0
- package/dist/wire/AppNext.d.ts.map +1 -0
- package/dist/wire/AppNext.js +2 -0
- package/dist/wire/AppNext.js.map +1 -0
- package/dist/wire/Call.d.ts +10 -0
- package/dist/wire/Call.d.ts.map +1 -0
- package/dist/wire/Call.js +12 -0
- package/dist/wire/Call.js.map +1 -0
- package/dist/wire/CallPage.d.ts +9 -0
- package/dist/wire/CallPage.d.ts.map +1 -0
- package/dist/wire/CallPage.js +2 -0
- package/dist/wire/CallPage.js.map +1 -0
- package/dist/wire/{CallLog.d.ts → CallRecord.d.ts} +3 -10
- package/dist/wire/CallRecord.d.ts.map +1 -0
- package/dist/wire/CallRecord.js +2 -0
- package/dist/wire/CallRecord.js.map +1 -0
- package/dist/wire/{emit.d.ts → Emit.d.ts} +1 -18
- package/dist/wire/Emit.d.ts.map +1 -0
- package/dist/wire/{emit.js → Emit.js} +1 -6
- package/dist/wire/Emit.js.map +1 -0
- package/dist/wire/ErrorCode.d.ts +23 -0
- package/dist/wire/ErrorCode.d.ts.map +1 -0
- package/dist/wire/ErrorCode.js +30 -0
- package/dist/wire/ErrorCode.js.map +1 -0
- package/dist/wire/Facade.d.ts +10 -0
- package/dist/wire/Facade.d.ts.map +1 -0
- package/dist/wire/Facade.js +9 -0
- package/dist/wire/Facade.js.map +1 -0
- package/dist/wire/FacadeName.d.ts +14 -0
- package/dist/wire/FacadeName.d.ts.map +1 -0
- package/dist/wire/FacadeName.js +2 -0
- package/dist/wire/FacadeName.js.map +1 -0
- package/dist/wire/Fact.d.ts +9 -0
- package/dist/wire/Fact.d.ts.map +1 -0
- package/dist/wire/Fact.js +2 -0
- package/dist/wire/Fact.js.map +1 -0
- package/dist/wire/FougereError.d.ts +35 -0
- package/dist/wire/FougereError.d.ts.map +1 -0
- package/dist/wire/{errors.js → FougereError.js} +9 -32
- package/dist/wire/FougereError.js.map +1 -0
- package/dist/wire/FougereErrorOptions.d.ts +10 -0
- package/dist/wire/FougereErrorOptions.d.ts.map +1 -0
- package/dist/wire/FougereErrorOptions.js +2 -0
- package/dist/wire/FougereErrorOptions.js.map +1 -0
- package/dist/wire/FougereHandlers.d.ts +10 -0
- package/dist/wire/FougereHandlers.d.ts.map +1 -0
- package/dist/wire/FougereHandlers.js +2 -0
- package/dist/wire/FougereHandlers.js.map +1 -0
- package/dist/wire/FougereOperations.d.ts +4 -0
- package/dist/wire/FougereOperations.d.ts.map +1 -0
- package/dist/wire/FougereOperations.js +2 -0
- package/dist/wire/FougereOperations.js.map +1 -0
- package/dist/wire/FrondCall.d.ts +10 -0
- package/dist/wire/FrondCall.d.ts.map +1 -0
- package/dist/wire/FrondCall.js +2 -0
- package/dist/wire/FrondCall.js.map +1 -0
- package/dist/wire/HandlerOf.d.ts +10 -0
- package/dist/wire/HandlerOf.d.ts.map +1 -0
- package/dist/wire/HandlerOf.js +2 -0
- package/dist/wire/HandlerOf.js.map +1 -0
- package/dist/wire/Invocation.d.ts +2 -10
- package/dist/wire/Invocation.d.ts.map +1 -1
- package/dist/wire/Invocation.js.map +1 -1
- package/dist/wire/InvocationContext.d.ts +10 -0
- package/dist/wire/InvocationContext.d.ts.map +1 -0
- package/dist/wire/InvocationContext.js +2 -0
- package/dist/wire/InvocationContext.js.map +1 -0
- package/dist/wire/{middleware.d.ts → OperationContext.d.ts} +2 -9
- package/dist/wire/OperationContext.d.ts.map +1 -0
- package/dist/wire/OperationContext.js +2 -0
- package/dist/wire/OperationContext.js.map +1 -0
- package/dist/wire/{operation.d.ts → OperationContract.d.ts} +15 -12
- package/dist/wire/OperationContract.d.ts.map +1 -0
- package/dist/wire/{operation.js → OperationContract.js} +1 -1
- package/dist/wire/OperationContract.js.map +1 -0
- package/dist/wire/OperationKind.d.ts +2 -0
- package/dist/wire/OperationKind.d.ts.map +1 -0
- package/dist/wire/OperationKind.js +2 -0
- package/dist/wire/OperationKind.js.map +1 -0
- package/dist/wire/OperationKindInference.d.ts +8 -0
- package/dist/wire/OperationKindInference.d.ts.map +1 -0
- package/dist/wire/OperationKindInference.js +2 -0
- package/dist/wire/OperationKindInference.js.map +1 -0
- package/dist/wire/OperationsMap.d.ts +7 -0
- package/dist/wire/OperationsMap.d.ts.map +1 -0
- package/dist/wire/OperationsMap.js +7 -0
- package/dist/wire/OperationsMap.js.map +1 -0
- package/dist/wire/Param.d.ts +8 -0
- package/dist/wire/Param.d.ts.map +1 -0
- package/dist/wire/Param.js +2 -0
- package/dist/wire/Param.js.map +1 -0
- package/dist/wire/PartialInvocation.d.ts +3 -0
- package/dist/wire/PartialInvocation.d.ts.map +1 -0
- package/dist/wire/PartialInvocation.js +2 -0
- package/dist/wire/PartialInvocation.js.map +1 -0
- package/dist/wire/Pipe.d.ts +10 -0
- package/dist/wire/Pipe.d.ts.map +1 -0
- package/dist/wire/Pipe.js +2 -0
- package/dist/wire/Pipe.js.map +1 -0
- package/dist/wire/Refused.d.ts +10 -0
- package/dist/wire/Refused.d.ts.map +1 -0
- package/dist/wire/Refused.js +2 -0
- package/dist/wire/Refused.js.map +1 -0
- package/dist/wire/RouteAddress.d.ts +1 -7
- package/dist/wire/RouteAddress.d.ts.map +1 -1
- package/dist/wire/RouteAddress.js.map +1 -1
- package/dist/wire/RouteAddressInput.d.ts +6 -0
- package/dist/wire/RouteAddressInput.d.ts.map +1 -0
- package/dist/wire/RouteAddressInput.js +2 -0
- package/dist/wire/RouteAddressInput.js.map +1 -0
- package/dist/wire/RouteKind.d.ts +3 -0
- package/dist/wire/RouteKind.d.ts.map +1 -0
- package/dist/wire/RouteKind.js +2 -0
- package/dist/wire/RouteKind.js.map +1 -0
- package/dist/wire/Rows.d.ts +8 -0
- package/dist/wire/Rows.d.ts.map +1 -0
- package/dist/wire/Rows.js +2 -0
- package/dist/wire/Rows.js.map +1 -0
- package/dist/wire/RpcAnswer.d.ts +6 -0
- package/dist/wire/RpcAnswer.d.ts.map +1 -0
- package/dist/wire/RpcAnswer.js +3 -0
- package/dist/wire/RpcAnswer.js.map +1 -0
- package/dist/wire/Signature.d.ts +13 -0
- package/dist/wire/Signature.d.ts.map +1 -0
- package/dist/wire/Signature.js +2 -0
- package/dist/wire/Signature.js.map +1 -0
- package/dist/wire/SignedCall.d.ts +12 -0
- package/dist/wire/SignedCall.d.ts.map +1 -0
- package/dist/wire/SignedCall.js +3 -0
- package/dist/wire/SignedCall.js.map +1 -0
- package/dist/wire/Transport.d.ts +5 -0
- package/dist/wire/Transport.d.ts.map +1 -0
- package/dist/wire/Transport.js +2 -0
- package/dist/wire/Transport.js.map +1 -0
- package/dist/wire/{signature.d.ts → TypeRef.d.ts} +1 -18
- package/dist/wire/TypeRef.d.ts.map +1 -0
- package/dist/wire/TypeRef.js +2 -0
- package/dist/wire/TypeRef.js.map +1 -0
- package/dist/wire/binding.d.ts +1 -1
- package/dist/wire/binding.d.ts.map +1 -1
- package/dist/wire/card/CardOp.d.ts +22 -0
- package/dist/wire/card/CardOp.d.ts.map +1 -0
- package/dist/wire/card/CardOp.js +2 -0
- package/dist/wire/card/CardOp.js.map +1 -0
- package/dist/wire/card/IdentityCard.d.ts +22 -0
- package/dist/wire/card/IdentityCard.d.ts.map +1 -0
- package/dist/wire/card/IdentityCard.js +25 -0
- package/dist/wire/card/IdentityCard.js.map +1 -0
- package/dist/wire/drift.d.ts +6 -6
- package/dist/wire/drift.d.ts.map +1 -1
- package/dist/wire/drift.js +18 -18
- package/dist/wire/drift.js.map +1 -1
- package/dist/wire/http-error.d.ts +1 -2
- package/dist/wire/http-error.d.ts.map +1 -1
- package/dist/wire/http-error.js +4 -3
- package/dist/wire/http-error.js.map +1 -1
- package/dist/wire/loggerMiddleware.d.ts +2 -2
- package/dist/wire/loggerMiddleware.d.ts.map +1 -1
- package/dist/wire/refusals.d.ts +33 -0
- package/dist/wire/refusals.d.ts.map +1 -0
- package/dist/wire/refusals.js +44 -0
- package/dist/wire/refusals.js.map +1 -0
- package/dist/wire/topology/DeclaredEdge.d.ts +6 -0
- package/dist/wire/topology/DeclaredEdge.d.ts.map +1 -0
- package/dist/wire/topology/DeclaredEdge.js +2 -0
- package/dist/wire/topology/DeclaredEdge.js.map +1 -0
- package/dist/wire/topology/DeclaredFrond.d.ts +11 -0
- package/dist/wire/topology/DeclaredFrond.d.ts.map +1 -0
- package/dist/wire/topology/DeclaredFrond.js +2 -0
- package/dist/wire/topology/DeclaredFrond.js.map +1 -0
- package/dist/wire/topology/DeclaredTopology.d.ts +12 -0
- package/dist/wire/topology/DeclaredTopology.d.ts.map +1 -0
- package/dist/wire/topology/DeclaredTopology.js +2 -0
- package/dist/wire/topology/DeclaredTopology.js.map +1 -0
- package/dist/wire/topology/Edge.d.ts +8 -0
- package/dist/wire/topology/Edge.d.ts.map +1 -0
- package/dist/wire/topology/Edge.js +2 -0
- package/dist/wire/topology/Edge.js.map +1 -0
- package/dist/wire/topology/FrondPlacement.d.ts +8 -0
- package/dist/wire/topology/FrondPlacement.d.ts.map +1 -0
- package/dist/wire/topology/FrondPlacement.js +2 -0
- package/dist/wire/topology/FrondPlacement.js.map +1 -0
- package/dist/wire/topology/TopologyReport.d.ts +14 -0
- package/dist/wire/topology/TopologyReport.d.ts.map +1 -0
- package/dist/wire/topology/TopologyReport.js +2 -0
- package/dist/wire/topology/TopologyReport.js.map +1 -0
- package/package.json +4 -4
- package/src/AdapterConfig.ts +11 -0
- package/src/AnswerFor.ts +7 -0
- package/src/Binding.ts +4 -0
- package/src/{identity.ts → CallIdentity.ts} +7 -25
- package/src/Constraint.ts +2 -0
- package/src/{conventions.ts → Conventions.ts} +20 -9
- package/src/ConventionsInput.ts +8 -0
- package/src/Ctor.ts +2 -0
- package/src/Declared.ts +8 -0
- package/src/DeclaredHandler.ts +18 -0
- package/src/DeclaredSubject.ts +6 -0
- package/src/{graph.ts → DomainCluster.ts} +2 -12
- package/src/EffectiveCollector.ts +7 -0
- package/src/EffectiveOperation.ts +62 -0
- package/src/{effective-operation.ts → EffectiveOperationModel.ts} +50 -106
- package/src/EffectiveOperationOptions.ts +7 -0
- package/src/EffectiveOperationSemantics.ts +7 -0
- package/src/EffectiveOperationsMap.ts +3 -0
- package/src/EffectiveParameter.ts +13 -0
- package/src/EntityNode.ts +6 -0
- package/src/{config-loader.ts → FougereConfig.ts} +15 -21
- package/src/FougereNames.ts +2 -0
- package/src/FougerePorts.ts +7 -0
- package/src/{frond-config.ts → FrondConfig.ts} +8 -46
- package/src/{declare.ts → FrondDeclaration.ts} +14 -35
- package/src/FrondIdentity.ts +7 -0
- package/src/NameOf.ts +12 -0
- package/src/OperationOverride.ts +38 -0
- package/src/PortChoice.ts +13 -0
- package/src/{source.ts → Source.ts} +4 -21
- package/src/SourceConfig.ts +10 -0
- package/src/SourceView.ts +7 -0
- package/src/VerifiedCall.ts +7 -0
- package/src/boot/App.ts +71 -0
- package/src/boot/AppLifecycle.ts +2 -20
- package/src/boot/AuthConfig.ts +14 -0
- package/src/boot/AuthContext.ts +12 -0
- package/src/boot/AuthRuntime.ts +19 -0
- package/src/boot/CreateAppOptions.ts +81 -0
- package/src/boot/Emissions.ts +86 -56
- package/src/boot/Extension.ts +20 -0
- package/src/boot/apply.ts +2 -2
- package/src/boot/bootstrap.ts +101 -70
- package/src/boot/card.ts +15 -11
- package/src/boot/declared.ts +91 -0
- package/src/boot/frame.ts +2 -2
- package/src/boot/hosted.ts +1 -1
- package/src/boot/install.ts +42 -30
- package/src/boot/ownership.ts +104 -43
- package/src/boot/ports.ts +52 -41
- package/src/boot/remote.ts +24 -17
- package/src/boot/runner.ts +2 -2
- package/src/boot/seed.ts +12 -10
- package/src/boot/statement-drift.ts +6 -5
- package/src/boot/together.ts +77 -37
- package/src/builtin/Carry.ts +49 -0
- package/src/builtin/LogLevel.ts +1 -0
- package/src/builtin/LogRecord.ts +12 -0
- package/src/builtin/LogSink.ts +4 -0
- package/src/builtin/{logger.ts → Logger.ts} +5 -98
- package/src/builtin/LoggerOptions.ts +14 -0
- package/src/builtin/Rendered.ts +21 -0
- package/src/contract.ts +35 -13
- package/src/crypto/CryptoPort.ts +12 -0
- package/src/crypto/PublicJwk.ts +7 -0
- package/src/crypto/Signer.ts +4 -0
- package/src/crypto/Verifier.ts +5 -0
- package/src/crypto/node.ts +4 -1
- package/src/crypto/webcrypto.ts +4 -1
- package/src/define.ts +1 -1
- package/src/descriptor/CollectorEntry.ts +11 -0
- package/src/descriptor/EntityEntry.ts +13 -0
- package/src/descriptor/ExtensionEntry.ts +15 -0
- package/src/descriptor/FrondDescriptor.ts +58 -0
- package/src/descriptor/FrondSource.ts +7 -0
- package/src/descriptor/Fronds.ts +2 -1
- package/src/descriptor/HandlerEntry.ts +27 -0
- package/src/descriptor/MiddlewareEntry.ts +16 -0
- package/src/descriptor/PresenterEntry.ts +23 -0
- package/src/descriptor/PresenterFieldMeta.ts +14 -0
- package/src/descriptor/ProviderEntry.ts +18 -0
- package/src/descriptor/SeedEntry.ts +11 -0
- package/src/descriptor/SeedFactory.ts +2 -0
- package/src/descriptor/bases.ts +30 -0
- package/src/descriptor/index.ts +24 -6
- package/src/descriptor/surface.ts +3 -2
- package/src/diagnostic.ts +41 -0
- package/src/dispatch/ArgumentResolver.ts +2 -7
- package/src/dispatch/CollectorLookup.ts +3 -0
- package/src/dispatch/CollectorResolver.ts +5 -0
- package/src/dispatch/DispatchEvent.ts +3 -6
- package/src/dispatch/DispatchLifecycle.ts +2 -1
- package/src/dispatch/DispatchObserver.ts +3 -0
- package/src/dispatch/DispatchPort.ts +1 -1
- package/src/dispatch/DispatchStage.ts +1 -0
- package/src/dispatch/Dispatcher.ts +1 -1
- package/src/dispatch/Facade.ts +25 -0
- package/src/dispatch/GuardReport.ts +9 -0
- package/src/dispatch/HandlerFacade.ts +28 -46
- package/src/dispatch/InFlight.ts +2 -1
- package/src/dispatch/LocalRoutePolicy.ts +3 -2
- package/src/dispatch/OperationRoute.ts +2 -3
- package/src/dispatch/PresenterArgs.ts +1 -0
- package/src/dispatch/PresenterExecutor.ts +3 -3
- package/src/dispatch/Route.ts +3 -2
- package/src/dispatch/RouteExecution.ts +3 -0
- package/src/dispatch/RoutePolicy.ts +1 -1
- package/src/dispatch/StorageGuard.ts +13 -19
- package/src/dispatch/presenterArguments.ts +3 -3
- package/src/dispatch/routeNotFound.ts +3 -2
- package/src/dispatch/validateInput.ts +3 -2
- package/src/entry/facade.ts +2 -2
- package/src/entry/transport.ts +2 -2
- package/src/index.ts +102 -52
- package/src/node.ts +2 -2
- package/src/prefab/AggregateConstructor.ts +9 -0
- package/src/prefab/AggregateOf.ts +6 -0
- package/src/prefab/AggregateShape.ts +7 -0
- package/src/prefab/{crud.ts → CrudConstructor.ts} +15 -20
- package/src/prefab/CrudOpName.ts +2 -0
- package/src/prefab/CrudOps.ts +24 -0
- package/src/prefab/CrudViews.ts +5 -0
- package/src/prefab/MirrorConstructor.ts +35 -0
- package/src/prefab/MirrorOf.ts +19 -0
- package/src/prefab/Refreshed.ts +9 -0
- package/src/prefab/{repository.ts → RepositoryConstructor.ts} +8 -24
- package/src/prefab/RepositoryOf.ts +7 -0
- package/src/scan.ts +3 -23
- package/src/storage/{criterion.ts → Comparison.ts} +1 -3
- package/src/storage/ComparisonName.ts +3 -0
- package/src/storage/ListOptions.ts +29 -0
- package/src/storage/ListResult.ts +9 -0
- package/src/storage/SelectOption.ts +6 -0
- package/src/storage/{port.ts → Storage.ts} +5 -56
- package/src/storage/StorageFactory.ts +8 -0
- package/src/storage/{store.ts → Store.ts} +5 -7
- package/src/storage/Together.ts +6 -0
- package/src/storage/Values.ts +2 -0
- package/src/verify.ts +12 -21
- package/src/wire/Addresses.ts +17 -0
- package/src/wire/Answer.ts +3 -0
- package/src/wire/AnyHandler.ts +2 -0
- package/src/wire/AppMiddleware.ts +24 -0
- package/src/wire/AppNext.ts +1 -0
- package/src/wire/Call.ts +15 -0
- package/src/wire/CallPage.ts +9 -0
- package/src/wire/{CallLog.ts → CallRecord.ts} +2 -10
- package/src/wire/{emit.ts → Emit.ts} +1 -24
- package/src/wire/ErrorCode.ts +33 -0
- package/src/wire/Facade.ts +28 -0
- package/src/wire/FacadeName.ts +13 -0
- package/src/wire/Fact.ts +8 -0
- package/src/wire/{errors.ts → FougereError.ts} +14 -53
- package/src/wire/FougereErrorOptions.ts +10 -0
- package/src/wire/FougereHandlers.ts +8 -0
- package/src/wire/FougereOperations.ts +2 -0
- package/src/wire/FrondCall.ts +9 -0
- package/src/wire/HandlerOf.ts +10 -0
- package/src/wire/Invocation.ts +2 -11
- package/src/wire/InvocationContext.ts +9 -0
- package/src/wire/OperationContext.ts +18 -0
- package/src/wire/{operation.ts → OperationContract.ts} +14 -23
- package/src/wire/OperationKind.ts +1 -0
- package/src/wire/OperationKindInference.ts +8 -0
- package/src/wire/OperationsMap.ts +14 -0
- package/src/wire/Param.ts +8 -0
- package/src/wire/PartialInvocation.ts +3 -0
- package/src/wire/Pipe.ts +9 -0
- package/src/wire/Refused.ts +13 -0
- package/src/wire/RouteAddress.ts +1 -8
- package/src/wire/RouteAddressInput.ts +5 -0
- package/src/wire/RouteKind.ts +2 -0
- package/src/wire/Rows.ts +7 -0
- package/src/wire/RpcAnswer.ts +7 -0
- package/src/wire/Signature.ts +13 -0
- package/src/wire/SignedCall.ts +12 -0
- package/src/wire/Transport.ts +5 -0
- package/src/wire/{signature.ts → TypeRef.ts} +0 -19
- package/src/wire/binding.ts +1 -1
- package/src/wire/card/CardOp.ts +22 -0
- package/src/wire/card/IdentityCard.ts +41 -0
- package/src/wire/drift.ts +22 -22
- package/src/wire/http-error.ts +4 -3
- package/src/wire/loggerMiddleware.ts +2 -2
- package/src/wire/refusals.ts +55 -0
- package/src/wire/topology/DeclaredEdge.ts +5 -0
- package/src/wire/topology/DeclaredFrond.ts +10 -0
- package/src/wire/topology/DeclaredTopology.ts +12 -0
- package/src/wire/topology/Edge.ts +7 -0
- package/src/wire/topology/FrondPlacement.ts +7 -0
- package/src/wire/topology/TopologyReport.ts +14 -0
- package/dist/boot/auth.d.ts +0 -43
- package/dist/boot/auth.d.ts.map +0 -1
- package/dist/boot/auth.js +0 -2
- package/dist/boot/auth.js.map +0 -1
- package/dist/boot/types.d.ts +0 -147
- package/dist/boot/types.d.ts.map +0 -1
- package/dist/boot/types.js +0 -2
- package/dist/boot/types.js.map +0 -1
- package/dist/builtin/logger.d.ts +0 -96
- package/dist/builtin/logger.d.ts.map +0 -1
- package/dist/builtin/logger.js.map +0 -1
- package/dist/config-loader.d.ts.map +0 -1
- package/dist/config-loader.js.map +0 -1
- package/dist/conventions.d.ts.map +0 -1
- package/dist/conventions.js.map +0 -1
- package/dist/crypto/port.d.ts +0 -26
- package/dist/crypto/port.d.ts.map +0 -1
- package/dist/crypto/port.js +0 -3
- package/dist/crypto/port.js.map +0 -1
- package/dist/declare.d.ts.map +0 -1
- package/dist/declare.js.map +0 -1
- package/dist/descriptor/frond.d.ts +0 -187
- package/dist/descriptor/frond.d.ts.map +0 -1
- package/dist/descriptor/frond.js.map +0 -1
- package/dist/effective-operation.d.ts +0 -93
- package/dist/effective-operation.d.ts.map +0 -1
- package/dist/effective-operation.js.map +0 -1
- package/dist/frond-config.d.ts +0 -71
- package/dist/frond-config.d.ts.map +0 -1
- package/dist/frond-config.js.map +0 -1
- package/dist/graph.d.ts.map +0 -1
- package/dist/graph.js.map +0 -1
- package/dist/identity.d.ts.map +0 -1
- package/dist/identity.js.map +0 -1
- package/dist/prefab/crud.d.ts.map +0 -1
- package/dist/prefab/crud.js.map +0 -1
- package/dist/prefab/mirror.d.ts +0 -33
- package/dist/prefab/mirror.d.ts.map +0 -1
- package/dist/prefab/mirror.js.map +0 -1
- package/dist/prefab/repository.d.ts +0 -40
- package/dist/prefab/repository.d.ts.map +0 -1
- package/dist/prefab/repository.js.map +0 -1
- package/dist/source.d.ts.map +0 -1
- package/dist/storage/criterion.d.ts.map +0 -1
- package/dist/storage/criterion.js.map +0 -1
- package/dist/storage/port.d.ts.map +0 -1
- package/dist/storage/port.js.map +0 -1
- package/dist/storage/store.d.ts.map +0 -1
- package/dist/storage/store.js.map +0 -1
- package/dist/wire/CallLog.d.ts.map +0 -1
- package/dist/wire/CallLog.js +0 -2
- package/dist/wire/CallLog.js.map +0 -1
- package/dist/wire/call.d.ts +0 -105
- package/dist/wire/call.d.ts.map +0 -1
- package/dist/wire/call.js +0 -47
- package/dist/wire/call.js.map +0 -1
- package/dist/wire/emit.d.ts.map +0 -1
- package/dist/wire/emit.js.map +0 -1
- package/dist/wire/errors.d.ts +0 -58
- package/dist/wire/errors.d.ts.map +0 -1
- package/dist/wire/errors.js.map +0 -1
- package/dist/wire/middleware.d.ts.map +0 -1
- package/dist/wire/middleware.js.map +0 -1
- package/dist/wire/operation.d.ts.map +0 -1
- package/dist/wire/operation.js.map +0 -1
- package/dist/wire/signature.d.ts.map +0 -1
- package/dist/wire/signature.js +0 -2
- package/dist/wire/signature.js.map +0 -1
- package/src/boot/auth.ts +0 -45
- package/src/boot/types.ts +0 -148
- package/src/crypto/port.ts +0 -29
- package/src/descriptor/frond.ts +0 -195
- package/src/prefab/mirror.ts +0 -60
- package/src/wire/call.ts +0 -150
- package/src/wire/middleware.ts +0 -43
package/src/boot/install.ts
CHANGED
|
@@ -1,27 +1,31 @@
|
|
|
1
1
|
/** Putting one frond into the app being built: its scope, what it serves, what it takes. */
|
|
2
2
|
import type { Container } from '@fougere/container';
|
|
3
3
|
import { lowerFirst, type Fields, type SchemaView } from '@fougere/schema';
|
|
4
|
-
import type { Logger } from '../builtin/
|
|
4
|
+
import type { Logger } from '../builtin/Logger.js';
|
|
5
5
|
import type { Dispatcher } from '../dispatch/Dispatcher.js';
|
|
6
6
|
import type { RouteRegistry } from '../dispatch/RouteRegistry.js';
|
|
7
7
|
import type { Emissions } from './Emissions.js';
|
|
8
|
-
import type {
|
|
9
|
-
import {
|
|
10
|
-
import
|
|
11
|
-
import type {
|
|
12
|
-
import type {
|
|
13
|
-
import type {
|
|
8
|
+
import type { EffectiveOperationModel } from '../EffectiveOperationModel.js';
|
|
9
|
+
import type { EffectiveOperationsMap } from '../EffectiveOperationsMap.js';
|
|
10
|
+
import { nameOf } from '../descriptor/FrondDescriptor.js';
|
|
11
|
+
import type { EntityEntry } from '../descriptor/EntityEntry.js';
|
|
12
|
+
import type { FrondDescriptor } from '../descriptor/FrondDescriptor.js';
|
|
13
|
+
import type { HandlerEntry } from '../descriptor/HandlerEntry.js';
|
|
14
|
+
import type { OperationsMap } from '../wire/OperationsMap.js';
|
|
15
|
+
import type { AppMiddleware } from '../wire/AppMiddleware.js';
|
|
16
|
+
import type { CreateAppOptions } from './CreateAppOptions.js';
|
|
14
17
|
import { registerFrames } from './together.js';
|
|
18
|
+
import type { Diagnostic } from '../diagnostic.js';
|
|
15
19
|
import { HandlerFacade } from '../dispatch/HandlerFacade.js';
|
|
16
20
|
import { targetOf } from '../prefab/prefab.js';
|
|
17
|
-
import { ownersOf,
|
|
21
|
+
import { ownersOf, sharedNames, storageInUserCode, crudOnOwned } from './ownership.js';
|
|
18
22
|
import { StorageGuard } from '../dispatch/StorageGuard.js';
|
|
19
23
|
import { portBindings, seamChains, wrapping, SEAMS } from './ports.js';
|
|
20
|
-
import {
|
|
21
|
-
import { inheritsCrud, subjectOf } from '../prefab/
|
|
22
|
-
import { repositoryKeyOf } from '../prefab/
|
|
23
|
-
import { storageKeyOf } from '../storage/
|
|
24
|
-
import { declares } from '../
|
|
24
|
+
import { contractsKeyOf, facadeKeyOf } from '../wire/Facade.js';
|
|
25
|
+
import { inheritsCrud, subjectOf } from '../prefab/CrudConstructor.js';
|
|
26
|
+
import { repositoryKeyOf } from '../prefab/RepositoryConstructor.js';
|
|
27
|
+
import { storageKeyOf } from '../storage/Storage.js';
|
|
28
|
+
import { declares } from '../Source.js';
|
|
25
29
|
import { presenterKeyOf } from '../prefab/presenter.js';
|
|
26
30
|
import { collectorKeyOf } from '../prefab/collector.js';
|
|
27
31
|
import { RouteAddress } from '../wire/RouteAddress.js';
|
|
@@ -39,12 +43,14 @@ export interface Assembly {
|
|
|
39
43
|
routeRegistry: RouteRegistry;
|
|
40
44
|
emissions: Emissions;
|
|
41
45
|
dispatcher: Dispatcher;
|
|
42
|
-
/** A
|
|
46
|
+
/** A facade under a named surface answers only what that surface serves. */
|
|
43
47
|
localDispatcher: Dispatcher;
|
|
44
48
|
/** Filled per façade key, read back by `operationsFor` and the identity card. */
|
|
45
49
|
effectiveByKey: Map<string, EffectiveOperationsMap>;
|
|
46
50
|
/** Every `ports:` key some frond actually settled — what is left is a typo. */
|
|
47
51
|
boundPorts: Set<string>;
|
|
52
|
+
/** Where a check writes what does not hold — collected across fronds, refused together. */
|
|
53
|
+
refused: Diagnostic[];
|
|
48
54
|
/** What the model resolved before the boot performed any side effect. */
|
|
49
55
|
operationModel: EffectiveOperationModel;
|
|
50
56
|
entityByName: Map<string, SchemaView>;
|
|
@@ -61,7 +67,7 @@ export interface Assembly {
|
|
|
61
67
|
export async function installFrond(frond: FrondDescriptor, assembly: Assembly): Promise<void> {
|
|
62
68
|
const {
|
|
63
69
|
container, routeRegistry, emissions, dispatcher, localDispatcher, effectiveByKey,
|
|
64
|
-
boundPorts, operationModel, entityByName, frondOf, contractsOf, getMiddlewares, use,
|
|
70
|
+
boundPorts, refused, operationModel, entityByName, frondOf, contractsOf, getMiddlewares, use,
|
|
65
71
|
log, options,
|
|
66
72
|
} = assembly;
|
|
67
73
|
|
|
@@ -69,7 +75,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
69
75
|
// register nothing locally — resolve() falls through to the remote façade.
|
|
70
76
|
if (options.remotes && frond.name in options.remotes) {
|
|
71
77
|
log.child(frond.name).info('declared remote — not hosted locally');
|
|
72
|
-
// Its
|
|
78
|
+
// Its facades answer elsewhere, but what they LISTEN to was read here.
|
|
73
79
|
for (const handler of frond.handlers) {
|
|
74
80
|
const key = facadeKeyOf(handler.address, handler.surface);
|
|
75
81
|
const operations = operationModel.forHandler(handler);
|
|
@@ -99,7 +105,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
99
105
|
if (frond.reads?.length && options.sourcesFactory) {
|
|
100
106
|
// Resolved across the WHOLE app, not this frond's own entities: a cross-source
|
|
101
107
|
// query joins entities from different fronds by definition — `Progress` here,
|
|
102
|
-
// `Book` next
|
|
108
|
+
// `Book` next facade — so restricting the list to its own would make it useless.
|
|
103
109
|
// Naming one IS the authorization; that is what the declaration is for.
|
|
104
110
|
const named = frond.reads
|
|
105
111
|
.map((name) => entityByName.get(lowerFirst(name)))
|
|
@@ -117,9 +123,10 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
117
123
|
|
|
118
124
|
// Who owns what, and the rule that makes owning mean something. Before anything is
|
|
119
125
|
// registered, so a bad line is named by this refusal rather than by the container's.
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
126
|
+
sharedNames(frond, refused);
|
|
127
|
+
const owners = ownersOf(frond.providers, frond.name, refused);
|
|
128
|
+
storageInUserCode(frond, owners, (entity) => entityByName.has(entity), refused);
|
|
129
|
+
crudOnOwned(frond, owners, refused);
|
|
123
130
|
|
|
124
131
|
for (const provider of frond.providers) {
|
|
125
132
|
scope.register(nameOf(provider), provider.ctor, { deps: provider.deps });
|
|
@@ -127,7 +134,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
127
134
|
// What this frond puts in front of one of the framework's own ports. Its own, like every
|
|
128
135
|
// provider — a link goes where its frond goes, which is what a frond behind `remotes:`
|
|
129
136
|
// takes with it.
|
|
130
|
-
const seams = seamChains(frond.providers, options.ports);
|
|
137
|
+
const seams = seamChains(frond.providers, options.ports, refused);
|
|
131
138
|
for (const [seam, links] of seams) {
|
|
132
139
|
boundPorts.add(seam);
|
|
133
140
|
frondLog.debug(`seam ${seam} → ${links.map((one) => one.ctor.name).join(' → ')} → the realization`);
|
|
@@ -136,7 +143,10 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
136
143
|
// reaches the realization instead of the base class it is declared against.
|
|
137
144
|
// Registered AFTER the loop above so a port key always wins over the base's
|
|
138
145
|
// own registration — same precedence as a declared repository over its default.
|
|
139
|
-
for (const [port, chain] of portBindings(frond.providers, (n) => scope.has(n), options.ports)) {
|
|
146
|
+
for (const [port, chain] of portBindings(frond.providers, (n) => scope.has(n), options.ports, refused)) {
|
|
147
|
+
// A chain a refusal emptied — `ports:` named a class that extends nothing. Already
|
|
148
|
+
// reported, and there is no realization left to put a key in front of.
|
|
149
|
+
if (chain.length === 0) continue;
|
|
140
150
|
// A seam is bound where its realization is BUILT, not under a container key — nothing
|
|
141
151
|
// resolves `Storage`, and `<Entity>Storage` is what a handler asks for.
|
|
142
152
|
if (SEAMS.has(port)) continue;
|
|
@@ -181,7 +191,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
181
191
|
|
|
182
192
|
// The declared chain first, then the guard OUTSIDE it: the guard hands on the value
|
|
183
193
|
// it parsed, so a wrapper reads what the entity says a row is rather than what
|
|
184
|
-
// arrived. Same order the client
|
|
194
|
+
// arrived. Same order the client facade has held since `StorageGuard` existed.
|
|
185
195
|
const linked = wrapping('Storage', seams.get('Storage') ?? [], scoped, (dep) => scope.resolve(dep));
|
|
186
196
|
// Storage is a way out like the client surface — see `StorageGuard`.
|
|
187
197
|
const guarded = new StorageGuard(entity.entityClass.getFields(), entity.name).guard(linked);
|
|
@@ -193,7 +203,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
193
203
|
// existed to make `repo.storage` true in both, back when `.storage` was the way in.
|
|
194
204
|
//
|
|
195
205
|
// Not registered for an OWNED entity: an aggregate's members are reached through it
|
|
196
|
-
// and nowhere else, and the default would be a second
|
|
206
|
+
// and nowhere else, and the default would be a second facade under a name a handler
|
|
197
207
|
// can spell. Every member is skipped, not just the one the key is named after —
|
|
198
208
|
// that asymmetry was the whole hole.
|
|
199
209
|
const repoKey = repositoryKeyOf(entity.name);
|
|
@@ -222,7 +232,8 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
222
232
|
// so nothing is registered for a frame nobody wants.
|
|
223
233
|
registerFrames(
|
|
224
234
|
scope,
|
|
225
|
-
[...frond.handlers, ...frond.providers, ...frond.presenters, ...frond.collectors]
|
|
235
|
+
[...frond.handlers, ...frond.providers, ...frond.presenters, ...frond.collectors]
|
|
236
|
+
.flatMap((d) => d.deps.map((key) => ({ key, filePath: d.filePath }))),
|
|
226
237
|
frond.providers,
|
|
227
238
|
{
|
|
228
239
|
entityByName,
|
|
@@ -234,6 +245,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
234
245
|
transacted: options.transacted,
|
|
235
246
|
log: frondLog,
|
|
236
247
|
},
|
|
248
|
+
refused,
|
|
237
249
|
);
|
|
238
250
|
|
|
239
251
|
// Register presenters in scope — PascalCase type name (e.g. 'PostPresenter')
|
|
@@ -277,7 +289,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
277
289
|
const surfaceHandlers = frond.handlers.filter((h) => h.surface);
|
|
278
290
|
const defaultHandlerMap = new Map(defaultHandlers.map((h) => [h.address, h]));
|
|
279
291
|
|
|
280
|
-
/** Build the
|
|
292
|
+
/** Build the facade of a handler and register it under the audience it serves. */
|
|
281
293
|
const buildFacade = (
|
|
282
294
|
entity: EntityEntry | undefined,
|
|
283
295
|
handler: HandlerEntry,
|
|
@@ -303,7 +315,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
303
315
|
});
|
|
304
316
|
// Emissions use the same contracts and execution path as direct calls.
|
|
305
317
|
emissions.note(facade.contracts, facadeKey);
|
|
306
|
-
// The terms alongside the
|
|
318
|
+
// The terms alongside the facade, under the same audience — a surface that serves
|
|
307
319
|
// fewer ops describes fewer ops.
|
|
308
320
|
container.registerValue(contractsKeyOf(handler.address, handler.surface), facade.contracts);
|
|
309
321
|
effectiveByKey.set(facadeKey, facade.effectiveOperations);
|
|
@@ -380,7 +392,7 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
380
392
|
//
|
|
381
393
|
// Pointing at nothing is legal HERE TOO. This loop used to `continue` when no entity
|
|
382
394
|
// carried the handler's name, so `handlers/public/SearchHandler.ts` with no `Search`
|
|
383
|
-
// entity got no
|
|
395
|
+
// entity got no facade at all and no line saying why — while the very same handler at
|
|
384
396
|
// the default surface is built and logged. One rule, both surfaces.
|
|
385
397
|
for (const handler of surfaceHandlers) {
|
|
386
398
|
const entity = frond.entities.find((e) => e.name === handler.address);
|
|
@@ -389,14 +401,14 @@ export async function installFrond(frond: FrondDescriptor, assembly: Assembly):
|
|
|
389
401
|
// Register scoped storage if output override differs from entity — under the REPOSITORY
|
|
390
402
|
// key, which is what a Crud handler asks for, and under the port's own for a holder
|
|
391
403
|
// that legitimately names it. Registering only the latter left a named surface with
|
|
392
|
-
// no
|
|
404
|
+
// no facade at all once the façade stopped spelling the storage.
|
|
393
405
|
if (entity && options.storageFactory) {
|
|
394
406
|
const baseStorage = options.storageFactory(entity.entityClass, entity.name);
|
|
395
407
|
const outputSchema = handler.outputOverride ?? (handler.ctor as any).__output;
|
|
396
408
|
const scoped = outputSchema && outputSchema !== entity.entityClass
|
|
397
409
|
? baseStorage.output(outputSchema)
|
|
398
410
|
: baseStorage;
|
|
399
|
-
// The view is handed over so a filter on a field this
|
|
411
|
+
// The view is handed over so a filter on a field this facade hides is SAID. The
|
|
400
412
|
// guard holds no logger — a warning is the boot's to voice, as a seed's report is.
|
|
401
413
|
const guarded = new StorageGuard(entity.entityClass.getFields(), entity.name, {
|
|
402
414
|
...(outputSchema && outputSchema !== entity.entityClass
|
package/src/boot/ownership.ts
CHANGED
|
@@ -1,13 +1,44 @@
|
|
|
1
1
|
import { lowerFirst } from '@fougere/schema';
|
|
2
|
-
import { nameOf, type FrondDescriptor
|
|
3
|
-
import {
|
|
2
|
+
import { nameOf, type FrondDescriptor } from '../descriptor/FrondDescriptor.js';
|
|
3
|
+
import { type ProviderEntry } from '../descriptor/ProviderEntry.js';
|
|
4
|
+
import { inheritsCrud } from '../prefab/CrudConstructor.js';
|
|
4
5
|
import { targetOf } from '../prefab/prefab.js';
|
|
5
|
-
import { ownedBy, repositoryKeyOf } from '../prefab/
|
|
6
|
-
import { entityOfStorageKey } from '../storage/
|
|
6
|
+
import { ownedBy, repositoryKeyOf } from '../prefab/RepositoryConstructor.js';
|
|
7
|
+
import { entityOfStorageKey } from '../storage/Storage.js';
|
|
8
|
+
import type { Diagnostic } from '../diagnostic.js';
|
|
9
|
+
|
|
10
|
+
/** One name, one file: two providers under one key and the second silently replaces the first. */
|
|
11
|
+
export function sharedNames(frond: FrondDescriptor, refused: Diagnostic[]): void {
|
|
12
|
+
const declared = new Map<string, string>();
|
|
13
|
+
|
|
14
|
+
for (const provider of frond.providers) {
|
|
15
|
+
const name = nameOf(provider);
|
|
16
|
+
const first = declared.get(name);
|
|
17
|
+
if (first !== undefined) {
|
|
18
|
+
refused.push({
|
|
19
|
+
severity: 'blocking',
|
|
20
|
+
code: 'provider-name-taken',
|
|
21
|
+
filePath: provider.filePath,
|
|
22
|
+
frond: frond.name,
|
|
23
|
+
subject: name,
|
|
24
|
+
message: `${first} already declares ${name}. A frond registers both under one key, so the `
|
|
25
|
+
+ `second replaces the first and whoever asks for ${name} is handed whichever was `
|
|
26
|
+
+ 'scanned last. Rename one of the two.',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
declared.set(name, provider.filePath);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
7
32
|
|
|
8
33
|
/** Who owns an entity's storage. */
|
|
9
|
-
export function ownersOf(
|
|
34
|
+
export function ownersOf(
|
|
35
|
+
providers: readonly ProviderEntry[],
|
|
36
|
+
frond: string,
|
|
37
|
+
refused: Diagnostic[],
|
|
38
|
+
): Map<string, string> {
|
|
10
39
|
const owners = new Map<string, string>();
|
|
40
|
+
/** Claimed twice, so it has no owner — and no owner is nobody to judge a reader against. */
|
|
41
|
+
const contested = new Set<string>();
|
|
11
42
|
for (const provider of providers) {
|
|
12
43
|
const owned = ownedBy(provider.ctor);
|
|
13
44
|
if (owned.length < 2) continue;
|
|
@@ -18,14 +49,26 @@ export function ownersOf(providers: readonly ProviderEntry[]): Map<string, strin
|
|
|
18
49
|
// Refused rather than settled, for the reason `ports:` refuses two implementations
|
|
19
50
|
// and `remotes` two owners of an entity: whichever won would depend on scan order,
|
|
20
51
|
// and one of the two aggregates would be silently unenforced.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
52
|
+
refused.push({
|
|
53
|
+
severity: 'blocking',
|
|
54
|
+
code: 'entity-owned-twice',
|
|
55
|
+
filePath: provider.filePath,
|
|
56
|
+
frond,
|
|
57
|
+
subject: name,
|
|
58
|
+
message: `${first} and ${provider.ctor.name} both own ${name}. An entity has one owner: `
|
|
59
|
+
+ 'merge the two, or take it out of one of them.',
|
|
60
|
+
});
|
|
61
|
+
contested.add(name);
|
|
62
|
+
continue;
|
|
25
63
|
}
|
|
26
64
|
owners.set(name, provider.ctor.name);
|
|
27
65
|
}
|
|
28
66
|
}
|
|
67
|
+
// The second claimant is BUILT ON what it claims, so `storageInUserCode` would read it as
|
|
68
|
+
// reaching around the first — two more refusals naming the same declaration, in the one
|
|
69
|
+
// case where the answer to "who owns this" is already the diagnostic above.
|
|
70
|
+
for (const name of contested) owners.delete(name);
|
|
71
|
+
|
|
29
72
|
return owners;
|
|
30
73
|
}
|
|
31
74
|
|
|
@@ -41,12 +84,13 @@ function builtOn(ctor: unknown): string[] {
|
|
|
41
84
|
}
|
|
42
85
|
|
|
43
86
|
/** `Storage<E>` is not a word of the user's vocabulary — `<E>Repository` is the one way in. */
|
|
44
|
-
export function
|
|
87
|
+
export function storageInUserCode(
|
|
45
88
|
frond: FrondDescriptor,
|
|
46
89
|
owners: Map<string, string>,
|
|
47
90
|
known: (entity: string) => boolean,
|
|
91
|
+
refused: Diagnostic[],
|
|
48
92
|
): void {
|
|
49
|
-
const
|
|
93
|
+
const facades = [
|
|
50
94
|
...frond.handlers.map((h) => ({ ...h, kind: 'handler' })),
|
|
51
95
|
...frond.presenters.map((p) => ({ ...p, kind: 'presenter' })),
|
|
52
96
|
...frond.collectors.map((c) => ({ ...c, kind: 'collector' })),
|
|
@@ -60,15 +104,19 @@ export function refuseStorageInUserCode(
|
|
|
60
104
|
const held = entityOfStorageKey(registered, known);
|
|
61
105
|
if (!held) continue;
|
|
62
106
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
107
|
+
refused.push({
|
|
108
|
+
severity: 'blocking',
|
|
109
|
+
code: 'storage-key-is-provider',
|
|
110
|
+
filePath: provider.filePath,
|
|
111
|
+
frond: frond.name,
|
|
112
|
+
subject: registered,
|
|
113
|
+
message: `${registered} is a provider, and it is the container key of ${held}'s own storage `
|
|
114
|
+
+ '— the storage is registered second, so the provider is never resolved. Name it for '
|
|
115
|
+
+ 'what it holds; `<Entity>Storage` belongs to the entity.',
|
|
116
|
+
});
|
|
69
117
|
}
|
|
70
118
|
|
|
71
|
-
for (const decl of [...
|
|
119
|
+
for (const decl of [...facades, ...holders]) {
|
|
72
120
|
const allowed = decl.kind === 'provider' ? builtOn(decl.ctor) : [];
|
|
73
121
|
for (const dep of decl.deps) {
|
|
74
122
|
const entity = entityOfStorageKey(dep, known);
|
|
@@ -76,42 +124,55 @@ export function refuseStorageInUserCode(
|
|
|
76
124
|
|
|
77
125
|
const owner = owners.get(entity);
|
|
78
126
|
if (owner && owner !== decl.ctor.name) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
127
|
+
refused.push({
|
|
128
|
+
severity: 'blocking',
|
|
129
|
+
code: 'aggregate-storage-reached',
|
|
130
|
+
filePath: decl.filePath,
|
|
131
|
+
frond: frond.name,
|
|
132
|
+
subject: `${decl.ctor.name}(${dep})`,
|
|
133
|
+
message: `${decl.ctor.name} asks for ${dep}, and ${owner} owns ${entity}. Nothing else `
|
|
134
|
+
+ `reaches an owned entity's storage — name the operation on ${owner} and ask for it: `
|
|
135
|
+
+ `constructor(private ${entity}: ${owner}) {}`,
|
|
136
|
+
});
|
|
137
|
+
continue;
|
|
86
138
|
}
|
|
87
139
|
if (allowed.includes(entity)) continue;
|
|
88
140
|
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
141
|
+
refused.push({
|
|
142
|
+
severity: 'blocking',
|
|
143
|
+
code: 'storage-outside-repository',
|
|
144
|
+
filePath: decl.filePath,
|
|
145
|
+
frond: frond.name,
|
|
146
|
+
subject: `${decl.ctor.name}(${dep})`,
|
|
147
|
+
message: `${decl.ctor.name} asks for ${dep}. Storage is reached through a repository, never `
|
|
148
|
+
+ `through the port: constructor(private ${entity}: ${repositoryKeyOf(entity)}) {}. It `
|
|
149
|
+
+ `answers every gesture ${dep} does, whether or not anyone wrote the file — and the day `
|
|
150
|
+
+ `${entity} belongs to an aggregate, this line does not move.`,
|
|
151
|
+
});
|
|
97
152
|
}
|
|
98
153
|
}
|
|
99
154
|
}
|
|
100
155
|
|
|
101
156
|
/** An owned entity has no automatic CRUD — said at boot, not at the first request. */
|
|
102
|
-
export function
|
|
157
|
+
export function crudOnOwned(
|
|
158
|
+
frond: FrondDescriptor,
|
|
159
|
+
owners: Map<string, string>,
|
|
160
|
+
refused: Diagnostic[],
|
|
161
|
+
): void {
|
|
103
162
|
for (const handler of frond.handlers) {
|
|
104
163
|
const owner = owners.get(handler.address);
|
|
105
164
|
if (!owner || handler.deps.length > 0 || !inheritsCrud(handler.ctor)) continue;
|
|
106
165
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
166
|
+
refused.push({
|
|
167
|
+
severity: 'blocking',
|
|
168
|
+
code: 'crud-on-owned-entity',
|
|
169
|
+
filePath: handler.filePath,
|
|
170
|
+
frond: frond.name,
|
|
171
|
+
subject: handler.ctor.name,
|
|
172
|
+
message: `${handler.ctor.name} takes the five gestures on ${handler.address}, which ${owner} `
|
|
173
|
+
+ 'owns. An owned entity has no automatic CRUD: nothing writes it but its owner, so there '
|
|
174
|
+
+ `is no storage to hand this handler. Name the operations on ${owner} and call them: `
|
|
175
|
+
+ `constructor(private ${handler.address}: ${owner}) {}`,
|
|
176
|
+
});
|
|
116
177
|
}
|
|
117
178
|
}
|
package/src/boot/ports.ts
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import { nameOf
|
|
1
|
+
import { nameOf } from '../descriptor/FrondDescriptor.js';
|
|
2
|
+
import { type ProviderEntry } from '../descriptor/ProviderEntry.js';
|
|
3
|
+
import { basesOf } from '../descriptor/bases.js';
|
|
4
|
+
import type { Diagnostic } from '../diagnostic.js';
|
|
2
5
|
|
|
3
6
|
/**
|
|
4
7
|
* The framework's own ports — a class core exports that a user class may stand in front of.
|
|
@@ -24,23 +27,29 @@ export const SEAMS = new Set(['Storage']);
|
|
|
24
27
|
export function seamChains(
|
|
25
28
|
providers: ProviderEntry[],
|
|
26
29
|
chosen: Record<string, string | readonly string[]> | undefined,
|
|
30
|
+
refused: Diagnostic[],
|
|
27
31
|
): Map<string, ProviderEntry[]> {
|
|
28
32
|
const wrappers = new Map<string, ProviderEntry[]>();
|
|
29
33
|
for (const provider of providers) {
|
|
30
34
|
const seam = (Object.getPrototypeOf(provider.ctor) as { name?: string } | null)?.name;
|
|
31
35
|
if (!seam || !SEAMS.has(seam)) continue;
|
|
32
36
|
if (!provider.deps.includes(seam)) {
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
refused.push({
|
|
38
|
+
severity: 'blocking',
|
|
39
|
+
code: 'seam-not-wrapped',
|
|
40
|
+
filePath: provider.filePath,
|
|
41
|
+
subject: nameOf(provider),
|
|
42
|
+
message: `${nameOf(provider)} extends ${seam}, and a seam's realization is handed in rather `
|
|
43
|
+
+ 'than declared — so a class extending one can only stand IN FRONT of it, which it says '
|
|
44
|
+
+ `by asking for it: constructor(private inner: ${seam}).`,
|
|
45
|
+
});
|
|
46
|
+
continue;
|
|
38
47
|
}
|
|
39
48
|
wrappers.set(seam, [...(wrappers.get(seam) ?? []), provider]);
|
|
40
49
|
}
|
|
41
50
|
|
|
42
51
|
const bound = new Map<string, ProviderEntry[]>();
|
|
43
|
-
for (const [seam, all] of wrappers) bound.set(seam, chain(seam, [], all, chosen?.[seam]));
|
|
52
|
+
for (const [seam, all] of wrappers) bound.set(seam, chain(seam, [], all, chosen?.[seam], refused));
|
|
44
53
|
|
|
45
54
|
return bound;
|
|
46
55
|
}
|
|
@@ -77,22 +86,9 @@ export function portBindings(
|
|
|
77
86
|
providers: ProviderEntry[],
|
|
78
87
|
answers: (name: string) => boolean,
|
|
79
88
|
chosen: Record<string, string | readonly string[]> | undefined,
|
|
89
|
+
refused: Diagnostic[],
|
|
80
90
|
): Map<string, ProviderEntry[]> {
|
|
81
|
-
|
|
82
|
-
const candidates = new Map<string, ProviderEntry[]>();
|
|
83
|
-
for (const provider of providers) {
|
|
84
|
-
const base = Object.getPrototypeOf(provider.ctor) as { name?: string } | null;
|
|
85
|
-
const port = base?.name;
|
|
86
|
-
// ONE condition: something already answers under that name. Providers are
|
|
87
|
-
// registered into this scope just above, and the builtins sit in its parent, so
|
|
88
|
-
// this covers a neighbour service and `Logger` alike — a framework class is a
|
|
89
|
-
// port like any other, which is what makes a default overridable.
|
|
90
|
-
//
|
|
91
|
-
// It is also what excludes a prefab: a repository extends the class
|
|
92
|
-
// `Repository(Post)` returned (`RepositoryBase`), and no key is ever that name.
|
|
93
|
-
if (!port || !answers(port)) continue;
|
|
94
|
-
candidates.set(port, [...(candidates.get(port) ?? []), provider]);
|
|
95
|
-
}
|
|
91
|
+
const candidates = basesOf(providers, answers);
|
|
96
92
|
|
|
97
93
|
const bound = new Map<string, ProviderEntry[]>();
|
|
98
94
|
for (const [port, all] of candidates) {
|
|
@@ -102,7 +98,7 @@ export function portBindings(
|
|
|
102
98
|
const impls = all.filter((one) => !wraps(one));
|
|
103
99
|
const stated = chosen?.[port];
|
|
104
100
|
|
|
105
|
-
bound.set(port, chain(port, impls, wrappers, stated));
|
|
101
|
+
bound.set(port, chain(port, impls, wrappers, stated, refused));
|
|
106
102
|
}
|
|
107
103
|
|
|
108
104
|
return bound;
|
|
@@ -113,6 +109,7 @@ function chain(
|
|
|
113
109
|
impls: ProviderEntry[],
|
|
114
110
|
wrappers: ProviderEntry[],
|
|
115
111
|
stated: string | readonly string[] | undefined,
|
|
112
|
+
refused: Diagnostic[],
|
|
116
113
|
): ProviderEntry[] {
|
|
117
114
|
// The whole chain, outside in — a string is a chain of one, and the last name is what
|
|
118
115
|
// actually answers. What a deployment wraps its realization with is the same kind of
|
|
@@ -121,16 +118,21 @@ function chain(
|
|
|
121
118
|
const order = typeof stated === 'string' ? [stated] : stated;
|
|
122
119
|
const all = [...wrappers, ...impls];
|
|
123
120
|
|
|
124
|
-
return order.
|
|
121
|
+
return order.flatMap((name) => {
|
|
125
122
|
const pick = all.find((one) => nameOf(one) === name);
|
|
126
123
|
if (!pick) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
124
|
+
refused.push({
|
|
125
|
+
severity: 'blocking',
|
|
126
|
+
code: 'port-not-extended',
|
|
127
|
+
filePath: all[0]?.filePath ?? 'fougere.config.ts',
|
|
128
|
+
subject: `ports: { ${port}: '${name}' }`,
|
|
129
|
+
message: `${port}: '${name}' does not extend it. What does: ${all.map(nameOf).join(', ')}.`,
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
return [];
|
|
131
133
|
}
|
|
132
134
|
|
|
133
|
-
return pick;
|
|
135
|
+
return [pick];
|
|
134
136
|
});
|
|
135
137
|
}
|
|
136
138
|
|
|
@@ -138,22 +140,31 @@ function chain(
|
|
|
138
140
|
// Refusing rather than keeping one, for the reason `remotes` refuses two owners
|
|
139
141
|
// of an entity: whichever won would depend on scan order, and the handler would
|
|
140
142
|
// charge the wrong provider without a word.
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
refused.push({
|
|
144
|
+
severity: 'blocking',
|
|
145
|
+
code: 'port-implemented-twice',
|
|
146
|
+
filePath: impls[0]!.filePath,
|
|
147
|
+
subject: port,
|
|
148
|
+
message: `${impls.map(nameOf).join(' and ')} both extend ${port}, and nothing says which one `
|
|
149
|
+
+ 'answers it. Which realization a deployment uses is not a fact about the code — state it: '
|
|
150
|
+
+ `ports: { ${port}: '${nameOf(impls[0]!)}' } in fougere.config.ts.`,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
return [...wrappers, ...impls];
|
|
147
154
|
}
|
|
148
155
|
|
|
149
156
|
if (wrappers.length > 1) {
|
|
150
157
|
// Same refusal one layer out: two wrappers are an ORDER, and scan order is not one.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
158
|
+
refused.push({
|
|
159
|
+
severity: 'blocking',
|
|
160
|
+
code: 'port-wrapped-twice',
|
|
161
|
+
filePath: wrappers[0]!.filePath,
|
|
162
|
+
subject: port,
|
|
163
|
+
message: `${wrappers.map(nameOf).join(' and ')} both wrap ${port}, and nothing says which `
|
|
164
|
+
+ 'stands in front. State the chain, outside in: '
|
|
165
|
+
+ `ports: { ${port}: [${[...wrappers, ...impls].map((one) => `'${nameOf(one)}'`).join(', ')}] } `
|
|
166
|
+
+ 'in fougere.config.ts.',
|
|
167
|
+
});
|
|
157
168
|
}
|
|
158
169
|
|
|
159
170
|
return [...wrappers, ...impls];
|
package/src/boot/remote.ts
CHANGED
|
@@ -3,11 +3,16 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Documented: [the gradient](https://fougere.dev/docs/infra/gradient).
|
|
5
5
|
*/
|
|
6
|
-
import type { FrondCall
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
6
|
+
import type { FrondCall } from '../wire/FrondCall.js';
|
|
7
|
+
import type { Transport } from '../wire/Transport.js';
|
|
8
|
+
import { RPC_ENTITY } from '../wire/RpcAnswer.js';
|
|
9
|
+
import { assertIdentityCard } from '../wire/card/IdentityCard.js';
|
|
10
|
+
import { runMiddlewares, type AppMiddleware } from '../wire/AppMiddleware.js';
|
|
11
|
+
import { type OperationContext } from '../wire/OperationContext.js';
|
|
12
|
+
import { Invocation } from '../wire/Invocation.js';
|
|
13
|
+
import { type InvocationContext } from '../wire/InvocationContext.js';
|
|
14
|
+
import { ErrorCode } from '../wire/ErrorCode.js';
|
|
15
|
+
import { FougereError } from '../wire/FougereError.js';
|
|
11
16
|
import { Card, type SchemaView, type SchemaDescriptor } from '@fougere/schema';
|
|
12
17
|
import { dynamicOperations } from '../entry/facade.js';
|
|
13
18
|
|
|
@@ -35,7 +40,7 @@ export function createRemoteRouter(
|
|
|
35
40
|
const pending = new Map(Object.entries(remotes));
|
|
36
41
|
const transports = new Map<string, Transport>();
|
|
37
42
|
|
|
38
|
-
/** Which remote label claimed a
|
|
43
|
+
/** Which remote label claimed a facade name — so a second claim can name the first. */
|
|
39
44
|
const claimedBy = new Map<string, string>();
|
|
40
45
|
|
|
41
46
|
const discover = async (): Promise<void> => {
|
|
@@ -65,28 +70,28 @@ export function createRemoteRouter(
|
|
|
65
70
|
const card = assertIdentityCard(answer, `Remote '${label}' (${url})`);
|
|
66
71
|
|
|
67
72
|
for (const frond of card.fronds) {
|
|
68
|
-
//
|
|
69
|
-
// adding one here would answer a call with a transport to a
|
|
73
|
+
// Facades only. A fact is not routable — nobody calls it, it arrives — so
|
|
74
|
+
// adding one here would answer a call with a transport to a facade that
|
|
70
75
|
// does not exist.
|
|
71
|
-
for (const
|
|
72
|
-
const first = claimedBy.get(
|
|
76
|
+
for (const facade of frond.facades) {
|
|
77
|
+
const first = claimedBy.get(facade.name);
|
|
73
78
|
/** Two remotes claiming one name is refused, not silently arbitrated. */
|
|
74
79
|
if (first !== undefined && first !== label) {
|
|
75
80
|
throw new FougereError({
|
|
76
81
|
code: ErrorCode.INTERNAL_ERROR,
|
|
77
82
|
message:
|
|
78
|
-
`Two remotes serve '${
|
|
83
|
+
`[claim] Two remotes serve '${facade.name}': '${first}' and '${label}'.\n`
|
|
79
84
|
+ ` A call names an entity, not a frond, so nothing could choose between them.\n`
|
|
80
85
|
+ ` - Keep one of the two out of \`remotes:\`, or\n`
|
|
81
86
|
+ ` - expose one of them under a different entity name.`,
|
|
82
|
-
entity:
|
|
87
|
+
entity: facade.name,
|
|
83
88
|
});
|
|
84
89
|
}
|
|
85
|
-
claimedBy.set(
|
|
86
|
-
byEntity.set(
|
|
90
|
+
claimedBy.set(facade.name, label);
|
|
91
|
+
byEntity.set(facade.name, {
|
|
87
92
|
frond: frond.name,
|
|
88
93
|
transport,
|
|
89
|
-
...(
|
|
94
|
+
...(facade.schema ? { schema: Card.fromDescriptor(facade.schema as SchemaDescriptor).toSchema() } : {}),
|
|
90
95
|
});
|
|
91
96
|
}
|
|
92
97
|
}
|
|
@@ -101,13 +106,15 @@ export function createRemoteRouter(
|
|
|
101
106
|
if (pending.size > 0) {
|
|
102
107
|
throw new FougereError({
|
|
103
108
|
code: ErrorCode.SERVICE_UNAVAILABLE,
|
|
104
|
-
message: `No reachable remote hosts '${entity}' — unreachable: ${[...pending.keys()].join(', ')}
|
|
109
|
+
message: `No reachable remote hosts '${entity}' — unreachable: ${[...pending.keys()].join(', ')}.\n`
|
|
110
|
+
+ ' Named in `remotes:`, and did not answer.',
|
|
105
111
|
entity,
|
|
106
112
|
});
|
|
107
113
|
}
|
|
108
114
|
throw new FougereError({
|
|
109
115
|
code: ErrorCode.NOT_FOUND,
|
|
110
|
-
message: `No declared remote hosts '${entity}'
|
|
116
|
+
message: `No declared remote hosts '${entity}'.\n`
|
|
117
|
+
+ ' Nothing here serves it either — add its frond to `fronds:`/`scan:`, or name the frond that does in `remotes:`.',
|
|
111
118
|
entity,
|
|
112
119
|
});
|
|
113
120
|
},
|