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,21 @@
1
+ import type { BazisModuleRef } from "../di";
2
+ import { buildCacheModule } from "./internal/buildCacheProviders";
3
+ import type { CacheOptions } from "./types/CacheOptions";
4
+
5
+ /**
6
+ * In-memory cache as a one-line value. Inject {@link ICache} anywhere; decorate
7
+ * methods with `@Cacheable` or routes with `@OutputCache`.
8
+ *
9
+ * ```ts
10
+ * createApp({ cache: memory({ maxEntries: 1000 }) });
11
+ * // or, inside a module: imports: [memory()]
12
+ * ```
13
+ *
14
+ * Options are just the in-memory knobs (`maxEntries`, `defaultTtlSeconds`, …).
15
+ * For multi-instance caching keep `memory()` and add a distributed backend in your
16
+ * `@Infra` manifest via `redisConnect(redisConfig, { cache: "distributed" })`; `@CacheableRedis` /
17
+ * `@OutputRedisCache` then pick the backend up from DI automatically.
18
+ */
19
+ export function memory(options: CacheOptions = {}): BazisModuleRef {
20
+ return buildCacheModule(options);
21
+ }
@@ -0,0 +1,38 @@
1
+ import type { CacheableOptions } from "../types/CachePolicy";
2
+ import { ownCacheableMeta, ownCacheableMethodMeta } from "./cacheableMetadata";
3
+
4
+ type AnyClass = abstract new (...args: never[]) => unknown;
5
+ type AnyMethod = (...args: never[]) => unknown;
6
+ type ClassOrMethodDecorator = (
7
+ value: AnyClass | AnyMethod,
8
+ context: ClassDecoratorContext | ClassMethodDecoratorContext,
9
+ ) => void;
10
+
11
+ /**
12
+ * Caches the return value of a service/provider method in {@link ICache}.
13
+ *
14
+ * Mirrors Spring / FusionCache `@Cacheable`. Put the decorator on the
15
+ * **implementation class**, then register via {@link cachedSingleton} or
16
+ * {@link cachedScoped} so DI returns a caching proxy for the interface token.
17
+ *
18
+ * ```ts
19
+ * class UserService implements IUserStore {
20
+ * @Cacheable({ seconds: 300, key: (id) => `user:${id}` })
21
+ * async byId(id: number) { ... }
22
+ * }
23
+ *
24
+ * cachedScoped(IUserStore, UserService, [repositoryFor(User)])
25
+ * ```
26
+ */
27
+ export function Cacheable(options: CacheableOptions): ClassOrMethodDecorator {
28
+ return (_value, context) => {
29
+ if (context.kind === "class") {
30
+ ownCacheableMeta(context.metadata).cacheable = options;
31
+ } else {
32
+ const methodMeta = ownCacheableMethodMeta(context.metadata, context.name);
33
+ Object.assign(methodMeta, options);
34
+ }
35
+ };
36
+ }
37
+
38
+ export type { CacheableOptions } from "../types/CachePolicy";
@@ -0,0 +1,39 @@
1
+ import type { CacheableRedisOptions } from "../types/CacheableRedisOptions";
2
+ import { ownCacheableRedisMeta, ownCacheableRedisMethodMeta } from "./cacheableRedisMetadata";
3
+
4
+ type AnyClass = abstract new (...args: never[]) => unknown;
5
+ type AnyMethod = (...args: never[]) => unknown;
6
+ type ClassOrMethodDecorator = (
7
+ value: AnyClass | AnyMethod,
8
+ context: ClassDecoratorContext | ClassMethodDecoratorContext,
9
+ ) => void;
10
+
11
+ /**
12
+ * Shared service method cache backed by the distributed tier (multi-instance safe).
13
+ *
14
+ * Requires a distributed backend: add `redisConnect(redisConfig, { cache: "distributed" })`
15
+ * to your `@Infra` manifest. Register the class with the usual `cachedScoped` /
16
+ * `cachedSingleton` (or just `scoped` / `singleton` — the auto-hook wraps it). The distributed
17
+ * tier activates automatically when a backend is configured.
18
+ *
19
+ * ```ts
20
+ * class UserService implements IUserStore {
21
+ * @CacheableRedis({ seconds: 300, key: (id) => `user:${id}`, tags: ["users"] })
22
+ * async byId(id: number) { ... }
23
+ * }
24
+ *
25
+ * cachedScoped(IUserStore, UserService, [repositoryFor(User)]);
26
+ * ```
27
+ */
28
+ export function CacheableRedis(options: CacheableRedisOptions): ClassOrMethodDecorator {
29
+ return (_value, context) => {
30
+ if (context.kind === "class") {
31
+ ownCacheableRedisMeta(context.metadata).cacheableRedis = options;
32
+ } else {
33
+ const methodMeta = ownCacheableRedisMethodMeta(context.metadata, context.name);
34
+ Object.assign(methodMeta, options);
35
+ }
36
+ };
37
+ }
38
+
39
+ export type { CacheableRedisOptions } from "../types/CacheableRedisOptions";
@@ -0,0 +1,33 @@
1
+ import type { OutputCacheOptions } from "../types/CachePolicy";
2
+ import { ownOutputCacheActionMeta, ownOutputCacheMeta } from "./outputCacheMetadata";
3
+
4
+ type AnyClass = abstract new (...args: never[]) => unknown;
5
+ type AnyMethod = (...args: never[]) => unknown;
6
+ type ClassOrMethodDecorator = (
7
+ value: AnyClass | AnyMethod,
8
+ context: ClassDecoratorContext | ClassMethodDecoratorContext,
9
+ ) => void;
10
+
11
+ /**
12
+ * Server-side HTTP output cache for controller actions.
13
+ *
14
+ * Mirrors ASP.NET Core `[OutputCache]`. Requires a cache value
15
+ * (`createApp({ cache: memory() })`); the output-cache middleware self-wires via DI.
16
+ *
17
+ * ```ts
18
+ * @Get("products")
19
+ * @OutputCache({ seconds: 60, varyByQuery: ["limit", "page"], tags: ["products"] })
20
+ * list(limit = 20, page = 1) { ... }
21
+ * ```
22
+ */
23
+ export function OutputCache(options: OutputCacheOptions): ClassOrMethodDecorator {
24
+ return (_value, context) => {
25
+ if (context.kind === "class") {
26
+ ownOutputCacheMeta(context.metadata).outputCache = options;
27
+ } else {
28
+ ownOutputCacheActionMeta(context.metadata, context.name).outputCache = options;
29
+ }
30
+ };
31
+ }
32
+
33
+ export type { OutputCacheOptions } from "../types/CachePolicy";
@@ -0,0 +1,33 @@
1
+ import type { OutputRedisCacheOptions } from "../types/OutputRedisCacheOptions";
2
+ import { ownOutputRedisCacheActionMeta, ownOutputRedisCacheMeta } from "./outputRedisCacheMetadata";
3
+
4
+ type AnyClass = abstract new (...args: never[]) => unknown;
5
+ type AnyMethod = (...args: never[]) => unknown;
6
+ type ClassOrMethodDecorator = (
7
+ value: AnyClass | AnyMethod,
8
+ context: ClassDecoratorContext | ClassMethodDecoratorContext,
9
+ ) => void;
10
+
11
+ /**
12
+ * Shared HTTP output cache backed by the distributed tier (multi-instance safe).
13
+ *
14
+ * Requires a distributed backend: add `redisConnect(redisConfig, { cache: "distributed" })`
15
+ * to your `@Infra` manifest.
16
+ *
17
+ * ```ts
18
+ * @Get("products")
19
+ * @OutputRedisCache({ seconds: 60, varyByQuery: ["limit", "page"], tags: ["products"] })
20
+ * list() { ... }
21
+ * ```
22
+ */
23
+ export function OutputRedisCache(options: OutputRedisCacheOptions): ClassOrMethodDecorator {
24
+ return (_value, context) => {
25
+ if (context.kind === "class") {
26
+ ownOutputRedisCacheMeta(context.metadata).outputRedisCache = options;
27
+ } else {
28
+ ownOutputRedisCacheActionMeta(context.metadata, context.name).outputRedisCache = options;
29
+ }
30
+ };
31
+ }
32
+
33
+ export type { OutputRedisCacheOptions } from "../types/OutputRedisCacheOptions";
@@ -0,0 +1,78 @@
1
+ import type { CacheableOptions } from "../types/CachePolicy";
2
+
3
+ (Symbol as { metadata?: symbol }).metadata ??= Symbol.for("Symbol.metadata");
4
+
5
+ const CACHEABLE_META = Symbol.for("bazis:cache:cacheable");
6
+
7
+ export interface CacheableRequirement extends CacheableOptions {}
8
+
9
+ export interface CacheableClassMeta {
10
+ cacheable?: CacheableRequirement;
11
+ methods: Map<string | symbol, CacheableRequirement>;
12
+ }
13
+
14
+ interface CacheableMetadataCarrier {
15
+ [CACHEABLE_META]?: CacheableClassMeta;
16
+ }
17
+
18
+ function emptyMeta(): CacheableClassMeta {
19
+ return { methods: new Map() };
20
+ }
21
+
22
+ function cloneMeta(source: CacheableClassMeta): CacheableClassMeta {
23
+ const methods = new Map<string | symbol, CacheableRequirement>();
24
+ for (const [name, requirement] of source.methods) {
25
+ methods.set(name, { ...requirement });
26
+ }
27
+ return {
28
+ cacheable: source.cacheable ? { ...source.cacheable } : undefined,
29
+ methods,
30
+ };
31
+ }
32
+
33
+ export function ownCacheableMeta(metadata: object): CacheableClassMeta {
34
+ const carrier = metadata as CacheableMetadataCarrier;
35
+ if (!Object.prototype.hasOwnProperty.call(carrier, CACHEABLE_META)) {
36
+ const inherited = carrier[CACHEABLE_META];
37
+ carrier[CACHEABLE_META] = inherited ? cloneMeta(inherited) : emptyMeta();
38
+ }
39
+ return carrier[CACHEABLE_META]!;
40
+ }
41
+
42
+ export function ownCacheableMethodMeta(metadata: object, methodName: string | symbol): CacheableRequirement {
43
+ const meta = ownCacheableMeta(metadata);
44
+ let requirement = meta.methods.get(methodName);
45
+ if (requirement === undefined) {
46
+ requirement = {};
47
+ meta.methods.set(methodName, requirement);
48
+ }
49
+ return requirement;
50
+ }
51
+
52
+ export function cacheableMetaOf(ctor: object): CacheableClassMeta | undefined {
53
+ const metadata = (ctor as { [key: symbol]: unknown })[Symbol.metadata as unknown as symbol] as
54
+ | CacheableMetadataCarrier
55
+ | undefined;
56
+ return metadata?.[CACHEABLE_META];
57
+ }
58
+
59
+ export function resolveCacheableRequirement(
60
+ classMeta: CacheableClassMeta | undefined,
61
+ methodName: string | symbol,
62
+ ): CacheableRequirement | undefined {
63
+ if (classMeta === undefined) {
64
+ return undefined;
65
+ }
66
+ const method = classMeta.methods.get(methodName);
67
+ if (method !== undefined) {
68
+ return { ...classMeta.cacheable, ...method };
69
+ }
70
+ return classMeta.cacheable;
71
+ }
72
+
73
+ export function hasCacheableMethods(classMeta: CacheableClassMeta | undefined): boolean {
74
+ if (classMeta === undefined) {
75
+ return false;
76
+ }
77
+ return classMeta.cacheable !== undefined || classMeta.methods.size > 0;
78
+ }
@@ -0,0 +1,81 @@
1
+ import type { CacheableRedisOptions } from "../types/CacheableRedisOptions";
2
+
3
+ (Symbol as { metadata?: symbol }).metadata ??= Symbol.for("Symbol.metadata");
4
+
5
+ const CACHEABLE_REDIS_META = Symbol.for("bazis:cache:cacheable-redis");
6
+
7
+ export interface CacheableRedisRequirement extends CacheableRedisOptions {}
8
+
9
+ export interface CacheableRedisClassMeta {
10
+ cacheableRedis?: CacheableRedisRequirement;
11
+ methods: Map<string | symbol, CacheableRedisRequirement>;
12
+ }
13
+
14
+ interface CacheableRedisMetadataCarrier {
15
+ [CACHEABLE_REDIS_META]?: CacheableRedisClassMeta;
16
+ }
17
+
18
+ function emptyMeta(): CacheableRedisClassMeta {
19
+ return { methods: new Map() };
20
+ }
21
+
22
+ function cloneMeta(source: CacheableRedisClassMeta): CacheableRedisClassMeta {
23
+ const methods = new Map<string | symbol, CacheableRedisRequirement>();
24
+ for (const [name, requirement] of source.methods) {
25
+ methods.set(name, { ...requirement });
26
+ }
27
+ return {
28
+ cacheableRedis: source.cacheableRedis ? { ...source.cacheableRedis } : undefined,
29
+ methods,
30
+ };
31
+ }
32
+
33
+ export function ownCacheableRedisMeta(metadata: object): CacheableRedisClassMeta {
34
+ const carrier = metadata as CacheableRedisMetadataCarrier;
35
+ if (!Object.prototype.hasOwnProperty.call(carrier, CACHEABLE_REDIS_META)) {
36
+ const inherited = carrier[CACHEABLE_REDIS_META];
37
+ carrier[CACHEABLE_REDIS_META] = inherited ? cloneMeta(inherited) : emptyMeta();
38
+ }
39
+ return carrier[CACHEABLE_REDIS_META]!;
40
+ }
41
+
42
+ export function ownCacheableRedisMethodMeta(
43
+ metadata: object,
44
+ methodName: string | symbol,
45
+ ): CacheableRedisRequirement {
46
+ const meta = ownCacheableRedisMeta(metadata);
47
+ let requirement = meta.methods.get(methodName);
48
+ if (requirement === undefined) {
49
+ requirement = {};
50
+ meta.methods.set(methodName, requirement);
51
+ }
52
+ return requirement;
53
+ }
54
+
55
+ export function cacheableRedisMetaOf(ctor: object): CacheableRedisClassMeta | undefined {
56
+ const metadata = (ctor as { [key: symbol]: unknown })[Symbol.metadata as unknown as symbol] as
57
+ | CacheableRedisMetadataCarrier
58
+ | undefined;
59
+ return metadata?.[CACHEABLE_REDIS_META];
60
+ }
61
+
62
+ export function resolveCacheableRedisRequirement(
63
+ classMeta: CacheableRedisClassMeta | undefined,
64
+ methodName: string | symbol,
65
+ ): CacheableRedisRequirement | undefined {
66
+ if (classMeta === undefined) {
67
+ return undefined;
68
+ }
69
+ const method = classMeta.methods.get(methodName);
70
+ if (method !== undefined) {
71
+ return { ...classMeta.cacheableRedis, ...method };
72
+ }
73
+ return classMeta.cacheableRedis;
74
+ }
75
+
76
+ export function hasCacheableRedisMethods(classMeta: CacheableRedisClassMeta | undefined): boolean {
77
+ if (classMeta === undefined) {
78
+ return false;
79
+ }
80
+ return classMeta.cacheableRedis !== undefined || classMeta.methods.size > 0;
81
+ }
@@ -0,0 +1,71 @@
1
+ import type { OutputCacheOptions } from "../types/CachePolicy";
2
+
3
+ (Symbol as { metadata?: symbol }).metadata ??= Symbol.for("Symbol.metadata");
4
+
5
+ const OUTPUT_CACHE_META = Symbol.for("bazis:cache:output");
6
+
7
+ export interface OutputCacheRequirement extends OutputCacheOptions {}
8
+
9
+ export interface OutputCacheControllerMeta {
10
+ outputCache?: OutputCacheRequirement;
11
+ actions: Map<string | symbol, OutputCacheActionMeta>;
12
+ }
13
+
14
+ export interface OutputCacheActionMeta {
15
+ outputCache?: OutputCacheRequirement;
16
+ }
17
+
18
+ interface OutputCacheMetadataCarrier {
19
+ [OUTPUT_CACHE_META]?: OutputCacheControllerMeta;
20
+ }
21
+
22
+ function emptyMeta(): OutputCacheControllerMeta {
23
+ return { actions: new Map() };
24
+ }
25
+
26
+ function cloneMeta(source: OutputCacheControllerMeta): OutputCacheControllerMeta {
27
+ const actions = new Map<string | symbol, OutputCacheActionMeta>();
28
+ for (const [name, action] of source.actions) {
29
+ actions.set(name, { ...action, outputCache: action.outputCache ? { ...action.outputCache } : undefined });
30
+ }
31
+ return {
32
+ outputCache: source.outputCache ? { ...source.outputCache } : undefined,
33
+ actions,
34
+ };
35
+ }
36
+
37
+ export function ownOutputCacheMeta(metadata: object): OutputCacheControllerMeta {
38
+ const carrier = metadata as OutputCacheMetadataCarrier;
39
+ if (!Object.prototype.hasOwnProperty.call(carrier, OUTPUT_CACHE_META)) {
40
+ const inherited = carrier[OUTPUT_CACHE_META];
41
+ carrier[OUTPUT_CACHE_META] = inherited ? cloneMeta(inherited) : emptyMeta();
42
+ }
43
+ return carrier[OUTPUT_CACHE_META]!;
44
+ }
45
+
46
+ export function ownOutputCacheActionMeta(metadata: object, methodName: string | symbol): OutputCacheActionMeta {
47
+ const meta = ownOutputCacheMeta(metadata);
48
+ let action = meta.actions.get(methodName);
49
+ if (action === undefined) {
50
+ action = {};
51
+ meta.actions.set(methodName, action);
52
+ }
53
+ return action;
54
+ }
55
+
56
+ export function outputCacheMetaOf(ctor: object): OutputCacheControllerMeta | undefined {
57
+ const metadata = (ctor as { [key: symbol]: unknown })[Symbol.metadata as unknown as symbol] as
58
+ | OutputCacheMetadataCarrier
59
+ | undefined;
60
+ return metadata?.[OUTPUT_CACHE_META];
61
+ }
62
+
63
+ export function resolveOutputCacheRequirement(
64
+ controllerMeta: OutputCacheControllerMeta | undefined,
65
+ methodName: string | symbol,
66
+ ): OutputCacheRequirement | undefined {
67
+ if (controllerMeta === undefined) {
68
+ return undefined;
69
+ }
70
+ return controllerMeta.actions.get(methodName)?.outputCache ?? controllerMeta.outputCache;
71
+ }
@@ -0,0 +1,77 @@
1
+ import type { OutputRedisCacheOptions } from "../types/OutputRedisCacheOptions";
2
+
3
+ (Symbol as { metadata?: symbol }).metadata ??= Symbol.for("Symbol.metadata");
4
+
5
+ const OUTPUT_REDIS_CACHE_META = Symbol.for("bazis:cache:output-redis");
6
+
7
+ export interface OutputRedisCacheRequirement extends OutputRedisCacheOptions {}
8
+
9
+ export interface OutputRedisCacheControllerMeta {
10
+ outputRedisCache?: OutputRedisCacheRequirement;
11
+ actions: Map<string | symbol, OutputRedisCacheActionMeta>;
12
+ }
13
+
14
+ export interface OutputRedisCacheActionMeta {
15
+ outputRedisCache?: OutputRedisCacheRequirement;
16
+ }
17
+
18
+ interface OutputRedisCacheMetadataCarrier {
19
+ [OUTPUT_REDIS_CACHE_META]?: OutputRedisCacheControllerMeta;
20
+ }
21
+
22
+ function emptyMeta(): OutputRedisCacheControllerMeta {
23
+ return { actions: new Map() };
24
+ }
25
+
26
+ function cloneMeta(source: OutputRedisCacheControllerMeta): OutputRedisCacheControllerMeta {
27
+ const actions = new Map<string | symbol, OutputRedisCacheActionMeta>();
28
+ for (const [name, action] of source.actions) {
29
+ actions.set(name, {
30
+ ...action,
31
+ outputRedisCache: action.outputRedisCache ? { ...action.outputRedisCache } : undefined,
32
+ });
33
+ }
34
+ return {
35
+ outputRedisCache: source.outputRedisCache ? { ...source.outputRedisCache } : undefined,
36
+ actions,
37
+ };
38
+ }
39
+
40
+ export function ownOutputRedisCacheMeta(metadata: object): OutputRedisCacheControllerMeta {
41
+ const carrier = metadata as OutputRedisCacheMetadataCarrier;
42
+ if (!Object.prototype.hasOwnProperty.call(carrier, OUTPUT_REDIS_CACHE_META)) {
43
+ const inherited = carrier[OUTPUT_REDIS_CACHE_META];
44
+ carrier[OUTPUT_REDIS_CACHE_META] = inherited ? cloneMeta(inherited) : emptyMeta();
45
+ }
46
+ return carrier[OUTPUT_REDIS_CACHE_META]!;
47
+ }
48
+
49
+ export function ownOutputRedisCacheActionMeta(
50
+ metadata: object,
51
+ methodName: string | symbol,
52
+ ): OutputRedisCacheActionMeta {
53
+ const meta = ownOutputRedisCacheMeta(metadata);
54
+ let action = meta.actions.get(methodName);
55
+ if (action === undefined) {
56
+ action = {};
57
+ meta.actions.set(methodName, action);
58
+ }
59
+ return action;
60
+ }
61
+
62
+ export function outputRedisCacheMetaOf(ctor: object): OutputRedisCacheControllerMeta | undefined {
63
+ const metadata = (ctor as { [key: symbol]: unknown })[Symbol.metadata as unknown as symbol] as
64
+ | OutputRedisCacheMetadataCarrier
65
+ | undefined;
66
+ return metadata?.[OUTPUT_REDIS_CACHE_META];
67
+ }
68
+
69
+ export function resolveOutputRedisCacheRequirement(
70
+ controllerMeta: OutputRedisCacheControllerMeta | undefined,
71
+ methodName: string | symbol,
72
+ ): OutputRedisCacheRequirement | undefined {
73
+ if (controllerMeta === undefined) {
74
+ return undefined;
75
+ }
76
+ return controllerMeta.actions.get(methodName)?.outputRedisCache ?? controllerMeta.outputRedisCache;
77
+ }
@@ -0,0 +1,26 @@
1
+ import type { Class, ClassProviderHook, Token } from "../../di";
2
+ import { cacheableMetaOf, hasCacheableMethods } from "../decorators/cacheableMetadata";
3
+ import { cacheableRedisMetaOf, hasCacheableRedisMethods } from "../decorators/cacheableRedisMetadata";
4
+ import { cachedScoped, cachedSingleton } from "../providers/cachedProviders";
5
+
6
+ /**
7
+ * Pure build extension contributed by the cache module to its own container.
8
+ * DI retains construction, lifetime, dependency validation and resource ownership.
9
+ */
10
+ export const cacheableClassProviderHook: ClassProviderHook = ({ lifetime, provide, useClass, deps }) => {
11
+ const hasCache =
12
+ hasCacheableMethods(cacheableMetaOf(useClass))
13
+ || hasCacheableRedisMethods(cacheableRedisMetaOf(useClass));
14
+ if (!hasCache) {
15
+ return undefined;
16
+ }
17
+ const token = provide as Token<object>;
18
+ const impl = useClass as Class<object>;
19
+ if (lifetime === "scoped") {
20
+ return cachedScoped(token, impl, deps);
21
+ }
22
+ if (lifetime === "singleton") {
23
+ return cachedSingleton(token, impl, deps);
24
+ }
25
+ return undefined;
26
+ };
@@ -0,0 +1,5 @@
1
+ /** Serializes cache values to/from the string form a distributed store keeps. */
2
+ export interface CacheCodec<TValue> {
3
+ serialize(value: TValue): string;
4
+ deserialize(raw: string): TValue;
5
+ }