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,223 @@
1
+ import type { HostedService } from "../di";
2
+ import { backgroundOptionsOf } from "./decorator";
3
+ import { delay } from "./delay";
4
+ import { redactSensitive } from "../../library/redaction";
5
+
6
+ /** Restart-on-crash policy for a long-running {@link BackgroundService}. */
7
+ export interface BackgroundRestartPolicy {
8
+ /** Restarts after a crash (not counting the first run). Default: 0 (off). */
9
+ readonly maxRestarts?: number;
10
+ /** Initial backoff before a restart; doubles each time. Default: 500ms. */
11
+ readonly backoffMs?: number;
12
+ /** Backoff cap. Default: 30000ms. */
13
+ readonly maxBackoffMs?: number;
14
+ /** Synchronous diagnostic notification. Errors (including returned rejections) never stop restarts. */
15
+ readonly onError?: (error: unknown, restarts: number) => void;
16
+ }
17
+
18
+ export interface BackgroundServiceOptions {
19
+ /** Startup phase (see {@link HostedService.phase}). Default: 0. */
20
+ readonly phase?: number;
21
+ /** Grace period to await `execute` after abort on stop. Default: 5000ms. */
22
+ readonly stopTimeoutMs?: number;
23
+ /** Restart-on-crash policy. Default: no restart (crash is logged). */
24
+ readonly restart?: BackgroundRestartPolicy;
25
+ }
26
+
27
+ const DEFAULT_STOP_TIMEOUT_MS = 5_000;
28
+
29
+ /**
30
+ * Base class for long-running background work, integrated with the kernel
31
+ * lifecycle as a {@link HostedService}.
32
+ *
33
+ * `start()` is **non-blocking**: it launches {@link execute} in the background
34
+ * (so it never stalls phased startup) and hands it an {@link AbortSignal}.
35
+ * `stop()` aborts that signal and awaits completion within `stopTimeoutMs`.
36
+ * Cooperate by checking `signal.aborted` and awaiting {@link delay}`(ms, signal)`.
37
+ *
38
+ * ```ts
39
+ * class Heartbeat extends BackgroundService {
40
+ * constructor(private readonly api: HttpClient) { super({ stopTimeoutMs: 2000 }); }
41
+ * protected async execute(signal: AbortSignal) {
42
+ * while (!signal.aborted) {
43
+ * await this.api.post("/heartbeat");
44
+ * await delay(15_000, signal);
45
+ * }
46
+ * }
47
+ * }
48
+ * ```
49
+ */
50
+ export abstract class BackgroundService implements HostedService {
51
+ public readonly phase: number;
52
+ private readonly stopTimeoutMs: number;
53
+ private readonly restart: BackgroundRestartPolicy;
54
+ private controller?: AbortController;
55
+ private runPromise?: Promise<void>;
56
+
57
+ public constructor(options?: BackgroundServiceOptions) {
58
+ // Explicit `super(...)` options win over `@Background({...})` metadata.
59
+ const resolved = { ...backgroundOptionsOf(this.constructor), ...options };
60
+ this.phase = resolved.phase ?? 0;
61
+ this.stopTimeoutMs = resolved.stopTimeoutMs ?? DEFAULT_STOP_TIMEOUT_MS;
62
+ this.restart = resolved.restart ?? {};
63
+ }
64
+
65
+ /** The background workload. Must observe `signal` for cooperative shutdown. */
66
+ protected abstract execute(signal: AbortSignal): void | Promise<void>;
67
+
68
+ public start(): void {
69
+ if (this.controller) {
70
+ return;
71
+ }
72
+ this.controller = new AbortController();
73
+ this.runPromise = this.runSupervised(this.controller.signal)
74
+ .catch((error: unknown) => logBackgroundError(this.constructor.name, error));
75
+ }
76
+
77
+ public async stop(): Promise<void> {
78
+ if (!this.controller) {
79
+ return;
80
+ }
81
+ this.controller.abort();
82
+ const pending = this.runPromise;
83
+ this.controller = undefined;
84
+ this.runPromise = undefined;
85
+ if (pending) {
86
+ await waitWithTimeout(pending, this.stopTimeoutMs, this.constructor.name);
87
+ }
88
+ }
89
+
90
+ /** Runs {@link execute}, restarting on crash per the policy. Never throws. */
91
+ private async runSupervised(signal: AbortSignal): Promise<void> {
92
+ const maxRestarts = Math.max(0, this.restart.maxRestarts ?? 0);
93
+ const baseBackoff = this.restart.backoffMs ?? 500;
94
+ const maxBackoff = this.restart.maxBackoffMs ?? 30_000;
95
+ let restarts = 0;
96
+
97
+ for (;;) {
98
+ try {
99
+ await this.execute(signal);
100
+ return;
101
+ } catch (error) {
102
+ if (signal.aborted) {
103
+ return;
104
+ }
105
+ this.reportError(error, restarts);
106
+ if (restarts >= maxRestarts) {
107
+ return;
108
+ }
109
+ restarts += 1;
110
+ await delay(Math.min(baseBackoff * 2 ** (restarts - 1), maxBackoff), signal);
111
+ if (signal.aborted) {
112
+ return;
113
+ }
114
+ }
115
+ }
116
+ }
117
+
118
+ private reportError(error: unknown, restarts: number): void {
119
+ if (this.restart.onError) {
120
+ observeDiagnostic(() => this.restart.onError!(error, restarts), this.constructor.name);
121
+ } else {
122
+ logBackgroundError(this.constructor.name, error);
123
+ }
124
+ }
125
+ }
126
+
127
+ export interface PeriodicBackgroundServiceOptions extends BackgroundServiceOptions {
128
+ /** Pause between ticks. */
129
+ readonly intervalMs: number;
130
+ /** Run a tick immediately on start (otherwise wait one interval). Default: true. */
131
+ readonly runImmediately?: boolean;
132
+ }
133
+
134
+ /**
135
+ * Base class for "do X every N ms" tasks. Override {@link tick}; the loop runs
136
+ * it on an interval until shutdown, **without overlap** (each tick is awaited
137
+ * before the next pause). A failing tick is reported via {@link onTickError}
138
+ * and the loop continues (one bad run does not kill the schedule).
139
+ */
140
+ export abstract class PeriodicBackgroundService extends BackgroundService {
141
+ private readonly intervalMs: number;
142
+ private readonly runImmediately: boolean;
143
+
144
+ public constructor(options?: PeriodicBackgroundServiceOptions) {
145
+ super(options);
146
+ const resolved = { ...backgroundOptionsOf(this.constructor), ...options };
147
+ if (
148
+ typeof resolved.intervalMs !== "number"
149
+ || !Number.isFinite(resolved.intervalMs)
150
+ || resolved.intervalMs <= 0
151
+ ) {
152
+ throw new Error(
153
+ `${this.constructor.name}: intervalMs must be a finite positive number — set it via @Background({ intervalMs }) or super({ intervalMs }).`,
154
+ );
155
+ }
156
+ this.intervalMs = resolved.intervalMs;
157
+ this.runImmediately = resolved.runImmediately ?? true;
158
+ }
159
+
160
+ /** A single scheduled run. */
161
+ protected abstract tick(signal: AbortSignal): void | Promise<void>;
162
+
163
+ /** Hook for tick failures; default logs. The loop continues regardless. */
164
+ protected onTickError(error: unknown): void {
165
+ logBackgroundError(this.constructor.name, error);
166
+ }
167
+
168
+ protected override async execute(signal: AbortSignal): Promise<void> {
169
+ if (!this.runImmediately) {
170
+ await delay(this.intervalMs, signal);
171
+ }
172
+ while (!signal.aborted) {
173
+ try {
174
+ await this.tick(signal);
175
+ } catch (error) {
176
+ if (signal.aborted) {
177
+ return;
178
+ }
179
+ observeDiagnostic(() => this.onTickError(error), this.constructor.name);
180
+ }
181
+ if (signal.aborted) {
182
+ return;
183
+ }
184
+ await delay(this.intervalMs, signal);
185
+ }
186
+ }
187
+ }
188
+
189
+ /** Diagnostics are best-effort; even an accidentally async observer cannot own the loop. */
190
+ function observeDiagnostic(callback: () => unknown, name: string): void {
191
+ try {
192
+ void Promise.resolve(callback()).catch((error: unknown) => logBackgroundError(name, error));
193
+ } catch (error) {
194
+ logBackgroundError(name, error);
195
+ }
196
+ }
197
+
198
+ function logBackgroundError(name: string, error: unknown): void {
199
+ try { console.error(`[background:${name}]`, redactSensitive(error)); }
200
+ catch { /* A broken diagnostic sink must not terminate the workload supervisor. */ }
201
+ }
202
+
203
+ async function waitWithTimeout(promise: Promise<void>, timeoutMs: number, name: string): Promise<void> {
204
+ const guarded = promise.catch(() => undefined);
205
+ if (timeoutMs <= 0) {
206
+ await guarded;
207
+ return;
208
+ }
209
+ let timer: ReturnType<typeof setTimeout> | undefined;
210
+ const timeout = new Promise<void>((resolve) => {
211
+ timer = setTimeout(() => {
212
+ console.warn(`[background:${name}] did not stop within ${timeoutMs}ms; continuing shutdown`);
213
+ resolve();
214
+ }, timeoutMs);
215
+ });
216
+ try {
217
+ await Promise.race([guarded, timeout]);
218
+ } finally {
219
+ if (timer !== undefined) {
220
+ clearTimeout(timer);
221
+ }
222
+ }
223
+ }
@@ -0,0 +1,42 @@
1
+ import {
2
+ DI,
3
+ HOSTED_SERVICE,
4
+ Module,
5
+ singleton,
6
+ type Class,
7
+ type HostedService,
8
+ type BazisModule,
9
+ type ProviderDefinition,
10
+ } from "../di";
11
+
12
+ export interface BackgroundModuleConfig {
13
+ /**
14
+ * Background service classes (subclasses of `BackgroundService` /
15
+ * `PeriodicBackgroundService`). Each is registered as a singleton (with
16
+ * auto-resolved constructor dependencies) and exposed as a `HOSTED_SERVICE`,
17
+ * so the kernel starts and gracefully stops it with the rest of the app.
18
+ */
19
+ readonly services: readonly Class<HostedService>[];
20
+ }
21
+
22
+ /**
23
+ * Registers background services in DI and wires them into the kernel lifecycle.
24
+ *
25
+ * ```ts
26
+ * @Module({ imports: [backgroundModule({ services: [SessionCleanup, Heartbeat] })] })
27
+ * class AppModule {}
28
+ * ```
29
+ */
30
+ export function backgroundModule(config: BackgroundModuleConfig): BazisModule {
31
+ const providers: ProviderDefinition[] = config.services.flatMap((ServiceClass) => [
32
+ singleton(ServiceClass),
33
+ DI.singleton(
34
+ DI.factoryProviderWithResolver(HOSTED_SERVICE, [], (resolver) => resolver.resolve(ServiceClass)),
35
+ ),
36
+ ]);
37
+
38
+ @Module({ providers })
39
+ class BackgroundModule {}
40
+
41
+ return BackgroundModule;
42
+ }
@@ -0,0 +1,43 @@
1
+ import type { BackgroundServiceOptions, PeriodicBackgroundServiceOptions } from "./BackgroundService";
2
+
3
+ // Bun runs TC39 decorators natively, but Symbol.metadata may be absent in the
4
+ // runtime — the same one-line polyfill used by the http/validation modules.
5
+ (Symbol as { metadata?: symbol }).metadata ??= Symbol.for("Symbol.metadata");
6
+
7
+ const BG_META = Symbol.for("bazis:background:options");
8
+
9
+ /** Options accepted by {@link Background}; a superset covering periodic tasks. */
10
+ export type BackgroundDecoratorOptions = BackgroundServiceOptions &
11
+ Partial<Pick<PeriodicBackgroundServiceOptions, "intervalMs" | "runImmediately">>;
12
+
13
+ interface BackgroundMetadataCarrier {
14
+ [BG_META]?: BackgroundDecoratorOptions;
15
+ }
16
+
17
+ /**
18
+ * Declares background-service options on the class, so subclasses of
19
+ * `BackgroundService` / `PeriodicBackgroundService` need no `super({...})`:
20
+ *
21
+ * ```ts
22
+ * @Background({ intervalMs: 15_000, restart: { maxRestarts: 3 } })
23
+ * class Heartbeat extends PeriodicBackgroundService {
24
+ * protected async tick() { await this.api.post("/heartbeat"); }
25
+ * }
26
+ * ```
27
+ *
28
+ * Options passed explicitly to `super(...)` take precedence over the decorator.
29
+ * Registration stays explicit — list the class in `backgroundModule({ services })`.
30
+ */
31
+ export function Background(options: BackgroundDecoratorOptions = {}) {
32
+ return (_value: abstract new (...args: never[]) => unknown, context: ClassDecoratorContext): void => {
33
+ (context.metadata as BackgroundMetadataCarrier)[BG_META] = options;
34
+ };
35
+ }
36
+
37
+ /** Reads {@link Background} options off a class (undefined if not decorated). */
38
+ export function backgroundOptionsOf(ctor: object): BackgroundDecoratorOptions | undefined {
39
+ const metadata = (ctor as { [key: symbol]: unknown })[Symbol.metadata as unknown as symbol] as
40
+ | BackgroundMetadataCarrier
41
+ | undefined;
42
+ return metadata?.[BG_META];
43
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Cancellable pause. Resolves after `ms` **or** as soon as `signal` aborts —
3
+ * it never rejects, so loops just re-check `signal.aborted` after awaiting:
4
+ *
5
+ * ```ts
6
+ * while (!signal.aborted) {
7
+ * await work();
8
+ * await delay(1000, signal);
9
+ * }
10
+ * ```
11
+ */
12
+ export function delay(ms: number, signal?: AbortSignal): Promise<void> {
13
+ if (signal?.aborted || ms <= 0) {
14
+ return Promise.resolve();
15
+ }
16
+ return new Promise<void>((resolve) => {
17
+ const onAbort = (): void => {
18
+ clearTimeout(timer);
19
+ resolve();
20
+ };
21
+ const timer = setTimeout(() => {
22
+ signal?.removeEventListener("abort", onAbort);
23
+ resolve();
24
+ }, ms);
25
+ signal?.addEventListener("abort", onAbort, { once: true });
26
+ });
27
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Background services: long-running and periodic in-process workers integrated
3
+ * with the kernel lifecycle (non-blocking start, cooperative cancellation,
4
+ * graceful stop, optional restart-on-crash).
5
+ */
6
+ export {
7
+ BackgroundService,
8
+ PeriodicBackgroundService,
9
+ type BackgroundRestartPolicy,
10
+ type BackgroundServiceOptions,
11
+ type PeriodicBackgroundServiceOptions,
12
+ } from "./BackgroundService";
13
+ export { backgroundModule, type BackgroundModuleConfig } from "./backgroundModule";
14
+ export { Background, backgroundOptionsOf, type BackgroundDecoratorOptions } from "./decorator";
15
+ export { delay } from "./delay";
@@ -0,0 +1,13 @@
1
+ # Cache Compatibility
2
+
3
+ The aliases below were removed in 0.96.1, before the first `bazis` npm release,
4
+ so no published version ever contained them. Use the replacement.
5
+
6
+ | Removed name | Kind | Replacement |
7
+ | --- | --- | --- |
8
+ | `autoCachedScoped` | public alias | `cachedScoped` |
9
+ | `autoCachedSingleton` | public alias | `cachedSingleton` |
10
+ | `warnInsecureOutputCacheRoute` | public alias | `guardInsecureOutputCacheRoute` |
11
+ | `warnOnAuthorizedRoutesWithoutVaryByUser` | config switch | `insecureAuthorizedRouteBehavior` (`false` was `"ignore"`) |
12
+ | `DEFAULT_CACHEABLE_METHODS` | internal alias | `DEFAULT_OUTPUT_CACHE_METHODS` |
13
+ | `DEFAULT_CACHEABLE_STATUS_CODES` | internal alias | `DEFAULT_OUTPUT_CACHE_STATUS_CODES` |
@@ -0,0 +1,71 @@
1
+ import { createToken, type InjectionToken } from "../di";
2
+ import type { CacheEntry } from "./types/CacheEntry";
3
+ import type { CacheSetOptions } from "./types/CacheOptions";
4
+
5
+ /** Factory for {@link ICache.getOrCreate} / {@link ICache.getOrCreateAsync}. */
6
+ export type CacheFactory<TValue> = () => TValue | Promise<TValue | undefined> | undefined;
7
+
8
+ /**
9
+ * Key-value cache contract.
10
+ *
11
+ * Implementations must:
12
+ * - validate keys (a non-empty string, no `__proto__` and the like);
13
+ * - return a cache miss when there is no value; never hide input or factory errors;
14
+ * - treat expired entries as absent when a TTL is set.
15
+ */
16
+ export interface ICache<TValue = unknown> {
17
+ /** Reads one entry; `undefined` if missing or its TTL expired. */
18
+ get(key: string): TValue | undefined;
19
+
20
+ /** Snapshot of all current entries (expired ones excluded). */
21
+ list(): readonly CacheEntry<TValue>[];
22
+
23
+ /** Writes a value; evicts the LRU entry when full. */
24
+ set(key: string, value: TValue, options?: CacheSetOptions): void;
25
+
26
+ /**
27
+ * Returns the cached value or creates it through `factory`.
28
+ * `undefined` from the factory is not stored.
29
+ * MemoryCache throws CacheCapacityError before starting a new factory once
30
+ * maxInFlight is reached; cache hits and joining running work are allowed.
31
+ */
32
+ getOrCreate(
33
+ key: string,
34
+ factory: CacheFactory<TValue>,
35
+ options?: CacheSetOptions,
36
+ ): TValue | Promise<TValue | undefined> | undefined;
37
+
38
+ /**
39
+ * Async version with per-key in-flight request dedup (anti-stampede).
40
+ * `undefined` from the factory is not stored.
41
+ * Input and admission checks may throw synchronously before a Promise is returned.
42
+ */
43
+ getOrCreateAsync(
44
+ key: string,
45
+ factory: () => Promise<TValue | undefined>,
46
+ options?: CacheSetOptions,
47
+ ): Promise<TValue | undefined>;
48
+
49
+ /** Removes one entry; `true` if the entry existed. */
50
+ remove(key: string): boolean;
51
+
52
+ /** Removes all entries. */
53
+ clear(): void;
54
+
55
+ /**
56
+ * Removes all entries with the given tag.
57
+ * @returns the number of removed entries.
58
+ */
59
+ evictByTag(tag: string): number;
60
+
61
+ /** Number of current entries (after lazy TTL cleanup). */
62
+ readonly size: number;
63
+ }
64
+
65
+ /** Default cache DI token. */
66
+ export const ICache = createToken<ICache>("ICache") as InjectionToken<ICache<unknown>>;
67
+
68
+ /** Typed token for a specific value type. */
69
+ export function cacheToken<TValue>(name: string): InjectionToken<ICache<TValue>> {
70
+ return createToken<ICache<TValue>>(`ICache<${name}>`);
71
+ }