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,24 @@
1
+ import type { OpenGenericTokenFamily, Token } from "../../token";
2
+ import type { Provider, ProviderDefinition, ProviderLifetime } from "../../provider";
3
+ import type { ServiceKey } from "../../types";
4
+
5
+ export interface DiRegistrar {
6
+ singleton<T>(provider: Provider<T>): void;
7
+ scoped<T>(provider: Provider<T>): void;
8
+ transient<T>(provider: Provider<T>): void;
9
+ keyedSingleton<T>(key: ServiceKey, provider: Provider<T>): void;
10
+ keyedScoped<T>(key: ServiceKey, provider: Provider<T>): void;
11
+ keyedTransient<T>(key: ServiceKey, provider: Provider<T>): void;
12
+ trySingleton<T>(provider: Provider<T>): boolean;
13
+ tryScoped<T>(provider: Provider<T>): boolean;
14
+ tryTransient<T>(provider: Provider<T>): boolean;
15
+ tryAddEnumerable(definition: ProviderDefinition): boolean;
16
+ replace<T>(token: Token<T>, provider: Provider<T>, lifetime: ProviderLifetime, key?: ServiceKey): void;
17
+ remove(token: Token<unknown>, key?: ServiceKey): number;
18
+ addOpenGeneric(
19
+ family: OpenGenericTokenFamily<unknown, unknown>,
20
+ lifetime: ProviderLifetime,
21
+ providerFactory: (argument: Token<unknown>) => Provider<unknown>,
22
+ key?: ServiceKey,
23
+ ): void;
24
+ }
@@ -0,0 +1,2 @@
1
+ export type { DiRegistrar } from "./DiRegistrar";
2
+ export type { ModuleConfig, ModuleExport, BazisModule, BazisModuleMetadata, BazisModuleRef } from "./BazisModule";
@@ -0,0 +1,26 @@
1
+ export type {
2
+ AsyncFactoryProvider,
3
+ ClassProvider,
4
+ FactoryProvider,
5
+ NamedDependency,
6
+ ProviderDependencyList,
7
+ ProviderLifetime,
8
+ Provider,
9
+ ProviderOwnership,
10
+ ProviderOwnershipOptions,
11
+ ResolvedDeps,
12
+ ValueProvider,
13
+ } from "./types";
14
+ export {
15
+ keyedDependency,
16
+ isKeyedDependency,
17
+ namedDependency,
18
+ isNamedDependency,
19
+ lazyDependency,
20
+ isLazyDependency,
21
+ ProviderDefinition,
22
+ type KeyedDependency,
23
+ type Lazy,
24
+ type LazyDependency,
25
+ } from "./types";
26
+ export { isAsyncFactoryProvider, isClassProvider, isFactoryProvider, isValueProvider } from "./providerGuards";
@@ -0,0 +1,17 @@
1
+ import type { AsyncFactoryProvider, ClassProvider, FactoryProvider, Provider, ValueProvider } from "./types";
2
+
3
+ export function isClassProvider<T>(provider: Provider<T>): provider is ClassProvider<T> {
4
+ return "useClass" in provider;
5
+ }
6
+
7
+ export function isFactoryProvider<T>(provider: Provider<T>): provider is FactoryProvider<T> {
8
+ return "useFactory" in provider;
9
+ }
10
+
11
+ export function isAsyncFactoryProvider<T>(provider: Provider<T>): provider is AsyncFactoryProvider<T> {
12
+ return "useAsyncFactory" in provider;
13
+ }
14
+
15
+ export function isValueProvider<T>(provider: Provider<T>): provider is ValueProvider<T> {
16
+ return "useValue" in provider;
17
+ }
@@ -0,0 +1,15 @@
1
+ import type { Token } from "../../token";
2
+ import type { ServiceResolver } from "../../types";
3
+ import type { ProviderDependencyList } from "./ProviderDependencyList";
4
+ import type { ResolvedDeps } from "./ResolvedDeps";
5
+ import type { ProviderOwnershipOptions } from "./ProviderOwnership";
6
+
7
+ export interface AsyncFactoryProvider<T, D extends ProviderDependencyList = []> extends ProviderOwnershipOptions {
8
+ readonly provide: Token<T>;
9
+ readonly useAsyncFactory:
10
+ | ((resolver: ServiceResolver, ...args: ResolvedDeps<D>) => Promise<T>)
11
+ | ((...args: ResolvedDeps<D>) => Promise<T>);
12
+ readonly deps: D;
13
+ /** Same explicit contract as FactoryProvider: resolver is passed only when true. */
14
+ readonly withResolver?: boolean;
15
+ }
@@ -0,0 +1,18 @@
1
+ import type { Class, Token } from "../../token";
2
+ import type { ServiceResolver } from "../../types";
3
+ import type { ProviderDependencyList } from "./ProviderDependencyList";
4
+ import type { ProviderOwnershipOptions } from "./ProviderOwnership";
5
+
6
+ export interface ClassProvider<T, D extends ProviderDependencyList = []> extends ProviderOwnershipOptions {
7
+ readonly provide: Token<T>;
8
+ readonly useClass: Class<T>;
9
+ readonly deps?: D;
10
+ /** Optional synchronous wrapper applied after normal constructor activation.
11
+ * Its dependencies participate in graph, lifetime and module validation.
12
+ * The wrapper must preserve disposal of the created instance.
13
+ */
14
+ readonly activation?: {
15
+ readonly deps: ProviderDependencyList;
16
+ wrap(instance: T, resolver: ServiceResolver, ...deps: unknown[]): T;
17
+ };
18
+ }
@@ -0,0 +1,20 @@
1
+ import type { Token } from "../../token";
2
+ import type { ServiceResolver } from "../../types";
3
+ import type { ProviderDependencyList } from "./ProviderDependencyList";
4
+ import type { ResolvedDeps } from "./ResolvedDeps";
5
+ import type { ProviderOwnershipOptions } from "./ProviderOwnership";
6
+
7
+ export interface FactoryProvider<T, D extends ProviderDependencyList = []> extends ProviderOwnershipOptions {
8
+ readonly provide: Token<T>;
9
+ readonly useFactory:
10
+ | ((resolver: ServiceResolver, ...args: ResolvedDeps<D>) => T)
11
+ | ((...args: ResolvedDeps<D>) => T);
12
+ readonly deps: D;
13
+ /**
14
+ * When true, the container passes a `ServiceResolver` as the first factory
15
+ * argument. This is an explicit contract: the container never guesses the
16
+ * factory signature (e.g. via `Function.length`, which breaks with default
17
+ * and rest parameters).
18
+ */
19
+ readonly withResolver?: boolean;
20
+ }
@@ -0,0 +1,20 @@
1
+ import type { Token } from "../../token";
2
+ import type { ServiceKey } from "../../types";
3
+
4
+ export interface KeyedDependency<T> {
5
+ readonly token: Token<T>;
6
+ readonly key: ServiceKey;
7
+ }
8
+
9
+ export function keyedDependency<T>(token: Token<T>, key: ServiceKey): KeyedDependency<T> {
10
+ return { token, key };
11
+ }
12
+
13
+ export function isKeyedDependency(value: unknown): value is KeyedDependency<unknown> {
14
+ return Boolean(
15
+ value &&
16
+ typeof value === "object" &&
17
+ "token" in (value as Record<string, unknown>) &&
18
+ "key" in (value as Record<string, unknown>),
19
+ );
20
+ }
@@ -0,0 +1,31 @@
1
+ import type { Token } from "../../token";
2
+ import type { KeyedDependency } from "./KeyedDependency";
3
+ import type { NamedDependency } from "./NamedDependency";
4
+
5
+ /**
6
+ * Deferred dependency: the wrapped service is created on first `.value`
7
+ * access (and cached), not when the consumer is constructed.
8
+ */
9
+ export interface Lazy<T> {
10
+ readonly value: T;
11
+ /** True once the underlying service has been created. */
12
+ readonly isCreated: boolean;
13
+ }
14
+
15
+ export interface LazyDependency<T> {
16
+ readonly lazy: true;
17
+ readonly inner: Token<T> | KeyedDependency<T> | NamedDependency<T>;
18
+ }
19
+
20
+ export function lazyDependency<T>(inner: Token<T> | KeyedDependency<T> | NamedDependency<T>): LazyDependency<T> {
21
+ return { lazy: true, inner };
22
+ }
23
+
24
+ export function isLazyDependency(value: unknown): value is LazyDependency<unknown> {
25
+ return Boolean(
26
+ value &&
27
+ typeof value === "object" &&
28
+ (value as Record<string, unknown>).lazy === true &&
29
+ "inner" in (value as Record<string, unknown>),
30
+ );
31
+ }
@@ -0,0 +1,16 @@
1
+ export interface NamedDependency<T = unknown> {
2
+ readonly name: string;
3
+ }
4
+
5
+ export function namedDependency<T = unknown>(name: string): NamedDependency<T> {
6
+ return { name };
7
+ }
8
+
9
+ export function isNamedDependency(value: unknown): value is NamedDependency<unknown> {
10
+ return Boolean(
11
+ value &&
12
+ typeof value === "object" &&
13
+ "name" in (value as Record<string, unknown>) &&
14
+ typeof (value as Record<string, unknown>).name === "string",
15
+ );
16
+ }
@@ -0,0 +1,10 @@
1
+ import type { AsyncFactoryProvider } from "./AsyncFactoryProvider";
2
+ import type { ClassProvider } from "./ClassProvider";
3
+ import type { FactoryProvider } from "./FactoryProvider";
4
+ import type { ValueProvider } from "./ValueProvider";
5
+
6
+ export type Provider<T = unknown> =
7
+ | ClassProvider<T, any>
8
+ | FactoryProvider<T, any>
9
+ | AsyncFactoryProvider<T, any>
10
+ | ValueProvider<T>;
@@ -0,0 +1,11 @@
1
+ import type { ServiceKey } from "../../types";
2
+ import type { Provider } from "./Provider";
3
+ import type { ProviderLifetime } from "./ProviderLifetime";
4
+
5
+ export class ProviderDefinition<T = unknown> {
6
+ public constructor(
7
+ public readonly provider: Provider<T>,
8
+ public readonly lifetime: ProviderLifetime,
9
+ public readonly key?: ServiceKey,
10
+ ) {}
11
+ }
@@ -0,0 +1,11 @@
1
+ import type { Token } from "../../token";
2
+ import type { KeyedDependency } from "./KeyedDependency";
3
+ import type { LazyDependency } from "./LazyDependency";
4
+ import type { NamedDependency } from "./NamedDependency";
5
+
6
+ export type ProviderDependencyList = readonly (
7
+ | Token<unknown>
8
+ | KeyedDependency<unknown>
9
+ | NamedDependency<unknown>
10
+ | LazyDependency<unknown>
11
+ )[];
@@ -0,0 +1 @@
1
+ export type ProviderLifetime = "singleton" | "scoped" | "transient";
@@ -0,0 +1,7 @@
1
+ /** Who is responsible for disposing an instance created by a provider. */
2
+ export type ProviderOwnership = "container" | "external";
3
+
4
+ export interface ProviderOwnershipOptions {
5
+ /** Defaults to `container`; use `external` when a lifecycle adapter owns cleanup. */
6
+ readonly ownership?: ProviderOwnership;
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { Token } from "../../token";
2
+ import type { KeyedDependency } from "./KeyedDependency";
3
+ import type { Lazy, LazyDependency } from "./LazyDependency";
4
+ import type { NamedDependency } from "./NamedDependency";
5
+
6
+ export type ResolvedDeps<
7
+ D extends readonly (Token<unknown> | KeyedDependency<unknown> | NamedDependency<unknown> | LazyDependency<unknown>)[],
8
+ > = {
9
+ [K in keyof D]: D[K] extends LazyDependency<infer TResolvedLazy>
10
+ ? Lazy<TResolvedLazy>
11
+ : D[K] extends Token<infer TResolved>
12
+ ? TResolved
13
+ : D[K] extends KeyedDependency<infer TResolvedKeyed>
14
+ ? TResolvedKeyed
15
+ : D[K] extends NamedDependency<infer TResolvedNamed>
16
+ ? TResolvedNamed
17
+ : never;
18
+ };
@@ -0,0 +1,6 @@
1
+ import type { Token } from "../../token";
2
+
3
+ export interface ValueProvider<T> {
4
+ readonly provide: Token<T>;
5
+ readonly useValue: T;
6
+ }
@@ -0,0 +1,13 @@
1
+ export type { AsyncFactoryProvider } from "./AsyncFactoryProvider";
2
+ export type { ClassProvider } from "./ClassProvider";
3
+ export type { FactoryProvider } from "./FactoryProvider";
4
+ export { keyedDependency, isKeyedDependency, type KeyedDependency } from "./KeyedDependency";
5
+ export { namedDependency, isNamedDependency, type NamedDependency } from "./NamedDependency";
6
+ export { lazyDependency, isLazyDependency, type Lazy, type LazyDependency } from "./LazyDependency";
7
+ export type { ProviderDependencyList } from "./ProviderDependencyList";
8
+ export { ProviderDefinition } from "./ProviderDefinition";
9
+ export type { ProviderLifetime } from "./ProviderLifetime";
10
+ export type { Provider } from "./Provider";
11
+ export type { ProviderOwnership, ProviderOwnershipOptions } from "./ProviderOwnership";
12
+ export type { ResolvedDeps } from "./ResolvedDeps";
13
+ export type { ValueProvider } from "./ValueProvider";
@@ -0,0 +1,84 @@
1
+ // `any[]` is intentional: it lets concrete classes act as their own tokens
2
+ // without TS rejecting constructors with typed parameters. Runtime shape of
3
+ // constructor deps is still validated by the container.
4
+ export type Class<T> = new (...args: any[]) => T;
5
+
6
+ export interface InjectionToken<T> {
7
+ readonly id: symbol;
8
+ readonly description: string;
9
+ readonly genericFamilyId?: symbol;
10
+ readonly genericArgId?: symbol;
11
+ readonly genericArgToken?: Token<unknown>;
12
+ }
13
+
14
+ export function createToken<T>(description: string): InjectionToken<T> {
15
+ return {
16
+ id: Symbol(description),
17
+ description,
18
+ };
19
+ }
20
+
21
+ export type Token<T> = Class<T> | InjectionToken<T>;
22
+
23
+ export interface OpenGenericTokenFamily<TArg, TResult> {
24
+ readonly id: symbol;
25
+ readonly description: string;
26
+ of(argument: Token<TArg>): InjectionToken<TResult>;
27
+ }
28
+
29
+ export function createOpenGenericTokenFamily<TArg, TResult>(description: string): OpenGenericTokenFamily<TArg, TResult> {
30
+ const familyId = Symbol(description);
31
+ // Canonical closed tokens per argument: `of(X)` must always return the same
32
+ // token instance, otherwise singleton identity breaks (a fresh token would
33
+ // materialize a fresh registration and a fresh instance on every call).
34
+ const closedTokens = new Map<symbol, InjectionToken<TResult>>();
35
+ return {
36
+ id: familyId,
37
+ description,
38
+ of(argument: Token<TArg>): InjectionToken<TResult> {
39
+ const argumentId = getTokenStableId(argument);
40
+ const existing = closedTokens.get(argumentId);
41
+ if (existing) {
42
+ return existing;
43
+ }
44
+
45
+ const closedDescription = `${description}<${tokenToDebugName(argument)}>`;
46
+ const token: InjectionToken<TResult> = {
47
+ id: Symbol(closedDescription),
48
+ description: closedDescription,
49
+ genericFamilyId: familyId,
50
+ genericArgId: argumentId,
51
+ genericArgToken: argument,
52
+ };
53
+ closedTokens.set(argumentId, token);
54
+ return token;
55
+ },
56
+ };
57
+ }
58
+
59
+ export function tokenToDebugName(token: Token<unknown>): string {
60
+ if (typeof token === "function") {
61
+ return token.name || "<anonymous class>";
62
+ }
63
+
64
+ return token.description;
65
+ }
66
+
67
+ // Stable identity for class tokens is kept off-object in a WeakMap so the
68
+ // container never mutates user classes (no enumerable `__bazisTokenId` leaks
69
+ // into Object.keys / serialization). Garbage-collected with the class itself.
70
+ const classTokenIds = new WeakMap<Function, symbol>();
71
+
72
+ function getTokenStableId(token: Token<unknown>): symbol {
73
+ if (typeof token === "function") {
74
+ const existing = classTokenIds.get(token);
75
+ if (existing) {
76
+ return existing;
77
+ }
78
+ const id = Symbol(token.name || "class-token");
79
+ classTokenIds.set(token, id);
80
+ return id;
81
+ }
82
+
83
+ return token.id;
84
+ }
@@ -0,0 +1,4 @@
1
+ export interface BuildServiceProviderOptions {
2
+ readonly validateOnBuild?: boolean;
3
+ readonly validateScopes?: boolean;
4
+ }
@@ -0,0 +1 @@
1
+ export type ServiceKey = string | number | symbol;
@@ -0,0 +1,16 @@
1
+ import type { Token } from "../token";
2
+ import type { ServiceKey } from "./ServiceKey";
3
+
4
+ export interface ServiceResolver {
5
+ resolve<T>(token: Token<T>): T;
6
+ resolveAll<T>(token: Token<T>): readonly T[];
7
+ resolveKeyed<T>(token: Token<T>, key: ServiceKey): T;
8
+ resolveAllKeyed<T>(token: Token<T>, key: ServiceKey): readonly T[];
9
+ /** Resolves a service whose chain may contain async factories. */
10
+ resolveAsync<T>(token: Token<T>): Promise<T>;
11
+ resolveKeyedAsync<T>(token: Token<T>, key: ServiceKey): Promise<T>;
12
+ /** Returns the service or undefined when no provider is registered (other errors propagate). */
13
+ tryResolve<T>(token: Token<T>, key?: ServiceKey): T | undefined;
14
+ /** Checks whether a provider is registered for the token (and key, if given). */
15
+ has(token: Token<unknown>, key?: ServiceKey): boolean;
16
+ }
@@ -0,0 +1,3 @@
1
+ export type { BuildServiceProviderOptions } from "./BuildServiceProviderOptions";
2
+ export type { ServiceKey } from "./ServiceKey";
3
+ export type { ServiceResolver } from "./ServiceResolver";
@@ -0,0 +1,60 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+
4
+ /** What codegen saw: project sources of the target and the framework version. */
5
+ export interface GeneratedSourceFingerprint {
6
+ /** Project root relative to the generated directory. */
7
+ readonly root: string;
8
+ readonly framework: string;
9
+ /** Project-relative source files of the target, sorted. */
10
+ readonly files: readonly string[];
11
+ readonly hash: string;
12
+ }
13
+
14
+ /** sha256 over every path and its bytes; undefined when a listed file is gone. */
15
+ export function hashSources(root: string, files: readonly string[]): string | undefined {
16
+ const hasher = new Bun.CryptoHasher("sha256");
17
+ for (const file of files) {
18
+ const absolute = path.join(root, file);
19
+ if (!existsSync(absolute)) return undefined;
20
+ hasher.update(file).update("\0").update(readFileSync(absolute)).update("\0");
21
+ }
22
+ return hasher.digest("hex");
23
+ }
24
+
25
+ /** Version of the framework package this module belongs to, when on disk. */
26
+ export function frameworkVersion(): string | undefined {
27
+ try {
28
+ const version = JSON.parse(readFileSync(path.resolve(import.meta.dir, "../package.json"), "utf8")).version;
29
+ return typeof version === "string" ? version : undefined;
30
+ } catch {
31
+ return undefined;
32
+ }
33
+ }
34
+
35
+ /**
36
+ * Warns loudly when the app is started from sources that changed after codegen
37
+ * (or with another framework version): new routes and dependencies would be
38
+ * silently missing. A compiled binary carries no sources, so it is skipped.
39
+ */
40
+ export function warnIfGeneratedSourcesChanged(
41
+ generatedDir: string,
42
+ fingerprint: GeneratedSourceFingerprint,
43
+ warn: (message: string) => void = (message) => console.warn(message),
44
+ ): boolean {
45
+ const root = path.resolve(generatedDir, fingerprint.root);
46
+ if (!existsSync(path.join(root, "bazis.config.json"))) return false;
47
+ const changes: string[] = [];
48
+ if (hashSources(root, fingerprint.files) !== fingerprint.hash) changes.push("application sources changed");
49
+ const version = frameworkVersion();
50
+ if (version !== undefined && version !== fingerprint.framework) changes.push(`bazis ${fingerprint.framework} -> ${version}`);
51
+ if (changes.length === 0) return false;
52
+ warn([
53
+ "",
54
+ `[bazis] WARNING: generated code is out of date (${changes.join("; ")}).`,
55
+ "[bazis] New or changed controllers, routes and constructor dependencies are NOT active.",
56
+ "[bazis] Run: bunx bazis codegen (bazis dev, bazis build and bazis test run it automatically)",
57
+ "",
58
+ ].join("\n"));
59
+ return true;
60
+ }
@@ -0,0 +1,187 @@
1
+ import path from "node:path";
2
+ import type { AgentMetadataIndex } from "./agent/AgentRegistry";
3
+ import { registerGeneratedClassDeps, restoreGeneratedClassDeps, snapshotGeneratedClassDeps, type GeneratedClassDependency } from "./di/module/autoDeps";
4
+ import { registerGeneratedBindings, restoreGeneratedBindings, snapshotGeneratedBindings } from "./http/Binding/autoBindings";
5
+ import { registerRequestModelShape, restoreRequestModelRegistry, snapshotRequestModelRegistry, type RequestModelClass, type RequestModelShape } from "./http/Binding/requestModelRegistry";
6
+ import { registerListModelClass, restoreListModelRegistry, snapshotListModelRegistry, type ListModelClass } from "./http/Binding/listModelRegistry";
7
+ import { registerGeneratedOpenApiMetadata, registerGeneratedOpenApiSchemaModel, restoreGeneratedOpenApiRegistry, snapshotGeneratedOpenApiRegistry, type GeneratedOpenApiSchemaModel } from "./http/OpenApi/generatedOpenApiRegistry";
8
+ import type { Class } from "./di";
9
+ import type { GeneratedBindingSpec } from "./http/Binding/generatedSpec";
10
+ import type { GeneratedOpenApiMetadata } from "../library/openapi";
11
+ import {
12
+ commitGeneratedProviderAttachments,
13
+ prepareGeneratedProviderAttachments,
14
+ restoreGeneratedProviderAttachments,
15
+ snapshotGeneratedProviderAttachments,
16
+ type GeneratedProviderAttachmentV1,
17
+ } from "./di/module/generatedProviderAttachments";
18
+ export type { GeneratedProviderAttachmentV1 } from "./di/module/generatedProviderAttachments";
19
+ export { warnIfGeneratedSourcesChanged, type GeneratedSourceFingerprint } from "./generatedFingerprint";
20
+ export {
21
+ createGeneratedProviderAttachmentChannel,
22
+ getGeneratedProviderAttachment,
23
+ type GeneratedProviderAttachmentChannel,
24
+ } from "./di/module/generatedProviderAttachments";
25
+
26
+ type GeneratedRuntimeModule = {
27
+ readonly registerBazisGeneratedRuntime?: () => void | Promise<void>;
28
+ };
29
+
30
+ type GeneratedAgentCatalogModule = {
31
+ readonly GENERATED_AGENT_METADATA?: AgentMetadataIndex;
32
+ };
33
+
34
+ let runtimeLoad: Promise<void> | undefined;
35
+
36
+ export interface BazisGeneratedTargetDescriptor {
37
+ readonly id: string;
38
+ readonly classDeps: readonly (readonly [Class<unknown>, readonly GeneratedClassDependency[]])[];
39
+ readonly bindings: readonly (readonly [Class<object>, Readonly<Record<string, readonly GeneratedBindingSpec[]>>])[];
40
+ readonly requestModels: readonly RequestModelClass[];
41
+ readonly requestShapes: readonly (readonly [RequestModelClass, RequestModelShape])[];
42
+ readonly listModels: readonly ListModelClass[];
43
+ readonly openApi: GeneratedOpenApiMetadata;
44
+ readonly openApiSchemaModels: readonly (readonly [GeneratedOpenApiSchemaModel, string])[];
45
+ /** Target-local generated Agent/Tool/Prompt metadata. */
46
+ readonly agentMetadata?: AgentMetadataIndex;
47
+ /** Package-internal exact-class metadata attached atomically with this target. */
48
+ readonly providerAttachments?: readonly GeneratedProviderAttachmentV1[];
49
+ }
50
+
51
+ const committedTargetDescriptors = new Set<string>();
52
+ const targetDescriptorLoads = new Map<string, Promise<void>>();
53
+ const committedTargetDescriptorsById = new Map<string, BazisGeneratedTargetDescriptor>();
54
+ const explicitlyActivatedTargetIds = new Set<string>();
55
+
56
+ /**
57
+ * Internal atomic publication boundary for one complete generated target.
58
+ * Generated modules only export immutable data; validation happens before any
59
+ * owner registry receives a mutation. Repeated and concurrent activation is
60
+ * target-idempotent.
61
+ */
62
+ export function registerBazisGeneratedTargetDescriptor(descriptor: BazisGeneratedTargetDescriptor): Promise<void> {
63
+ const existing = targetDescriptorLoads.get(descriptor.id);
64
+ if (existing !== undefined) return existing;
65
+ const load = Promise.resolve().then(() => {
66
+ validateDescriptor(descriptor);
67
+ if (committedTargetDescriptors.has(descriptor.id)) return;
68
+ const preparedAttachments = prepareGeneratedProviderAttachments(descriptor.providerAttachments);
69
+ const snapshots = {
70
+ classDeps: snapshotGeneratedClassDeps(),
71
+ bindings: snapshotGeneratedBindings(),
72
+ requestModels: snapshotRequestModelRegistry(),
73
+ listModels: snapshotListModelRegistry(),
74
+ openApi: snapshotGeneratedOpenApiRegistry(),
75
+ providerAttachments: snapshotGeneratedProviderAttachments(),
76
+ };
77
+ try {
78
+ for (const [target, deps] of descriptor.classDeps) registerGeneratedClassDeps(target, deps);
79
+ const modelIndex = new Map<string, Class<object>>();
80
+ for (const model of [...descriptor.requestModels, ...descriptor.listModels]) {
81
+ if (model.name) modelIndex.set(model.name, model);
82
+ }
83
+ for (const [target, bindings] of descriptor.bindings) registerGeneratedBindings(target, bindings, modelIndex);
84
+ for (const [model, shape] of descriptor.requestShapes) registerRequestModelShape(model, shape);
85
+ for (const model of descriptor.listModels) registerListModelClass(model);
86
+ registerGeneratedOpenApiMetadata(descriptor.openApi, descriptor.bindings.map(([controller]) => controller));
87
+ for (const [model, name] of descriptor.openApiSchemaModels) registerGeneratedOpenApiSchemaModel(model, name);
88
+ commitGeneratedProviderAttachments(preparedAttachments);
89
+ committedTargetDescriptors.add(descriptor.id);
90
+ committedTargetDescriptorsById.set(descriptor.id, descriptor);
91
+ explicitlyActivatedTargetIds.add(descriptor.id);
92
+ } catch (error) {
93
+ restoreGeneratedClassDeps(snapshots.classDeps);
94
+ restoreGeneratedBindings(snapshots.bindings);
95
+ restoreRequestModelRegistry(snapshots.requestModels);
96
+ restoreListModelRegistry(snapshots.listModels);
97
+ restoreGeneratedOpenApiRegistry(snapshots.openApi);
98
+ restoreGeneratedProviderAttachments(snapshots.providerAttachments);
99
+ throw error;
100
+ }
101
+ });
102
+ targetDescriptorLoads.set(descriptor.id, load);
103
+ void load.catch(() => targetDescriptorLoads.delete(descriptor.id));
104
+ return load;
105
+ }
106
+
107
+ function validateDescriptor(descriptor: BazisGeneratedTargetDescriptor): void {
108
+ if (!/^[a-z][a-z0-9-]*$/.test(descriptor.id)) throw new TypeError("Invalid generated target descriptor id.");
109
+ const dependencyTargets = new Set<object>();
110
+ for (const [target, deps] of descriptor.classDeps) {
111
+ if (typeof target !== "function" || !Array.isArray(deps) || dependencyTargets.has(target)) throw new TypeError(`Invalid generated DI descriptor for ${descriptor.id}.`);
112
+ dependencyTargets.add(target);
113
+ }
114
+ const bindingTargets = new Set<object>();
115
+ for (const [target, bindings] of descriptor.bindings) {
116
+ if (typeof target !== "function" || bindings === null || typeof bindings !== "object" || bindingTargets.has(target)) throw new TypeError(`Invalid generated HTTP descriptor for ${descriptor.id}.`);
117
+ bindingTargets.add(target);
118
+ }
119
+ for (const model of [...descriptor.requestModels, ...descriptor.listModels]) if (typeof model !== "function") throw new TypeError(`Invalid generated model descriptor for ${descriptor.id}.`);
120
+ for (const [model, name] of descriptor.openApiSchemaModels) if (typeof model !== "function" || name.trim().length === 0) throw new TypeError(`Invalid generated OpenAPI descriptor for ${descriptor.id}.`);
121
+ if (descriptor.providerAttachments !== undefined && !Array.isArray(descriptor.providerAttachments)) throw new TypeError(`Invalid generated provider attachment descriptor for ${descriptor.id}.`);
122
+ }
123
+
124
+ /**
125
+ * Loads project-owned generated runtime registrations, when present.
126
+ *
127
+ * The framework core stays independent from `src/app`: generated
128
+ * files live under `src/generated/bazis` and register request/list models,
129
+ * OpenAPI metadata and similar app-owned artifacts through public registries.
130
+ */
131
+ export function loadBazisGeneratedRuntime(): Promise<void> {
132
+ // A project-local target bootstrap is authoritative for this process. Do
133
+ // not even import the default generated graph after it was selected.
134
+ if (explicitlyActivatedTargetIds.size > 0) return Promise.resolve();
135
+ runtimeLoad ??= loadRuntimeOnce();
136
+ return runtimeLoad;
137
+ }
138
+
139
+ export async function loadBazisGeneratedAgentMetadata(
140
+ targets: readonly Class<object>[] = [],
141
+ ): Promise<AgentMetadataIndex | undefined> {
142
+ const registered = selectRegisteredAgentMetadata(targets);
143
+ if (registered !== undefined || explicitlyActivatedTargetIds.size > 0) return registered;
144
+ const module = await importGeneratedModule<GeneratedAgentCatalogModule>("agentCatalog");
145
+ return module?.GENERATED_AGENT_METADATA;
146
+ }
147
+
148
+ function selectRegisteredAgentMetadata(targets: readonly Class<object>[]): AgentMetadataIndex | undefined {
149
+ const candidates = [...committedTargetDescriptorsById.values()]
150
+ .map((descriptor) => descriptor.agentMetadata)
151
+ .filter((metadata): metadata is AgentMetadataIndex => metadata !== undefined);
152
+ if (candidates.length === 0) return undefined;
153
+ for (const metadata of candidates) {
154
+ for (const target of targets) {
155
+ if (metadata.agents.has(target) || metadata.tools.has(target) || metadata.prompts.has(target)) return metadata;
156
+ }
157
+ }
158
+ return candidates.length === 1 ? candidates[0] : undefined;
159
+ }
160
+
161
+ async function loadRuntimeOnce(): Promise<void> {
162
+ const module = await importGeneratedModule<GeneratedRuntimeModule>("runtime");
163
+ await module?.registerBazisGeneratedRuntime?.();
164
+ }
165
+
166
+ /**
167
+ * The project's generated module `name`, or undefined when it does not exist.
168
+ * Framework sources inside the project (`src/bazis`) find `src/generated`
169
+ * next to them; an installed package (`node_modules/bazis`) cannot, so the
170
+ * project root is the working directory, as for `bazis dev` and `bazis test`.
171
+ */
172
+ async function importGeneratedModule<T>(name: string): Promise<T | undefined> {
173
+ const candidates = [`../../generated/bazis/${name}`, path.join(process.cwd(), "src/generated/bazis", name)];
174
+ for (const candidate of candidates) {
175
+ try {
176
+ return (await import(candidate)) as T;
177
+ } catch (error) {
178
+ if (!isOptionalGeneratedModuleMissing(error, `generated/bazis/${name}`)) throw error;
179
+ }
180
+ }
181
+ return undefined;
182
+ }
183
+
184
+ function isOptionalGeneratedModuleMissing(error: unknown, generatedPath: string): boolean {
185
+ const message = error instanceof Error ? error.message : String(error);
186
+ return message.includes("Cannot find module") && message.includes(generatedPath);
187
+ }