bazis 0.96.1
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/LICENSE +21 -0
- package/README.md +146 -0
- package/cli/build.ts +147 -0
- package/cli/codegen.ts +40 -0
- package/cli/generateModule.ts +187 -0
- package/cli/generateProject.ts +183 -0
- package/cli/main.ts +125 -0
- package/cli/moduleRegistration.ts +127 -0
- package/cli/naming.ts +124 -0
- package/cli/parseCli.ts +151 -0
- package/cli/templates/module.ts +497 -0
- package/cli/templates/pack.ts +76 -0
- package/cli/templates/passport.ts +178 -0
- package/core/agent/AgentContextBuilder.ts +567 -0
- package/core/agent/AgentDataDefinition.ts +8 -0
- package/core/agent/AgentRegistry.ts +539 -0
- package/core/agent/AgentRuntime.ts +47 -0
- package/core/agent/AgentToolExecutor.ts +2130 -0
- package/core/agent/AgentToolHooks.ts +39 -0
- package/core/agent/ModelProvider.ts +21 -0
- package/core/agent/README.md +229 -0
- package/core/agent/Tool.contract.ts +20 -0
- package/core/agent/decorators/Agent.ts +11 -0
- package/core/agent/decorators/Prompt.ts +11 -0
- package/core/agent/decorators/Task.ts +29 -0
- package/core/agent/decorators/Tool.ts +12 -0
- package/core/agent/errors.ts +43 -0
- package/core/agent/generated/catalog.ts +26 -0
- package/core/agent/index.ts +170 -0
- package/core/agent/internal/AgentExecutionDriver.ts +1497 -0
- package/core/agent/internal/AgentExecutionState.ts +775 -0
- package/core/agent/internal/AgentJsonSchema.ts +150 -0
- package/core/agent/internal/AgentModelBinding.ts +57 -0
- package/core/agent/internal/Schema.contract.ts +36 -0
- package/core/agent/internal/ToolAudit.projector.ts +163 -0
- package/core/agent/internal/ToolContract.validator.ts +102 -0
- package/core/agent/metadata.ts +398 -0
- package/core/agent/moduleContributions-v1.ts +113 -0
- package/core/agent/semantic.ts +903 -0
- package/core/agent/session/codec.ts +33 -0
- package/core/agent/session/contracts.ts +96 -0
- package/core/agent/session/entities.ts +84 -0
- package/core/agent/session/protector.ts +92 -0
- package/core/app/index.ts +5 -0
- package/core/app/runApp.ts +293 -0
- package/core/app/ui/index.ts +29 -0
- package/core/app/ui/uiProfileResolver.ts +966 -0
- package/core/app/ui/uiSurfaceHosting.ts +38 -0
- package/core/app/ui/uiSurfaceHttp.ts +476 -0
- package/core/background/BackgroundService.ts +223 -0
- package/core/background/backgroundModule.ts +42 -0
- package/core/background/decorator.ts +43 -0
- package/core/background/delay.ts +27 -0
- package/core/background/index.ts +15 -0
- package/core/cache/COMPATIBILITY.md +13 -0
- package/core/cache/ICache.ts +71 -0
- package/core/cache/MemoryCache.ts +394 -0
- package/core/cache/README.md +83 -0
- package/core/cache/SPEC.md +1355 -0
- package/core/cache/cacheModule.ts +21 -0
- package/core/cache/decorators/Cacheable.ts +38 -0
- package/core/cache/decorators/CacheableRedis.ts +39 -0
- package/core/cache/decorators/OutputCache.ts +33 -0
- package/core/cache/decorators/OutputRedisCache.ts +33 -0
- package/core/cache/decorators/cacheableMetadata.ts +78 -0
- package/core/cache/decorators/cacheableRedisMetadata.ts +81 -0
- package/core/cache/decorators/outputCacheMetadata.ts +71 -0
- package/core/cache/decorators/outputRedisCacheMetadata.ts +77 -0
- package/core/cache/di/classProviderHook.ts +26 -0
- package/core/cache/distributed/CacheCodec.ts +5 -0
- package/core/cache/distributed/DistributedCache.ts +403 -0
- package/core/cache/distributed/DistributedCacheDriver.ts +83 -0
- package/core/cache/distributed/DistributedCacheStores.ts +28 -0
- package/core/cache/distributed/IDistributedCache.ts +40 -0
- package/core/cache/distributed/NamedCacheRegistry.ts +23 -0
- package/core/cache/distributed/codecs.ts +32 -0
- package/core/cache/distributed/index.ts +19 -0
- package/core/cache/errors/CacheError.ts +16 -0
- package/core/cache/http/CachedHttpPayload.ts +213 -0
- package/core/cache/http/applyClientCacheHeaders.ts +61 -0
- package/core/cache/http/buildOutputCacheKey.ts +154 -0
- package/core/cache/http/buildRedisOutputCacheKey.ts +16 -0
- package/core/cache/http/composeOutputCache.ts +130 -0
- package/core/cache/http/outputCacheMiddleware.ts +111 -0
- package/core/cache/http/outputCacheSecurityWarning.ts +58 -0
- package/core/cache/http/outputRedisCacheMiddleware.ts +118 -0
- package/core/cache/index.ts +97 -0
- package/core/cache/internal/AutomaticCacheKey.ts +106 -0
- package/core/cache/internal/CacheKeyGuard.ts +56 -0
- package/core/cache/internal/buildCacheProviders.ts +146 -0
- package/core/cache/internal/normalizeCacheKey.ts +9 -0
- package/core/cache/internal/resolveCachePolicy.ts +32 -0
- package/core/cache/internal/resolveCacheableRedisPolicy.ts +17 -0
- package/core/cache/internal/resolveOutputRedisCachePolicy.ts +17 -0
- package/core/cache/providers/cachedProviders.ts +68 -0
- package/core/cache/services/cacheProxy.ts +243 -0
- package/core/cache/tokens/CACHE_POLICIES.ts +5 -0
- package/core/cache/tokens/DISTRIBUTED_CACHE.ts +30 -0
- package/core/cache/types/CacheEntry.ts +7 -0
- package/core/cache/types/CacheOptions.ts +60 -0
- package/core/cache/types/CachePolicy.ts +74 -0
- package/core/cache/types/CacheableRedisOptions.ts +23 -0
- package/core/cache/types/OutputRedisCacheOptions.ts +25 -0
- package/core/di/README.md +104 -0
- package/core/di/ServiceCollection.ts +185 -0
- package/core/di/ServiceProvider.ts +689 -0
- package/core/di/ServiceScope.ts +61 -0
- package/core/di/container.ts +38 -0
- package/core/di/errors/AmbiguousNamedDependencyError.ts +10 -0
- package/core/di/errors/AsyncResolutionRequiredError.ts +12 -0
- package/core/di/errors/CircularDependencyError.ts +10 -0
- package/core/di/errors/ClassDependenciesMismatchError.ts +15 -0
- package/core/di/errors/DiError.ts +6 -0
- package/core/di/errors/InvalidProviderError.ts +9 -0
- package/core/di/errors/ModuleEncapsulationError.ts +7 -0
- package/core/di/errors/ModuleOwnedProviderConflictError.ts +8 -0
- package/core/di/errors/NamedDependencyNotFoundError.ts +7 -0
- package/core/di/errors/OptionsValidationError.ts +7 -0
- package/core/di/errors/ProviderNotFoundError.ts +10 -0
- package/core/di/errors/ScopeDisposedError.ts +7 -0
- package/core/di/errors/ScopedServiceFromRootError.ts +9 -0
- package/core/di/errors/ServiceValidationError.ts +7 -0
- package/core/di/errors/index.ts +14 -0
- package/core/di/extensions/activator.ts +39 -0
- package/core/di/extensions/application.ts +117 -0
- package/core/di/extensions/hosted-service.ts +124 -0
- package/core/di/extensions/index.ts +23 -0
- package/core/di/extensions/options-reloadable.ts +137 -0
- package/core/di/extensions/options.ts +91 -0
- package/core/di/extensions/service-provider-token.ts +21 -0
- package/core/di/index.ts +97 -0
- package/core/di/internal/GraphValidator.ts +119 -0
- package/core/di/internal/HostedServicePlan.ts +158 -0
- package/core/di/internal/NamedTokenIndex.ts +55 -0
- package/core/di/internal/OpenGenericRegistration.ts +14 -0
- package/core/di/internal/ResolutionPlan.ts +18 -0
- package/core/di/internal/ResolutionScopeState.ts +19 -0
- package/core/di/internal/ResolutionTracker.ts +153 -0
- package/core/di/internal/ScopeLifecycle.ts +159 -0
- package/core/di/internal/ServiceRegistration.ts +14 -0
- package/core/di/internal/ServiceRegistry.ts +252 -0
- package/core/di/internal/classDeps.ts +38 -0
- package/core/di/internal/disposal.ts +58 -0
- package/core/di/internal/providerDeps.ts +26 -0
- package/core/di/module/DI.ts +146 -0
- package/core/di/module/Global.ts +25 -0
- package/core/di/module/Module.ts +44 -0
- package/core/di/module/ModuleRegistrar.ts +69 -0
- package/core/di/module/autoDeps.ts +39 -0
- package/core/di/module/classProviderHooks.ts +66 -0
- package/core/di/module/collectModuleConfigs.ts +57 -0
- package/core/di/module/collectModuleControllers.ts +53 -0
- package/core/di/module/collectModuleUiProfiles.ts +53 -0
- package/core/di/module/createContainer.ts +261 -0
- package/core/di/module/encapsulation.ts +416 -0
- package/core/di/module/encapsulationHooks.ts +36 -0
- package/core/di/module/generatedProviderAttachments.ts +102 -0
- package/core/di/module/index.ts +41 -0
- package/core/di/module/moduleExtensions.ts +35 -0
- package/core/di/module/moduleNameBinding.ts +136 -0
- package/core/di/module/moduleOwnedProviderContributors.ts +409 -0
- package/core/di/module/providerSelection.ts +90 -0
- package/core/di/module/shortcuts.ts +111 -0
- package/core/di/module/types/BazisModule.ts +71 -0
- package/core/di/module/types/DiRegistrar.ts +24 -0
- package/core/di/module/types/index.ts +2 -0
- package/core/di/provider/index.ts +26 -0
- package/core/di/provider/providerGuards.ts +17 -0
- package/core/di/provider/types/AsyncFactoryProvider.ts +15 -0
- package/core/di/provider/types/ClassProvider.ts +18 -0
- package/core/di/provider/types/FactoryProvider.ts +20 -0
- package/core/di/provider/types/KeyedDependency.ts +20 -0
- package/core/di/provider/types/LazyDependency.ts +31 -0
- package/core/di/provider/types/NamedDependency.ts +16 -0
- package/core/di/provider/types/Provider.ts +10 -0
- package/core/di/provider/types/ProviderDefinition.ts +11 -0
- package/core/di/provider/types/ProviderDependencyList.ts +11 -0
- package/core/di/provider/types/ProviderLifetime.ts +1 -0
- package/core/di/provider/types/ProviderOwnership.ts +7 -0
- package/core/di/provider/types/ResolvedDeps.ts +18 -0
- package/core/di/provider/types/ValueProvider.ts +6 -0
- package/core/di/provider/types/index.ts +13 -0
- package/core/di/token.ts +84 -0
- package/core/di/types/BuildServiceProviderOptions.ts +4 -0
- package/core/di/types/ServiceKey.ts +1 -0
- package/core/di/types/ServiceResolver.ts +16 -0
- package/core/di/types/index.ts +3 -0
- package/core/generatedFingerprint.ts +60 -0
- package/core/generatedRuntime.ts +187 -0
- package/core/grpc/Grpc.module.ts +23 -0
- package/core/grpc/GrpcBinding.contract.ts +35 -0
- package/core/grpc/GrpcCall.ts +73 -0
- package/core/grpc/GrpcClient.ts +172 -0
- package/core/grpc/GrpcClientCall.ts +267 -0
- package/core/grpc/GrpcError.ts +19 -0
- package/core/grpc/GrpcRequest.binding.ts +45 -0
- package/core/grpc/GrpcServer.ts +204 -0
- package/core/grpc/GrpcStatus.ts +8 -0
- package/core/grpc/GrpcTransport.ts +174 -0
- package/core/grpc/Metadata.ts +73 -0
- package/core/grpc/ProtoCodec.ts +225 -0
- package/core/grpc/ProtoParser.ts +192 -0
- package/core/grpc/ProtoReader.ts +34 -0
- package/core/grpc/ProtoSchema.ts +52 -0
- package/core/grpc/ServerCredentials.ts +30 -0
- package/core/grpc/clientContracts.ts +39 -0
- package/core/grpc/contracts.ts +45 -0
- package/core/grpc/decorators.ts +82 -0
- package/core/grpc/grpcClientProvider.ts +9 -0
- package/core/grpc/index.ts +17 -0
- package/core/grpc/moduleControllers.ts +38 -0
- package/core/grpc/protobuf.ts +80 -0
- package/core/grpc/serviceDefinition.ts +20 -0
- package/core/http/Authorization/Authorize.ts +52 -0
- package/core/http/Authorization/authorizeComposer.ts +31 -0
- package/core/http/Authorization/metadata.ts +158 -0
- package/core/http/Binding/ParameterBinder.ts +109 -0
- package/core/http/Binding/RequestModel.ts +27 -0
- package/core/http/Binding/autoBindings.ts +125 -0
- package/core/http/Binding/bindings.ts +19 -0
- package/core/http/Binding/convert.ts +48 -0
- package/core/http/Binding/generatedSpec.ts +18 -0
- package/core/http/Binding/listModelRegistry.ts +47 -0
- package/core/http/Binding/modelBinder.ts +345 -0
- package/core/http/Binding/modelValidator.ts +30 -0
- package/core/http/Binding/requestModelRegistry.ts +117 -0
- package/core/http/Decorators/attributes.ts +92 -0
- package/core/http/Decorators/controller.ts +24 -0
- package/core/http/Decorators/metadata.ts +107 -0
- package/core/http/Decorators/routes.ts +131 -0
- package/core/http/Errors/HttpError.ts +92 -0
- package/core/http/HttpContext/HttpContext.ts +148 -0
- package/core/http/HttpContext/ResponseBuilder.ts +37 -0
- package/core/http/HttpContext/inspectableRedirects.ts +47 -0
- package/core/http/HttpContext/principal.ts +24 -0
- package/core/http/HttpContext/responseLifetime.ts +45 -0
- package/core/http/HttpServer.ts +627 -0
- package/core/http/Middleware/accessLog.ts +90 -0
- package/core/http/Middleware/cors.ts +160 -0
- package/core/http/Middleware/errorHandler.ts +100 -0
- package/core/http/Middleware/pipeline.ts +21 -0
- package/core/http/Middleware/rateLimit.ts +104 -0
- package/core/http/Middleware/securityHeaders.ts +118 -0
- package/core/http/Middleware/types.ts +19 -0
- package/core/http/OpenApi/generatedOpenApiRegistry.ts +102 -0
- package/core/http/OpenApi/openApiDocs.ts +75 -0
- package/core/http/OpenApi/openApiDocument.ts +356 -0
- package/core/http/README.md +139 -0
- package/core/http/Results/HttpResult.ts +19 -0
- package/core/http/Results/normalize.ts +93 -0
- package/core/http/Results/results.ts +70 -0
- package/core/http/Routing/Router.ts +201 -0
- package/core/http/Routing/RouterBuilder.ts +184 -0
- package/core/http/Routing/template.ts +112 -0
- package/core/http/SPEC.md +981 -0
- package/core/http/Versioning/VersionReader.ts +20 -0
- package/core/http/WebSocketUpgrade.ts +29 -0
- package/core/http/composeRouteMiddlewareComposers.ts +21 -0
- package/core/http/correlation/createCorrelationIdMiddleware.ts +79 -0
- package/core/http/httpModule.ts +48 -0
- package/core/http/index.ts +140 -0
- package/core/http/middlewareTokens.ts +48 -0
- package/core/http/options.ts +134 -0
- package/core/http-client/index.ts +105 -0
- package/core/infra/Infra.ts +158 -0
- package/core/infra/InfraConnector.ts +86 -0
- package/core/infra/InfraLifecycle.ts +86 -0
- package/core/infra/cache/RedisDistributedCacheBackend.ts +88 -0
- package/core/infra/cache/RedisDistributedCacheDriver.ts +186 -0
- package/core/infra/cache/index.ts +7 -0
- package/core/infra/connectorConfig.ts +29 -0
- package/core/infra/connectorIdentity.ts +39 -0
- package/core/infra/connectors/codex/CodexAppServer.ts +146 -0
- package/core/infra/connectors/codex/CodexAppServerClient.ts +258 -0
- package/core/infra/connectors/codex/CodexPolicy.ts +114 -0
- package/core/infra/connectors/codex/CodexTurn.ts +133 -0
- package/core/infra/connectors/codex/contracts.ts +82 -0
- package/core/infra/connectors/codex.ts +26 -0
- package/core/infra/connectors/llm.ts +78 -0
- package/core/infra/connectors/llmRouter.ts +443 -0
- package/core/infra/connectors/openaiCompatible.ts +590 -0
- package/core/infra/connectors/openaiTextStream.ts +134 -0
- package/core/infra/connectors/opensearch.ts +307 -0
- package/core/infra/connectors/postgres.ts +105 -0
- package/core/infra/connectors/redis.ts +132 -0
- package/core/infra/index.ts +58 -0
- package/core/kernel/ApplicationLifetime.ts +91 -0
- package/core/kernel/Bazis.ts +73 -0
- package/core/kernel/Environment.ts +53 -0
- package/core/kernel/Kernel.ts +391 -0
- package/core/kernel/KernelBuilder.ts +172 -0
- package/core/kernel/LifecycleCoordinator.ts +204 -0
- package/core/kernel/README.md +66 -0
- package/core/kernel/SupervisedHostedService.ts +147 -0
- package/core/kernel/config/ConfigRegistry.ts +48 -0
- package/core/kernel/config/Configuration.ts +110 -0
- package/core/kernel/config/README.md +62 -0
- package/core/kernel/config/Secret.ts +29 -0
- package/core/kernel/config/addConfigOptions.ts +63 -0
- package/core/kernel/config/defineConfig.ts +211 -0
- package/core/kernel/config/sources.ts +123 -0
- package/core/kernel/correlation/requestContext.ts +57 -0
- package/core/kernel/errors/ConfigKeyMissingError.ts +7 -0
- package/core/kernel/errors/KernelError.ts +7 -0
- package/core/kernel/errors/ShutdownTimeoutError.ts +7 -0
- package/core/kernel/errors/StartupAbortedError.ts +7 -0
- package/core/kernel/errors/StartupTimeoutError.ts +7 -0
- package/core/kernel/errors/index.ts +5 -0
- package/core/kernel/events/EventBus.ts +140 -0
- package/core/kernel/events/EventToken.ts +17 -0
- package/core/kernel/events/eventSubscribers.ts +126 -0
- package/core/kernel/events/kernelEvents.ts +16 -0
- package/core/kernel/events/onEvent.ts +32 -0
- package/core/kernel/health/HealthCheckContracts.ts +42 -0
- package/core/kernel/health/HealthService.ts +93 -0
- package/core/kernel/index.ts +96 -0
- package/core/kernel/internal/awaitAbortable.ts +18 -0
- package/core/kernel/internal/awaitShutdown.ts +21 -0
- package/core/kernel/internal/reportDiagnosticFailure.ts +8 -0
- package/core/kernel/internal/validateTimeout.ts +8 -0
- package/core/kernel/lifecycleHooks.ts +18 -0
- package/core/kernel/logging/ConsoleLogger.ts +68 -0
- package/core/kernel/logging/Logger.ts +22 -0
- package/core/kernel/types/ConfigSource.ts +9 -0
- package/core/kernel/types/EnvironmentName.ts +1 -0
- package/core/kernel/types/KernelOptions.ts +23 -0
- package/core/kernel/types/LifecycleHook.ts +18 -0
- package/core/kernel/types/index.ts +4 -0
- package/core/orm/DATABASE_PROVIDER.ts +5 -0
- package/core/orm/OrmHostedPlan.validator.ts +55 -0
- package/core/orm/OrmLifecycle.ts +146 -0
- package/core/orm/OrmOwnedStoreLifecycle.ts +96 -0
- package/core/orm/buildOrmProviders.ts +152 -0
- package/core/orm/databaseConnector.ts +108 -0
- package/core/orm/encapsulationHook.ts +19 -0
- package/core/orm/index.ts +95 -0
- package/core/orm/listQuery.ts +198 -0
- package/core/orm/ormModule.ts +173 -0
- package/core/orm/ownedStoreContributions.ts +195 -0
- package/core/orm/registerRepositories.ts +27 -0
- package/core/orm/repository.ts +45 -0
- package/core/orm/strictSchemaHostedIdentity.ts +17 -0
- package/core/scripts/agent-codegen.ts +1166 -0
- package/core/scripts/di-generate-target.ts +90 -0
- package/core/scripts/di-generate.ts +1837 -0
- package/core/scripts/orm-predicate-codegen.ts +33 -0
- package/core/scripts/request-model-codegen.ts +326 -0
- package/core/websocket/DESIGN.md +297 -0
- package/core/websocket/WsRateLimiter.ts +101 -0
- package/core/websocket/adapter/adapter.interface.ts +45 -0
- package/core/websocket/adapter/in-memory.adapter.ts +190 -0
- package/core/websocket/adapter/redis-delivery-scripts.ts +135 -0
- package/core/websocket/adapter/redis-delivery-store.ts +86 -0
- package/core/websocket/adapter/redis-operations.ts +33 -0
- package/core/websocket/adapter/redis.adapter.ts +218 -0
- package/core/websocket/codec/binary.codec.ts +87 -0
- package/core/websocket/codec/json.codec.ts +34 -0
- package/core/websocket/codec/packet-codec.interface.ts +17 -0
- package/core/websocket/decorators.ts +165 -0
- package/core/websocket/explorer.ts +126 -0
- package/core/websocket/index.ts +78 -0
- package/core/websocket/middleware.ts +146 -0
- package/core/websocket/packet-codec.ts +75 -0
- package/core/websocket/reliable-delivery.ts +56 -0
- package/core/websocket/session-creation.ts +16 -0
- package/core/websocket/session-manager.ts +856 -0
- package/core/websocket/socket-wrapper.ts +314 -0
- package/core/websocket/topic-cache.ts +59 -0
- package/core/websocket/types.ts +122 -0
- package/core/websocket/websocketModule.ts +96 -0
- package/core/websocket/ws-dispatch.ts +123 -0
- package/core/websocket/ws-server.ts +1707 -0
- package/index.ts +281 -0
- package/library/boundary/diagnostics-v1.ts +136 -0
- package/library/boundary/index.ts +73 -0
- package/library/boundary/json/decodeBoundedJsonV1.ts +518 -0
- package/library/boundary/json/limits-v1.ts +46 -0
- package/library/boundary/json/normalizeBoundedJsonV1.ts +256 -0
- package/library/boundary/json/types-v1.ts +11 -0
- package/library/boundary/schema/boundarySchemaHashV1.ts +6 -0
- package/library/boundary/schema/collectBoundaryValueDiagnosticsV1.ts +325 -0
- package/library/boundary/schema/decodeBoundarySchemaV1.ts +646 -0
- package/library/boundary/schema/index.ts +8 -0
- package/library/boundary/schema/types-v1.ts +99 -0
- package/library/boundary/schema/validateBoundaryValueV1.ts +58 -0
- package/library/boundary/serialization/canonicalJsonV1.ts +66 -0
- package/library/http-client/HttpClient.ts +969 -0
- package/library/http-client/HttpClientFactory.ts +45 -0
- package/library/http-client/errors.ts +68 -0
- package/library/http-client/index.ts +43 -0
- package/library/http-client/interceptors.ts +40 -0
- package/library/http-client/progress.ts +62 -0
- package/library/http-client/redirectProtocol.ts +6 -0
- package/library/http-client/serialize.ts +133 -0
- package/library/http-client/types.ts +174 -0
- package/library/jsonapi/ListQueryError.ts +25 -0
- package/library/jsonapi/ListRequest.ts +37 -0
- package/library/jsonapi/decorators.ts +161 -0
- package/library/jsonapi/document.ts +124 -0
- package/library/jsonapi/index.ts +40 -0
- package/library/jsonapi/parseListQuery.ts +291 -0
- package/library/jsonapi/types.ts +125 -0
- package/library/jwt/JwtEncoder.ts +40 -0
- package/library/jwt/JwtKeyRing.ts +164 -0
- package/library/jwt/JwtValidator.ts +210 -0
- package/library/jwt/TokenIssuer.ts +149 -0
- package/library/jwt/TokenService.ts +51 -0
- package/library/jwt/base64url.ts +61 -0
- package/library/jwt/claims.ts +36 -0
- package/library/jwt/errors.ts +44 -0
- package/library/jwt/index.ts +59 -0
- package/library/jwt/limits.ts +8 -0
- package/library/jwt/signing/Hs256Algorithm.ts +62 -0
- package/library/jwt/signing/Rs256Algorithm.ts +133 -0
- package/library/jwt/signing/SigningAlgorithm.ts +18 -0
- package/library/jwt/signing/pem.ts +30 -0
- package/library/openapi/codegen.ts +875 -0
- package/library/openapi/document.ts +326 -0
- package/library/openapi/index.ts +13 -0
- package/library/openapi/types.ts +69 -0
- package/library/openapi/ui.ts +182 -0
- package/library/orm/DatabaseFacade.ts +209 -0
- package/library/orm/DbContext.ts +107 -0
- package/library/orm/DbContextFactory.ts +25 -0
- package/library/orm/DbContextOptions.ts +33 -0
- package/library/orm/Metadata/DynamicModelBuilder.ts +497 -0
- package/library/orm/Metadata/KeyTuple.ts +36 -0
- package/library/orm/Metadata/ModelBuilder.ts +299 -0
- package/library/orm/Metadata/OrmModel.ts +80 -0
- package/library/orm/Metadata/ValueConverter.ts +57 -0
- package/library/orm/Metadata/conventions.ts +54 -0
- package/library/orm/Metadata/decorators.ts +396 -0
- package/library/orm/Metadata/types.ts +140 -0
- package/library/orm/Providers/OwnedStoreCatalog.reader.ts +1802 -0
- package/library/orm/Providers/PostgresDialect.ts +234 -0
- package/library/orm/Providers/PostgresProvider.ts +1494 -0
- package/library/orm/Providers/PostgresSchema.decoder.ts +107 -0
- package/library/orm/Providers/limits.ts +29 -0
- package/library/orm/Providers/operationDeadline.ts +43 -0
- package/library/orm/Providers/ormOwnedStoreRuntime.ts +19 -0
- package/library/orm/Providers/ormTransactionRuntime.ts +117 -0
- package/library/orm/Providers/propertyConversion.ts +14 -0
- package/library/orm/Providers/resolvedForeignKey.ts +16 -0
- package/library/orm/Providers/transactionCallbacks.ts +45 -0
- package/library/orm/Providers/transactionOutcome.ts +82 -0
- package/library/orm/Providers/transactionScopes.ts +78 -0
- package/library/orm/Providers/types.ts +207 -0
- package/library/orm/Query/DbSet.ts +78 -0
- package/library/orm/Query/EntityQuery.ts +247 -0
- package/library/orm/Query/ImmediateMutations.ts +226 -0
- package/library/orm/Query/IncludeLoader.ts +200 -0
- package/library/orm/Query/QueryPlan.ts +55 -0
- package/library/orm/Query/SqlTranslator.ts +195 -0
- package/library/orm/Query/conditions.ts +127 -0
- package/library/orm/Query/materialize.ts +39 -0
- package/library/orm/README.md +256 -0
- package/library/orm/Repository/README.md +684 -0
- package/library/orm/Repository/Repository.ts +68 -0
- package/library/orm/Saving/CommandBuilder.ts +139 -0
- package/library/orm/Saving/ExecutionStrategy.ts +128 -0
- package/library/orm/Saving/SaveExecutor.ts +413 -0
- package/library/orm/Saving/applyConventions.ts +64 -0
- package/library/orm/Schema/CheckExpression.ts +327 -0
- package/library/orm/Schema/ExactSchemaVerifier.ts +168 -0
- package/library/orm/Schema/ExpectedSchema.ts +43 -0
- package/library/orm/Schema/MigrationRunner.ts +146 -0
- package/library/orm/Schema/Migrator.ts +73 -0
- package/library/orm/Schema/OrmOwnedStore.ts +123 -0
- package/library/orm/Schema/OwnedStoreAdmission.ts +752 -0
- package/library/orm/Schema/OwnedStoreCanonical.ts +273 -0
- package/library/orm/Schema/OwnedStoreCatalog.ts +1325 -0
- package/library/orm/Schema/SafeAdditiveSchema.ts +100 -0
- package/library/orm/Schema/SchemaAdmission.ts +62 -0
- package/library/orm/Schema/SchemaDiffer.ts +78 -0
- package/library/orm/Schema/formatSchemaDifferences.ts +62 -0
- package/library/orm/Schema/introspection.ts +52 -0
- package/library/orm/Schema/physicalColumnTypes.ts +37 -0
- package/library/orm/Schema/tableKey.ts +26 -0
- package/library/orm/Tracking/ChangeTracker.ts +448 -0
- package/library/orm/Tracking/EntityState.ts +13 -0
- package/library/orm/Transactions/OrmTransaction.ts +30 -0
- package/library/orm/Transactions/TransactionScopeCoordinator.ts +377 -0
- package/library/orm/errors.ts +190 -0
- package/library/orm/index.ts +162 -0
- package/library/orm/runtime.ts +14 -0
- package/library/redaction/index.ts +166 -0
- package/library/ui/UiProfile.ts +77 -0
- package/library/ui/compiled-v1.ts +131 -0
- package/library/ui/compiler/compileUiSurfaceV1.ts +717 -0
- package/library/ui/compiler/contracts-v1.ts +25 -0
- package/library/ui/compiler/index.ts +12 -0
- package/library/ui/compiler/openApiIndex.ts +246 -0
- package/library/ui/defineUiProfile.ts +340 -0
- package/library/ui/diagnostics-v1.ts +33 -0
- package/library/ui/index.ts +129 -0
- package/library/ui/profile-v1.ts +191 -0
- package/library/ui/serialization.ts +130 -0
- package/library/ui/uiProfileAuthoring.ts +289 -0
- package/library/ui/uiProfileAuthoringMetadata.ts +78 -0
- package/library/validation/MessageRegistry.ts +144 -0
- package/library/validation/README.md +62 -0
- package/library/validation/RuleCompiler.ts +183 -0
- package/library/validation/RuleEngine.ts +401 -0
- package/library/validation/SPEC.md +579 -0
- package/library/validation/ValidationError.ts +37 -0
- package/library/validation/ValidationResult.ts +63 -0
- package/library/validation/Validator.ts +101 -0
- package/library/validation/index.ts +16 -0
- package/library/validation/metadata.ts +69 -0
- package/library/validation/modelValidatorAdapter.ts +119 -0
- package/library/validation/types/ValidationCode.ts +69 -0
- package/library/validation/types/ValidatorOptions.ts +153 -0
- package/package.json +80 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { Token } from "../token";
|
|
2
|
+
|
|
3
|
+
export interface NamedDependencyEncapsulationContext {
|
|
4
|
+
readonly depName: string;
|
|
5
|
+
readonly consumer: string;
|
|
6
|
+
readonly moduleName: string;
|
|
7
|
+
readonly visible: ReadonlySet<Token<unknown>>;
|
|
8
|
+
readonly familiesVisible: ReadonlySet<symbol>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Return `true` when the named dependency is allowed despite encapsulation rules.
|
|
13
|
+
* Return `undefined` to fall through to default DI validation.
|
|
14
|
+
*/
|
|
15
|
+
export type NamedDependencyEncapsulationHook = (
|
|
16
|
+
context: NamedDependencyEncapsulationContext,
|
|
17
|
+
) => boolean | undefined;
|
|
18
|
+
|
|
19
|
+
const namedDependencyHooks: NamedDependencyEncapsulationHook[] = [];
|
|
20
|
+
|
|
21
|
+
/** Infrastructure extensions (ORM open generics, …) plug in named-dep rules here. */
|
|
22
|
+
export function registerNamedDependencyEncapsulationHook(hook: NamedDependencyEncapsulationHook): void {
|
|
23
|
+
namedDependencyHooks.push(hook);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function applyNamedDependencyEncapsulationHooks(
|
|
27
|
+
context: NamedDependencyEncapsulationContext,
|
|
28
|
+
): boolean {
|
|
29
|
+
for (let index = 0; index < namedDependencyHooks.length; index += 1) {
|
|
30
|
+
const result = namedDependencyHooks[index]!(context);
|
|
31
|
+
if (result === true) {
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import type { Class } from "../token";
|
|
2
|
+
|
|
3
|
+
/** Package-internal capability used only as an exact-class generated metadata key. */
|
|
4
|
+
export interface GeneratedProviderAttachmentChannel<T> {
|
|
5
|
+
readonly kind: "generatedProviderAttachment";
|
|
6
|
+
readonly description: string;
|
|
7
|
+
normalize(target: Class<object>, value: unknown): T;
|
|
8
|
+
equals?(left: T, right: T): boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface GeneratedProviderAttachmentV1 {
|
|
12
|
+
readonly channel: GeneratedProviderAttachmentChannel<unknown>;
|
|
13
|
+
readonly target: Class<object>;
|
|
14
|
+
readonly value: unknown;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
type AnyChannel = GeneratedProviderAttachmentChannel<unknown>;
|
|
18
|
+
type Store = Map<AnyChannel, Map<Class<object>, unknown>>;
|
|
19
|
+
type PreparedEntry = Readonly<{ channel: AnyChannel; target: Class<object>; value: unknown }>;
|
|
20
|
+
export interface PreparedGeneratedProviderAttachments { readonly entries: readonly PreparedEntry[]; }
|
|
21
|
+
|
|
22
|
+
let attachments: Store = new Map();
|
|
23
|
+
|
|
24
|
+
export function createGeneratedProviderAttachmentChannel<T>(input: Readonly<{
|
|
25
|
+
description: string;
|
|
26
|
+
normalize(target: Class<object>, value: unknown): T;
|
|
27
|
+
equals?(left: T, right: T): boolean;
|
|
28
|
+
}>): GeneratedProviderAttachmentChannel<T> {
|
|
29
|
+
const description = input.description.trim();
|
|
30
|
+
if (description.length === 0 || typeof input.normalize !== "function") {
|
|
31
|
+
throw new TypeError("Generated provider attachment channel is invalid.");
|
|
32
|
+
}
|
|
33
|
+
return Object.freeze({
|
|
34
|
+
kind: "generatedProviderAttachment" as const,
|
|
35
|
+
description,
|
|
36
|
+
normalize: input.normalize,
|
|
37
|
+
equals: input.equals,
|
|
38
|
+
}) as GeneratedProviderAttachmentChannel<T>;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** Exact-class query only; intentionally no channel or attachment enumeration API exists. */
|
|
42
|
+
export function getGeneratedProviderAttachment<T>(
|
|
43
|
+
channel: GeneratedProviderAttachmentChannel<T>,
|
|
44
|
+
target: Class<object>,
|
|
45
|
+
): T | undefined {
|
|
46
|
+
return attachments.get(channel as AnyChannel)?.get(target) as T | undefined;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** @internal Snapshot participates in generated-target atomic commit/rollback. */
|
|
50
|
+
export function snapshotGeneratedProviderAttachments(): Store {
|
|
51
|
+
return new Map([...attachments].map(([channel, entries]) => [channel, new Map(entries)]));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/** @internal Restores generated attachment state after failed target publication. */
|
|
55
|
+
export function restoreGeneratedProviderAttachments(snapshot: Store): void {
|
|
56
|
+
attachments = new Map([...snapshot].map(([channel, entries]) => [channel, new Map(entries)]));
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** @internal Validates and publishes a target's complete exact-class attachment slice. */
|
|
60
|
+
/** @internal Validates every attachment before any generated target owner is mutated. */
|
|
61
|
+
export function prepareGeneratedProviderAttachments(
|
|
62
|
+
entries: readonly GeneratedProviderAttachmentV1[] | undefined,
|
|
63
|
+
): PreparedGeneratedProviderAttachments {
|
|
64
|
+
if (entries === undefined) return Object.freeze({ entries: Object.freeze([]) });
|
|
65
|
+
if (!Array.isArray(entries)) throw new TypeError("Generated provider attachments must be an array.");
|
|
66
|
+
const normalized: readonly PreparedEntry[] = entries.map((entry) => {
|
|
67
|
+
if (entry === null || typeof entry !== "object" || entry.channel?.kind !== "generatedProviderAttachment"
|
|
68
|
+
|| typeof entry.target !== "function") {
|
|
69
|
+
throw new TypeError("Generated provider attachment is invalid.");
|
|
70
|
+
}
|
|
71
|
+
const channel = entry.channel as AnyChannel;
|
|
72
|
+
return Object.freeze({ channel, target: entry.target, value: channel.normalize(entry.target, entry.value) });
|
|
73
|
+
});
|
|
74
|
+
const own = new Map<AnyChannel, Set<Class<object>>>();
|
|
75
|
+
for (const entry of normalized) {
|
|
76
|
+
const targets = own.get(entry.channel) ?? new Set<Class<object>>();
|
|
77
|
+
if (targets.has(entry.target)) throw new TypeError(`Generated provider attachment is duplicated for ${entry.channel.description}.`);
|
|
78
|
+
targets.add(entry.target); own.set(entry.channel, targets);
|
|
79
|
+
const current = attachments.get(entry.channel)?.get(entry.target);
|
|
80
|
+
if (current !== undefined && !(entry.channel.equals?.(current, entry.value) ?? Object.is(current, entry.value))) {
|
|
81
|
+
throw new TypeError(`Generated provider attachment diverges for ${entry.channel.description}.`);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
return Object.freeze({ entries: Object.freeze([...normalized]) });
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** @internal Commits a previously validated attachment slice inside the target transaction. */
|
|
88
|
+
export function commitGeneratedProviderAttachments(prepared: PreparedGeneratedProviderAttachments): void {
|
|
89
|
+
for (const entry of prepared.entries) {
|
|
90
|
+
let targets = attachments.get(entry.channel);
|
|
91
|
+
if (targets === undefined) {
|
|
92
|
+
targets = new Map();
|
|
93
|
+
attachments.set(entry.channel, targets);
|
|
94
|
+
}
|
|
95
|
+
if (!targets.has(entry.target)) targets.set(entry.target, entry.value);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/** @internal Convenience only for isolated tests; generated target runtime uses prepare + commit. */
|
|
100
|
+
export function registerGeneratedProviderAttachments(entries: readonly GeneratedProviderAttachmentV1[] | undefined): void {
|
|
101
|
+
commitGeneratedProviderAttachments(prepareGeneratedProviderAttachments(entries));
|
|
102
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export { DI } from "./DI";
|
|
2
|
+
export { Global, markGlobal } from "./Global";
|
|
3
|
+
export { Module } from "./Module";
|
|
4
|
+
export type { DiRegistrar, ModuleConfig, ModuleExport, BazisModule, BazisModuleMetadata, BazisModuleRef } from "./types";
|
|
5
|
+
export { ModuleRegistrar } from "./ModuleRegistrar";
|
|
6
|
+
export {
|
|
7
|
+
registerModuleMetadataExpander,
|
|
8
|
+
expandModuleMetadata,
|
|
9
|
+
type ModuleMetadataExpander,
|
|
10
|
+
} from "./moduleExtensions";
|
|
11
|
+
export {
|
|
12
|
+
createModuleOwnedMetadataChannel,
|
|
13
|
+
createModuleOwnedProviderChannel,
|
|
14
|
+
registerModuleOwnedContributionValidator,
|
|
15
|
+
registerModuleOwnedProviderContributor,
|
|
16
|
+
type ModuleOwnedContributionChannel,
|
|
17
|
+
type ModuleOwnedContributionSnapshot,
|
|
18
|
+
type ModuleOwnedValidationSnapshot,
|
|
19
|
+
type ModuleOwnedContributionValidator,
|
|
20
|
+
type ModuleOwnedMetadataChannel,
|
|
21
|
+
type ModuleOwnedMetadataContribution,
|
|
22
|
+
type ModuleOwnedProviderActivation,
|
|
23
|
+
type ModuleOwnedProviderChannel,
|
|
24
|
+
type ModuleOwnedProviderContribution,
|
|
25
|
+
type ModuleOwnedProviderContributionContext,
|
|
26
|
+
type ModuleOwnedProviderContributor,
|
|
27
|
+
} from "./moduleOwnedProviderContributors";
|
|
28
|
+
export { createContainer } from "./createContainer";
|
|
29
|
+
export { collectModuleControllers } from "./collectModuleControllers";
|
|
30
|
+
export { collectModuleConfigs } from "./collectModuleConfigs";
|
|
31
|
+
export { collectModuleUiProfiles } from "./collectModuleUiProfiles";
|
|
32
|
+
export {
|
|
33
|
+
scoped,
|
|
34
|
+
singleton,
|
|
35
|
+
singletonAsyncFactory,
|
|
36
|
+
singletonAsyncFactoryWithResolver,
|
|
37
|
+
singletonFactory,
|
|
38
|
+
singletonFactoryWithResolver,
|
|
39
|
+
singletonValue,
|
|
40
|
+
transient,
|
|
41
|
+
} from "./shortcuts";
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { BazisModuleMetadata, BazisModuleRef } from "./types";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Turns extra `@Module` metadata keys into imported modules.
|
|
5
|
+
*
|
|
6
|
+
* The DI core is the foundation layer and must not know about higher modules
|
|
7
|
+
* (ORM, HTTP, …). To keep ergonomic, declarative keys like `ormBazis` without
|
|
8
|
+
* inverting that dependency, higher layers register an expander here (via a
|
|
9
|
+
* side-effect import, like the repository encapsulation hook). At build time
|
|
10
|
+
* `createContainer` runs every expander over each module's metadata and loads
|
|
11
|
+
* the returned modules as if they were listed in `imports`.
|
|
12
|
+
*/
|
|
13
|
+
export type ModuleMetadataExpander = (metadata: BazisModuleMetadata) => readonly BazisModuleRef[];
|
|
14
|
+
|
|
15
|
+
const expanders: ModuleMetadataExpander[] = [];
|
|
16
|
+
|
|
17
|
+
/** Registers a metadata expander (idempotent per function reference). */
|
|
18
|
+
export function registerModuleMetadataExpander(expander: ModuleMetadataExpander): void {
|
|
19
|
+
if (!expanders.includes(expander)) {
|
|
20
|
+
expanders.push(expander);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/** Collects extra module refs contributed by registered expanders for a module. */
|
|
25
|
+
export function expandModuleMetadata(metadata: BazisModuleMetadata): readonly BazisModuleRef[] {
|
|
26
|
+
if (expanders.length === 0) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
const extra: BazisModuleRef[] = [];
|
|
30
|
+
for (let index = 0; index < expanders.length; index += 1) {
|
|
31
|
+
const expander = expanders[index] as ModuleMetadataExpander;
|
|
32
|
+
extra.push(...expander(metadata));
|
|
33
|
+
}
|
|
34
|
+
return extra;
|
|
35
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { AmbiguousNamedDependencyError } from "../errors";
|
|
2
|
+
import { getProviderDeps, withProviderDeps } from "../internal/providerDeps";
|
|
3
|
+
import {
|
|
4
|
+
isLazyDependency,
|
|
5
|
+
isNamedDependency,
|
|
6
|
+
lazyDependency,
|
|
7
|
+
ProviderDefinition,
|
|
8
|
+
} from "../provider";
|
|
9
|
+
import type { ProviderDependencyList } from "../provider";
|
|
10
|
+
import { tokenToDebugName, type Token } from "../token";
|
|
11
|
+
import { computeModuleVisibleTokens, type ModuleGraphRecord } from "./encapsulation";
|
|
12
|
+
|
|
13
|
+
type Dependency = ProviderDependencyList[number];
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Module-scoped resolution of name-based auto dependencies.
|
|
17
|
+
*
|
|
18
|
+
* Auto deps are reflection-free, so they bind by *type name*. Resolving those
|
|
19
|
+
* names globally would force every token's debug name to be unique across the
|
|
20
|
+
* whole application — a real tax at enterprise scale (two bounded contexts each
|
|
21
|
+
* with an `IRepository`). Instead we resolve each provider's named dependencies
|
|
22
|
+
* against the tokens visible to the module that declared it:
|
|
23
|
+
*
|
|
24
|
+
* - exactly one visible token with that name -> bind to it (becomes a concrete
|
|
25
|
+
* token, so the hot resolve path skips the name lookup entirely);
|
|
26
|
+
* - several visible tokens share the name -> {@link AmbiguousNamedDependencyError}
|
|
27
|
+
* at build time (fail fast), instead of a late surprise on first resolve;
|
|
28
|
+
* - none visible -> leave the named dependency untouched so the container's
|
|
29
|
+
* global index can still resolve it. This preserves the fully-open default
|
|
30
|
+
* where a service may depend on a sibling module's token without importing it.
|
|
31
|
+
*
|
|
32
|
+
* Runs once at `createContainer`, after encapsulation validation; the resolution
|
|
33
|
+
* hot path is untouched.
|
|
34
|
+
*/
|
|
35
|
+
export function bindModuleScopedNames(
|
|
36
|
+
definitions: readonly ProviderDefinition[],
|
|
37
|
+
recordOf: ReadonlyMap<ProviderDefinition, ModuleGraphRecord>,
|
|
38
|
+
records: readonly ModuleGraphRecord[],
|
|
39
|
+
): ProviderDefinition[] {
|
|
40
|
+
const bind = createModuleScopedNameBinder(records);
|
|
41
|
+
return definitions.map((definition) => {
|
|
42
|
+
const record = recordOf.get(definition);
|
|
43
|
+
return record ? bind(definition, record) : definition;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Reuses module visibility for ordinary and later materialized providers. */
|
|
48
|
+
export function createModuleScopedNameBinder(
|
|
49
|
+
records: readonly ModuleGraphRecord[],
|
|
50
|
+
): (definition: ProviderDefinition, record: ModuleGraphRecord) => ProviderDefinition {
|
|
51
|
+
const visibleByRecord = computeModuleVisibleTokens(records);
|
|
52
|
+
const nameMapCache = new Map<ModuleGraphRecord, Map<string, Token<unknown>[]>>();
|
|
53
|
+
|
|
54
|
+
const nameMapFor = (record: ModuleGraphRecord): Map<string, Token<unknown>[]> => {
|
|
55
|
+
const cached = nameMapCache.get(record);
|
|
56
|
+
if (cached) {
|
|
57
|
+
return cached;
|
|
58
|
+
}
|
|
59
|
+
const map = new Map<string, Token<unknown>[]>();
|
|
60
|
+
const visible = visibleByRecord.get(record);
|
|
61
|
+
if (visible) {
|
|
62
|
+
for (const token of visible) {
|
|
63
|
+
const name = tokenToDebugName(token);
|
|
64
|
+
const bucket = map.get(name);
|
|
65
|
+
if (bucket) {
|
|
66
|
+
if (!bucket.includes(token)) {
|
|
67
|
+
bucket.push(token);
|
|
68
|
+
}
|
|
69
|
+
} else {
|
|
70
|
+
map.set(name, [token]);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
nameMapCache.set(record, map);
|
|
75
|
+
return map;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
return (definition, record) => rebindDefinition(definition, nameMapFor(record));
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function rebindDefinition(
|
|
82
|
+
definition: ProviderDefinition,
|
|
83
|
+
nameMap: Map<string, Token<unknown>[]>,
|
|
84
|
+
): ProviderDefinition {
|
|
85
|
+
const provider = definition.provider;
|
|
86
|
+
const deps = getProviderDeps(provider);
|
|
87
|
+
if (deps.length === 0) {
|
|
88
|
+
return definition;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
let changed = false;
|
|
92
|
+
const next: Dependency[] = new Array(deps.length);
|
|
93
|
+
for (let index = 0; index < deps.length; index += 1) {
|
|
94
|
+
const dep = deps[index] as Dependency;
|
|
95
|
+
const rebound = rebindDependency(dep, nameMap);
|
|
96
|
+
next[index] = rebound;
|
|
97
|
+
if (rebound !== dep) {
|
|
98
|
+
changed = true;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
if (!changed) {
|
|
102
|
+
return definition;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const nextProvider = withProviderDeps(provider, next);
|
|
106
|
+
return new ProviderDefinition(nextProvider, definition.lifetime, definition.key);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function rebindDependency(dep: Dependency, nameMap: Map<string, Token<unknown>[]>): Dependency {
|
|
110
|
+
if (dep === undefined) {
|
|
111
|
+
return dep;
|
|
112
|
+
}
|
|
113
|
+
if (isLazyDependency(dep)) {
|
|
114
|
+
const inner = dep.inner;
|
|
115
|
+
if (isNamedDependency(inner)) {
|
|
116
|
+
const token = resolveName(inner.name, nameMap);
|
|
117
|
+
return token ? lazyDependency(token) : dep;
|
|
118
|
+
}
|
|
119
|
+
return dep;
|
|
120
|
+
}
|
|
121
|
+
if (isNamedDependency(dep)) {
|
|
122
|
+
return resolveName(dep.name, nameMap) ?? dep;
|
|
123
|
+
}
|
|
124
|
+
return dep;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function resolveName(name: string, nameMap: Map<string, Token<unknown>[]>): Token<unknown> | undefined {
|
|
128
|
+
const tokens = nameMap.get(name);
|
|
129
|
+
if (!tokens || tokens.length === 0) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
if (tokens.length > 1) {
|
|
133
|
+
throw new AmbiguousNamedDependencyError(name);
|
|
134
|
+
}
|
|
135
|
+
return tokens[0];
|
|
136
|
+
}
|