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,129 @@
1
+ export {
2
+ UiProfile,
3
+ isUiProfileAuthoringClass,
4
+ uiOperation,
5
+ uiEndpoint,
6
+ uiProfileAuthoringMetadataOf,
7
+ } from "./UiProfile";
8
+ export {
9
+ COMPILED_UI_SURFACE_V1_API_VERSION,
10
+ COMPILED_UI_SURFACE_V1_KIND,
11
+ } from "./compiled-v1";
12
+ export {
13
+ compileUiSurfaceV1,
14
+ indexOpenApiV1,
15
+ } from "./compiler";
16
+ export { defineUiProfile } from "./defineUiProfile";
17
+ export { uiDiagnosticV1 } from "./diagnostics-v1";
18
+ export {
19
+ UI_PROFILE_V1_API_VERSION,
20
+ UI_PROFILE_V1_KIND,
21
+ } from "./profile-v1";
22
+ export {
23
+ canonicalUiJson,
24
+ normalizeUiJsonObject,
25
+ normalizeUiJsonValue,
26
+ uiDocumentRevision,
27
+ } from "./serialization";
28
+ export type {
29
+ AnyUiProfileAuthoringOptions,
30
+ UiActionIntentOverride,
31
+ UiActionPlacementOverride,
32
+ UiAuthoringClass,
33
+ UiControllerClass,
34
+ UiControllerMethod,
35
+ UiControllerMethodKey,
36
+ UiControllerMethodReference,
37
+ UiCustomPageAuthoring,
38
+ UiCustomPageBaseAuthoring,
39
+ UiCustomPagesProfileAuthoringOptions,
40
+ UiDashboardBlockAuthoring,
41
+ UiDashboardPageAuthoring,
42
+ UiDataFieldKey,
43
+ UiDeleteAuthoringOverride,
44
+ UiDocumentPageAuthoring,
45
+ UiEndpointAuthoringOptions,
46
+ UiEndpointReference,
47
+ UiFeaturePageAuthoring,
48
+ UiFieldSelection,
49
+ UiListFieldOverride,
50
+ UiFormFieldMap,
51
+ UiFormFieldOverride,
52
+ UiFormAuthoringOverride,
53
+ UiListAuthoringOverride,
54
+ UiProfileAuthoringMetadata,
55
+ UiProfileAuthoringOptions,
56
+ UiProfileNavigationOverride,
57
+ UiProfileOperations,
58
+ UiRequestClass,
59
+ UiResponseReference,
60
+ UiResponseValue,
61
+ UiSettingsPageAuthoring,
62
+ UiSortField,
63
+ } from "./UiProfile";
64
+ export type {
65
+ CompiledUiActionV1,
66
+ CompiledUiCustomPageBaseV1,
67
+ CompiledUiCustomPageV1,
68
+ CompiledUiDashboardBlockV1,
69
+ CompiledUiDashboardPageV1,
70
+ CompiledUiDocumentPageV1,
71
+ CompiledUiFeaturePageV1,
72
+ CompiledUiNavigationItemV1,
73
+ CompiledUiOperationRefV1,
74
+ CompiledUiResourceOperationsV1,
75
+ CompiledUiResourceV1,
76
+ CompiledUiSettingsPageV1,
77
+ CompiledUiSurfaceLinksV1,
78
+ CompiledUiSurfaceMetadataV1,
79
+ CompiledUiSurfaceSpecV1,
80
+ CompiledUiSurfaceV1,
81
+ } from "./compiled-v1";
82
+ export type {
83
+ CompileUiSurfaceV1Options,
84
+ CompileUiSurfaceV1Result,
85
+ UiOpenApiHttpMethodV1,
86
+ UiOpenApiIndexResultV1,
87
+ UiOpenApiIndexV1,
88
+ UiOpenApiOperationV1,
89
+ } from "./compiler";
90
+ export type {
91
+ UiDiagnosticSeverityV1,
92
+ UiDiagnosticV1,
93
+ } from "./diagnostics-v1";
94
+ export type {
95
+ UiActionIntentV1,
96
+ UiActionPlacementV1,
97
+ UiActionProfileV1,
98
+ UiCustomPageBaseProfileV1,
99
+ UiCustomPageProfileV1,
100
+ UiDashboardBlockProfileV1,
101
+ UiDashboardPageProfileV1,
102
+ UiDetailProfileV1,
103
+ UiDetailSectionProfileV1,
104
+ UiDocumentPageProfileV1,
105
+ UiFeaturePageProfileV1,
106
+ UiFieldProfileV1,
107
+ UiFormProfileV1,
108
+ UiFormsProfileV1,
109
+ UiListProfileV1,
110
+ UiNavigationProfileV1,
111
+ UiOperationRefV1,
112
+ UiProfileMetadataV1,
113
+ UiProfileSpecV1,
114
+ UiProfileV1,
115
+ UiResourceOperationsProfileV1,
116
+ UiResourceProfileV1,
117
+ UiSchemaCategorizationV1,
118
+ UiSchemaCategoryV1,
119
+ UiSchemaControlV1,
120
+ UiSchemaElementV1,
121
+ UiSchemaLabelV1,
122
+ UiSchemaLayoutV1,
123
+ UiSettingsPageProfileV1,
124
+ } from "./profile-v1";
125
+ export type {
126
+ UiJsonObject,
127
+ UiJsonPrimitive,
128
+ UiJsonValue,
129
+ } from "./serialization";
@@ -0,0 +1,191 @@
1
+ import type { UiJsonObject } from "./serialization";
2
+
3
+ export const UI_PROFILE_V1_API_VERSION = "ui.bazis.dev/v1" as const;
4
+ export const UI_PROFILE_V1_KIND = "UiProfile" as const;
5
+
6
+ export interface UiProfileV1 {
7
+ readonly apiVersion: typeof UI_PROFILE_V1_API_VERSION;
8
+ readonly kind: typeof UI_PROFILE_V1_KIND;
9
+ readonly metadata: UiProfileMetadataV1;
10
+ readonly spec: UiProfileSpecV1;
11
+ }
12
+
13
+ export interface UiProfileMetadataV1 {
14
+ readonly name: string;
15
+ readonly surface: string;
16
+ readonly owner: string;
17
+ readonly extensions?: UiJsonObject;
18
+ }
19
+
20
+ export interface UiProfileSpecV1 {
21
+ readonly resources: readonly UiResourceProfileV1[];
22
+ readonly customPages?: readonly UiCustomPageProfileV1[];
23
+ readonly requiredRendererCapabilities?: readonly string[];
24
+ readonly extensions?: UiJsonObject;
25
+ }
26
+
27
+ export interface UiCustomPageBaseProfileV1 {
28
+ readonly id: string;
29
+ readonly title: string;
30
+ readonly navigation?: UiNavigationProfileV1;
31
+ }
32
+
33
+ export interface UiSettingsPageProfileV1 extends UiCustomPageBaseProfileV1 {
34
+ readonly kind: "settings";
35
+ readonly operations: {
36
+ readonly read: UiOperationRefV1;
37
+ readonly update: UiOperationRefV1;
38
+ };
39
+ readonly form?: UiFormProfileV1;
40
+ }
41
+
42
+ export interface UiDocumentPageProfileV1 extends UiCustomPageBaseProfileV1 {
43
+ readonly kind: "document";
44
+ readonly operation: UiOperationRefV1;
45
+ }
46
+
47
+ export interface UiDashboardBlockProfileV1 {
48
+ readonly id: string;
49
+ readonly kind: "metric" | "document";
50
+ readonly title: string;
51
+ readonly operation: UiOperationRefV1;
52
+ }
53
+
54
+ export interface UiDashboardPageProfileV1 extends UiCustomPageBaseProfileV1 {
55
+ readonly kind: "dashboard";
56
+ readonly blocks: readonly UiDashboardBlockProfileV1[];
57
+ }
58
+
59
+ /** A feature-owned page rendered entirely by a registered client component. */
60
+ export interface UiFeaturePageProfileV1 extends UiCustomPageBaseProfileV1 {
61
+ readonly kind: "feature";
62
+ readonly renderer: string;
63
+ }
64
+
65
+ export type UiCustomPageProfileV1 =
66
+ | UiSettingsPageProfileV1
67
+ | UiDocumentPageProfileV1
68
+ | UiDashboardPageProfileV1
69
+ | UiFeaturePageProfileV1;
70
+
71
+ export interface UiResourceProfileV1 {
72
+ readonly id: string;
73
+ readonly title?: string;
74
+ readonly singularTitle?: string;
75
+ /** Response field whose value identifies a record in renderer routes/actions. */
76
+ readonly keyField?: string;
77
+ readonly navigation?: UiNavigationProfileV1;
78
+ readonly operations?: UiResourceOperationsProfileV1;
79
+ readonly list?: UiListProfileV1;
80
+ readonly detail?: UiDetailProfileV1;
81
+ readonly forms?: UiFormsProfileV1;
82
+ readonly actions?: readonly UiActionProfileV1[];
83
+ readonly extensions?: UiJsonObject;
84
+ }
85
+
86
+ export interface UiNavigationProfileV1 {
87
+ readonly title?: string;
88
+ readonly group?: string;
89
+ readonly icon?: string;
90
+ readonly order?: number;
91
+ readonly hidden?: boolean;
92
+ }
93
+
94
+ export interface UiOperationRefV1 {
95
+ readonly operationId: string;
96
+ }
97
+
98
+ export interface UiResourceOperationsProfileV1 {
99
+ readonly list?: UiOperationRefV1;
100
+ readonly read?: UiOperationRefV1;
101
+ readonly create?: UiOperationRefV1;
102
+ readonly update?: UiOperationRefV1;
103
+ readonly delete?: UiOperationRefV1;
104
+ }
105
+
106
+ export type UiFieldProfileV1 = string;
107
+
108
+ export interface UiListProfileV1 {
109
+ readonly title?: string;
110
+ readonly columns?: readonly UiFieldProfileV1[];
111
+ readonly selectionFields?: readonly UiFieldProfileV1[];
112
+ readonly defaultSort?: string;
113
+ readonly pageSize?: number;
114
+ }
115
+
116
+ export interface UiDetailProfileV1 {
117
+ readonly titleField?: string;
118
+ readonly subtitleField?: string;
119
+ readonly statusField?: string;
120
+ readonly sections?: readonly UiDetailSectionProfileV1[];
121
+ }
122
+
123
+ export interface UiDetailSectionProfileV1 {
124
+ readonly id: string;
125
+ readonly title: string;
126
+ readonly fields: readonly UiFieldProfileV1[];
127
+ }
128
+
129
+ export interface UiFormsProfileV1 {
130
+ readonly create?: UiFormProfileV1;
131
+ readonly edit?: UiFormProfileV1;
132
+ }
133
+
134
+ export interface UiFormProfileV1 {
135
+ readonly title?: string;
136
+ readonly uiSchema?: UiSchemaElementV1;
137
+ }
138
+
139
+ export type UiSchemaElementV1 =
140
+ | UiSchemaControlV1
141
+ | UiSchemaLabelV1
142
+ | UiSchemaLayoutV1
143
+ | UiSchemaCategorizationV1
144
+ | UiSchemaCategoryV1;
145
+
146
+ export interface UiSchemaControlV1 {
147
+ readonly type: "Control";
148
+ readonly scope: string;
149
+ readonly label?: string | boolean;
150
+ readonly options?: UiJsonObject;
151
+ }
152
+
153
+ export interface UiSchemaLabelV1 {
154
+ readonly type: "Label";
155
+ readonly text: string;
156
+ }
157
+
158
+ export interface UiSchemaLayoutV1 {
159
+ readonly type: "VerticalLayout" | "HorizontalLayout" | "Group";
160
+ readonly label?: string;
161
+ readonly elements: readonly UiSchemaElementV1[];
162
+ }
163
+
164
+ export interface UiSchemaCategorizationV1 {
165
+ readonly type: "Categorization";
166
+ readonly elements: readonly UiSchemaCategoryV1[];
167
+ }
168
+
169
+ export interface UiSchemaCategoryV1 {
170
+ readonly type: "Category";
171
+ readonly label: string;
172
+ readonly elements: readonly UiSchemaElementV1[];
173
+ }
174
+
175
+ export type UiActionIntentV1 = "primary" | "secondary" | "danger" | "neutral";
176
+
177
+ export type UiActionPlacementV1 =
178
+ | "list.header"
179
+ | "list.row"
180
+ | "detail.header";
181
+
182
+ export interface UiActionProfileV1 {
183
+ readonly id: string;
184
+ readonly title: string;
185
+ readonly operation: UiOperationRefV1;
186
+ readonly placements: readonly UiActionPlacementV1[];
187
+ readonly intent?: UiActionIntentV1;
188
+ readonly confirm?: string;
189
+ readonly refresh?: "none" | "resource" | "page" | "all";
190
+ readonly extensions?: UiJsonObject;
191
+ }
@@ -0,0 +1,130 @@
1
+ import { createHash } from "node:crypto";
2
+
3
+ export type UiJsonPrimitive = string | number | boolean | null;
4
+ export type UiJsonValue = UiJsonPrimitive | readonly UiJsonValue[] | UiJsonObject;
5
+
6
+ export interface UiJsonObject {
7
+ readonly [key: string]: UiJsonValue;
8
+ }
9
+
10
+ /**
11
+ * Converts an input into a deeply frozen, key-sorted JSON value.
12
+ *
13
+ * The boundary is intentionally stricter than JSON.stringify: undefined,
14
+ * non-finite numbers, sparse arrays, accessors, class instances, symbols,
15
+ * functions and cycles are rejected instead of being silently changed.
16
+ */
17
+ export function normalizeUiJsonValue(value: unknown, path = "$"): UiJsonValue {
18
+ return normalizeValue(value, path, new WeakSet<object>());
19
+ }
20
+
21
+ export function normalizeUiJsonObject(value: unknown, path = "$"): UiJsonObject {
22
+ const normalized = normalizeUiJsonValue(value, path);
23
+ if (normalized === null || Array.isArray(normalized) || typeof normalized !== "object") {
24
+ throw new TypeError(path + " must be a plain JSON object.");
25
+ }
26
+ return normalized as UiJsonObject;
27
+ }
28
+
29
+ export function canonicalUiJson(value: unknown): string {
30
+ return JSON.stringify(normalizeUiJsonValue(value));
31
+ }
32
+
33
+ export function uiDocumentRevision(value: unknown): string {
34
+ const digest = createHash("sha256").update(canonicalUiJson(value)).digest("hex");
35
+ return "sha256:" + digest;
36
+ }
37
+
38
+ function normalizeValue(value: unknown, path: string, active: WeakSet<object>): UiJsonValue {
39
+ if (value === null || typeof value === "string" || typeof value === "boolean") {
40
+ return value;
41
+ }
42
+
43
+ if (typeof value === "number") {
44
+ if (!Number.isFinite(value)) {
45
+ throw new TypeError(path + " must be a finite JSON number.");
46
+ }
47
+ return Object.is(value, -0) ? 0 : value;
48
+ }
49
+
50
+ if (typeof value !== "object") {
51
+ throw new TypeError(path + " contains a non-JSON " + typeof value + " value.");
52
+ }
53
+
54
+ if (active.has(value)) {
55
+ throw new TypeError(path + " contains a circular reference.");
56
+ }
57
+
58
+ active.add(value);
59
+ try {
60
+ if (Array.isArray(value)) {
61
+ return normalizeArray(value, path, active);
62
+ }
63
+ return normalizeObject(value, path, active);
64
+ } finally {
65
+ active.delete(value);
66
+ }
67
+ }
68
+
69
+ function normalizeArray(value: readonly unknown[], path: string, active: WeakSet<object>): readonly UiJsonValue[] {
70
+ if (Object.getOwnPropertySymbols(value).length > 0) {
71
+ throw new TypeError(path + " must not contain symbol properties.");
72
+ }
73
+
74
+ const enumerableKeys = Object.keys(value);
75
+ for (const key of enumerableKeys) {
76
+ if (!isArrayIndex(key) || Number(key) >= value.length) {
77
+ throw new TypeError(path + " must not contain non-index array properties.");
78
+ }
79
+ }
80
+
81
+ const normalized: UiJsonValue[] = [];
82
+ for (let index = 0; index < value.length; index += 1) {
83
+ if (!Object.prototype.hasOwnProperty.call(value, index)) {
84
+ throw new TypeError(path + "[" + index + "] must not be an array hole.");
85
+ }
86
+ normalized.push(normalizeValue(value[index], path + "[" + index + "]", active));
87
+ }
88
+ return Object.freeze(normalized);
89
+ }
90
+
91
+ function normalizeObject(value: object, path: string, active: WeakSet<object>): UiJsonObject {
92
+ const prototype = Object.getPrototypeOf(value);
93
+ if (prototype !== Object.prototype && prototype !== null) {
94
+ throw new TypeError(path + " must be a plain JSON object.");
95
+ }
96
+ if (Object.getOwnPropertySymbols(value).length > 0) {
97
+ throw new TypeError(path + " must not contain symbol properties.");
98
+ }
99
+
100
+ const descriptors = Object.getOwnPropertyDescriptors(value);
101
+ const normalized: Record<string, UiJsonValue> = {};
102
+ for (const key of Object.keys(descriptors).sort()) {
103
+ const descriptor = descriptors[key];
104
+ if (descriptor === undefined) {
105
+ continue;
106
+ }
107
+ if (!descriptor.enumerable) {
108
+ throw new TypeError(propertyPath(path, key) + " must be enumerable.");
109
+ }
110
+ if (!("value" in descriptor)) {
111
+ throw new TypeError(propertyPath(path, key) + " must not be an accessor property.");
112
+ }
113
+ normalized[key] = normalizeValue(descriptor.value, propertyPath(path, key), active);
114
+ }
115
+ return Object.freeze(normalized) as UiJsonObject;
116
+ }
117
+
118
+ function isArrayIndex(key: string): boolean {
119
+ if (!/^(0|[1-9][0-9]*)$/.test(key)) {
120
+ return false;
121
+ }
122
+ const value = Number(key);
123
+ return Number.isSafeInteger(value) && value >= 0;
124
+ }
125
+
126
+ function propertyPath(path: string, key: string): string {
127
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(key)
128
+ ? path + "." + key
129
+ : path + "[" + JSON.stringify(key) + "]";
130
+ }