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,209 @@
1
+ import type { EntityModel } from "./Metadata/types";
2
+ import type { OrmModel } from "./Metadata/OrmModel";
3
+ import type { DatabaseProvider, DbExecutor, ExecuteResult, ForeignKeyConstraint, Row, SqlParam } from "./Providers/types";
4
+ import { Migrator, type MigrationResult } from "./Schema/Migrator";
5
+ import { MigrationRunner, type Migration, type VersionedMigrationResult } from "./Schema/MigrationRunner";
6
+ import { SchemaDiffer } from "./Schema/SchemaDiffer";
7
+ import { SchemaAdmissionEngine } from "./Schema/SchemaAdmission";
8
+ import { SchemaAdmissionError } from "./errors";
9
+ import { physicalColumnTypes } from "./Schema/physicalColumnTypes";
10
+ import { bindResolvedForeignKey } from "./Providers/resolvedForeignKey";
11
+
12
+ /**
13
+ * Management of the database itself: schema creation, raw SQL, transactions, ping.
14
+ * Available as `dbContext.database`.
15
+ */
16
+ export class DatabaseFacade {
17
+ constructor(
18
+ private readonly provider: DatabaseProvider,
19
+ private readonly models: OrmModel,
20
+ ) {}
21
+
22
+ /**
23
+ * PostgreSQL admission compiles the explicit entity/decorator unit, acquires
24
+ * sorted schema advisory locks and uses one reserved-session transaction:
25
+ * preflight exact-verifies existing tables, creates only missing schemas and
26
+ * whole tables, then exact-verifies again before commit. Existing tables are
27
+ * never altered or repaired.
28
+ */
29
+ async ensureCreated(): Promise<void> {
30
+ if (this.provider.name === "postgres") {
31
+ await new SchemaAdmissionEngine(this.provider, this.models).ensureCreated();
32
+ return;
33
+ }
34
+ // The physical default contract belongs exclusively to exact PostgreSQL
35
+ // admission. Other providers must reject it rather than silently ignore it.
36
+ if (this.models.entities.some((model) => model.properties.some((property) => property.generation === "none" && property.databaseDefault.kind !== "none"))) {
37
+ throw new SchemaAdmissionError("ORM_SCHEMA_PROVIDER_UNSUPPORTED", "Database defaults in exact schema admission require PostgreSQL.");
38
+ }
39
+ const dialect = this.provider.dialect;
40
+ // Create tables in FK dependency order: databases with strict FKs (PostgreSQL)
41
+ // require the referenced table to exist already.
42
+ for (const model of this.orderByDependencies(this.models.entities)) {
43
+ await this.provider.execute(dialect.createTableSql(model, this.foreignKeysFor(model)), []);
44
+ for (const indexSql of dialect.createIndexSql(model)) {
45
+ await this.provider.execute(indexSql, []);
46
+ }
47
+ }
48
+ }
49
+
50
+ /**
51
+ * Additive auto-migration of the schema for all context entities (enabled in
52
+ * the module: `ormBazis: { migrateOnStart: true }`): introspects the database,
53
+ * compares it with the model and applies the missing tables/columns/indexes in
54
+ * one transaction. Destructive differences are not applied; they are
55
+ * returned as `warnings`.
56
+ */
57
+ async migrate(): Promise<MigrationResult> {
58
+ this.assertNoPostgresOnlyDefaults();
59
+ const work = () => this.migrateCore();
60
+ return this.provider.withMigrationLock ? this.provider.withMigrationLock(work) : work();
61
+ }
62
+
63
+ private assertNoPostgresOnlyDefaults(): void {
64
+ if (this.models.entities.some((model) => model.properties.some((property) => property.generation === "none" && property.databaseDefault.kind !== "none"))) {
65
+ throw new SchemaAdmissionError("ORM_SCHEMA_PROVIDER_UNSUPPORTED", "Database defaults in exact schema admission require PostgreSQL.");
66
+ }
67
+ }
68
+
69
+ private async migrateCore(): Promise<MigrationResult> {
70
+ // The diff orders createTable by FK dependencies (referenced -> dependent).
71
+ const targets = this.orderByDependencies(this.models.entities);
72
+ const types = this.provider.dialect.name === "postgres" ? physicalColumnTypes(this.models.entities) : undefined;
73
+ const foreignKeys = new Map(targets.map((model) => [model, this.foreignKeysFor(model, types)]));
74
+ const schema = await this.provider.introspect();
75
+ const { operations, warnings } = new SchemaDiffer().diff(targets, schema);
76
+ const migrator = new Migrator(this.provider, (model) => foreignKeys.get(model)!);
77
+ const applied = await migrator.apply(operations);
78
+ return { applied: applied.length, operations: applied, warnings };
79
+ }
80
+
81
+ /**
82
+ * Topological sort of entities: the model referenced by an FK comes before
83
+ * the dependent one. Self-references are ignored; cycles (rare, through
84
+ * nullable FKs) do not loop the traversal, their order is arbitrary.
85
+ */
86
+ private orderByDependencies(models: readonly EntityModel[]): EntityModel[] {
87
+ const set = new Set(models);
88
+ const ordered: EntityModel[] = [];
89
+ const done = new Set<EntityModel>();
90
+ const onStack = new Set<EntityModel>();
91
+
92
+ const visit = (model: EntityModel): void => {
93
+ if (done.has(model) || onStack.has(model)) {
94
+ return;
95
+ }
96
+ onStack.add(model);
97
+ for (const fk of model.foreignKeys) {
98
+ const target = this.tryTargetModel(fk.target);
99
+ if (target && target !== model && set.has(target)) {
100
+ visit(target);
101
+ }
102
+ }
103
+ onStack.delete(model);
104
+ done.add(model);
105
+ ordered.push(model);
106
+ };
107
+
108
+ for (const model of models) {
109
+ visit(model);
110
+ }
111
+ return ordered;
112
+ }
113
+
114
+ private tryTargetModel(target: () => new () => object): EntityModel | undefined {
115
+ try {
116
+ return this.models.targetModel(target);
117
+ } catch {
118
+ return undefined;
119
+ }
120
+ }
121
+
122
+ /** Resolves the model's FK metadata into column/table names for DDL. */
123
+ private foreignKeysFor(model: EntityModel, types?: ReturnType<typeof physicalColumnTypes>): ForeignKeyConstraint[] {
124
+ const constraints: ForeignKeyConstraint[] = [];
125
+ for (const fk of model.foreignKeys) {
126
+ const columns = fk.properties.map((name) => model.propertyByName(name));
127
+ if (columns.some((column) => !column)) {
128
+ continue;
129
+ }
130
+ const target = this.models.targetModel(fk.target);
131
+ const constraint: ForeignKeyConstraint = {
132
+ column: columns[0]!.columnName,
133
+ columns: columns.map((column) => column!.columnName),
134
+ name: fk.name,
135
+ referencedTable: this.referencedTableName(target),
136
+ referencedColumn: target.key[0].columnName,
137
+ referencedColumns: target.key.map((property) => property.columnName),
138
+ onDelete: fk.onDelete,
139
+ onUpdate: fk.onUpdate,
140
+ columnType: types?.get(columns[0]!),
141
+ };
142
+ if (types) bindResolvedForeignKey(constraint, {
143
+ target,
144
+ columnTypes: new Map(columns.map((column) => [column!.columnName, types.get(column!)!])),
145
+ });
146
+ constraints.push(constraint);
147
+ }
148
+ return constraints;
149
+ }
150
+
151
+ /** Table name for FK/DDL: PostgreSQL uses `schema.table`. */
152
+ private referencedTableName(model: EntityModel): string {
153
+ if (this.provider.dialect.name === "postgres" && model.schema !== undefined) {
154
+ return `${model.schema}.${model.tableName}`;
155
+ }
156
+ return model.tableName;
157
+ }
158
+
159
+ /**
160
+ * Runs raw modifying SQL with safe parameter substitution through the
161
+ * `{0}`, `{1}`, ... placeholders: values go into parameters, not into the string.
162
+ *
163
+ * ```ts
164
+ * await ctx.database.executeSqlRaw("UPDATE Users SET active = {0} WHERE id = {1}", false, id);
165
+ * ```
166
+ */
167
+ executeSqlRaw(sql: string, ...params: SqlParam[]): Promise<ExecuteResult> {
168
+ return this.provider.execute(this.rewritePlaceholders(sql, params.length), params);
169
+ }
170
+
171
+ /** Raw SELECT with safe `{0}` parameter substitution. */
172
+ querySqlRaw(sql: string, ...params: SqlParam[]): Promise<Row[]> {
173
+ return this.provider.query(this.rewritePlaceholders(sql, params.length), params);
174
+ }
175
+
176
+ /**
177
+ * Applies versioned migrations with history (`__BazisMigrations`).
178
+ * Compile-safe: migrations are passed as an explicit array.
179
+ */
180
+ migrateVersioned(migrations: readonly Migration[]): Promise<VersionedMigrationResult> {
181
+ return new MigrationRunner(this.provider, migrations).migrate();
182
+ }
183
+
184
+ /** Rolls back the last `steps` versioned migrations (requires `down`). */
185
+ rollbackVersioned(migrations: readonly Migration[], steps = 1): Promise<VersionedMigrationResult> {
186
+ return new MigrationRunner(this.provider, migrations).rollback(steps);
187
+ }
188
+
189
+ /** Runs work in a database transaction (the callback gets the transaction executor). */
190
+ transaction<T>(work: (tx: DbExecutor) => Promise<T>): Promise<T> {
191
+ return this.provider.transaction(work);
192
+ }
193
+
194
+ /** Connection check. */
195
+ canConnect(): Promise<boolean> {
196
+ return this.provider.ping();
197
+ }
198
+
199
+ private rewritePlaceholders(sql: string, count: number): string {
200
+ const dialect = this.provider.dialect;
201
+ return sql.replace(/\{(\d+)\}/g, (_match, raw: string) => {
202
+ const index = Number(raw);
203
+ if (index >= count) {
204
+ throw new RangeError(`Raw SQL references {${index}} but only ${count} parameter(s) were provided.`);
205
+ }
206
+ return dialect.parameter(index);
207
+ });
208
+ }
209
+ }
@@ -0,0 +1,107 @@
1
+ import { DatabaseFacade } from "./DatabaseFacade";
2
+ import type { DbContextOptions } from "./DbContextOptions";
3
+ import { EntityNotMappedError } from "./errors";
4
+ import { DbSet } from "./Query/DbSet";
5
+ import type { DbContextRuntime } from "./runtime";
6
+ import { SaveExecutor } from "./Saving/SaveExecutor";
7
+ import { ChangeTracker } from "./Tracking/ChangeTracker";
8
+ import { EntityState } from "./Tracking/EntityState";
9
+ import { monitorImmediateOperation, monitorWholeOperation, observedProvider, transactionScope } from "./Transactions/TransactionScopeCoordinator";
10
+ import { OrmTransaction, type OrmTransactionScopeOptions } from "./Transactions/OrmTransaction";
11
+
12
+ type EntityClass<T extends object> = new () => T;
13
+
14
+ /**
15
+ * Base class of a database context (a scoped DI service). A subclass declares the sets:
16
+ *
17
+ * ```ts
18
+ * class AppDbContext extends DbContext {
19
+ * readonly users = this.set(User);
20
+ * readonly posts = this.set(Post);
21
+ * }
22
+ * ```
23
+ *
24
+ * Holds the ChangeTracker and the `database` facade and provides SaveChanges in a transaction.
25
+ */
26
+ export abstract class DbContext {
27
+ /** Change tracker of this context. */
28
+ readonly changeTracker: ChangeTracker;
29
+ /** Database management (schema, raw SQL, transactions). */
30
+ readonly database: DatabaseFacade;
31
+
32
+ readonly #options: DbContextOptions;
33
+ readonly #runtime: DbContextRuntime;
34
+
35
+ constructor(options: DbContextOptions) {
36
+ this.#options = options;
37
+ this.changeTracker = new ChangeTracker();
38
+ const provider = observedProvider(this, options.provider);
39
+ this.#runtime = { provider, models: options.model, tracker: this.changeTracker, runImmediateOperation: (operation) => monitorImmediateOperation(this, operation) };
40
+ this.database = new DatabaseFacade(provider, options.model);
41
+ }
42
+
43
+ /** Creates a set for an entity. Called in the subclass's field initializers. */
44
+ protected set<T extends object>(entity: EntityClass<T>): DbSet<T> {
45
+ return this.setOf(entity);
46
+ }
47
+
48
+ /** Public access to a `DbSet` by entity class (for `Repository<T>` and generic scenarios). */
49
+ setOf<T extends object>(entity: EntityClass<T>): DbSet<T> {
50
+ return new DbSet<T>(this.#options.model.requireByCtor(entity), this.#runtime);
51
+ }
52
+
53
+ /**
54
+ * `DbSet` for an entity registered in the model by name (with no static class
55
+ * in the code), the basis for dynamic tables built at runtime. The model must
56
+ * be registered beforehand (`OrmModel.registerModel`), otherwise
57
+ * `EntityNotMappedError`.
58
+ */
59
+ setByName(name: string): DbSet<Record<string, unknown>> {
60
+ const model = this.#options.model.tryByName(name);
61
+ if (!model) {
62
+ throw new EntityNotMappedError(name);
63
+ }
64
+ return new DbSet<Record<string, unknown>>(model, this.#runtime);
65
+ }
66
+
67
+ add<T extends object>(entity: T): T {
68
+ this.changeTracker.add(entity, this.#options.model.requireForInstance(entity));
69
+ return entity;
70
+ }
71
+
72
+ update<T extends object>(entity: T): T {
73
+ this.changeTracker.update(entity, this.#options.model.requireForInstance(entity));
74
+ return entity;
75
+ }
76
+
77
+ remove<T extends object>(entity: T): T {
78
+ this.changeTracker.remove(entity, this.#options.model.requireForInstance(entity));
79
+ return entity;
80
+ }
81
+
82
+ attach<T extends object>(entity: T): T {
83
+ this.changeTracker.attach(entity, this.#options.model.requireForInstance(entity));
84
+ return entity;
85
+ }
86
+
87
+ stateOf(entity: object): EntityState {
88
+ return this.changeTracker.stateOf(entity);
89
+ }
90
+
91
+ /**
92
+ * Applies all pending changes in one transaction and returns the number of
93
+ * processed entities. DetectChanges runs before saving, and (if enabled)
94
+ * Added/Modified entities are validated.
95
+ */
96
+ saveChanges(): Promise<number> {
97
+ return monitorWholeOperation(this, () => new SaveExecutor(this.#runtime.provider, this.changeTracker, {
98
+ validateOnSave: this.#options.validateOnSave,
99
+ executionStrategy: this.#options.executionStrategy,
100
+ }).save());
101
+ }
102
+
103
+ /** Executes a composable ORM transaction scope for this provider identity. */
104
+ transactionScope<TResult>(work: (transaction: OrmTransaction) => Promise<TResult>, options?: OrmTransactionScopeOptions): Promise<TResult> {
105
+ return transactionScope(this, this.#options.provider, work, options);
106
+ }
107
+ }
@@ -0,0 +1,25 @@
1
+ import type { DbContext } from "./DbContext";
2
+ import type { DbContextOptions } from "./DbContextOptions";
3
+
4
+ type ContextClass<TContext extends DbContext> = new (options: DbContextOptions) => TContext;
5
+
6
+ /**
7
+ * Context factory for scenarios outside a DI scope (background tasks, scripts,
8
+ * parallel processing). Each `create()` returns a new context with its own
9
+ * ChangeTracker on top of the shared provider/model.
10
+ *
11
+ * ```ts
12
+ * const factory = new DbContextFactory(AppDbContext, options);
13
+ * const ctx = factory.create();
14
+ * ```
15
+ */
16
+ export class DbContextFactory<TContext extends DbContext> {
17
+ constructor(
18
+ private readonly contextType: ContextClass<TContext>,
19
+ private readonly options: DbContextOptions,
20
+ ) {}
21
+
22
+ create(): TContext {
23
+ return new this.contextType(this.options);
24
+ }
25
+ }
@@ -0,0 +1,33 @@
1
+ import type { ExecutionStrategyOptions } from "./Saving/ExecutionStrategy";
2
+ import { OrmModel } from "./Metadata/OrmModel";
3
+ import type { DatabaseProvider } from "./Providers/types";
4
+
5
+ type EntityClass = new () => object;
6
+
7
+ export interface DbContextOptionsConfig {
8
+ readonly provider: DatabaseProvider;
9
+ readonly entities: readonly EntityClass[];
10
+ /** Validate entities before SaveChanges (default true). */
11
+ readonly validateOnSave?: boolean;
12
+ /** Retries on transient database errors (`EnableRetryOnFailure`). */
13
+ readonly executionStrategy?: ExecutionStrategyOptions;
14
+ }
15
+
16
+ /**
17
+ * Immutable context options: the database provider, the compiled model and
18
+ * behavior flags. Created once (the model is built from `entities`) and reused
19
+ * by all scoped `DbContext` instances.
20
+ */
21
+ export class DbContextOptions {
22
+ readonly provider: DatabaseProvider;
23
+ readonly model: OrmModel;
24
+ readonly validateOnSave: boolean;
25
+ readonly executionStrategy?: ExecutionStrategyOptions;
26
+
27
+ constructor(config: DbContextOptionsConfig) {
28
+ this.provider = config.provider;
29
+ this.model = new OrmModel(config.entities);
30
+ this.validateOnSave = config.validateOnSave ?? true;
31
+ this.executionStrategy = config.executionStrategy;
32
+ }
33
+ }