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.
Files changed (513) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/cli/build.ts +147 -0
  4. package/cli/codegen.ts +40 -0
  5. package/cli/generateModule.ts +187 -0
  6. package/cli/generateProject.ts +183 -0
  7. package/cli/main.ts +125 -0
  8. package/cli/moduleRegistration.ts +127 -0
  9. package/cli/naming.ts +124 -0
  10. package/cli/parseCli.ts +151 -0
  11. package/cli/templates/module.ts +497 -0
  12. package/cli/templates/pack.ts +76 -0
  13. package/cli/templates/passport.ts +178 -0
  14. package/core/agent/AgentContextBuilder.ts +567 -0
  15. package/core/agent/AgentDataDefinition.ts +8 -0
  16. package/core/agent/AgentRegistry.ts +539 -0
  17. package/core/agent/AgentRuntime.ts +47 -0
  18. package/core/agent/AgentToolExecutor.ts +2130 -0
  19. package/core/agent/AgentToolHooks.ts +39 -0
  20. package/core/agent/ModelProvider.ts +21 -0
  21. package/core/agent/README.md +229 -0
  22. package/core/agent/Tool.contract.ts +20 -0
  23. package/core/agent/decorators/Agent.ts +11 -0
  24. package/core/agent/decorators/Prompt.ts +11 -0
  25. package/core/agent/decorators/Task.ts +29 -0
  26. package/core/agent/decorators/Tool.ts +12 -0
  27. package/core/agent/errors.ts +43 -0
  28. package/core/agent/generated/catalog.ts +26 -0
  29. package/core/agent/index.ts +170 -0
  30. package/core/agent/internal/AgentExecutionDriver.ts +1497 -0
  31. package/core/agent/internal/AgentExecutionState.ts +775 -0
  32. package/core/agent/internal/AgentJsonSchema.ts +150 -0
  33. package/core/agent/internal/AgentModelBinding.ts +57 -0
  34. package/core/agent/internal/Schema.contract.ts +36 -0
  35. package/core/agent/internal/ToolAudit.projector.ts +163 -0
  36. package/core/agent/internal/ToolContract.validator.ts +102 -0
  37. package/core/agent/metadata.ts +398 -0
  38. package/core/agent/moduleContributions-v1.ts +113 -0
  39. package/core/agent/semantic.ts +903 -0
  40. package/core/agent/session/codec.ts +33 -0
  41. package/core/agent/session/contracts.ts +96 -0
  42. package/core/agent/session/entities.ts +84 -0
  43. package/core/agent/session/protector.ts +92 -0
  44. package/core/app/index.ts +5 -0
  45. package/core/app/runApp.ts +293 -0
  46. package/core/app/ui/index.ts +29 -0
  47. package/core/app/ui/uiProfileResolver.ts +966 -0
  48. package/core/app/ui/uiSurfaceHosting.ts +38 -0
  49. package/core/app/ui/uiSurfaceHttp.ts +476 -0
  50. package/core/background/BackgroundService.ts +223 -0
  51. package/core/background/backgroundModule.ts +42 -0
  52. package/core/background/decorator.ts +43 -0
  53. package/core/background/delay.ts +27 -0
  54. package/core/background/index.ts +15 -0
  55. package/core/cache/COMPATIBILITY.md +13 -0
  56. package/core/cache/ICache.ts +71 -0
  57. package/core/cache/MemoryCache.ts +394 -0
  58. package/core/cache/README.md +83 -0
  59. package/core/cache/SPEC.md +1355 -0
  60. package/core/cache/cacheModule.ts +21 -0
  61. package/core/cache/decorators/Cacheable.ts +38 -0
  62. package/core/cache/decorators/CacheableRedis.ts +39 -0
  63. package/core/cache/decorators/OutputCache.ts +33 -0
  64. package/core/cache/decorators/OutputRedisCache.ts +33 -0
  65. package/core/cache/decorators/cacheableMetadata.ts +78 -0
  66. package/core/cache/decorators/cacheableRedisMetadata.ts +81 -0
  67. package/core/cache/decorators/outputCacheMetadata.ts +71 -0
  68. package/core/cache/decorators/outputRedisCacheMetadata.ts +77 -0
  69. package/core/cache/di/classProviderHook.ts +26 -0
  70. package/core/cache/distributed/CacheCodec.ts +5 -0
  71. package/core/cache/distributed/DistributedCache.ts +403 -0
  72. package/core/cache/distributed/DistributedCacheDriver.ts +83 -0
  73. package/core/cache/distributed/DistributedCacheStores.ts +28 -0
  74. package/core/cache/distributed/IDistributedCache.ts +40 -0
  75. package/core/cache/distributed/NamedCacheRegistry.ts +23 -0
  76. package/core/cache/distributed/codecs.ts +32 -0
  77. package/core/cache/distributed/index.ts +19 -0
  78. package/core/cache/errors/CacheError.ts +16 -0
  79. package/core/cache/http/CachedHttpPayload.ts +213 -0
  80. package/core/cache/http/applyClientCacheHeaders.ts +61 -0
  81. package/core/cache/http/buildOutputCacheKey.ts +154 -0
  82. package/core/cache/http/buildRedisOutputCacheKey.ts +16 -0
  83. package/core/cache/http/composeOutputCache.ts +130 -0
  84. package/core/cache/http/outputCacheMiddleware.ts +111 -0
  85. package/core/cache/http/outputCacheSecurityWarning.ts +58 -0
  86. package/core/cache/http/outputRedisCacheMiddleware.ts +118 -0
  87. package/core/cache/index.ts +97 -0
  88. package/core/cache/internal/AutomaticCacheKey.ts +106 -0
  89. package/core/cache/internal/CacheKeyGuard.ts +56 -0
  90. package/core/cache/internal/buildCacheProviders.ts +146 -0
  91. package/core/cache/internal/normalizeCacheKey.ts +9 -0
  92. package/core/cache/internal/resolveCachePolicy.ts +32 -0
  93. package/core/cache/internal/resolveCacheableRedisPolicy.ts +17 -0
  94. package/core/cache/internal/resolveOutputRedisCachePolicy.ts +17 -0
  95. package/core/cache/providers/cachedProviders.ts +68 -0
  96. package/core/cache/services/cacheProxy.ts +243 -0
  97. package/core/cache/tokens/CACHE_POLICIES.ts +5 -0
  98. package/core/cache/tokens/DISTRIBUTED_CACHE.ts +30 -0
  99. package/core/cache/types/CacheEntry.ts +7 -0
  100. package/core/cache/types/CacheOptions.ts +60 -0
  101. package/core/cache/types/CachePolicy.ts +74 -0
  102. package/core/cache/types/CacheableRedisOptions.ts +23 -0
  103. package/core/cache/types/OutputRedisCacheOptions.ts +25 -0
  104. package/core/di/README.md +104 -0
  105. package/core/di/ServiceCollection.ts +185 -0
  106. package/core/di/ServiceProvider.ts +689 -0
  107. package/core/di/ServiceScope.ts +61 -0
  108. package/core/di/container.ts +38 -0
  109. package/core/di/errors/AmbiguousNamedDependencyError.ts +10 -0
  110. package/core/di/errors/AsyncResolutionRequiredError.ts +12 -0
  111. package/core/di/errors/CircularDependencyError.ts +10 -0
  112. package/core/di/errors/ClassDependenciesMismatchError.ts +15 -0
  113. package/core/di/errors/DiError.ts +6 -0
  114. package/core/di/errors/InvalidProviderError.ts +9 -0
  115. package/core/di/errors/ModuleEncapsulationError.ts +7 -0
  116. package/core/di/errors/ModuleOwnedProviderConflictError.ts +8 -0
  117. package/core/di/errors/NamedDependencyNotFoundError.ts +7 -0
  118. package/core/di/errors/OptionsValidationError.ts +7 -0
  119. package/core/di/errors/ProviderNotFoundError.ts +10 -0
  120. package/core/di/errors/ScopeDisposedError.ts +7 -0
  121. package/core/di/errors/ScopedServiceFromRootError.ts +9 -0
  122. package/core/di/errors/ServiceValidationError.ts +7 -0
  123. package/core/di/errors/index.ts +14 -0
  124. package/core/di/extensions/activator.ts +39 -0
  125. package/core/di/extensions/application.ts +117 -0
  126. package/core/di/extensions/hosted-service.ts +124 -0
  127. package/core/di/extensions/index.ts +23 -0
  128. package/core/di/extensions/options-reloadable.ts +137 -0
  129. package/core/di/extensions/options.ts +91 -0
  130. package/core/di/extensions/service-provider-token.ts +21 -0
  131. package/core/di/index.ts +97 -0
  132. package/core/di/internal/GraphValidator.ts +119 -0
  133. package/core/di/internal/HostedServicePlan.ts +158 -0
  134. package/core/di/internal/NamedTokenIndex.ts +55 -0
  135. package/core/di/internal/OpenGenericRegistration.ts +14 -0
  136. package/core/di/internal/ResolutionPlan.ts +18 -0
  137. package/core/di/internal/ResolutionScopeState.ts +19 -0
  138. package/core/di/internal/ResolutionTracker.ts +153 -0
  139. package/core/di/internal/ScopeLifecycle.ts +159 -0
  140. package/core/di/internal/ServiceRegistration.ts +14 -0
  141. package/core/di/internal/ServiceRegistry.ts +252 -0
  142. package/core/di/internal/classDeps.ts +38 -0
  143. package/core/di/internal/disposal.ts +58 -0
  144. package/core/di/internal/providerDeps.ts +26 -0
  145. package/core/di/module/DI.ts +146 -0
  146. package/core/di/module/Global.ts +25 -0
  147. package/core/di/module/Module.ts +44 -0
  148. package/core/di/module/ModuleRegistrar.ts +69 -0
  149. package/core/di/module/autoDeps.ts +39 -0
  150. package/core/di/module/classProviderHooks.ts +66 -0
  151. package/core/di/module/collectModuleConfigs.ts +57 -0
  152. package/core/di/module/collectModuleControllers.ts +53 -0
  153. package/core/di/module/collectModuleUiProfiles.ts +53 -0
  154. package/core/di/module/createContainer.ts +261 -0
  155. package/core/di/module/encapsulation.ts +416 -0
  156. package/core/di/module/encapsulationHooks.ts +36 -0
  157. package/core/di/module/generatedProviderAttachments.ts +102 -0
  158. package/core/di/module/index.ts +41 -0
  159. package/core/di/module/moduleExtensions.ts +35 -0
  160. package/core/di/module/moduleNameBinding.ts +136 -0
  161. package/core/di/module/moduleOwnedProviderContributors.ts +409 -0
  162. package/core/di/module/providerSelection.ts +90 -0
  163. package/core/di/module/shortcuts.ts +111 -0
  164. package/core/di/module/types/BazisModule.ts +71 -0
  165. package/core/di/module/types/DiRegistrar.ts +24 -0
  166. package/core/di/module/types/index.ts +2 -0
  167. package/core/di/provider/index.ts +26 -0
  168. package/core/di/provider/providerGuards.ts +17 -0
  169. package/core/di/provider/types/AsyncFactoryProvider.ts +15 -0
  170. package/core/di/provider/types/ClassProvider.ts +18 -0
  171. package/core/di/provider/types/FactoryProvider.ts +20 -0
  172. package/core/di/provider/types/KeyedDependency.ts +20 -0
  173. package/core/di/provider/types/LazyDependency.ts +31 -0
  174. package/core/di/provider/types/NamedDependency.ts +16 -0
  175. package/core/di/provider/types/Provider.ts +10 -0
  176. package/core/di/provider/types/ProviderDefinition.ts +11 -0
  177. package/core/di/provider/types/ProviderDependencyList.ts +11 -0
  178. package/core/di/provider/types/ProviderLifetime.ts +1 -0
  179. package/core/di/provider/types/ProviderOwnership.ts +7 -0
  180. package/core/di/provider/types/ResolvedDeps.ts +18 -0
  181. package/core/di/provider/types/ValueProvider.ts +6 -0
  182. package/core/di/provider/types/index.ts +13 -0
  183. package/core/di/token.ts +84 -0
  184. package/core/di/types/BuildServiceProviderOptions.ts +4 -0
  185. package/core/di/types/ServiceKey.ts +1 -0
  186. package/core/di/types/ServiceResolver.ts +16 -0
  187. package/core/di/types/index.ts +3 -0
  188. package/core/generatedFingerprint.ts +60 -0
  189. package/core/generatedRuntime.ts +187 -0
  190. package/core/grpc/Grpc.module.ts +23 -0
  191. package/core/grpc/GrpcBinding.contract.ts +35 -0
  192. package/core/grpc/GrpcCall.ts +73 -0
  193. package/core/grpc/GrpcClient.ts +172 -0
  194. package/core/grpc/GrpcClientCall.ts +267 -0
  195. package/core/grpc/GrpcError.ts +19 -0
  196. package/core/grpc/GrpcRequest.binding.ts +45 -0
  197. package/core/grpc/GrpcServer.ts +204 -0
  198. package/core/grpc/GrpcStatus.ts +8 -0
  199. package/core/grpc/GrpcTransport.ts +174 -0
  200. package/core/grpc/Metadata.ts +73 -0
  201. package/core/grpc/ProtoCodec.ts +225 -0
  202. package/core/grpc/ProtoParser.ts +192 -0
  203. package/core/grpc/ProtoReader.ts +34 -0
  204. package/core/grpc/ProtoSchema.ts +52 -0
  205. package/core/grpc/ServerCredentials.ts +30 -0
  206. package/core/grpc/clientContracts.ts +39 -0
  207. package/core/grpc/contracts.ts +45 -0
  208. package/core/grpc/decorators.ts +82 -0
  209. package/core/grpc/grpcClientProvider.ts +9 -0
  210. package/core/grpc/index.ts +17 -0
  211. package/core/grpc/moduleControllers.ts +38 -0
  212. package/core/grpc/protobuf.ts +80 -0
  213. package/core/grpc/serviceDefinition.ts +20 -0
  214. package/core/http/Authorization/Authorize.ts +52 -0
  215. package/core/http/Authorization/authorizeComposer.ts +31 -0
  216. package/core/http/Authorization/metadata.ts +158 -0
  217. package/core/http/Binding/ParameterBinder.ts +109 -0
  218. package/core/http/Binding/RequestModel.ts +27 -0
  219. package/core/http/Binding/autoBindings.ts +125 -0
  220. package/core/http/Binding/bindings.ts +19 -0
  221. package/core/http/Binding/convert.ts +48 -0
  222. package/core/http/Binding/generatedSpec.ts +18 -0
  223. package/core/http/Binding/listModelRegistry.ts +47 -0
  224. package/core/http/Binding/modelBinder.ts +345 -0
  225. package/core/http/Binding/modelValidator.ts +30 -0
  226. package/core/http/Binding/requestModelRegistry.ts +117 -0
  227. package/core/http/Decorators/attributes.ts +92 -0
  228. package/core/http/Decorators/controller.ts +24 -0
  229. package/core/http/Decorators/metadata.ts +107 -0
  230. package/core/http/Decorators/routes.ts +131 -0
  231. package/core/http/Errors/HttpError.ts +92 -0
  232. package/core/http/HttpContext/HttpContext.ts +148 -0
  233. package/core/http/HttpContext/ResponseBuilder.ts +37 -0
  234. package/core/http/HttpContext/inspectableRedirects.ts +47 -0
  235. package/core/http/HttpContext/principal.ts +24 -0
  236. package/core/http/HttpContext/responseLifetime.ts +45 -0
  237. package/core/http/HttpServer.ts +627 -0
  238. package/core/http/Middleware/accessLog.ts +90 -0
  239. package/core/http/Middleware/cors.ts +160 -0
  240. package/core/http/Middleware/errorHandler.ts +100 -0
  241. package/core/http/Middleware/pipeline.ts +21 -0
  242. package/core/http/Middleware/rateLimit.ts +104 -0
  243. package/core/http/Middleware/securityHeaders.ts +118 -0
  244. package/core/http/Middleware/types.ts +19 -0
  245. package/core/http/OpenApi/generatedOpenApiRegistry.ts +102 -0
  246. package/core/http/OpenApi/openApiDocs.ts +75 -0
  247. package/core/http/OpenApi/openApiDocument.ts +356 -0
  248. package/core/http/README.md +139 -0
  249. package/core/http/Results/HttpResult.ts +19 -0
  250. package/core/http/Results/normalize.ts +93 -0
  251. package/core/http/Results/results.ts +70 -0
  252. package/core/http/Routing/Router.ts +201 -0
  253. package/core/http/Routing/RouterBuilder.ts +184 -0
  254. package/core/http/Routing/template.ts +112 -0
  255. package/core/http/SPEC.md +981 -0
  256. package/core/http/Versioning/VersionReader.ts +20 -0
  257. package/core/http/WebSocketUpgrade.ts +29 -0
  258. package/core/http/composeRouteMiddlewareComposers.ts +21 -0
  259. package/core/http/correlation/createCorrelationIdMiddleware.ts +79 -0
  260. package/core/http/httpModule.ts +48 -0
  261. package/core/http/index.ts +140 -0
  262. package/core/http/middlewareTokens.ts +48 -0
  263. package/core/http/options.ts +134 -0
  264. package/core/http-client/index.ts +105 -0
  265. package/core/infra/Infra.ts +158 -0
  266. package/core/infra/InfraConnector.ts +86 -0
  267. package/core/infra/InfraLifecycle.ts +86 -0
  268. package/core/infra/cache/RedisDistributedCacheBackend.ts +88 -0
  269. package/core/infra/cache/RedisDistributedCacheDriver.ts +186 -0
  270. package/core/infra/cache/index.ts +7 -0
  271. package/core/infra/connectorConfig.ts +29 -0
  272. package/core/infra/connectorIdentity.ts +39 -0
  273. package/core/infra/connectors/codex/CodexAppServer.ts +146 -0
  274. package/core/infra/connectors/codex/CodexAppServerClient.ts +258 -0
  275. package/core/infra/connectors/codex/CodexPolicy.ts +114 -0
  276. package/core/infra/connectors/codex/CodexTurn.ts +133 -0
  277. package/core/infra/connectors/codex/contracts.ts +82 -0
  278. package/core/infra/connectors/codex.ts +26 -0
  279. package/core/infra/connectors/llm.ts +78 -0
  280. package/core/infra/connectors/llmRouter.ts +443 -0
  281. package/core/infra/connectors/openaiCompatible.ts +590 -0
  282. package/core/infra/connectors/openaiTextStream.ts +134 -0
  283. package/core/infra/connectors/opensearch.ts +307 -0
  284. package/core/infra/connectors/postgres.ts +105 -0
  285. package/core/infra/connectors/redis.ts +132 -0
  286. package/core/infra/index.ts +58 -0
  287. package/core/kernel/ApplicationLifetime.ts +91 -0
  288. package/core/kernel/Bazis.ts +73 -0
  289. package/core/kernel/Environment.ts +53 -0
  290. package/core/kernel/Kernel.ts +391 -0
  291. package/core/kernel/KernelBuilder.ts +172 -0
  292. package/core/kernel/LifecycleCoordinator.ts +204 -0
  293. package/core/kernel/README.md +66 -0
  294. package/core/kernel/SupervisedHostedService.ts +147 -0
  295. package/core/kernel/config/ConfigRegistry.ts +48 -0
  296. package/core/kernel/config/Configuration.ts +110 -0
  297. package/core/kernel/config/README.md +62 -0
  298. package/core/kernel/config/Secret.ts +29 -0
  299. package/core/kernel/config/addConfigOptions.ts +63 -0
  300. package/core/kernel/config/defineConfig.ts +211 -0
  301. package/core/kernel/config/sources.ts +123 -0
  302. package/core/kernel/correlation/requestContext.ts +57 -0
  303. package/core/kernel/errors/ConfigKeyMissingError.ts +7 -0
  304. package/core/kernel/errors/KernelError.ts +7 -0
  305. package/core/kernel/errors/ShutdownTimeoutError.ts +7 -0
  306. package/core/kernel/errors/StartupAbortedError.ts +7 -0
  307. package/core/kernel/errors/StartupTimeoutError.ts +7 -0
  308. package/core/kernel/errors/index.ts +5 -0
  309. package/core/kernel/events/EventBus.ts +140 -0
  310. package/core/kernel/events/EventToken.ts +17 -0
  311. package/core/kernel/events/eventSubscribers.ts +126 -0
  312. package/core/kernel/events/kernelEvents.ts +16 -0
  313. package/core/kernel/events/onEvent.ts +32 -0
  314. package/core/kernel/health/HealthCheckContracts.ts +42 -0
  315. package/core/kernel/health/HealthService.ts +93 -0
  316. package/core/kernel/index.ts +96 -0
  317. package/core/kernel/internal/awaitAbortable.ts +18 -0
  318. package/core/kernel/internal/awaitShutdown.ts +21 -0
  319. package/core/kernel/internal/reportDiagnosticFailure.ts +8 -0
  320. package/core/kernel/internal/validateTimeout.ts +8 -0
  321. package/core/kernel/lifecycleHooks.ts +18 -0
  322. package/core/kernel/logging/ConsoleLogger.ts +68 -0
  323. package/core/kernel/logging/Logger.ts +22 -0
  324. package/core/kernel/types/ConfigSource.ts +9 -0
  325. package/core/kernel/types/EnvironmentName.ts +1 -0
  326. package/core/kernel/types/KernelOptions.ts +23 -0
  327. package/core/kernel/types/LifecycleHook.ts +18 -0
  328. package/core/kernel/types/index.ts +4 -0
  329. package/core/orm/DATABASE_PROVIDER.ts +5 -0
  330. package/core/orm/OrmHostedPlan.validator.ts +55 -0
  331. package/core/orm/OrmLifecycle.ts +146 -0
  332. package/core/orm/OrmOwnedStoreLifecycle.ts +96 -0
  333. package/core/orm/buildOrmProviders.ts +152 -0
  334. package/core/orm/databaseConnector.ts +108 -0
  335. package/core/orm/encapsulationHook.ts +19 -0
  336. package/core/orm/index.ts +95 -0
  337. package/core/orm/listQuery.ts +198 -0
  338. package/core/orm/ormModule.ts +173 -0
  339. package/core/orm/ownedStoreContributions.ts +195 -0
  340. package/core/orm/registerRepositories.ts +27 -0
  341. package/core/orm/repository.ts +45 -0
  342. package/core/orm/strictSchemaHostedIdentity.ts +17 -0
  343. package/core/scripts/agent-codegen.ts +1166 -0
  344. package/core/scripts/di-generate-target.ts +90 -0
  345. package/core/scripts/di-generate.ts +1837 -0
  346. package/core/scripts/orm-predicate-codegen.ts +33 -0
  347. package/core/scripts/request-model-codegen.ts +326 -0
  348. package/core/websocket/DESIGN.md +297 -0
  349. package/core/websocket/WsRateLimiter.ts +101 -0
  350. package/core/websocket/adapter/adapter.interface.ts +45 -0
  351. package/core/websocket/adapter/in-memory.adapter.ts +190 -0
  352. package/core/websocket/adapter/redis-delivery-scripts.ts +135 -0
  353. package/core/websocket/adapter/redis-delivery-store.ts +86 -0
  354. package/core/websocket/adapter/redis-operations.ts +33 -0
  355. package/core/websocket/adapter/redis.adapter.ts +218 -0
  356. package/core/websocket/codec/binary.codec.ts +87 -0
  357. package/core/websocket/codec/json.codec.ts +34 -0
  358. package/core/websocket/codec/packet-codec.interface.ts +17 -0
  359. package/core/websocket/decorators.ts +165 -0
  360. package/core/websocket/explorer.ts +126 -0
  361. package/core/websocket/index.ts +78 -0
  362. package/core/websocket/middleware.ts +146 -0
  363. package/core/websocket/packet-codec.ts +75 -0
  364. package/core/websocket/reliable-delivery.ts +56 -0
  365. package/core/websocket/session-creation.ts +16 -0
  366. package/core/websocket/session-manager.ts +856 -0
  367. package/core/websocket/socket-wrapper.ts +314 -0
  368. package/core/websocket/topic-cache.ts +59 -0
  369. package/core/websocket/types.ts +122 -0
  370. package/core/websocket/websocketModule.ts +96 -0
  371. package/core/websocket/ws-dispatch.ts +123 -0
  372. package/core/websocket/ws-server.ts +1707 -0
  373. package/index.ts +281 -0
  374. package/library/boundary/diagnostics-v1.ts +136 -0
  375. package/library/boundary/index.ts +73 -0
  376. package/library/boundary/json/decodeBoundedJsonV1.ts +518 -0
  377. package/library/boundary/json/limits-v1.ts +46 -0
  378. package/library/boundary/json/normalizeBoundedJsonV1.ts +256 -0
  379. package/library/boundary/json/types-v1.ts +11 -0
  380. package/library/boundary/schema/boundarySchemaHashV1.ts +6 -0
  381. package/library/boundary/schema/collectBoundaryValueDiagnosticsV1.ts +325 -0
  382. package/library/boundary/schema/decodeBoundarySchemaV1.ts +646 -0
  383. package/library/boundary/schema/index.ts +8 -0
  384. package/library/boundary/schema/types-v1.ts +99 -0
  385. package/library/boundary/schema/validateBoundaryValueV1.ts +58 -0
  386. package/library/boundary/serialization/canonicalJsonV1.ts +66 -0
  387. package/library/http-client/HttpClient.ts +969 -0
  388. package/library/http-client/HttpClientFactory.ts +45 -0
  389. package/library/http-client/errors.ts +68 -0
  390. package/library/http-client/index.ts +43 -0
  391. package/library/http-client/interceptors.ts +40 -0
  392. package/library/http-client/progress.ts +62 -0
  393. package/library/http-client/redirectProtocol.ts +6 -0
  394. package/library/http-client/serialize.ts +133 -0
  395. package/library/http-client/types.ts +174 -0
  396. package/library/jsonapi/ListQueryError.ts +25 -0
  397. package/library/jsonapi/ListRequest.ts +37 -0
  398. package/library/jsonapi/decorators.ts +161 -0
  399. package/library/jsonapi/document.ts +124 -0
  400. package/library/jsonapi/index.ts +40 -0
  401. package/library/jsonapi/parseListQuery.ts +291 -0
  402. package/library/jsonapi/types.ts +125 -0
  403. package/library/jwt/JwtEncoder.ts +40 -0
  404. package/library/jwt/JwtKeyRing.ts +164 -0
  405. package/library/jwt/JwtValidator.ts +210 -0
  406. package/library/jwt/TokenIssuer.ts +149 -0
  407. package/library/jwt/TokenService.ts +51 -0
  408. package/library/jwt/base64url.ts +61 -0
  409. package/library/jwt/claims.ts +36 -0
  410. package/library/jwt/errors.ts +44 -0
  411. package/library/jwt/index.ts +59 -0
  412. package/library/jwt/limits.ts +8 -0
  413. package/library/jwt/signing/Hs256Algorithm.ts +62 -0
  414. package/library/jwt/signing/Rs256Algorithm.ts +133 -0
  415. package/library/jwt/signing/SigningAlgorithm.ts +18 -0
  416. package/library/jwt/signing/pem.ts +30 -0
  417. package/library/openapi/codegen.ts +875 -0
  418. package/library/openapi/document.ts +326 -0
  419. package/library/openapi/index.ts +13 -0
  420. package/library/openapi/types.ts +69 -0
  421. package/library/openapi/ui.ts +182 -0
  422. package/library/orm/DatabaseFacade.ts +209 -0
  423. package/library/orm/DbContext.ts +107 -0
  424. package/library/orm/DbContextFactory.ts +25 -0
  425. package/library/orm/DbContextOptions.ts +33 -0
  426. package/library/orm/Metadata/DynamicModelBuilder.ts +497 -0
  427. package/library/orm/Metadata/KeyTuple.ts +36 -0
  428. package/library/orm/Metadata/ModelBuilder.ts +299 -0
  429. package/library/orm/Metadata/OrmModel.ts +80 -0
  430. package/library/orm/Metadata/ValueConverter.ts +57 -0
  431. package/library/orm/Metadata/conventions.ts +54 -0
  432. package/library/orm/Metadata/decorators.ts +396 -0
  433. package/library/orm/Metadata/types.ts +140 -0
  434. package/library/orm/Providers/OwnedStoreCatalog.reader.ts +1802 -0
  435. package/library/orm/Providers/PostgresDialect.ts +234 -0
  436. package/library/orm/Providers/PostgresProvider.ts +1494 -0
  437. package/library/orm/Providers/PostgresSchema.decoder.ts +107 -0
  438. package/library/orm/Providers/limits.ts +29 -0
  439. package/library/orm/Providers/operationDeadline.ts +43 -0
  440. package/library/orm/Providers/ormOwnedStoreRuntime.ts +19 -0
  441. package/library/orm/Providers/ormTransactionRuntime.ts +117 -0
  442. package/library/orm/Providers/propertyConversion.ts +14 -0
  443. package/library/orm/Providers/resolvedForeignKey.ts +16 -0
  444. package/library/orm/Providers/transactionCallbacks.ts +45 -0
  445. package/library/orm/Providers/transactionOutcome.ts +82 -0
  446. package/library/orm/Providers/transactionScopes.ts +78 -0
  447. package/library/orm/Providers/types.ts +207 -0
  448. package/library/orm/Query/DbSet.ts +78 -0
  449. package/library/orm/Query/EntityQuery.ts +247 -0
  450. package/library/orm/Query/ImmediateMutations.ts +226 -0
  451. package/library/orm/Query/IncludeLoader.ts +200 -0
  452. package/library/orm/Query/QueryPlan.ts +55 -0
  453. package/library/orm/Query/SqlTranslator.ts +195 -0
  454. package/library/orm/Query/conditions.ts +127 -0
  455. package/library/orm/Query/materialize.ts +39 -0
  456. package/library/orm/README.md +256 -0
  457. package/library/orm/Repository/README.md +684 -0
  458. package/library/orm/Repository/Repository.ts +68 -0
  459. package/library/orm/Saving/CommandBuilder.ts +139 -0
  460. package/library/orm/Saving/ExecutionStrategy.ts +128 -0
  461. package/library/orm/Saving/SaveExecutor.ts +413 -0
  462. package/library/orm/Saving/applyConventions.ts +64 -0
  463. package/library/orm/Schema/CheckExpression.ts +327 -0
  464. package/library/orm/Schema/ExactSchemaVerifier.ts +168 -0
  465. package/library/orm/Schema/ExpectedSchema.ts +43 -0
  466. package/library/orm/Schema/MigrationRunner.ts +146 -0
  467. package/library/orm/Schema/Migrator.ts +73 -0
  468. package/library/orm/Schema/OrmOwnedStore.ts +123 -0
  469. package/library/orm/Schema/OwnedStoreAdmission.ts +752 -0
  470. package/library/orm/Schema/OwnedStoreCanonical.ts +273 -0
  471. package/library/orm/Schema/OwnedStoreCatalog.ts +1325 -0
  472. package/library/orm/Schema/SafeAdditiveSchema.ts +100 -0
  473. package/library/orm/Schema/SchemaAdmission.ts +62 -0
  474. package/library/orm/Schema/SchemaDiffer.ts +78 -0
  475. package/library/orm/Schema/formatSchemaDifferences.ts +62 -0
  476. package/library/orm/Schema/introspection.ts +52 -0
  477. package/library/orm/Schema/physicalColumnTypes.ts +37 -0
  478. package/library/orm/Schema/tableKey.ts +26 -0
  479. package/library/orm/Tracking/ChangeTracker.ts +448 -0
  480. package/library/orm/Tracking/EntityState.ts +13 -0
  481. package/library/orm/Transactions/OrmTransaction.ts +30 -0
  482. package/library/orm/Transactions/TransactionScopeCoordinator.ts +377 -0
  483. package/library/orm/errors.ts +190 -0
  484. package/library/orm/index.ts +162 -0
  485. package/library/orm/runtime.ts +14 -0
  486. package/library/redaction/index.ts +166 -0
  487. package/library/ui/UiProfile.ts +77 -0
  488. package/library/ui/compiled-v1.ts +131 -0
  489. package/library/ui/compiler/compileUiSurfaceV1.ts +717 -0
  490. package/library/ui/compiler/contracts-v1.ts +25 -0
  491. package/library/ui/compiler/index.ts +12 -0
  492. package/library/ui/compiler/openApiIndex.ts +246 -0
  493. package/library/ui/defineUiProfile.ts +340 -0
  494. package/library/ui/diagnostics-v1.ts +33 -0
  495. package/library/ui/index.ts +129 -0
  496. package/library/ui/profile-v1.ts +191 -0
  497. package/library/ui/serialization.ts +130 -0
  498. package/library/ui/uiProfileAuthoring.ts +289 -0
  499. package/library/ui/uiProfileAuthoringMetadata.ts +78 -0
  500. package/library/validation/MessageRegistry.ts +144 -0
  501. package/library/validation/README.md +62 -0
  502. package/library/validation/RuleCompiler.ts +183 -0
  503. package/library/validation/RuleEngine.ts +401 -0
  504. package/library/validation/SPEC.md +579 -0
  505. package/library/validation/ValidationError.ts +37 -0
  506. package/library/validation/ValidationResult.ts +63 -0
  507. package/library/validation/Validator.ts +101 -0
  508. package/library/validation/index.ts +16 -0
  509. package/library/validation/metadata.ts +69 -0
  510. package/library/validation/modelValidatorAdapter.ts +119 -0
  511. package/library/validation/types/ValidationCode.ts +69 -0
  512. package/library/validation/types/ValidatorOptions.ts +153 -0
  513. package/package.json +80 -0
@@ -0,0 +1,58 @@
1
+ const symbolDispose = Symbol.dispose as symbol | undefined;
2
+ const symbolAsyncDispose = Symbol.asyncDispose as symbol | undefined;
3
+
4
+ export async function disposeTracked(disposables: readonly unknown[]): Promise<void> {
5
+ const errors: unknown[] = [];
6
+ for (let index = disposables.length - 1; index >= 0; index -= 1) {
7
+ const instance = disposables[index];
8
+ try {
9
+ await disposeOne(instance);
10
+ } catch (error) {
11
+ errors.push(error);
12
+ }
13
+ }
14
+ if (errors.length === 1) {
15
+ throw errors[0];
16
+ }
17
+ if (errors.length > 1) {
18
+ throw new AggregateError(errors, "Service disposal finished with errors.");
19
+ }
20
+ }
21
+
22
+ async function disposeOne(instance: unknown): Promise<void> {
23
+ if (!instance || (typeof instance !== "object" && typeof instance !== "function")) {
24
+ return;
25
+ }
26
+
27
+ const value = instance as Record<PropertyKey, unknown>;
28
+
29
+ const asyncBySymbol =
30
+ symbolAsyncDispose && typeof value[symbolAsyncDispose] === "function"
31
+ ? (value[symbolAsyncDispose] as () => Promise<void>)
32
+ : undefined;
33
+ if (asyncBySymbol) {
34
+ await asyncBySymbol.call(instance);
35
+ return;
36
+ }
37
+
38
+ const asyncByName =
39
+ typeof value.disposeAsync === "function" ? (value.disposeAsync as () => Promise<void>) : undefined;
40
+ if (asyncByName) {
41
+ await asyncByName.call(instance);
42
+ return;
43
+ }
44
+
45
+ const syncBySymbol =
46
+ symbolDispose && typeof value[symbolDispose] === "function"
47
+ ? (value[symbolDispose] as () => void)
48
+ : undefined;
49
+ if (syncBySymbol) {
50
+ syncBySymbol.call(instance);
51
+ return;
52
+ }
53
+
54
+ const syncByName = typeof value.dispose === "function" ? (value.dispose as () => unknown) : undefined;
55
+ if (syncByName) {
56
+ await Promise.resolve(syncByName.call(instance));
57
+ }
58
+ }
@@ -0,0 +1,26 @@
1
+ import { getClassDeps } from "./classDeps";
2
+ import { getGeneratedClassDeps } from "../module/autoDeps";
3
+ import { isClassProvider, isValueProvider, type ClassProvider, type Provider, type ProviderDependencyList } from "../provider";
4
+
5
+ /** Constructor binding has one precedence rule in validation and activation. */
6
+ export function getConstructorDeps(provider: ClassProvider<unknown, ProviderDependencyList>): ProviderDependencyList {
7
+ return provider.deps ?? getClassDeps(provider.useClass) ?? getGeneratedClassDeps(provider.useClass) ?? [];
8
+ }
9
+
10
+ export function getProviderDeps(provider: Provider<unknown>): ProviderDependencyList {
11
+ if (isValueProvider(provider)) return [];
12
+ if (!isClassProvider(provider)) return provider.deps;
13
+ const deps = getConstructorDeps(provider);
14
+ return provider.activation ? [...deps, ...provider.activation.deps] : deps;
15
+ }
16
+
17
+ /** Preserve the constructor/wrapper boundary when rebinding named deps. */
18
+ export function withProviderDeps(provider: Provider<unknown>, deps: ProviderDependencyList): Provider<unknown> {
19
+ if (!isClassProvider(provider) || !provider.activation) return { ...provider, deps } as Provider<unknown>;
20
+ const count = getConstructorDeps(provider).length;
21
+ return {
22
+ ...provider,
23
+ deps: deps.slice(0, count),
24
+ activation: { ...provider.activation, deps: deps.slice(count) },
25
+ };
26
+ }
@@ -0,0 +1,146 @@
1
+ import { setClassDeps } from "../internal/classDeps";
2
+ import type { Token } from "../token";
3
+ import type { ServiceKey, ServiceResolver } from "../types";
4
+ import type {
5
+ AsyncFactoryProvider,
6
+ ClassProvider,
7
+ FactoryProvider,
8
+ Provider,
9
+ ProviderDefinition,
10
+ ProviderDependencyList,
11
+ ResolvedDeps,
12
+ ValueProvider,
13
+ KeyedDependency,
14
+ } from "../provider";
15
+ import { ProviderDefinition as ProviderDefinitionClass, keyedDependency } from "../provider";
16
+
17
+ export class DI {
18
+ /** Marks a provider result as lifecycle-owned so the container will not dispose it. */
19
+ public static externallyOwned<T, D extends ProviderDependencyList>(provider: FactoryProvider<T, D>): FactoryProvider<T, D>;
20
+ public static externallyOwned<T, D extends ProviderDependencyList>(provider: AsyncFactoryProvider<T, D>): AsyncFactoryProvider<T, D>;
21
+ public static externallyOwned<T, D extends ProviderDependencyList>(provider: ClassProvider<T, D>): ClassProvider<T, D>;
22
+ public static externallyOwned<T>(provider: ValueProvider<T>): ValueProvider<T>;
23
+ public static externallyOwned(provider: Provider<unknown>): Provider<unknown> {
24
+ return { ...provider, ownership: "external" } as Provider<unknown>;
25
+ }
26
+
27
+ public static singleton<T>(provider: Provider<T>): ProviderDefinition<T> {
28
+ return new ProviderDefinitionClass(provider, "singleton");
29
+ }
30
+
31
+ public static scoped<T>(provider: Provider<T>): ProviderDefinition<T> {
32
+ return new ProviderDefinitionClass(provider, "scoped");
33
+ }
34
+
35
+ public static transient<T>(provider: Provider<T>): ProviderDefinition<T> {
36
+ return new ProviderDefinitionClass(provider, "transient");
37
+ }
38
+
39
+ public static keyedSingleton<T>(key: ServiceKey, provider: Provider<T>): ProviderDefinition<T> {
40
+ return new ProviderDefinitionClass(provider, "singleton", key);
41
+ }
42
+
43
+ public static keyedScoped<T>(key: ServiceKey, provider: Provider<T>): ProviderDefinition<T> {
44
+ return new ProviderDefinitionClass(provider, "scoped", key);
45
+ }
46
+
47
+ public static keyedTransient<T>(key: ServiceKey, provider: Provider<T>): ProviderDefinition<T> {
48
+ return new ProviderDefinitionClass(provider, "transient", key);
49
+ }
50
+
51
+ public static classProvider<T, D extends ProviderDependencyList = []>(
52
+ provide: Token<T>,
53
+ useClass: ClassProvider<T, D>["useClass"],
54
+ deps?: D,
55
+ ): ClassProvider<T, D> {
56
+ return {
57
+ provide,
58
+ useClass,
59
+ deps,
60
+ };
61
+ }
62
+
63
+ public static factoryProvider<T, D extends ProviderDependencyList>(
64
+ provide: Token<T>,
65
+ deps: D,
66
+ useFactory: (...args: ResolvedDeps<D>) => T,
67
+ ): FactoryProvider<T, D> {
68
+ return {
69
+ provide,
70
+ deps,
71
+ useFactory,
72
+ };
73
+ }
74
+
75
+ public static factoryProviderWithResolver<T, D extends ProviderDependencyList>(
76
+ provide: Token<T>,
77
+ deps: D,
78
+ useFactory: (resolver: ServiceResolver, ...args: ResolvedDeps<D>) => T,
79
+ ): FactoryProvider<T, D> {
80
+ return {
81
+ provide,
82
+ deps,
83
+ useFactory,
84
+ withResolver: true,
85
+ };
86
+ }
87
+
88
+ public static asyncFactoryProvider<T, D extends ProviderDependencyList>(
89
+ provide: Token<T>,
90
+ deps: D,
91
+ useAsyncFactory: (...args: ResolvedDeps<D>) => Promise<T>,
92
+ ): AsyncFactoryProvider<T, D> {
93
+ return {
94
+ provide,
95
+ deps,
96
+ useAsyncFactory,
97
+ };
98
+ }
99
+
100
+ public static asyncFactoryProviderWithResolver<T, D extends ProviderDependencyList>(
101
+ provide: Token<T>,
102
+ deps: D,
103
+ useAsyncFactory: (resolver: ServiceResolver, ...args: ResolvedDeps<D>) => Promise<T>,
104
+ ): AsyncFactoryProvider<T, D> {
105
+ return {
106
+ provide,
107
+ deps,
108
+ useAsyncFactory,
109
+ withResolver: true,
110
+ };
111
+ }
112
+
113
+ public static valueProvider<T>(provide: Token<T>, useValue: T): ValueProvider<T> {
114
+ return {
115
+ provide,
116
+ useValue,
117
+ };
118
+ }
119
+
120
+ public static keyed<T>(token: Token<T>, key: ServiceKey): KeyedDependency<T> {
121
+ return keyedDependency(token, key);
122
+ }
123
+
124
+ public static bindDeps<TCtorArgs extends unknown[], TInstance, D extends ProviderDependencyList>(
125
+ useClass: CtorClass<TCtorArgs, TInstance>,
126
+ ...deps: DepsCompatibleWithCtor<TCtorArgs, D>
127
+ ): CtorClass<TCtorArgs, TInstance> {
128
+ setClassDeps(useClass, deps);
129
+ return useClass;
130
+ }
131
+
132
+ public static injectFor<TCtorArgs extends unknown[], TInstance, D extends ProviderDependencyList>(
133
+ useClass: CtorClass<TCtorArgs, TInstance>,
134
+ ...deps: DepsCompatibleWithCtor<TCtorArgs, D>
135
+ ): D {
136
+ setClassDeps(useClass, deps);
137
+ return deps as D;
138
+ }
139
+ }
140
+
141
+ type CtorClass<TArgs extends unknown[], TInstance> = new (...args: TArgs) => TInstance;
142
+
143
+ type DepsCompatibleWithCtor<TCtorArgs extends unknown[], D extends ProviderDependencyList> =
144
+ ResolvedDeps<D> extends Readonly<TCtorArgs>
145
+ ? D
146
+ : never;
@@ -0,0 +1,25 @@
1
+ import type { BazisModule, BazisModuleRef } from "./types";
2
+
3
+ /**
4
+ * Marks a module as global (NestJS `@Global()`): its exports are visible to every
5
+ * module without an explicit import. Apply above `@Module`:
6
+ *
7
+ * ```ts
8
+ * @Global()
9
+ * @Module({ providers: [...], exports: [DATABASE_PROVIDER] })
10
+ * class OrmRootModule {}
11
+ * ```
12
+ */
13
+ export function Global() {
14
+ return (target: abstract new (...args: never) => unknown, _context: ClassDecoratorContext): void => {
15
+ markGlobal(target as BazisModule);
16
+ };
17
+ }
18
+
19
+ /** Marks a dynamically created module (class or plain metadata) as global, e.g. connection-mode `ormModule({ provider })`. */
20
+ export function markGlobal<T extends BazisModuleRef>(module: T): T {
21
+ if (module.global !== true) {
22
+ Object.assign(module, { global: true });
23
+ }
24
+ return module;
25
+ }
@@ -0,0 +1,44 @@
1
+ import type { BazisModuleMetadata } from "./types";
2
+
3
+ const BAZIS_MODULE_MARKER = Symbol.for("bazis/core/di/module");
4
+
5
+ /**
6
+ * Registers module metadata on the decorated class (NestJS-style).
7
+ *
8
+ * ```ts
9
+ * @Module({
10
+ * imports: [ormModule({ context: UsersDbContext, entities: [User] })],
11
+ * controllers: [UsersController],
12
+ * providers: [scoped(IUserStore, UserService)],
13
+ * exports: [IUserStore],
14
+ * })
15
+ * export class UsersModule {}
16
+ * ```
17
+ *
18
+ * Combine with {@link Global} for infrastructure modules:
19
+ *
20
+ * ```ts
21
+ * @Global()
22
+ * @Module({ providers: [...], exports: [DATABASE_PROVIDER] })
23
+ * export class OrmRootModule {}
24
+ * ```
25
+ *
26
+ * Static modules: `@Module` on the exported class (`OpenSearchLoggingModule`).
27
+ * Inline overrides: factory `openSearchLoggingModule(config)` (see `@/core/infra/opensearch`).
28
+ */
29
+ export function Module(metadata: BazisModuleMetadata) {
30
+ return (target: abstract new (...args: never) => unknown, _context: ClassDecoratorContext): void => {
31
+ Object.assign(target, metadata);
32
+ Object.defineProperty(target, BAZIS_MODULE_MARKER, {
33
+ configurable: false,
34
+ enumerable: false,
35
+ value: true,
36
+ writable: false,
37
+ });
38
+ };
39
+ }
40
+
41
+ /** @internal Distinguishes decorated module classes from profile factory functions. */
42
+ export function isBazisModuleClass(value: unknown): value is abstract new (...args: never) => unknown {
43
+ return typeof value === "function" && Reflect.get(value, BAZIS_MODULE_MARKER) === true;
44
+ }
@@ -0,0 +1,69 @@
1
+ import { ServiceCollection } from "../ServiceCollection";
2
+ import type { Provider, ProviderDefinition } from "../provider";
3
+ import { DI } from "./DI";
4
+ import type { Token } from "../token";
5
+ import type { ProviderLifetime } from "../provider";
6
+ import type { ServiceKey } from "../types";
7
+ import type { OpenGenericTokenFamily } from "../token";
8
+ import type { DiRegistrar } from "./types";
9
+
10
+ export class ModuleRegistrar implements DiRegistrar {
11
+ public constructor(private readonly collection: ServiceCollection) {}
12
+
13
+ public singleton<T>(provider: Provider<T>): void {
14
+ this.collection.add(DI.singleton(provider));
15
+ }
16
+
17
+ public scoped<T>(provider: Provider<T>): void {
18
+ this.collection.add(DI.scoped(provider));
19
+ }
20
+
21
+ public transient<T>(provider: Provider<T>): void {
22
+ this.collection.add(DI.transient(provider));
23
+ }
24
+
25
+ public keyedSingleton<T>(key: ServiceKey, provider: Provider<T>): void {
26
+ this.collection.add(DI.keyedSingleton(key, provider));
27
+ }
28
+
29
+ public keyedScoped<T>(key: ServiceKey, provider: Provider<T>): void {
30
+ this.collection.add(DI.keyedScoped(key, provider));
31
+ }
32
+
33
+ public keyedTransient<T>(key: ServiceKey, provider: Provider<T>): void {
34
+ this.collection.add(DI.keyedTransient(key, provider));
35
+ }
36
+
37
+ public trySingleton<T>(provider: Provider<T>): boolean {
38
+ return this.collection.tryAddSingleton(provider);
39
+ }
40
+
41
+ public tryScoped<T>(provider: Provider<T>): boolean {
42
+ return this.collection.tryAddScoped(provider);
43
+ }
44
+
45
+ public tryTransient<T>(provider: Provider<T>): boolean {
46
+ return this.collection.tryAddTransient(provider);
47
+ }
48
+
49
+ public tryAddEnumerable(definition: ProviderDefinition): boolean {
50
+ return this.collection.tryAddEnumerable(definition);
51
+ }
52
+
53
+ public replace<T>(token: Token<T>, provider: Provider<T>, lifetime: ProviderLifetime, key?: ServiceKey): void {
54
+ this.collection.replace(token, provider, lifetime, key);
55
+ }
56
+
57
+ public remove(token: Token<unknown>, key?: ServiceKey): number {
58
+ return this.collection.remove(token, key);
59
+ }
60
+
61
+ public addOpenGeneric(
62
+ family: OpenGenericTokenFamily<unknown, unknown>,
63
+ lifetime: ProviderLifetime,
64
+ providerFactory: (argument: Token<unknown>) => Provider<unknown>,
65
+ key?: ServiceKey,
66
+ ): void {
67
+ this.collection.addOpenGeneric(family, lifetime, providerFactory, key);
68
+ }
69
+ }
@@ -0,0 +1,39 @@
1
+ import { lazyDependency, namedDependency, type ProviderDependencyList } from "../provider";
2
+ import type { Class } from "../token";
3
+
4
+ const LAZY_PREFIX = "lazy:";
5
+ // These registrations live for the process lifetime just like their
6
+ // constructors. A Map, rather than a WeakMap, lets the generated-runtime
7
+ // owner take an exact rollback snapshot before publishing a target slice.
8
+ export type GeneratedClassDependency = string | ProviderDependencyList[number];
9
+ let targetClassDeps = new Map<Class<unknown>, readonly GeneratedClassDependency[]>();
10
+
11
+ /** Project-owned target runtimes bind inferred dependencies by constructor identity. */
12
+ export function registerGeneratedClassDeps(target: Class<unknown>, deps: readonly GeneratedClassDependency[]): void {
13
+ targetClassDeps.set(target, deps);
14
+ }
15
+
16
+ export function getGeneratedClassDeps(useClass: Class<unknown>): ProviderDependencyList | undefined {
17
+ // Names are not class identities: package consumers may use the same names
18
+ // as the application that generated the framework's compatibility files.
19
+ const dependencies = targetClassDeps.get(useClass);
20
+ if (dependencies === undefined) {
21
+ return undefined;
22
+ }
23
+ return dependencies.map((dependency) =>
24
+ typeof dependency !== "string" ? dependency
25
+ : dependency.startsWith(LAZY_PREFIX)
26
+ ? lazyDependency(namedDependency(dependency.slice(LAZY_PREFIX.length)))
27
+ : namedDependency(dependency),
28
+ );
29
+ }
30
+
31
+ /** Internal generated-runtime transaction support. */
32
+ export function snapshotGeneratedClassDeps(): typeof targetClassDeps {
33
+ return new Map(targetClassDeps);
34
+ }
35
+
36
+ /** Internal generated-runtime transaction support. */
37
+ export function restoreGeneratedClassDeps(snapshot: ReturnType<typeof snapshotGeneratedClassDeps>): void {
38
+ targetClassDeps = snapshot;
39
+ }
@@ -0,0 +1,66 @@
1
+ import { createToken, type Class, type Token } from "../token";
2
+ import { ProviderDefinition, isClassProvider, isValueProvider, type ProviderDependencyList } from "../provider";
3
+
4
+ export type ClassProviderLifetime = "singleton" | "scoped" | "transient";
5
+
6
+ export interface ClassProviderRegistration {
7
+ readonly lifetime: ClassProviderLifetime;
8
+ readonly provide: Token<unknown>;
9
+ readonly useClass: Class<unknown>;
10
+ readonly deps: ProviderDependencyList | undefined;
11
+ }
12
+
13
+ export type ClassProviderHook = (request: ClassProviderRegistration) => ProviderDefinition | undefined;
14
+
15
+ /** Container-local build extension. Register an unkeyed singleton value, not a runtime factory. */
16
+ export const CLASS_PROVIDER_HOOK = createToken<ClassProviderHook>("ClassProviderHook");
17
+
18
+ export function collectClassProviderHooks(definitions: readonly ProviderDefinition[]): readonly ClassProviderHook[] {
19
+ const hooks = new Set<ClassProviderHook>();
20
+ for (const definition of definitions) {
21
+ if (definition.provider.provide !== CLASS_PROVIDER_HOOK) continue;
22
+ if (definition.lifetime !== "singleton" || definition.key !== undefined
23
+ || !isValueProvider(definition.provider) || typeof definition.provider.useValue !== "function") {
24
+ throw new TypeError("ClassProviderHook requires an unkeyed singleton value provider.");
25
+ }
26
+ hooks.add(definition.provider.useValue as ClassProviderHook);
27
+ }
28
+ return [...hooks];
29
+ }
30
+
31
+ export function applyClassProviderHooks(
32
+ request: ClassProviderRegistration,
33
+ hooks: readonly ClassProviderHook[],
34
+ ): ProviderDefinition | undefined {
35
+ for (let index = 0; index < hooks.length; index += 1) {
36
+ const result = hooks[index]!(request);
37
+ if (result !== undefined) {
38
+ return result;
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+
44
+ /** Applies hooks when a definition enters a collection, not only when shortcut syntax created it. */
45
+ export function applyClassProviderHooksToDefinition(
46
+ definition: ProviderDefinition,
47
+ hooks: readonly ClassProviderHook[],
48
+ ): ProviderDefinition {
49
+ if (!isClassProvider(definition.provider) || definition.provider.activation !== undefined) {
50
+ return definition;
51
+ }
52
+ const hooked = applyClassProviderHooks({
53
+ lifetime: definition.lifetime,
54
+ provide: definition.provider.provide,
55
+ useClass: definition.provider.useClass,
56
+ deps: definition.provider.deps,
57
+ }, hooks);
58
+ if (hooked === undefined) {
59
+ return definition;
60
+ }
61
+ // A hook changes the implementation, not the keyed-registration identity.
62
+ return new ProviderDefinition(
63
+ { ...hooked.provider, ...(definition.provider.ownership ? { ownership: definition.provider.ownership } : {}) },
64
+ hooked.lifetime, definition.key ?? hooked.key,
65
+ );
66
+ }
@@ -0,0 +1,57 @@
1
+ import { expandModuleMetadata } from "./moduleExtensions";
2
+ import type { ModuleConfig, BazisModuleRef } from "./types";
3
+
4
+ function appendConfig(
5
+ config: ModuleConfig | readonly ModuleConfig[] | undefined,
6
+ out: ModuleConfig[],
7
+ seen: Set<ModuleConfig>,
8
+ ): void {
9
+ if (config === undefined) {
10
+ return;
11
+ }
12
+ const configs = Array.isArray(config) ? config : [config];
13
+ for (let index = 0; index < configs.length; index += 1) {
14
+ const item = configs[index] as ModuleConfig;
15
+ if (!seen.has(item)) {
16
+ seen.add(item);
17
+ out.push(item);
18
+ }
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Collects module-owned configs from a module tree. Used by `runApp` for
24
+ * fail-fast validation before the DI container is created.
25
+ */
26
+ export function collectModuleConfigs(roots: readonly BazisModuleRef[]): readonly ModuleConfig[] {
27
+ const loaded = new Set<BazisModuleRef>();
28
+ const seenConfigs = new Set<ModuleConfig>();
29
+ const configs: ModuleConfig[] = [];
30
+
31
+ const visit = (moduleRef: BazisModuleRef): void => {
32
+ if (loaded.has(moduleRef)) {
33
+ return;
34
+ }
35
+ loaded.add(moduleRef);
36
+
37
+ appendConfig(moduleRef.config, configs, seenConfigs);
38
+
39
+ const imports = moduleRef.imports;
40
+ if (imports) {
41
+ for (let index = 0; index < imports.length; index += 1) {
42
+ visit(imports[index] as BazisModuleRef);
43
+ }
44
+ }
45
+
46
+ const expanded = expandModuleMetadata(moduleRef);
47
+ for (let index = 0; index < expanded.length; index += 1) {
48
+ visit(expanded[index] as BazisModuleRef);
49
+ }
50
+ };
51
+
52
+ for (let index = 0; index < roots.length; index += 1) {
53
+ visit(roots[index] as BazisModuleRef);
54
+ }
55
+
56
+ return configs;
57
+ }
@@ -0,0 +1,53 @@
1
+ import type { Class } from "../token";
2
+ import type { BazisModuleRef } from "./types";
3
+
4
+ /**
5
+ * Collects controller classes from the module tree (the module itself plus `imports`,
6
+ * recursively). Duplicates by class reference are dropped.
7
+ */
8
+ export function collectModuleControllers(
9
+ roots: readonly BazisModuleRef[],
10
+ extraControllers?: readonly Class<object>[],
11
+ ): Class<object>[] {
12
+ const seen = new Set<Class<object>>();
13
+ const result: Class<object>[] = [];
14
+
15
+ const visit = (moduleRef: BazisModuleRef, loaded: Set<BazisModuleRef>): void => {
16
+ if (loaded.has(moduleRef)) {
17
+ return;
18
+ }
19
+ loaded.add(moduleRef);
20
+
21
+ const imports = moduleRef.imports;
22
+ if (imports) {
23
+ for (let index = 0; index < imports.length; index += 1) {
24
+ visit(imports[index] as BazisModuleRef, loaded);
25
+ }
26
+ }
27
+
28
+ const controllers = moduleRef.controllers;
29
+ if (controllers) {
30
+ for (let index = 0; index < controllers.length; index += 1) {
31
+ const controller = controllers[index] as Class<object>;
32
+ if (!seen.has(controller)) {
33
+ seen.add(controller);
34
+ result.push(controller);
35
+ }
36
+ }
37
+ }
38
+ };
39
+
40
+ for (let index = 0; index < roots.length; index += 1) {
41
+ visit(roots[index] as BazisModuleRef, new Set());
42
+ }
43
+ if (extraControllers) {
44
+ for (let index = 0; index < extraControllers.length; index += 1) {
45
+ const controller = extraControllers[index] as Class<object>;
46
+ if (!seen.has(controller)) {
47
+ seen.add(controller);
48
+ result.push(controller);
49
+ }
50
+ }
51
+ }
52
+ return result;
53
+ }
@@ -0,0 +1,53 @@
1
+ import { expandModuleMetadata } from "./moduleExtensions";
2
+ import type { BazisModuleRef } from "./types";
3
+
4
+ function appendProfiles(value: readonly unknown[] | undefined, out: unknown[], seen: Set<unknown>): void {
5
+ if (value === undefined) {
6
+ return;
7
+ }
8
+ for (let index = 0; index < value.length; index += 1) {
9
+ const profile = value[index];
10
+ if (!seen.has(profile)) {
11
+ seen.add(profile);
12
+ out.push(profile);
13
+ }
14
+ }
15
+ }
16
+
17
+ /**
18
+ * Collects opaque `uiProfiles` declarations from a module tree. The DI core
19
+ * intentionally does not interpret `@UiProfile`; the application composition
20
+ * layer resolves the references against HTTP/OpenAPI metadata.
21
+ */
22
+ export function collectModuleUiProfiles(roots: readonly BazisModuleRef[]): readonly unknown[] {
23
+ const loaded = new Set<BazisModuleRef>();
24
+ const seen = new Set<unknown>();
25
+ const profiles: unknown[] = [];
26
+
27
+ const visit = (moduleRef: BazisModuleRef): void => {
28
+ if (loaded.has(moduleRef)) {
29
+ return;
30
+ }
31
+ loaded.add(moduleRef);
32
+
33
+ appendProfiles(moduleRef.uiProfiles, profiles, seen);
34
+
35
+ const imports = moduleRef.imports;
36
+ if (imports) {
37
+ for (let index = 0; index < imports.length; index += 1) {
38
+ visit(imports[index] as BazisModuleRef);
39
+ }
40
+ }
41
+
42
+ const expanded = expandModuleMetadata(moduleRef);
43
+ for (let index = 0; index < expanded.length; index += 1) {
44
+ visit(expanded[index] as BazisModuleRef);
45
+ }
46
+ };
47
+
48
+ for (let index = 0; index < roots.length; index += 1) {
49
+ visit(roots[index] as BazisModuleRef);
50
+ }
51
+
52
+ return Object.freeze(profiles);
53
+ }