@celerity-sdk/core 0.2.0 → 0.2.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/decorators/controller.ts","../src/metadata/constants.ts","../src/decorators/http.ts","../src/decorators/params.ts","../src/decorators/guards.ts","../src/decorators/layer.ts","../src/decorators/metadata.ts","../src/decorators/injectable.ts","../src/decorators/module.ts","../src/errors/http-exception.ts","../src/layers/validate.ts","../src/layers/pipeline.ts","../src/layers/system.ts","../src/layers/dispose.ts","../src/metadata/handler-metadata.ts","../src/di/container.ts","../src/di/dependency-tokens.ts","../src/di/tokens.ts","../src/application/factory.ts","../src/bootstrap/bootstrap.ts","../src/handlers/registry.ts","../src/bootstrap/module-graph.ts","../src/application/application.ts","../src/application/serverless.ts","../src/handlers/pipeline.ts","../src/functions/context.ts","../src/testing/test-app.ts","../src/functions/create-handler.ts","../src/bootstrap/discovery.ts","../src/bootstrap/runtime-mapper.ts","../src/bootstrap/runtime-entry.ts","../src/bootstrap/runtime-orchestrator.ts"],"sourcesContent":["import \"reflect-metadata\";\n\n// Decorators\nexport { Controller } from \"./decorators/controller\";\nexport { Get, Post, Put, Patch, Delete, Head, Options } from \"./decorators/http\";\nexport { Body, Query, Param, Headers, Auth, Req, Cookies, RequestId } from \"./decorators/params\";\nexport { Guard, ProtectedBy, Public } from \"./decorators/guards\";\nexport { UseLayer, UseLayers } from \"./decorators/layer\";\nexport { SetMetadata, Action } from \"./decorators/metadata\";\nexport { Injectable, Inject } from \"./decorators/injectable\";\nexport { Module } from \"./decorators/module\";\n\n// Layers\nexport { validate } from \"./layers/validate\";\nexport { runLayerPipeline } from \"./layers/pipeline\";\nexport { createDefaultSystemLayers } from \"./layers/system\";\nexport { disposeLayers } from \"./layers/dispose\";\n\n// Metadata\nexport { HandlerMetadataStore } from \"./metadata/handler-metadata\";\n\n// DI\nexport { Container, tokenToString } from \"./di/container\";\nexport { getClassDependencyTokens, getProviderDependencyTokens } from \"./di/dependency-tokens\";\nexport { APP_CONFIG, RUNTIME_APP } from \"./di/tokens\";\n\n// Application\nexport { CelerityFactory } from \"./application/factory\";\nexport { CelerityApplication } from \"./application/application\";\nexport { ServerlessApplication } from \"./application/serverless\";\n\n// Functions\nexport {\n createHttpHandler,\n httpGet,\n httpPost,\n httpPut,\n httpPatch,\n httpDelete,\n} from \"./functions/create-handler\";\n\n// Errors\nexport {\n HttpException,\n BadRequestException,\n UnauthorizedException,\n ForbiddenException,\n NotFoundException,\n MethodNotAllowedException,\n NotAcceptableException,\n ConflictException,\n GoneException,\n UnprocessableEntityException,\n TooManyRequestsException,\n InternalServerErrorException,\n NotImplementedException,\n BadGatewayException,\n ServiceUnavailableException,\n GatewayTimeoutException,\n} from \"./errors/http-exception\";\n\n// Testing\nexport { TestingApplication, mockRequest } from \"./testing/test-app\";\n\n// Handler pipeline\nexport { executeHandlerPipeline } from \"./handlers/pipeline\";\nexport { HandlerRegistry } from \"./handlers/registry\";\n\n// Metadata constants (used by extraction tools)\nexport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n MODULE_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n INJECT_METADATA,\n} from \"./metadata/constants\";\n\n// Bootstrap\nexport { bootstrap, discoverModule } from \"./bootstrap/index\";\nexport { buildModuleGraph, registerModuleGraph } from \"./bootstrap/index\";\nexport { bootstrapForRuntime } from \"./bootstrap/index\";\nexport { startRuntime } from \"./bootstrap/index\";\nexport {\n mapRuntimeRequest,\n mapToRuntimeResponse,\n flattenMultiValueRecord,\n} from \"./bootstrap/index\";\n\n// Adapter interfaces\nexport type { ServerlessAdapter, ServerlessHandler } from \"./adapters/interfaces\";\n\n// Re-export key types from @celerity-sdk/types\nexport type {\n Type,\n InjectionToken,\n Provider,\n HttpMethod,\n HttpRequest,\n HttpResponse,\n HandlerMetadata,\n HandlerContext,\n HandlerResponse,\n CelerityLayer,\n Schema,\n ModuleMetadata,\n FunctionHandlerDefinition,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\n\n// Re-export types defined in core\nexport type { ControllerMetadata } from \"./decorators/controller\";\nexport type { ParamType, ParamMetadata } from \"./decorators/params\";\nexport type { ResolvedHandler, PipelineOptions } from \"./handlers/pipeline\";\nexport type { HttpHandlerRequest, HttpHandlerContext } from \"./functions/context\";\nexport type { HttpHandlerConfig } from \"./functions/create-handler\";\nexport type { ValidationSchemas } from \"./layers/validate\";\nexport type { CreateOptions } from \"./application/factory\";\nexport type { MockRequestOptions } from \"./testing/test-app\";\nexport type { BootstrapResult } from \"./bootstrap/index\";\nexport type { RuntimeBootstrapResult } from \"./bootstrap/index\";\nexport type { ModuleNode, ModuleGraph } from \"./bootstrap/index\";\nexport type { StartRuntimeOptions } from \"./bootstrap/runtime-orchestrator\";\n","import \"reflect-metadata\";\nimport { CONTROLLER_METADATA, INJECTABLE_METADATA } from \"../metadata/constants\";\n\nexport type ControllerMetadata = {\n prefix?: string;\n};\n\nexport function Controller(prefix?: string): ClassDecorator {\n return (target) => {\n const metadata: ControllerMetadata = {};\n if (prefix !== undefined) {\n metadata.prefix = prefix;\n }\n Reflect.defineMetadata(CONTROLLER_METADATA, metadata, target);\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n","export const CONTROLLER_METADATA = Symbol(\"celerity:controller\");\nexport const HTTP_METHOD_METADATA = Symbol(\"celerity:http-method\");\nexport const ROUTE_PATH_METADATA = Symbol(\"celerity:route-path\");\nexport const PARAM_METADATA = Symbol(\"celerity:param\");\nexport const GUARD_PROTECTEDBY_METADATA = Symbol(\"celerity:guard:protectedBy\");\nexport const GUARD_CUSTOM_METADATA = Symbol(\"celerity:guard:custom\");\nexport const LAYER_METADATA = Symbol(\"celerity:layer\");\nexport const MODULE_METADATA = Symbol(\"celerity:module\");\nexport const INJECTABLE_METADATA = Symbol(\"celerity:injectable\");\nexport const INJECT_METADATA = Symbol(\"celerity:inject\");\nexport const PUBLIC_METADATA = Symbol(\"celerity:public\");\nexport const CUSTOM_METADATA = Symbol(\"celerity:custom-metadata\");\n","import \"reflect-metadata\";\nimport type { HttpMethod } from \"@celerity-sdk/types\";\nimport { HTTP_METHOD_METADATA, ROUTE_PATH_METADATA } from \"../metadata/constants\";\n\nfunction createMethodDecorator(method: HttpMethod, path = \"/\"): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(HTTP_METHOD_METADATA, method, target, propertyKey);\n Reflect.defineMetadata(ROUTE_PATH_METADATA, path, target, propertyKey);\n return descriptor;\n };\n}\n\nexport function Get(path?: string): MethodDecorator {\n return createMethodDecorator(\"GET\", path);\n}\n\nexport function Post(path?: string): MethodDecorator {\n return createMethodDecorator(\"POST\", path);\n}\n\nexport function Put(path?: string): MethodDecorator {\n return createMethodDecorator(\"PUT\", path);\n}\n\nexport function Patch(path?: string): MethodDecorator {\n return createMethodDecorator(\"PATCH\", path);\n}\n\nexport function Delete(path?: string): MethodDecorator {\n return createMethodDecorator(\"DELETE\", path);\n}\n\nexport function Head(path?: string): MethodDecorator {\n return createMethodDecorator(\"HEAD\", path);\n}\n\nexport function Options(path?: string): MethodDecorator {\n return createMethodDecorator(\"OPTIONS\", path);\n}\n","import \"reflect-metadata\";\nimport type { HttpRequest, Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\n\nexport type ParamType =\n | \"body\"\n | \"query\"\n | \"param\"\n | \"headers\"\n | \"auth\"\n | \"request\"\n | \"cookies\"\n | \"requestId\";\n\nexport type ParamMetadata = {\n index: number;\n type: ParamType;\n key?: string;\n schema?: Schema;\n};\n\nfunction createParamDecorator(\n type: ParamType,\n keyOrSchema?: string | Schema,\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n\n if (typeof keyOrSchema === \"string\") {\n meta.key = keyOrSchema;\n if (schema) meta.schema = schema;\n } else if (keyOrSchema && typeof keyOrSchema === \"object\") {\n meta.schema = keyOrSchema;\n }\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\nexport function Body(schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"body\", schema);\n}\n\nexport function Query(): ParameterDecorator;\nexport function Query(key: string): ParameterDecorator;\nexport function Query(schema: Schema): ParameterDecorator;\nexport function Query(key: string, schema: Schema): ParameterDecorator;\nexport function Query(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"query\", keyOrSchema, schema);\n}\n\nexport function Param(): ParameterDecorator;\nexport function Param(key: string): ParameterDecorator;\nexport function Param(schema: Schema): ParameterDecorator;\nexport function Param(key: string, schema: Schema): ParameterDecorator;\nexport function Param(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"param\", keyOrSchema, schema);\n}\n\nexport function Headers(): ParameterDecorator;\nexport function Headers(key: string): ParameterDecorator;\nexport function Headers(schema: Schema): ParameterDecorator;\nexport function Headers(key: string, schema: Schema): ParameterDecorator;\nexport function Headers(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"headers\", keyOrSchema, schema);\n}\n\nexport function Auth(): ParameterDecorator {\n return createParamDecorator(\"auth\");\n}\n\nexport function Req(): ParameterDecorator {\n return createParamDecorator(\"request\");\n}\n\nexport function Cookies(key?: string): ParameterDecorator {\n return createParamDecorator(\"cookies\", key);\n}\n\nexport function RequestId(): ParameterDecorator {\n return createParamDecorator(\"requestId\");\n}\n\nexport function extractParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n): unknown {\n switch (type) {\n case \"body\":\n return request.textBody ? JSON.parse(request.textBody) : null;\n case \"query\":\n return key ? request.query[key] : request.query;\n case \"param\":\n return key ? request.pathParams[key] : request.pathParams;\n case \"headers\":\n return key ? request.headers[key] : request.headers;\n case \"auth\":\n return request.auth;\n case \"request\":\n return request;\n case \"cookies\":\n return key ? request.cookies[key] : request.cookies;\n case \"requestId\":\n return request.requestId;\n }\n}\n","import \"reflect-metadata\";\nimport {\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n} from \"../metadata/constants\";\n\n/**\n * Marks a handler class as a custom guard implementation.\n * The handler IS the guard — in serverless it becomes a Lambda Authorizer,\n * in containers the Rust runtime invokes it before protected handlers.\n *\n * Other handlers reference this guard via `@ProtectedBy(\"name\")`.\n */\nexport function Guard(name: string): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(GUARD_CUSTOM_METADATA, name, target);\n };\n}\n\n/**\n * Declares that a handler or method is protected by one or more named guards.\n * Multiple `@ProtectedBy` decorators accumulate in declaration order (top-to-bottom).\n *\n * Can be applied at class level (all methods) or method level.\n */\nexport function ProtectedBy(name: string) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target, propertyKey) ?? [];\n // Prepend: decorators apply bottom-up, so prepending gives declaration order\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target, propertyKey);\n } else {\n const existing: string[] = Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target) ?? [];\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target);\n }\n };\n}\n\n/**\n * Marks a method as public, opting out of the default guard.\n */\nexport function Public(): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(PUBLIC_METADATA, true, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\nimport type { Type, CelerityLayer } from \"@celerity-sdk/types\";\nimport { LAYER_METADATA } from \"../metadata/constants\";\n\nexport function UseLayer(...layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target, propertyKey) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target, propertyKey);\n } else {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target);\n }\n };\n}\n\nexport function UseLayers(layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return UseLayer(...layers);\n}\n","import \"reflect-metadata\";\nimport { CUSTOM_METADATA } from \"../metadata/constants\";\n\nexport function SetMetadata(key: string, value: unknown) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target, propertyKey) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target, propertyKey);\n } else {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target);\n }\n };\n}\n\nexport function Action(value: unknown) {\n return SetMetadata(\"action\", value);\n}\n","import \"reflect-metadata\";\nimport type { InjectionToken } from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA, INJECT_METADATA } from \"../metadata/constants\";\n\nexport function Injectable(): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n\nexport function Inject(token: InjectionToken): ParameterDecorator {\n return (target, _propertyKey, parameterIndex) => {\n const existing: Map<number, InjectionToken> =\n Reflect.getOwnMetadata(INJECT_METADATA, target) ?? new Map();\n existing.set(parameterIndex, token);\n Reflect.defineMetadata(INJECT_METADATA, existing, target);\n };\n}\n","import \"reflect-metadata\";\nimport type { ModuleMetadata } from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\n\nexport function Module(metadata: ModuleMetadata): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(MODULE_METADATA, metadata, target);\n };\n}\n","export class HttpException extends Error {\n constructor(\n public readonly statusCode: number,\n message: string,\n public readonly details?: unknown,\n ) {\n super(message);\n this.name = \"HttpException\";\n }\n}\n\nexport class BadRequestException extends HttpException {\n constructor(message = \"Bad Request\", details?: unknown) {\n super(400, message, details);\n this.name = \"BadRequestException\";\n }\n}\n\nexport class UnauthorizedException extends HttpException {\n constructor(message = \"Unauthorized\", details?: unknown) {\n super(401, message, details);\n this.name = \"UnauthorizedException\";\n }\n}\n\nexport class ForbiddenException extends HttpException {\n constructor(message = \"Forbidden\", details?: unknown) {\n super(403, message, details);\n this.name = \"ForbiddenException\";\n }\n}\n\nexport class NotFoundException extends HttpException {\n constructor(message = \"Not Found\", details?: unknown) {\n super(404, message, details);\n this.name = \"NotFoundException\";\n }\n}\n\nexport class MethodNotAllowedException extends HttpException {\n constructor(message = \"Method Not Allowed\", details?: unknown) {\n super(405, message, details);\n this.name = \"MethodNotAllowedException\";\n }\n}\n\nexport class NotAcceptableException extends HttpException {\n constructor(message = \"Not Acceptable\", details?: unknown) {\n super(406, message, details);\n this.name = \"NotAcceptableException\";\n }\n}\n\nexport class ConflictException extends HttpException {\n constructor(message = \"Conflict\", details?: unknown) {\n super(409, message, details);\n this.name = \"ConflictException\";\n }\n}\n\nexport class GoneException extends HttpException {\n constructor(message = \"Gone\", details?: unknown) {\n super(410, message, details);\n this.name = \"GoneException\";\n }\n}\n\nexport class UnprocessableEntityException extends HttpException {\n constructor(message = \"Unprocessable Entity\", details?: unknown) {\n super(422, message, details);\n this.name = \"UnprocessableEntityException\";\n }\n}\n\nexport class TooManyRequestsException extends HttpException {\n constructor(message = \"Too Many Requests\", details?: unknown) {\n super(429, message, details);\n this.name = \"TooManyRequestsException\";\n }\n}\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message = \"Internal Server Error\", details?: unknown) {\n super(500, message, details);\n this.name = \"InternalServerErrorException\";\n }\n}\n\nexport class NotImplementedException extends HttpException {\n constructor(message = \"Not Implemented\", details?: unknown) {\n super(501, message, details);\n this.name = \"NotImplementedException\";\n }\n}\n\nexport class BadGatewayException extends HttpException {\n constructor(message = \"Bad Gateway\", details?: unknown) {\n super(502, message, details);\n this.name = \"BadGatewayException\";\n }\n}\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message = \"Service Unavailable\", details?: unknown) {\n super(503, message, details);\n this.name = \"ServiceUnavailableException\";\n }\n}\n\nexport class GatewayTimeoutException extends HttpException {\n constructor(message = \"Gateway Timeout\", details?: unknown) {\n super(504, message, details);\n this.name = \"GatewayTimeoutException\";\n }\n}\n","import type { CelerityLayer, HandlerContext, HandlerResponse, Schema } from \"@celerity-sdk/types\";\nimport { BadRequestException } from \"../errors/http-exception\";\n\nexport type ValidationSchemas = {\n body?: Schema;\n params?: Schema;\n query?: Schema;\n headers?: Schema;\n};\n\nclass ValidationLayer implements CelerityLayer {\n constructor(private schemas: ValidationSchemas) {}\n\n async handle(\n context: HandlerContext,\n next: () => Promise<HandlerResponse>,\n ): Promise<HandlerResponse> {\n const { request } = context;\n\n if (this.schemas.body && request.textBody) {\n try {\n const raw = JSON.parse(request.textBody);\n context.metadata.set(\"validatedBody\", this.schemas.body.parse(raw));\n } catch (error) {\n throw new BadRequestException(\"Body validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.params) {\n try {\n context.metadata.set(\"validatedParams\", this.schemas.params.parse(request.pathParams));\n } catch (error) {\n throw new BadRequestException(\"Path params validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.query) {\n try {\n context.metadata.set(\"validatedQuery\", this.schemas.query.parse(request.query));\n } catch (error) {\n throw new BadRequestException(\"Query validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.headers) {\n try {\n context.metadata.set(\"validatedHeaders\", this.schemas.headers.parse(request.headers));\n } catch (error) {\n throw new BadRequestException(\"Headers validation failed\", formatError(error));\n }\n }\n\n return next();\n }\n}\n\nfunction formatError(error: unknown): unknown {\n if (error instanceof Error && \"issues\" in error) {\n return (error as Error & { issues: unknown }).issues;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return error;\n}\n\nexport function validate(schemas: ValidationSchemas): CelerityLayer {\n return new ValidationLayer(schemas);\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, HandlerContext, HandlerResponse, Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:layers\");\n\nexport function runLayerPipeline(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n context: HandlerContext,\n handler: () => Promise<HandlerResponse>,\n): Promise<HandlerResponse> {\n const resolved = layers.map((layer) => (typeof layer === \"function\" ? new layer() : layer));\n debug(\"runLayerPipeline: %d layers\", resolved.length);\n\n let index = -1;\n\n function dispatch(i: number): Promise<HandlerResponse> {\n if (i <= index) {\n return Promise.reject(new Error(\"next() called multiple times\"));\n }\n index = i;\n\n if (i >= resolved.length) {\n return handler();\n }\n\n const current = resolved[i];\n debug(\"layer[%d] %s\", i, current.constructor.name);\n return current.handle(context, () => dispatch(i + 1));\n }\n\n return dispatch(0);\n}\n","import type { CelerityLayer } from \"@celerity-sdk/types\";\nimport { ConfigLayer } from \"@celerity-sdk/config\";\n\nexport async function createDefaultSystemLayers(): Promise<CelerityLayer[]> {\n const layers: CelerityLayer[] = [];\n\n // Telemetry layer first — always try to load.\n // The layer itself decides: full OTel (tracing enabled) or logger-only (tracing disabled).\n try {\n const pkg = \"@celerity-sdk/telemetry\";\n const mod = (await import(pkg)) as Record<string, unknown>;\n const TelemetryLayerClass = mod.TelemetryLayer as new () => CelerityLayer;\n layers.push(new TelemetryLayerClass());\n } catch {\n // telemetry package not installed — skip\n }\n\n layers.push(new ConfigLayer());\n return layers;\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\n\n/**\n * Disposes an array of layers in reverse order.\n * Skips class references (Type<CelerityLayer>) — only instances with a\n * `dispose` method are called. Errors are non-fatal; disposal continues\n * for remaining layers.\n */\nexport async function disposeLayers(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<void> {\n for (const layer of [...layers].reverse()) {\n if (typeof layer === \"object\" && \"dispose\" in layer) {\n try {\n await layer.dispose?.();\n } catch {\n // Non-fatal — continue disposing remaining layers\n }\n }\n }\n}\n","import type { HandlerMetadata } from \"@celerity-sdk/types\";\n\nexport class HandlerMetadataStore implements HandlerMetadata {\n private readonly decoratorData: ReadonlyMap<string, unknown>;\n private readonly requestData = new Map<string, unknown>();\n\n constructor(decoratorMetadata: Record<string, unknown>) {\n this.decoratorData = new Map(Object.entries(decoratorMetadata));\n }\n\n get<T = unknown>(key: string): T | undefined {\n if (this.requestData.has(key)) return this.requestData.get(key) as T | undefined;\n return this.decoratorData.get(key) as T | undefined;\n }\n\n set(key: string, value: unknown): void {\n this.requestData.set(key, value);\n }\n\n has(key: string): boolean {\n return this.requestData.has(key) || this.decoratorData.has(key);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n ValueProvider,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA } from \"../metadata/constants\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"./dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:di\");\n\ntype CloseEntry = {\n token: InjectionToken;\n close: () => Promise<void> | void;\n};\n\nconst CLOSE_METHODS = [\"close\", \"end\", \"quit\", \"disconnect\", \"$disconnect\", \"destroy\"] as const;\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\nfunction isValueProvider<T>(p: Provider<T>): p is ValueProvider<T> {\n return \"useValue\" in p;\n}\n\nexport function tokenToString(token: InjectionToken): string {\n if (typeof token === \"function\") return token.name;\n return String(token);\n}\n\nfunction detectCloseMethod(value: unknown): (() => Promise<void> | void) | null {\n if (typeof value !== \"object\" || value === null) return null;\n\n const obj = value as Record<string, unknown>;\n for (const method of CLOSE_METHODS) {\n if (typeof obj[method] === \"function\") {\n return () => (obj[method] as () => Promise<void> | void)();\n }\n }\n\n return null;\n}\n\n// Used for the internal map of providers where we can't track each specific\n// Provider<T> type.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProvider = Provider<any>;\n\nexport class Container implements ServiceContainer {\n private providers = new Map<InjectionToken, AnyProvider>();\n private instances = new Map<InjectionToken, unknown>();\n private resolving = new Set<InjectionToken>();\n private edges = new Map<InjectionToken, Set<InjectionToken>>();\n private closeStack: CloseEntry[] = [];\n private trackedTokens = new Set<InjectionToken>();\n\n register<T>(token: InjectionToken, provider: Provider<T>): void {\n const type = isClassProvider(provider)\n ? \"class\"\n : isFactoryProvider(provider)\n ? \"factory\"\n : \"value\";\n debug(\"register %s (%s)\", tokenToString(token), type);\n this.providers.set(token, provider);\n\n if (isValueProvider(provider)) {\n this.trackCloseable(token, provider.useValue, provider.onClose);\n }\n }\n\n registerClass<T>(target: Type<T>): void {\n debug(\"register %s (class)\", target.name);\n this.providers.set(target, { useClass: target });\n }\n\n registerValue<T>(token: InjectionToken, value: T): void {\n debug(\"registerValue %s\", tokenToString(token));\n this.instances.set(token, value);\n this.trackCloseable(token, value);\n }\n\n async resolve<T>(token: InjectionToken): Promise<T> {\n const name = tokenToString(token);\n if (this.instances.has(token)) {\n debug(\"resolve %s → cached\", name);\n return this.instances.get(token) as T;\n }\n\n if (this.resolving.has(token)) {\n const path = [...this.resolving, token].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n debug(\"resolve %s → constructing\", name);\n this.resolving.add(token);\n try {\n const provider = this.providers.get(token);\n if (!provider) {\n if (typeof token === \"function\") {\n return this.constructClass(token as Type<T>);\n }\n throw new Error(\n `No provider registered for ${tokenToString(token)}.\\n` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array,\\n' +\n \"or register a provider for it directly.\",\n );\n }\n\n if (isFactoryProvider(provider) && provider.inject) {\n this.recordEdges(token, provider.inject);\n }\n\n const instance = await this.createFromProvider<T>(provider);\n this.instances.set(token, instance);\n\n if (!isValueProvider(provider)) {\n this.trackCloseable(token, instance, provider.onClose);\n }\n\n return instance;\n } finally {\n this.resolving.delete(token);\n }\n }\n\n async resolveClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n if (this.resolving.has(target)) {\n const path = [...this.resolving, target].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n this.resolving.add(target);\n try {\n return this.constructClass(target);\n } finally {\n this.resolving.delete(target);\n }\n }\n\n has(token: InjectionToken): boolean {\n return this.instances.has(token) || this.providers.has(token);\n }\n\n getDependencies(token: InjectionToken): ReadonlySet<InjectionToken> {\n return this.edges.get(token) ?? new Set();\n }\n\n async closeAll(): Promise<void> {\n debug(\"closeAll: %d resources\", this.closeStack.length);\n const entries = [...this.closeStack].reverse();\n for (const entry of entries) {\n try {\n debug(\"closing %s\", tokenToString(entry.token));\n await entry.close();\n } catch {\n // Close failure is non-fatal — continue closing remaining services.\n }\n }\n this.closeStack = [];\n this.trackedTokens.clear();\n }\n\n /**\n * Validates that all registered providers have resolvable dependencies.\n * Call after all module providers are registered but before resolution.\n * Throws a descriptive error listing ALL missing dependencies at once.\n */\n validateDependencies(): void {\n const missing: Array<{ consumer: string; dependency: string }> = [];\n const visited = new Set<InjectionToken>();\n\n const walk = (token: InjectionToken): void => {\n if (visited.has(token)) return;\n visited.add(token);\n\n let depTokens: InjectionToken[];\n const provider = this.providers.get(token);\n\n if (provider) {\n depTokens = this.getProviderDependencyTokens(provider);\n } else if (typeof token === \"function\") {\n depTokens = this.getClassDependencyTokens(token as Type);\n } else {\n return;\n }\n\n for (const dep of depTokens) {\n if (this.providers.has(dep) || this.instances.has(dep)) {\n walk(dep);\n } else if (typeof dep === \"function\") {\n walk(dep);\n } else {\n missing.push({\n consumer: tokenToString(token),\n dependency: tokenToString(dep),\n });\n }\n }\n };\n\n for (const token of this.providers.keys()) {\n walk(token);\n }\n\n if (missing.length > 0) {\n const details = missing\n .map(\n ({ consumer, dependency }) =>\n ` ${consumer} requires ${dependency} — no provider registered`,\n )\n .join(\"\\n\");\n throw new Error(\n `Unresolvable dependencies detected during bootstrap:\\n\\n${details}\\n\\n` +\n \"For each unresolved dependency, check that the module providing it is included\\n\" +\n 'in your root module\\'s \"imports\" array, or register a provider for it directly.',\n );\n }\n }\n\n getClassDependencyTokens(target: Type): InjectionToken[] {\n return getClassDependencyTokens(target);\n }\n\n getProviderDependencyTokens(provider: AnyProvider): InjectionToken[] {\n return getProviderDependencyTokens(provider);\n }\n\n /**\n * Constructs a class by resolving constructor dependencies via design:paramtypes.\n * Does NOT manage the resolving set — callers (resolve/resolveClass) own cycle detection.\n */\n private async constructClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n const isInjectable = Reflect.getOwnMetadata(INJECTABLE_METADATA, target) === true;\n if (!isInjectable && target.length > 0) {\n throw new Error(\n `Class ${target.name} has constructor parameters but is not decorated with @Injectable(). ` +\n \"Add @Injectable() to enable dependency injection, or use a factory provider.\",\n );\n }\n\n const depTokens = this.getClassDependencyTokens(target);\n debug(\"construct %s deps=[%s]\", target.name, depTokens.map(tokenToString).join(\", \"));\n this.recordEdges(target, depTokens);\n\n const deps: unknown[] = [];\n for (const t of depTokens) {\n deps.push(await this.resolve(t));\n }\n\n const instance = new target(...deps) as T;\n this.instances.set(target, instance);\n this.trackCloseable(target, instance);\n return instance;\n }\n\n private recordEdges(from: InjectionToken, to: InjectionToken[]): void {\n let set = this.edges.get(from);\n if (!set) {\n set = new Set();\n this.edges.set(from, set);\n }\n for (const dep of to) {\n set.add(dep);\n }\n }\n\n private trackCloseable<T>(\n token: InjectionToken,\n value: T,\n onClose?: (value: T) => Promise<void> | void,\n ): void {\n if (this.trackedTokens.has(token)) return;\n\n if (onClose) {\n this.closeStack.push({ token, close: () => onClose(value) });\n this.trackedTokens.add(token);\n return;\n }\n\n const closeFn = detectCloseMethod(value);\n if (closeFn) {\n this.closeStack.push({ token, close: closeFn });\n this.trackedTokens.add(token);\n }\n }\n\n private async createFromProvider<T>(provider: AnyProvider): Promise<T> {\n if (isValueProvider(provider)) {\n return provider.useValue as T;\n }\n\n if (isClassProvider(provider)) {\n return this.constructClass(provider.useClass) as Promise<T>;\n }\n\n if (isFactoryProvider(provider)) {\n const deps = provider.inject\n ? await Promise.all(provider.inject.map((t) => this.resolve(t)))\n : [];\n return provider.useFactory(...deps) as T;\n }\n\n throw new Error(\"Invalid provider configuration\");\n }\n}\n","import \"reflect-metadata\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n} from \"@celerity-sdk/types\";\nimport { INJECT_METADATA } from \"../metadata/constants\";\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\n/**\n * Reads reflect-metadata to determine the constructor dependency tokens for a class.\n * Applies @Inject() overrides where present.\n *\n * Pure function — reads metadata only, no container side effects.\n */\nexport function getClassDependencyTokens(target: Type): InjectionToken[] {\n const paramTypes: Type[] = Reflect.getMetadata(\"design:paramtypes\", target) ?? [];\n const injectOverrides: Map<number, InjectionToken> =\n Reflect.getMetadata(INJECT_METADATA, target) ?? new Map();\n return paramTypes.map((paramType, index) => injectOverrides.get(index) ?? paramType);\n}\n\n/**\n * Determines the dependency tokens for a provider (class, factory, or value).\n *\n * Pure function — reads metadata only, no container side effects.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getProviderDependencyTokens(provider: Provider<any>): InjectionToken[] {\n if (isClassProvider(provider)) {\n return getClassDependencyTokens(provider.useClass);\n }\n if (isFactoryProvider(provider) && provider.inject) {\n return [...provider.inject];\n }\n return [];\n}\n","export const APP_CONFIG = Symbol(\"celerity:app-config\");\nexport const RUNTIME_APP = Symbol(\"celerity:runtime-app\");\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport { bootstrap } from \"../bootstrap/bootstrap\";\nimport { CelerityApplication } from \"./application\";\nimport { ServerlessApplication } from \"./serverless\";\nimport { TestingApplication } from \"../testing/test-app\";\nimport type { ServerlessAdapter } from \"../adapters/interfaces\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport type CreateOptions = {\n adapter?: ServerlessAdapter;\n /** App-wide layers that run after system layers but before handler layers. */\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n /**\n * Override the default system layer stack.\n * @internal Used by TestingApplication and runtime orchestrator.\n */\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport class CelerityFactory {\n static async create(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<CelerityApplication | ServerlessApplication> {\n debug(\"create: bootstrapping %s\", rootModule.name);\n\n // Resolve system layers first.\n // If telemetry is present + enabled, this triggers OTel SDK init\n // and registers auto-instrumentations before user module imports.\n const systemLayers = options?.systemLayers ?? (await createDefaultSystemLayers());\n const appLayers = options?.layers ?? [];\n debug(\"create: %d system layers, %d app layers\", systemLayers.length, appLayers.length);\n\n // Bootstrap user module after auto-instrumentations are registered.\n const { container, registry } = await bootstrap(rootModule);\n\n if (options?.adapter) {\n debug(\"create: using adapter → ServerlessApplication\");\n return new ServerlessApplication(\n registry,\n container,\n options.adapter,\n systemLayers,\n appLayers,\n );\n }\n\n debug(\"create: → CelerityApplication\");\n return new CelerityApplication(registry, container, systemLayers, appLayers);\n }\n\n static async createTestingApp(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<TestingApplication> {\n debug(\"createTestingApp: bootstrapping %s\", rootModule.name);\n const { container, registry } = await bootstrap(rootModule);\n const systemLayers = options?.systemLayers ?? [];\n const appLayers = options?.layers ?? [];\n return new TestingApplication(registry, container, systemLayers, appLayers);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\nimport { Container } from \"../di/container\";\nimport { HandlerRegistry } from \"../handlers/registry\";\nimport { walkModuleGraph, validateModuleGraph } from \"./module-graph\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type BootstrapResult = {\n container: Container;\n registry: HandlerRegistry;\n};\n\n/** Bootstrap DI container + handler registry from a root module class. */\nexport async function bootstrap(rootModule: Type): Promise<BootstrapResult> {\n debug(\"bootstrap: starting from %s\", rootModule.name);\n const container = new Container();\n const registry = new HandlerRegistry();\n\n const graph = walkModuleGraph(rootModule, container);\n validateModuleGraph(graph, container);\n await registry.populateFromGraph(graph, container);\n\n debug(\n \"bootstrap: complete — %d modules, %d handlers\",\n graph.size,\n registry.getAllHandlers().length,\n );\n return { container, registry };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n Schema,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { joinHandlerPath } from \"@celerity-sdk/common\";\nimport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n PARAM_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n LAYER_METADATA,\n PUBLIC_METADATA,\n CUSTOM_METADATA,\n} from \"../metadata/constants\";\nimport type { ControllerMetadata } from \"../decorators/controller\";\nimport type { ParamMetadata } from \"../decorators/params\";\nimport type { ResolvedHandler } from \"./pipeline\";\nimport { validate, type ValidationSchemas } from \"../layers/validate\";\nimport type { Container } from \"../di/container\";\nimport { buildModuleGraph, registerModuleGraph } from \"../bootstrap/module-graph\";\nimport type { ModuleGraph } from \"../bootstrap/module-graph\";\n\nconst debug = createDebug(\"celerity:core:registry\");\n\nexport class HandlerRegistry {\n private handlers: ResolvedHandler[] = [];\n\n getHandler(path: string, method: string): ResolvedHandler | undefined {\n const found = this.handlers.find(\n (h) =>\n h.path !== undefined &&\n h.method !== undefined &&\n matchRoute(h.path, path) &&\n h.method === method,\n );\n debug(\"getHandler %s %s → %s\", method, path, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getAllHandlers(): ResolvedHandler[] {\n return [...this.handlers];\n }\n\n async populateFromGraph(graph: ModuleGraph, container: Container): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await this.registerClassHandler(controllerClass, container);\n }\n for (const fnHandler of node.functionHandlers) {\n this.registerFunctionHandler(fnHandler);\n }\n }\n }\n\n async scanModule(moduleClass: Type, container: Container): Promise<void> {\n const graph = buildModuleGraph(moduleClass);\n registerModuleGraph(graph, container);\n await this.populateFromGraph(graph, container);\n }\n\n private async registerClassHandler(controllerClass: Type, container: Container): Promise<void> {\n const controllerMeta: ControllerMetadata | undefined = Reflect.getOwnMetadata(\n CONTROLLER_METADATA,\n controllerClass,\n );\n if (!controllerMeta) return;\n\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, controllerClass) ?? [];\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const method: HttpMethod | undefined = Reflect.getOwnMetadata(\n HTTP_METHOD_METADATA,\n prototype,\n methodName,\n );\n if (!method) continue;\n\n const routePath: string =\n Reflect.getOwnMetadata(ROUTE_PATH_METADATA, prototype, methodName) ?? \"/\";\n const fullPath = joinHandlerPath(controllerMeta.prefix ?? \"\", routePath);\n\n const methodProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, prototype, methodName) ?? [];\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const isPublic: boolean =\n Reflect.getOwnMetadata(PUBLIC_METADATA, prototype, methodName) === true;\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const layers = [...classLayers, ...methodLayers];\n const validationSchemas = buildValidationSchemasFromParams(paramMetadata);\n if (validationSchemas) {\n layers.unshift(validate(validationSchemas));\n }\n\n debug(\n \"registerClassHandler: %s %s (%s.%s)\",\n method,\n fullPath,\n controllerClass.name,\n methodName,\n );\n this.handlers.push({\n path: fullPath,\n method,\n protectedBy: [...classProtectedBy, ...methodProtectedBy],\n layers,\n isPublic,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n }\n\n private registerFunctionHandler(definition: FunctionHandlerDefinition): void {\n if (definition.type !== \"http\") return;\n\n const meta = definition.metadata as {\n path?: string;\n method?: HttpMethod;\n schema?: { body?: Schema; query?: Schema; params?: Schema; headers?: Schema };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n const schemas: Record<string, Schema> = {};\n if (meta.schema.body) schemas.body = meta.schema.body;\n if (meta.schema.query) schemas.query = meta.schema.query;\n if (meta.schema.params) schemas.params = meta.schema.params;\n if (meta.schema.headers) schemas.headers = meta.schema.headers;\n if (Object.keys(schemas).length > 0) {\n layers.unshift(validate(schemas));\n }\n }\n\n debug(\n \"registerFunctionHandler: %s\",\n meta.method && meta.path ? `${meta.method} ${meta.path}` : \"(no route)\",\n );\n this.handlers.push({\n path: meta.path,\n method: meta.method,\n protectedBy: [],\n layers,\n isPublic: false,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n }\n}\n\nfunction matchRoute(pattern: string, actual: string): boolean {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const actualParts = actual.split(\"/\").filter(Boolean);\n\n if (patternParts.length !== actualParts.length) return false;\n\n return patternParts.every((part, i) => part.startsWith(\"{\") || part === actualParts[i]);\n}\n\nconst PARAM_TYPE_TO_SCHEMA_KEY: Record<string, keyof ValidationSchemas> = {\n body: \"body\",\n query: \"query\",\n param: \"params\",\n headers: \"headers\",\n};\n\nfunction buildValidationSchemasFromParams(\n paramMetadata: ParamMetadata[],\n): ValidationSchemas | null {\n const wholeObjectSchemas = new Map<keyof ValidationSchemas, Schema>();\n const perKeySchemas = new Map<keyof ValidationSchemas, Map<string, Schema>>();\n\n for (const meta of paramMetadata) {\n if (!meta.schema) continue;\n const schemaKey = PARAM_TYPE_TO_SCHEMA_KEY[meta.type];\n if (!schemaKey) continue;\n\n if (meta.key) {\n let keyMap = perKeySchemas.get(schemaKey);\n if (!keyMap) {\n keyMap = new Map();\n perKeySchemas.set(schemaKey, keyMap);\n }\n keyMap.set(meta.key, meta.schema);\n } else {\n wholeObjectSchemas.set(schemaKey, meta.schema);\n }\n }\n\n const schemas: ValidationSchemas = {};\n let hasSchemas = false;\n\n for (const key of [\"body\", \"query\", \"params\", \"headers\"] as (keyof ValidationSchemas)[]) {\n if (wholeObjectSchemas.has(key)) {\n schemas[key] = wholeObjectSchemas.get(key)!;\n hasSchemas = true;\n } else if (perKeySchemas.has(key)) {\n schemas[key] = composeKeySchemas(perKeySchemas.get(key)!);\n hasSchemas = true;\n }\n }\n\n return hasSchemas ? schemas : null;\n}\n\nfunction composeKeySchemas(keySchemas: Map<string, Schema>): Schema {\n return {\n parse(data: unknown): Record<string, unknown> {\n const record = data as Record<string, unknown>;\n const result: Record<string, unknown> = { ...record };\n for (const [key, schema] of keySchemas) {\n if (key in result) {\n result[key] = schema.parse(result[key]);\n }\n }\n return result;\n },\n };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ModuleMetadata,\n FunctionHandlerDefinition,\n} from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\nimport type { Container } from \"../di/container\";\nimport { tokenToString } from \"../di/container\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"../di/dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type ModuleNode = {\n moduleClass: Type;\n ownTokens: Set<InjectionToken>;\n exports: Set<InjectionToken>;\n imports: Type[];\n controllers: Type[];\n functionHandlers: FunctionHandlerDefinition[];\n providers: (Type | (Provider & { provide: InjectionToken }))[];\n};\n\nexport type ModuleGraph = Map<Type, ModuleNode>;\n\n/**\n * Builds a module graph by walking the module tree depth-first, collecting\n * all metadata into a graph structure without any side effects.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function buildModuleGraph(rootModule: Type): ModuleGraph {\n const graph: ModuleGraph = new Map();\n const resolving = new Set<Type>();\n\n function walk(moduleClass: Type, importChain: Type[]): void {\n if (graph.has(moduleClass)) {\n debug(\"walk %s → already visited\", moduleClass.name);\n return;\n }\n\n if (resolving.has(moduleClass)) {\n const cyclePath = [...importChain, moduleClass].map((m) => m.name).join(\" → \");\n throw new Error(`Circular module import detected: ${cyclePath}`);\n }\n\n resolving.add(moduleClass);\n\n const metadata: ModuleMetadata | undefined = Reflect.getOwnMetadata(\n MODULE_METADATA,\n moduleClass,\n );\n\n if (!metadata) {\n resolving.delete(moduleClass);\n graph.set(moduleClass, {\n moduleClass,\n ownTokens: new Set(),\n exports: new Set(),\n imports: [],\n controllers: [],\n functionHandlers: [],\n providers: [],\n });\n return;\n }\n\n // Recurse into imports first (depth-first)\n const imports = metadata.imports ?? [];\n for (const imported of imports) {\n walk(imported, [...importChain, moduleClass]);\n }\n\n // Collect own tokens from providers\n const ownTokens = new Set<InjectionToken>();\n const providers = metadata.providers ?? [];\n for (const provider of providers) {\n if (typeof provider === \"function\") {\n ownTokens.add(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n ownTokens.add(typed.provide);\n }\n }\n\n // Controllers are also own tokens\n const controllers = metadata.controllers ?? [];\n for (const controller of controllers) {\n ownTokens.add(controller);\n }\n\n // Build exports set — defaults to empty (nothing exported) when omitted\n const exportTokens = new Set<InjectionToken>(metadata.exports ?? []);\n\n resolving.delete(moduleClass);\n debug(\n \"walk %s: %d providers, %d controllers, %d imports\",\n moduleClass.name,\n providers.length,\n controllers.length,\n imports.length,\n );\n graph.set(moduleClass, {\n moduleClass,\n ownTokens,\n exports: exportTokens,\n imports,\n controllers,\n functionHandlers: metadata.functionHandlers ?? [],\n providers,\n });\n }\n\n walk(rootModule, []);\n return graph;\n}\n\n/**\n * Registers all providers and controllers from the module graph into the\n * DI container.\n */\nexport function registerModuleGraph(graph: ModuleGraph, container: Container): void {\n for (const [, node] of graph) {\n for (const provider of node.providers) {\n if (typeof provider === \"function\") {\n container.registerClass(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n container.register(typed.provide, typed);\n }\n }\n\n for (const controller of node.controllers) {\n if (!container.has(controller)) {\n container.registerClass(controller);\n }\n }\n }\n}\n\n/**\n * Walks the module tree once, depth-first, registering providers in the container\n * and collecting all module metadata into a graph structure.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function walkModuleGraph(rootModule: Type, container: Container): ModuleGraph {\n const graph = buildModuleGraph(rootModule);\n registerModuleGraph(graph, container);\n return graph;\n}\n\ntype Diagnostic = {\n type: \"missing_dependency\" | \"export_violation\" | \"invalid_export\";\n message: string;\n};\n\n/**\n * Validates the module graph for:\n * 1. All provider dependencies are resolvable (replaces container.validateDependencies)\n * 2. Cross-module dependencies respect export boundaries\n * 3. Exported tokens are actually owned by the module\n */\nexport function validateModuleGraph(graph: ModuleGraph, container: Container): void {\n const diagnostics: Diagnostic[] = [];\n\n for (const [, node] of graph) {\n // Check that exported tokens are owned by this module\n for (const exportToken of node.exports) {\n if (!node.ownTokens.has(exportToken)) {\n diagnostics.push({\n type: \"invalid_export\",\n message:\n `${node.moduleClass.name} exports ${tokenToString(exportToken)}, ` +\n \"but that token is not provided by this module.\",\n });\n }\n }\n\n // Compute visible tokens: own + exported tokens from imported modules\n const visibleTokens = new Set<InjectionToken>(node.ownTokens);\n for (const importedModule of node.imports) {\n const importedNode = graph.get(importedModule);\n if (importedNode) {\n for (const exportedToken of importedNode.exports) {\n visibleTokens.add(exportedToken);\n }\n }\n }\n\n // Validate each provider's dependencies\n for (const provider of node.providers) {\n let depTokens: InjectionToken[];\n let consumerToken: InjectionToken;\n\n if (typeof provider === \"function\") {\n consumerToken = provider;\n depTokens = getClassDependencyTokens(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n consumerToken = typed.provide;\n depTokens = getProviderDependencyTokens(typed);\n }\n\n checkDependencies(\n consumerToken,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n\n // Validate each controller's dependencies\n for (const controller of node.controllers) {\n const depTokens = getClassDependencyTokens(controller);\n checkDependencies(\n controller,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n }\n\n debug(\"validateModuleGraph: %d modules, %d diagnostics\", graph.size, diagnostics.length);\n\n if (diagnostics.length > 0) {\n const details = diagnostics.map((d) => ` ${d.message}`).join(\"\\n\");\n throw new Error(`Module validation errors:\\n\\n${details}`);\n }\n}\n\nfunction checkDependencies(\n consumer: InjectionToken,\n depTokens: InjectionToken[],\n visibleTokens: Set<InjectionToken>,\n moduleClass: Type,\n graph: ModuleGraph,\n container: Container,\n diagnostics: Diagnostic[],\n): void {\n for (const dep of depTokens) {\n if (visibleTokens.has(dep)) continue;\n\n // Check if the token is owned by some module in the graph\n const ownerModule = findTokenOwner(dep, graph);\n if (ownerModule) {\n const ownerNode = graph.get(ownerModule)!;\n if (ownerNode.exports.has(dep)) {\n // Token IS exported from its owner, but that module isn't directly imported\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `which is exported from ${ownerModule.name} but ${moduleClass.name} does not import ${ownerModule.name}. ` +\n `Add ${ownerModule.name} to ${moduleClass.name}'s \"imports\" array.`,\n });\n } else {\n // Token exists but isn't exported from its owner\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `but ${tokenToString(dep)} is not exported from ${ownerModule.name}. ` +\n `Add ${tokenToString(dep)} to ${ownerModule.name}'s \"exports\" array.`,\n });\n }\n continue;\n }\n\n // Unregistered class token — auto-adopt into this module's visible scope.\n // The class becomes available within this module only (not exported).\n // Its own dependencies are recursively validated against the same boundaries.\n if (typeof dep === \"function\") {\n if (!container.has(dep)) {\n container.registerClass(dep);\n }\n visibleTokens.add(dep);\n\n const adoptedDeps = getClassDependencyTokens(dep);\n checkDependencies(\n dep,\n adoptedDeps,\n visibleTokens,\n moduleClass,\n graph,\n container,\n diagnostics,\n );\n continue;\n }\n\n // Truly missing — no provider registered for this non-class token\n diagnostics.push({\n type: \"missing_dependency\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} requires ${tokenToString(dep)} — no provider registered. ` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array, ' +\n \"or register a provider for it directly.\",\n });\n }\n}\n\nfunction findTokenOwner(token: InjectionToken, graph: ModuleGraph): Type | null {\n for (const [, node] of graph) {\n if (node.ownTokens.has(token)) {\n return node.moduleClass;\n }\n }\n return null;\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport class CelerityApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private runtimeApp?: unknown,\n ) {}\n\n async start(): Promise<void> {\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { run(block: boolean): Promise<void> };\n await app.run(false);\n }\n }\n\n async close(): Promise<void> {\n debug(\"close: shutting down application\");\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { shutdown(): Promise<void> };\n await app.shutdown();\n }\n\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n\n getSystemLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.systemLayers;\n }\n\n getAppLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.appLayers;\n }\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport type { ServerlessAdapter, ServerlessHandler } from \"../adapters/interfaces\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nexport class ServerlessApplication {\n private handler: ServerlessHandler | null = null;\n\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private adapter: ServerlessAdapter,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async start(): Promise<ServerlessHandler> {\n this.handler = this.adapter.createHandler(this.registry, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n return this.handler;\n }\n\n async close(): Promise<void> {\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getHandler(): ServerlessHandler {\n if (!this.handler) {\n throw new Error(\"ServerlessApplication.start() must be called before getHandler()\");\n }\n return this.handler;\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n HttpRequest,\n HttpResponse,\n HandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HttpException } from \"../errors/http-exception\";\nimport { extractParam, type ParamMetadata, type ParamType } from \"../decorators/params\";\nimport { buildHttpRequest, buildHttpContext } from \"../functions/context\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\n\nconst debug = createDebug(\"celerity:core:pipeline\");\n\nexport type ResolvedHandler = {\n path?: string;\n method?: string;\n protectedBy: string[];\n layers: (CelerityLayer | Type<CelerityLayer>)[];\n isPublic: boolean;\n paramMetadata: ParamMetadata[];\n customMetadata: Record<string, unknown>;\n handlerFn: (...args: unknown[]) => unknown;\n handlerInstance?: object;\n isFunctionHandler?: boolean;\n injectTokens?: InjectionToken[];\n};\n\nexport type PipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n appLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport async function executeHandlerPipeline(\n handler: ResolvedHandler,\n request: HttpRequest,\n options: PipelineOptions,\n): Promise<HttpResponse> {\n const context: HandlerContext = {\n request,\n metadata: new HandlerMetadataStore(handler.customMetadata ?? {}),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"%s %s — %d layers\", request.method, request.path, allLayers.length);\n\n try {\n const response = await runLayerPipeline(allLayers, context, async () => {\n const handlerType = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", handlerType);\n const result = handler.isFunctionHandler\n ? await invokeFunctionHandler(handler, context)\n : await invokeClassHandler(handler, context);\n return normalizeResponse(result);\n });\n\n debug(\"response %d\", response.status);\n return response;\n } catch (error) {\n if (error instanceof HttpException) {\n debug(\"HttpException %d: %s\", error.statusCode, error.message);\n return {\n status: error.statusCode,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n message: error.message,\n ...(error.details ? { details: error.details } : {}),\n }),\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in handler pipeline\", {\n error: message,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in handler pipeline:\", error);\n }\n\n return {\n status: 500,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ message: \"Internal Server Error\" }),\n };\n }\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandler,\n context: HandlerContext,\n): Promise<unknown> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractValidatedParam(\n meta.type,\n meta.key,\n context.request,\n context.metadata,\n );\n }\n\n return handler.handlerFn.apply(handler.handlerInstance, args);\n}\n\nconst VALIDATED_METADATA_KEYS: Partial<Record<ParamType, string>> = {\n body: \"validatedBody\",\n query: \"validatedQuery\",\n param: \"validatedParams\",\n headers: \"validatedHeaders\",\n};\n\nfunction extractValidatedParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n metadata: HandlerContext[\"metadata\"],\n): unknown {\n const metaKey = VALIDATED_METADATA_KEYS[type];\n if (metaKey) {\n const validated = metadata.get(metaKey);\n if (validated !== undefined) {\n if (key && typeof validated === \"object\" && validated !== null) {\n return (validated as Record<string, unknown>)[key];\n }\n return validated;\n }\n }\n return extractParam(type, key, request);\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandler,\n context: HandlerContext,\n): Promise<unknown> {\n const req = buildHttpRequest(context.request, context.metadata);\n const ctx = buildHttpContext(\n context.request,\n context.metadata,\n context.container,\n context.logger,\n );\n\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n const deps: unknown[] = [];\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n return handler.handlerFn(req, ctx, ...deps);\n }\n\n return handler.handlerFn(req, ctx);\n}\n\nfunction normalizeResponse(result: unknown): HttpResponse {\n if (isHttpResponse(result)) {\n return result;\n }\n\n if (result === undefined || result === null) {\n return { status: 204 };\n }\n\n const body = typeof result === \"string\" ? result : JSON.stringify(result);\n return {\n status: 200,\n headers: { \"content-type\": \"application/json\" },\n body,\n };\n}\n\nfunction isHttpResponse(value: unknown): value is HttpResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as HttpResponse).status === \"number\"\n );\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HandlerMetadata,\n ServiceContainer,\n CelerityLogger,\n} from \"@celerity-sdk/types\";\n\nexport type HttpHandlerRequest<TBody = unknown> = {\n method: HttpMethod;\n path: string;\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: TBody;\n headers: Record<string, string | string[]>;\n cookies: Record<string, string>;\n auth: Record<string, unknown> | null;\n clientIp: string | null;\n userAgent: string | null;\n contentType: string | null;\n};\n\nexport type HttpHandlerContext = {\n requestId: string;\n requestTime: string;\n metadata: HandlerMetadata;\n container: ServiceContainer;\n /** Request-scoped logger set by TelemetryLayer. */\n logger?: CelerityLogger;\n raw: HttpRequest;\n};\n\nexport function buildHttpRequest(\n request: HttpRequest,\n metadata: HandlerMetadata,\n): HttpHandlerRequest {\n const validatedBody = metadata.get<unknown>(\"validatedBody\");\n let body: unknown;\n if (validatedBody !== undefined) {\n body = validatedBody;\n } else if (request.binaryBody) {\n body = request.binaryBody;\n } else if (request.textBody) {\n body = JSON.parse(request.textBody);\n } else {\n body = null;\n }\n\n return {\n method: request.method,\n path: request.path,\n params: metadata.get<Record<string, string>>(\"validatedParams\") ?? request.pathParams,\n query: metadata.get<Record<string, string | string[]>>(\"validatedQuery\") ?? request.query,\n body,\n headers: metadata.get<Record<string, string | string[]>>(\"validatedHeaders\") ?? request.headers,\n cookies: request.cookies,\n auth: request.auth,\n clientIp: request.clientIp,\n userAgent: request.userAgent,\n contentType: request.contentType,\n };\n}\n\nexport function buildHttpContext(\n request: HttpRequest,\n metadata: HandlerMetadata,\n container: ServiceContainer,\n logger?: CelerityLogger,\n): HttpHandlerContext {\n return {\n requestId: request.requestId,\n requestTime: request.requestTime,\n metadata,\n container,\n logger,\n raw: request,\n };\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HttpResponse,\n CelerityLayer,\n Type,\n} from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHandlerPipeline } from \"../handlers/pipeline\";\nimport { NotFoundException } from \"../errors/http-exception\";\n\nexport class TestingApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async inject(request: HttpRequest): Promise<HttpResponse> {\n const handler = this.registry.getHandler(request.path, request.method);\n if (!handler) {\n throw new NotFoundException(`No handler found for ${request.method} ${request.path}`);\n }\n return executeHandlerPipeline(handler, request, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n\nexport type MockRequestOptions = {\n pathParams?: Record<string, string>;\n query?: Record<string, string | string[]>;\n headers?: Record<string, string | string[]>;\n cookies?: Record<string, string>;\n body?: unknown;\n auth?: Record<string, unknown>;\n requestId?: string;\n clientIp?: string;\n};\n\nexport function mockRequest(\n method: HttpMethod,\n path: string,\n options: MockRequestOptions = {},\n): HttpRequest {\n return {\n method,\n path,\n pathParams: options.pathParams ?? {},\n query: options.query ?? {},\n headers: options.headers ?? {},\n cookies: options.cookies ?? {},\n textBody: options.body !== undefined ? JSON.stringify(options.body) : null,\n binaryBody: null,\n contentType: options.body !== undefined ? \"application/json\" : null,\n requestId: options.requestId ?? \"test-request-id\",\n requestTime: new Date().toISOString(),\n auth: options.auth ?? null,\n clientIp: options.clientIp ?? \"127.0.0.1\",\n traceContext: null,\n userAgent: \"celerity-testing\",\n matchedRoute: null,\n };\n}\n","import type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport type { HttpHandlerRequest, HttpHandlerContext } from \"./context\";\n\nexport type HttpHandlerConfig<TBody = unknown> = {\n path?: string;\n method?: HttpMethod;\n schema?: {\n body?: Schema<TBody>;\n query?: Schema;\n params?: Schema;\n headers?: Schema;\n };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n metadata?: Record<string, unknown>;\n};\n\ntype HttpHandlerOptions<TBody = unknown> = Omit<HttpHandlerConfig<TBody>, \"path\" | \"method\">;\n\ntype HttpHandlerFn<TBody = unknown> = (\n req: HttpHandlerRequest<TBody>,\n ctx: HttpHandlerContext,\n ...deps: unknown[]\n) => unknown;\n\nexport function createHttpHandler<TBody = unknown>(\n config: HttpHandlerConfig<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n schema: config.schema,\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.path !== undefined) metadata.path = config.path;\n if (config.method !== undefined) metadata.method = config.method;\n\n return {\n __celerity_handler: true,\n type: \"http\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n\n// -- Shorthand helpers --------------------------------------------------------\n\nexport function httpGet(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"GET\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"GET\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPost(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPost<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPost(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"POST\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"POST\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPut(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPut<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPut(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PUT\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PUT\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPatch(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPatch<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPatch(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PATCH\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PATCH\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpDelete(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"DELETE\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"DELETE\", ...handlerOrOptions }, maybeHandler!);\n}\n","import { resolve } from \"node:path\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\n/** Discover and dynamically import the user's root module. */\nexport async function discoverModule(modulePath?: string): Promise<Type> {\n const resolved = modulePath ?? process.env.CELERITY_MODULE_PATH;\n if (!resolved) {\n throw new Error(\n \"Cannot discover module: set CELERITY_MODULE_PATH environment variable or pass modulePath\",\n );\n }\n\n const absolutePath = resolve(resolved);\n debug(\"discoverModule: importing %s\", absolutePath);\n const imported = (await import(absolutePath)) as Record<string, unknown>;\n const rootModule = imported.default ?? findModuleExport(imported);\n\n if (!rootModule || typeof rootModule !== \"function\") {\n throw new Error(`No module class found in \"${resolved}\"`);\n }\n\n debug(\"discoverModule: found %s\", (rootModule as Type).name);\n return rootModule as Type;\n}\n\nfunction findModuleExport(imported: Record<string, unknown>): unknown {\n for (const key of Object.keys(imported)) {\n if (key === \"default\") continue;\n if (typeof imported[key] === \"function\") {\n return imported[key];\n }\n }\n return undefined;\n}\n","import type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { HttpMethod, HttpRequest, HttpResponse } from \"@celerity-sdk/types\";\n\n/** Flatten multi-value records: single-element arrays become plain strings. */\nexport function flattenMultiValueRecord(\n record: Record<string, string[]>,\n): Record<string, string | string[]> {\n const result: Record<string, string | string[]> = {};\n for (const [key, values] of Object.entries(record)) {\n result[key] = values.length === 1 ? values[0] : values;\n }\n return result;\n}\n\n/** Convert NAPI runtime Request → SDK HttpRequest. */\nexport function mapRuntimeRequest(request: RuntimeRequest): HttpRequest {\n return {\n method: request.method.toUpperCase() as HttpMethod,\n path: request.path,\n pathParams: request.pathParams,\n query: flattenMultiValueRecord(request.query),\n headers: flattenMultiValueRecord(request.headers),\n cookies: request.cookies,\n textBody: request.textBody,\n binaryBody: request.binaryBody,\n contentType: request.contentType || null,\n requestId: request.requestId,\n requestTime: request.requestTime,\n auth: request.auth ?? null,\n clientIp: request.clientIp || null,\n traceContext: request.traceContext ?? null,\n userAgent: request.userAgent || null,\n matchedRoute: request.matchedRoute,\n };\n}\n\n/** Convert SDK HttpResponse → NAPI runtime Response. */\nexport function mapToRuntimeResponse(response: HttpResponse): RuntimeResponse {\n return {\n status: response.status,\n headers: response.headers,\n body: response.body,\n binaryBody: response.binaryBody,\n };\n}\n","import type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHandlerPipeline } from \"../handlers/pipeline\";\nimport { discoverModule } from \"./discovery\";\nimport { bootstrap } from \"./bootstrap\";\nimport { mapRuntimeRequest, mapToRuntimeResponse } from \"./runtime-mapper\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\nexport type RuntimeBootstrapResult = {\n registry: HandlerRegistry;\n container: Container;\n /** Create a runtime-compatible handler callback for a specific route. */\n createRouteCallback(\n path: string,\n method: string,\n ): ((err: Error | null, request: RuntimeRequest) => Promise<RuntimeResponse>) | null;\n};\n\n/**\n * Bootstrap the user's module and return an object with per-route callback creation.\n * Used by the runtime host to get handler callbacks for each blueprint route.\n */\nexport async function bootstrapForRuntime(\n modulePath?: string,\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<RuntimeBootstrapResult> {\n // Resolve system layers first — triggers OTel SDK init before user module loads.\n const layers = systemLayers ?? (await createDefaultSystemLayers());\n const rootModule = await discoverModule(modulePath);\n const { container, registry } = await bootstrap(rootModule);\n\n return {\n registry,\n container,\n createRouteCallback(path: string, method: string) {\n const handler = registry.getHandler(path, method);\n if (!handler) return null;\n\n return async (_err: Error | null, request: RuntimeRequest): Promise<RuntimeResponse> => {\n const httpRequest = mapRuntimeRequest(request);\n const httpResponse = await executeHandlerPipeline(handler, httpRequest, {\n container,\n systemLayers: layers,\n });\n return mapToRuntimeResponse(httpResponse);\n };\n },\n };\n}\n","import type {\n CoreRuntimeApplication as CoreRuntimeApplicationType,\n CoreRuntimeAppConfig,\n CoreRuntimeConfig,\n} from \"@celerity-sdk/runtime\";\nimport { bootstrapForRuntime } from \"./runtime-entry\";\n\nexport type StartRuntimeOptions = {\n block?: boolean;\n};\n\n/**\n * Full runtime lifecycle orchestrator.\n * Dynamically imports @celerity-sdk/runtime, loads config from CELERITY_* environment\n * variables, bootstraps the user's module, registers handler callbacks, and starts the server.\n */\nexport async function startRuntime(options?: StartRuntimeOptions): Promise<void> {\n // Dynamic import — @celerity-sdk/runtime is an optional peer dependency.\n const pkg = \"@celerity-sdk/runtime\";\n const runtimeModule = (await import(pkg)) as {\n CoreRuntimeApplication: new (config: CoreRuntimeConfig) => CoreRuntimeApplicationType;\n runtimeConfigFromEnv: () => CoreRuntimeConfig;\n };\n\n const config = runtimeModule.runtimeConfigFromEnv();\n const app = new runtimeModule.CoreRuntimeApplication(config);\n\n const appConfig: CoreRuntimeAppConfig = app.setup();\n\n const result = await bootstrapForRuntime();\n\n for (const def of appConfig.api?.http?.handlers ?? []) {\n const callback = result.createRouteCallback(def.path, def.method);\n if (callback) {\n app.registerHttpHandler(def.path, def.method, def.timeout, callback);\n }\n }\n\n await app.run(options?.block ?? true);\n}\n"],"mappings":"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","names":["import_reflect_metadata","CONTROLLER_METADATA","Symbol","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","PARAM_METADATA","GUARD_PROTECTEDBY_METADATA","GUARD_CUSTOM_METADATA","LAYER_METADATA","MODULE_METADATA","INJECTABLE_METADATA","INJECT_METADATA","PUBLIC_METADATA","CUSTOM_METADATA","Controller","prefix","target","metadata","undefined","Reflect","defineMetadata","CONTROLLER_METADATA","INJECTABLE_METADATA","import_reflect_metadata","createMethodDecorator","method","path","target","propertyKey","descriptor","Reflect","defineMetadata","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","Get","Post","Put","Patch","Delete","Head","Options","import_reflect_metadata","createParamDecorator","type","keyOrSchema","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","key","push","defineMetadata","Body","Query","Param","Headers","Auth","Req","Cookies","RequestId","extractParam","request","textBody","JSON","parse","query","pathParams","headers","auth","cookies","requestId","import_reflect_metadata","Guard","name","target","Reflect","defineMetadata","GUARD_CUSTOM_METADATA","ProtectedBy","propertyKey","_descriptor","existing","getOwnMetadata","GUARD_PROTECTEDBY_METADATA","Public","descriptor","PUBLIC_METADATA","import_reflect_metadata","UseLayer","layers","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","LAYER_METADATA","defineMetadata","UseLayers","import_reflect_metadata","SetMetadata","key","value","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","CUSTOM_METADATA","defineMetadata","Action","import_reflect_metadata","Injectable","target","Reflect","defineMetadata","INJECTABLE_METADATA","Inject","token","_propertyKey","parameterIndex","existing","getOwnMetadata","INJECT_METADATA","Map","set","import_reflect_metadata","Module","metadata","target","Reflect","defineMetadata","MODULE_METADATA","HttpException","Error","statusCode","message","details","name","BadRequestException","UnauthorizedException","ForbiddenException","NotFoundException","MethodNotAllowedException","NotAcceptableException","ConflictException","GoneException","UnprocessableEntityException","TooManyRequestsException","InternalServerErrorException","NotImplementedException","BadGatewayException","ServiceUnavailableException","GatewayTimeoutException","ValidationLayer","schemas","handle","context","next","request","body","textBody","raw","JSON","parse","metadata","set","error","BadRequestException","formatError","params","pathParams","query","headers","Error","issues","message","validate","debug","createDebug","runLayerPipeline","layers","context","handler","resolved","map","layer","length","index","dispatch","i","Promise","reject","Error","current","name","handle","createDefaultSystemLayers","layers","pkg","mod","TelemetryLayerClass","TelemetryLayer","push","ConfigLayer","disposeLayers","layers","layer","reverse","dispose","HandlerMetadataStore","decoratorData","requestData","Map","decoratorMetadata","Object","entries","get","key","has","set","value","import_reflect_metadata","import_debug","import_reflect_metadata","isClassProvider","p","isFactoryProvider","getClassDependencyTokens","target","paramTypes","Reflect","getMetadata","injectOverrides","INJECT_METADATA","Map","map","paramType","index","get","getProviderDependencyTokens","provider","useClass","inject","debug","createDebug","CLOSE_METHODS","isClassProvider","p","isFactoryProvider","isValueProvider","tokenToString","token","name","String","detectCloseMethod","value","obj","method","Container","providers","Map","instances","resolving","Set","edges","closeStack","trackedTokens","register","provider","type","set","trackCloseable","useValue","onClose","registerClass","target","useClass","registerValue","resolve","has","get","path","map","join","Error","add","constructClass","inject","recordEdges","instance","createFromProvider","delete","resolveClass","getDependencies","closeAll","length","entries","reverse","entry","close","clear","validateDependencies","missing","visited","walk","depTokens","getProviderDependencyTokens","getClassDependencyTokens","dep","push","consumer","dependency","keys","details","isInjectable","Reflect","getOwnMetadata","INJECTABLE_METADATA","deps","t","from","to","closeFn","Promise","all","useFactory","APP_CONFIG","Symbol","RUNTIME_APP","import_debug","import_reflect_metadata","import_debug","import_reflect_metadata","import_debug","import_reflect_metadata","import_debug","debug","createDebug","buildModuleGraph","rootModule","graph","Map","resolving","Set","walk","moduleClass","importChain","has","name","cyclePath","map","m","join","Error","add","metadata","Reflect","getOwnMetadata","MODULE_METADATA","delete","set","ownTokens","exports","imports","controllers","functionHandlers","providers","imported","provider","typed","provide","controller","exportTokens","length","registerModuleGraph","container","node","registerClass","register","walkModuleGraph","validateModuleGraph","diagnostics","exportToken","push","type","message","tokenToString","visibleTokens","importedModule","importedNode","get","exportedToken","depTokens","consumerToken","getClassDependencyTokens","getProviderDependencyTokens","checkDependencies","size","details","d","consumer","dep","ownerModule","findTokenOwner","ownerNode","adoptedDeps","token","debug","createDebug","HandlerRegistry","handlers","getHandler","path","method","found","find","h","undefined","matchRoute","getAllHandlers","populateFromGraph","graph","container","node","controllerClass","controllers","registerClassHandler","fnHandler","functionHandlers","registerFunctionHandler","scanModule","moduleClass","buildModuleGraph","registerModuleGraph","controllerMeta","Reflect","getOwnMetadata","CONTROLLER_METADATA","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classProtectedBy","GUARD_PROTECTEDBY_METADATA","classLayers","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","HTTP_METHOD_METADATA","routePath","ROUTE_PATH_METADATA","fullPath","joinHandlerPath","prefix","methodProtectedBy","methodLayers","paramMetadata","PARAM_METADATA","isPublic","PUBLIC_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","layers","validationSchemas","buildValidationSchemasFromParams","unshift","validate","push","protectedBy","customMetadata","handlerFn","handlerInstance","definition","type","meta","metadata","schema","schemas","body","query","params","headers","keys","length","handler","isFunctionHandler","injectTokens","inject","pattern","actual","patternParts","split","Boolean","actualParts","every","part","i","startsWith","PARAM_TYPE_TO_SCHEMA_KEY","param","wholeObjectSchemas","Map","perKeySchemas","schemaKey","key","keyMap","get","set","hasSchemas","has","composeKeySchemas","keySchemas","parse","data","record","result","debug","createDebug","bootstrap","rootModule","name","container","Container","registry","HandlerRegistry","graph","walkModuleGraph","validateModuleGraph","populateFromGraph","size","getAllHandlers","length","import_debug","debug","createDebug","CelerityApplication","registry","container","systemLayers","appLayers","runtimeApp","start","app","run","close","shutdown","closeAll","disposeLayers","getContainer","getRegistry","getSystemLayers","getAppLayers","ServerlessApplication","handler","registry","container","adapter","systemLayers","appLayers","start","createHandler","close","closeAll","disposeLayers","getHandler","Error","getContainer","getRegistry","import_debug","buildHttpRequest","request","metadata","validatedBody","get","body","undefined","binaryBody","textBody","JSON","parse","method","path","params","pathParams","query","headers","cookies","auth","clientIp","userAgent","contentType","buildHttpContext","container","logger","requestId","requestTime","raw","debug","createDebug","executeHandlerPipeline","handler","request","options","context","metadata","HandlerMetadataStore","customMetadata","container","allLayers","systemLayers","appLayers","layers","method","path","length","response","runLayerPipeline","handlerType","isFunctionHandler","result","invokeFunctionHandler","invokeClassHandler","normalizeResponse","status","error","HttpException","statusCode","message","headers","body","JSON","stringify","details","Error","String","logger","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractValidatedParam","type","key","handlerFn","apply","handlerInstance","VALIDATED_METADATA_KEYS","query","param","metaKey","validated","get","undefined","extractParam","req","buildHttpRequest","ctx","buildHttpContext","injectTokens","deps","token","push","resolve","isHttpResponse","value","TestingApplication","registry","container","systemLayers","appLayers","inject","request","handler","getHandler","path","method","NotFoundException","executeHandlerPipeline","getContainer","getRegistry","mockRequest","options","pathParams","query","headers","cookies","textBody","body","undefined","JSON","stringify","binaryBody","contentType","requestId","requestTime","Date","toISOString","auth","clientIp","traceContext","userAgent","matchedRoute","debug","createDebug","CelerityFactory","create","rootModule","options","name","systemLayers","createDefaultSystemLayers","appLayers","layers","length","container","registry","bootstrap","adapter","ServerlessApplication","CelerityApplication","createTestingApp","TestingApplication","createHttpHandler","config","handler","metadata","schema","layers","inject","customMetadata","path","undefined","method","__celerity_handler","type","httpGet","handlerOrOptions","maybeHandler","httpPost","httpPut","httpPatch","httpDelete","import_debug","debug","createDebug","discoverModule","modulePath","resolved","process","env","CELERITY_MODULE_PATH","Error","absolutePath","resolve","imported","rootModule","default","findModuleExport","name","key","Object","keys","undefined","flattenMultiValueRecord","record","result","key","values","Object","entries","length","mapRuntimeRequest","request","method","toUpperCase","path","pathParams","query","headers","cookies","textBody","binaryBody","contentType","requestId","requestTime","auth","clientIp","traceContext","userAgent","matchedRoute","mapToRuntimeResponse","response","status","body","bootstrapForRuntime","modulePath","systemLayers","layers","createDefaultSystemLayers","rootModule","discoverModule","container","registry","bootstrap","createRouteCallback","path","method","handler","getHandler","_err","request","httpRequest","mapRuntimeRequest","httpResponse","executeHandlerPipeline","mapToRuntimeResponse","startRuntime","options","pkg","runtimeModule","config","runtimeConfigFromEnv","app","CoreRuntimeApplication","appConfig","setup","result","bootstrapForRuntime","def","api","http","handlers","callback","createRouteCallback","path","method","registerHttpHandler","timeout","run","block"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/decorators/controller.ts","../src/metadata/constants.ts","../src/decorators/http.ts","../src/decorators/params.ts","../src/decorators/guards.ts","../src/decorators/layer.ts","../src/decorators/metadata.ts","../src/decorators/injectable.ts","../src/decorators/module.ts","../src/errors/http-exception.ts","../src/layers/validate.ts","../src/layers/pipeline.ts","../src/layers/system.ts","../src/layers/dispose.ts","../src/metadata/handler-metadata.ts","../src/di/container.ts","../src/di/dependency-tokens.ts","../src/di/tokens.ts","../src/application/factory.ts","../src/bootstrap/bootstrap.ts","../src/handlers/registry.ts","../src/bootstrap/module-graph.ts","../src/application/application.ts","../src/application/serverless.ts","../src/handlers/pipeline.ts","../src/functions/context.ts","../src/testing/test-app.ts","../src/functions/create-handler.ts","../src/bootstrap/discovery.ts","../src/bootstrap/runtime-mapper.ts","../src/bootstrap/runtime-entry.ts","../src/bootstrap/runtime-orchestrator.ts"],"sourcesContent":["import \"reflect-metadata\";\n\n// Decorators\nexport { Controller } from \"./decorators/controller\";\nexport { Get, Post, Put, Patch, Delete, Head, Options } from \"./decorators/http\";\nexport { Body, Query, Param, Headers, Auth, Req, Cookies, RequestId } from \"./decorators/params\";\nexport { Guard, ProtectedBy, Public } from \"./decorators/guards\";\nexport { UseLayer, UseLayers } from \"./decorators/layer\";\nexport { SetMetadata, Action } from \"./decorators/metadata\";\nexport { Injectable, Inject } from \"./decorators/injectable\";\nexport { Module } from \"./decorators/module\";\n\n// Layers\nexport { validate } from \"./layers/validate\";\nexport { runLayerPipeline } from \"./layers/pipeline\";\nexport { createDefaultSystemLayers } from \"./layers/system\";\nexport { disposeLayers } from \"./layers/dispose\";\n\n// Metadata\nexport { HandlerMetadataStore } from \"./metadata/handler-metadata\";\n\n// DI\nexport { Container, tokenToString } from \"./di/container\";\nexport { getClassDependencyTokens, getProviderDependencyTokens } from \"./di/dependency-tokens\";\nexport { APP_CONFIG, RUNTIME_APP } from \"./di/tokens\";\n\n// Application\nexport { CelerityFactory } from \"./application/factory\";\nexport { CelerityApplication } from \"./application/application\";\nexport { ServerlessApplication } from \"./application/serverless\";\n\n// Functions\nexport {\n createHttpHandler,\n httpGet,\n httpPost,\n httpPut,\n httpPatch,\n httpDelete,\n} from \"./functions/create-handler\";\n\n// Errors\nexport {\n HttpException,\n BadRequestException,\n UnauthorizedException,\n ForbiddenException,\n NotFoundException,\n MethodNotAllowedException,\n NotAcceptableException,\n ConflictException,\n GoneException,\n UnprocessableEntityException,\n TooManyRequestsException,\n InternalServerErrorException,\n NotImplementedException,\n BadGatewayException,\n ServiceUnavailableException,\n GatewayTimeoutException,\n} from \"./errors/http-exception\";\n\n// Testing\nexport { TestingApplication, mockRequest } from \"./testing/test-app\";\n\n// Handler pipeline\nexport { executeHandlerPipeline } from \"./handlers/pipeline\";\nexport { HandlerRegistry } from \"./handlers/registry\";\n\n// Metadata constants (used by extraction tools)\nexport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n MODULE_METADATA,\n LAYER_METADATA,\n CUSTOM_METADATA,\n INJECT_METADATA,\n} from \"./metadata/constants\";\n\n// Bootstrap\nexport { bootstrap, discoverModule } from \"./bootstrap/index\";\nexport { buildModuleGraph, registerModuleGraph } from \"./bootstrap/index\";\nexport { bootstrapForRuntime } from \"./bootstrap/index\";\nexport { startRuntime } from \"./bootstrap/index\";\nexport {\n mapRuntimeRequest,\n mapToRuntimeResponse,\n flattenMultiValueRecord,\n} from \"./bootstrap/index\";\n\n// Adapter interfaces\nexport type { ServerlessAdapter, ServerlessHandler } from \"./adapters/interfaces\";\n\n// Re-export key types from @celerity-sdk/types\nexport type {\n Type,\n InjectionToken,\n Provider,\n HttpMethod,\n HttpRequest,\n HttpResponse,\n HandlerMetadata,\n HandlerContext,\n HandlerResponse,\n CelerityLayer,\n Schema,\n ModuleMetadata,\n FunctionHandlerDefinition,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\n\n// Re-export types defined in core\nexport type { ControllerMetadata } from \"./decorators/controller\";\nexport type { ParamType, ParamMetadata } from \"./decorators/params\";\nexport type { ResolvedHandler, PipelineOptions } from \"./handlers/pipeline\";\nexport type { HttpHandlerRequest, HttpHandlerContext } from \"./functions/context\";\nexport type { HttpHandlerConfig } from \"./functions/create-handler\";\nexport type { ValidationSchemas } from \"./layers/validate\";\nexport type { CreateOptions } from \"./application/factory\";\nexport type { MockRequestOptions } from \"./testing/test-app\";\nexport type { BootstrapResult } from \"./bootstrap/index\";\nexport type { RuntimeBootstrapResult } from \"./bootstrap/index\";\nexport type { ModuleNode, ModuleGraph } from \"./bootstrap/index\";\nexport type { StartRuntimeOptions } from \"./bootstrap/runtime-orchestrator\";\n","import \"reflect-metadata\";\nimport { CONTROLLER_METADATA, INJECTABLE_METADATA } from \"../metadata/constants\";\n\nexport type ControllerMetadata = {\n prefix?: string;\n};\n\nexport function Controller(prefix?: string): ClassDecorator {\n return (target) => {\n const metadata: ControllerMetadata = {};\n if (prefix !== undefined) {\n metadata.prefix = prefix;\n }\n Reflect.defineMetadata(CONTROLLER_METADATA, metadata, target);\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n","export const CONTROLLER_METADATA = Symbol(\"celerity:controller\");\nexport const HTTP_METHOD_METADATA = Symbol(\"celerity:http-method\");\nexport const ROUTE_PATH_METADATA = Symbol(\"celerity:route-path\");\nexport const PARAM_METADATA = Symbol(\"celerity:param\");\nexport const GUARD_PROTECTEDBY_METADATA = Symbol(\"celerity:guard:protectedBy\");\nexport const GUARD_CUSTOM_METADATA = Symbol(\"celerity:guard:custom\");\nexport const LAYER_METADATA = Symbol(\"celerity:layer\");\nexport const MODULE_METADATA = Symbol(\"celerity:module\");\nexport const INJECTABLE_METADATA = Symbol(\"celerity:injectable\");\nexport const INJECT_METADATA = Symbol(\"celerity:inject\");\nexport const PUBLIC_METADATA = Symbol(\"celerity:public\");\nexport const CUSTOM_METADATA = Symbol(\"celerity:custom-metadata\");\n","import \"reflect-metadata\";\nimport type { HttpMethod } from \"@celerity-sdk/types\";\nimport { HTTP_METHOD_METADATA, ROUTE_PATH_METADATA } from \"../metadata/constants\";\n\nfunction createMethodDecorator(method: HttpMethod, path = \"/\"): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(HTTP_METHOD_METADATA, method, target, propertyKey);\n Reflect.defineMetadata(ROUTE_PATH_METADATA, path, target, propertyKey);\n return descriptor;\n };\n}\n\nexport function Get(path?: string): MethodDecorator {\n return createMethodDecorator(\"GET\", path);\n}\n\nexport function Post(path?: string): MethodDecorator {\n return createMethodDecorator(\"POST\", path);\n}\n\nexport function Put(path?: string): MethodDecorator {\n return createMethodDecorator(\"PUT\", path);\n}\n\nexport function Patch(path?: string): MethodDecorator {\n return createMethodDecorator(\"PATCH\", path);\n}\n\nexport function Delete(path?: string): MethodDecorator {\n return createMethodDecorator(\"DELETE\", path);\n}\n\nexport function Head(path?: string): MethodDecorator {\n return createMethodDecorator(\"HEAD\", path);\n}\n\nexport function Options(path?: string): MethodDecorator {\n return createMethodDecorator(\"OPTIONS\", path);\n}\n","import \"reflect-metadata\";\nimport type { HttpRequest, Schema } from \"@celerity-sdk/types\";\nimport { PARAM_METADATA } from \"../metadata/constants\";\n\nexport type ParamType =\n | \"body\"\n | \"query\"\n | \"param\"\n | \"headers\"\n | \"auth\"\n | \"request\"\n | \"cookies\"\n | \"requestId\";\n\nexport type ParamMetadata = {\n index: number;\n type: ParamType;\n key?: string;\n schema?: Schema;\n};\n\nfunction createParamDecorator(\n type: ParamType,\n keyOrSchema?: string | Schema,\n schema?: Schema,\n): ParameterDecorator {\n return (target, propertyKey, parameterIndex) => {\n if (!propertyKey) return;\n\n const existing: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, target, propertyKey) ?? [];\n\n const meta: ParamMetadata = { index: parameterIndex, type };\n\n if (typeof keyOrSchema === \"string\") {\n meta.key = keyOrSchema;\n if (schema) meta.schema = schema;\n } else if (keyOrSchema && typeof keyOrSchema === \"object\") {\n meta.schema = keyOrSchema;\n }\n\n existing.push(meta);\n Reflect.defineMetadata(PARAM_METADATA, existing, target, propertyKey);\n };\n}\n\nexport function Body(schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"body\", schema);\n}\n\nexport function Query(): ParameterDecorator;\nexport function Query(key: string): ParameterDecorator;\nexport function Query(schema: Schema): ParameterDecorator;\nexport function Query(key: string, schema: Schema): ParameterDecorator;\nexport function Query(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"query\", keyOrSchema, schema);\n}\n\nexport function Param(): ParameterDecorator;\nexport function Param(key: string): ParameterDecorator;\nexport function Param(schema: Schema): ParameterDecorator;\nexport function Param(key: string, schema: Schema): ParameterDecorator;\nexport function Param(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"param\", keyOrSchema, schema);\n}\n\nexport function Headers(): ParameterDecorator;\nexport function Headers(key: string): ParameterDecorator;\nexport function Headers(schema: Schema): ParameterDecorator;\nexport function Headers(key: string, schema: Schema): ParameterDecorator;\nexport function Headers(keyOrSchema?: string | Schema, schema?: Schema): ParameterDecorator {\n return createParamDecorator(\"headers\", keyOrSchema, schema);\n}\n\nexport function Auth(): ParameterDecorator {\n return createParamDecorator(\"auth\");\n}\n\nexport function Req(): ParameterDecorator {\n return createParamDecorator(\"request\");\n}\n\nexport function Cookies(key?: string): ParameterDecorator {\n return createParamDecorator(\"cookies\", key);\n}\n\nexport function RequestId(): ParameterDecorator {\n return createParamDecorator(\"requestId\");\n}\n\nexport function extractParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n): unknown {\n switch (type) {\n case \"body\":\n return request.textBody ? JSON.parse(request.textBody) : null;\n case \"query\":\n return key ? request.query[key] : request.query;\n case \"param\":\n return key ? request.pathParams[key] : request.pathParams;\n case \"headers\":\n return key ? request.headers[key] : request.headers;\n case \"auth\":\n return request.auth;\n case \"request\":\n return request;\n case \"cookies\":\n return key ? request.cookies[key] : request.cookies;\n case \"requestId\":\n return request.requestId;\n }\n}\n","import \"reflect-metadata\";\nimport {\n GUARD_PROTECTEDBY_METADATA,\n GUARD_CUSTOM_METADATA,\n PUBLIC_METADATA,\n} from \"../metadata/constants\";\n\n/**\n * Marks a handler class as a custom guard implementation.\n * The handler IS the guard — in serverless it becomes a Lambda Authorizer,\n * in containers the Rust runtime invokes it before protected handlers.\n *\n * Other handlers reference this guard via `@ProtectedBy(\"name\")`.\n */\nexport function Guard(name: string): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(GUARD_CUSTOM_METADATA, name, target);\n };\n}\n\n/**\n * Declares that a handler or method is protected by one or more named guards.\n * Multiple `@ProtectedBy` decorators accumulate in declaration order (top-to-bottom).\n *\n * Can be applied at class level (all methods) or method level.\n */\nexport function ProtectedBy(name: string) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target, propertyKey) ?? [];\n // Prepend: decorators apply bottom-up, so prepending gives declaration order\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target, propertyKey);\n } else {\n const existing: string[] = Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, target) ?? [];\n Reflect.defineMetadata(GUARD_PROTECTEDBY_METADATA, [name, ...existing], target);\n }\n };\n}\n\n/**\n * Marks a method as public, opting out of the default guard.\n */\nexport function Public(): MethodDecorator {\n return (target, propertyKey, descriptor) => {\n Reflect.defineMetadata(PUBLIC_METADATA, true, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\nimport type { Type, CelerityLayer } from \"@celerity-sdk/types\";\nimport { LAYER_METADATA } from \"../metadata/constants\";\n\nexport function UseLayer(...layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target, propertyKey) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target, propertyKey);\n } else {\n const existing: (Type<CelerityLayer> | CelerityLayer)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, target) ?? [];\n Reflect.defineMetadata(LAYER_METADATA, [...layers, ...existing], target);\n }\n };\n}\n\nexport function UseLayers(layers: (Type<CelerityLayer> | CelerityLayer)[]) {\n return UseLayer(...layers);\n}\n","import \"reflect-metadata\";\nimport { CUSTOM_METADATA } from \"../metadata/constants\";\n\nexport function SetMetadata(key: string, value: unknown) {\n return (\n target: object,\n propertyKey?: string | symbol,\n _descriptor?: PropertyDescriptor,\n ): void => {\n if (propertyKey) {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target, propertyKey) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target, propertyKey);\n } else {\n const existing: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, target) ?? {};\n Reflect.defineMetadata(CUSTOM_METADATA, { ...existing, [key]: value }, target);\n }\n };\n}\n\nexport function Action(value: unknown) {\n return SetMetadata(\"action\", value);\n}\n","import \"reflect-metadata\";\nimport type { InjectionToken } from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA, INJECT_METADATA } from \"../metadata/constants\";\n\nexport function Injectable(): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(INJECTABLE_METADATA, true, target);\n };\n}\n\nexport function Inject(token: InjectionToken): ParameterDecorator {\n return (target, _propertyKey, parameterIndex) => {\n const existing: Map<number, InjectionToken> =\n Reflect.getOwnMetadata(INJECT_METADATA, target) ?? new Map();\n existing.set(parameterIndex, token);\n Reflect.defineMetadata(INJECT_METADATA, existing, target);\n };\n}\n","import \"reflect-metadata\";\nimport type { ModuleMetadata } from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\n\nexport function Module(metadata: ModuleMetadata): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(MODULE_METADATA, metadata, target);\n };\n}\n","export class HttpException extends Error {\n constructor(\n public readonly statusCode: number,\n message: string,\n public readonly details?: unknown,\n ) {\n super(message);\n this.name = \"HttpException\";\n }\n}\n\nexport class BadRequestException extends HttpException {\n constructor(message = \"Bad Request\", details?: unknown) {\n super(400, message, details);\n this.name = \"BadRequestException\";\n }\n}\n\nexport class UnauthorizedException extends HttpException {\n constructor(message = \"Unauthorized\", details?: unknown) {\n super(401, message, details);\n this.name = \"UnauthorizedException\";\n }\n}\n\nexport class ForbiddenException extends HttpException {\n constructor(message = \"Forbidden\", details?: unknown) {\n super(403, message, details);\n this.name = \"ForbiddenException\";\n }\n}\n\nexport class NotFoundException extends HttpException {\n constructor(message = \"Not Found\", details?: unknown) {\n super(404, message, details);\n this.name = \"NotFoundException\";\n }\n}\n\nexport class MethodNotAllowedException extends HttpException {\n constructor(message = \"Method Not Allowed\", details?: unknown) {\n super(405, message, details);\n this.name = \"MethodNotAllowedException\";\n }\n}\n\nexport class NotAcceptableException extends HttpException {\n constructor(message = \"Not Acceptable\", details?: unknown) {\n super(406, message, details);\n this.name = \"NotAcceptableException\";\n }\n}\n\nexport class ConflictException extends HttpException {\n constructor(message = \"Conflict\", details?: unknown) {\n super(409, message, details);\n this.name = \"ConflictException\";\n }\n}\n\nexport class GoneException extends HttpException {\n constructor(message = \"Gone\", details?: unknown) {\n super(410, message, details);\n this.name = \"GoneException\";\n }\n}\n\nexport class UnprocessableEntityException extends HttpException {\n constructor(message = \"Unprocessable Entity\", details?: unknown) {\n super(422, message, details);\n this.name = \"UnprocessableEntityException\";\n }\n}\n\nexport class TooManyRequestsException extends HttpException {\n constructor(message = \"Too Many Requests\", details?: unknown) {\n super(429, message, details);\n this.name = \"TooManyRequestsException\";\n }\n}\n\nexport class InternalServerErrorException extends HttpException {\n constructor(message = \"Internal Server Error\", details?: unknown) {\n super(500, message, details);\n this.name = \"InternalServerErrorException\";\n }\n}\n\nexport class NotImplementedException extends HttpException {\n constructor(message = \"Not Implemented\", details?: unknown) {\n super(501, message, details);\n this.name = \"NotImplementedException\";\n }\n}\n\nexport class BadGatewayException extends HttpException {\n constructor(message = \"Bad Gateway\", details?: unknown) {\n super(502, message, details);\n this.name = \"BadGatewayException\";\n }\n}\n\nexport class ServiceUnavailableException extends HttpException {\n constructor(message = \"Service Unavailable\", details?: unknown) {\n super(503, message, details);\n this.name = \"ServiceUnavailableException\";\n }\n}\n\nexport class GatewayTimeoutException extends HttpException {\n constructor(message = \"Gateway Timeout\", details?: unknown) {\n super(504, message, details);\n this.name = \"GatewayTimeoutException\";\n }\n}\n","import type { CelerityLayer, HandlerContext, HandlerResponse, Schema } from \"@celerity-sdk/types\";\nimport { BadRequestException } from \"../errors/http-exception\";\n\nexport type ValidationSchemas = {\n body?: Schema;\n params?: Schema;\n query?: Schema;\n headers?: Schema;\n};\n\nclass ValidationLayer implements CelerityLayer {\n constructor(private schemas: ValidationSchemas) {}\n\n async handle(\n context: HandlerContext,\n next: () => Promise<HandlerResponse>,\n ): Promise<HandlerResponse> {\n const { request } = context;\n\n if (this.schemas.body && request.textBody) {\n try {\n const raw = JSON.parse(request.textBody);\n context.metadata.set(\"validatedBody\", this.schemas.body.parse(raw));\n } catch (error) {\n throw new BadRequestException(\"Body validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.params) {\n try {\n context.metadata.set(\"validatedParams\", this.schemas.params.parse(request.pathParams));\n } catch (error) {\n throw new BadRequestException(\"Path params validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.query) {\n try {\n context.metadata.set(\"validatedQuery\", this.schemas.query.parse(request.query));\n } catch (error) {\n throw new BadRequestException(\"Query validation failed\", formatError(error));\n }\n }\n\n if (this.schemas.headers) {\n try {\n context.metadata.set(\"validatedHeaders\", this.schemas.headers.parse(request.headers));\n } catch (error) {\n throw new BadRequestException(\"Headers validation failed\", formatError(error));\n }\n }\n\n return next();\n }\n}\n\nfunction formatError(error: unknown): unknown {\n if (error instanceof Error && \"issues\" in error) {\n return (error as Error & { issues: unknown }).issues;\n }\n if (error instanceof Error) {\n return error.message;\n }\n return error;\n}\n\nexport function validate(schemas: ValidationSchemas): CelerityLayer {\n return new ValidationLayer(schemas);\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, HandlerContext, HandlerResponse, Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:layers\");\n\nexport function runLayerPipeline(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n context: HandlerContext,\n handler: () => Promise<HandlerResponse>,\n): Promise<HandlerResponse> {\n const resolved = layers.map((layer) => (typeof layer === \"function\" ? new layer() : layer));\n debug(\"runLayerPipeline: %d layers\", resolved.length);\n\n let index = -1;\n\n function dispatch(i: number): Promise<HandlerResponse> {\n if (i <= index) {\n return Promise.reject(new Error(\"next() called multiple times\"));\n }\n index = i;\n\n if (i >= resolved.length) {\n return handler();\n }\n\n const current = resolved[i];\n debug(\"layer[%d] %s\", i, current.constructor.name);\n return current.handle(context, () => dispatch(i + 1));\n }\n\n return dispatch(0);\n}\n","import type { CelerityLayer } from \"@celerity-sdk/types\";\nimport { ConfigLayer } from \"@celerity-sdk/config\";\n\nexport async function createDefaultSystemLayers(): Promise<CelerityLayer[]> {\n const layers: CelerityLayer[] = [];\n\n // Telemetry layer first — always try to load.\n // The layer itself decides: full OTel (tracing enabled) or logger-only (tracing disabled).\n try {\n const pkg = \"@celerity-sdk/telemetry\";\n const mod = (await import(pkg)) as Record<string, unknown>;\n const TelemetryLayerClass = mod.TelemetryLayer as new () => CelerityLayer;\n layers.push(new TelemetryLayerClass());\n } catch {\n // telemetry package not installed — skip\n }\n\n layers.push(new ConfigLayer());\n return layers;\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\n\n/**\n * Disposes an array of layers in reverse order.\n * Skips class references (Type<CelerityLayer>) — only instances with a\n * `dispose` method are called. Errors are non-fatal; disposal continues\n * for remaining layers.\n */\nexport async function disposeLayers(\n layers: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<void> {\n for (const layer of [...layers].reverse()) {\n if (typeof layer === \"object\" && \"dispose\" in layer) {\n try {\n await layer.dispose?.();\n } catch {\n // Non-fatal — continue disposing remaining layers\n }\n }\n }\n}\n","import type { HandlerMetadata } from \"@celerity-sdk/types\";\n\nexport class HandlerMetadataStore implements HandlerMetadata {\n private readonly decoratorData: ReadonlyMap<string, unknown>;\n private readonly requestData = new Map<string, unknown>();\n\n constructor(decoratorMetadata: Record<string, unknown>) {\n this.decoratorData = new Map(Object.entries(decoratorMetadata));\n }\n\n get<T = unknown>(key: string): T | undefined {\n if (this.requestData.has(key)) return this.requestData.get(key) as T | undefined;\n return this.decoratorData.get(key) as T | undefined;\n }\n\n set(key: string, value: unknown): void {\n this.requestData.set(key, value);\n }\n\n has(key: string): boolean {\n return this.requestData.has(key) || this.decoratorData.has(key);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n ValueProvider,\n ServiceContainer,\n} from \"@celerity-sdk/types\";\nimport { INJECTABLE_METADATA } from \"../metadata/constants\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"./dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:di\");\n\ntype CloseEntry = {\n token: InjectionToken;\n close: () => Promise<void> | void;\n};\n\nconst CLOSE_METHODS = [\"close\", \"end\", \"quit\", \"disconnect\", \"$disconnect\", \"destroy\"] as const;\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\nfunction isValueProvider<T>(p: Provider<T>): p is ValueProvider<T> {\n return \"useValue\" in p;\n}\n\nexport function tokenToString(token: InjectionToken): string {\n if (typeof token === \"function\") return token.name;\n return String(token);\n}\n\nfunction detectCloseMethod(value: unknown): (() => Promise<void> | void) | null {\n if (typeof value !== \"object\" || value === null) return null;\n\n const obj = value as Record<string, unknown>;\n for (const method of CLOSE_METHODS) {\n if (typeof obj[method] === \"function\") {\n return () => (obj[method] as () => Promise<void> | void)();\n }\n }\n\n return null;\n}\n\n// Used for the internal map of providers where we can't track each specific\n// Provider<T> type.\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype AnyProvider = Provider<any>;\n\nexport class Container implements ServiceContainer {\n private providers = new Map<InjectionToken, AnyProvider>();\n private instances = new Map<InjectionToken, unknown>();\n private resolving = new Set<InjectionToken>();\n private edges = new Map<InjectionToken, Set<InjectionToken>>();\n private closeStack: CloseEntry[] = [];\n private trackedTokens = new Set<InjectionToken>();\n\n register<T>(token: InjectionToken, provider: Provider<T>): void {\n const type = isClassProvider(provider)\n ? \"class\"\n : isFactoryProvider(provider)\n ? \"factory\"\n : \"value\";\n debug(\"register %s (%s)\", tokenToString(token), type);\n this.providers.set(token, provider);\n\n if (isValueProvider(provider)) {\n this.trackCloseable(token, provider.useValue, provider.onClose);\n }\n }\n\n registerClass<T>(target: Type<T>): void {\n debug(\"register %s (class)\", target.name);\n this.providers.set(target, { useClass: target });\n }\n\n registerValue<T>(token: InjectionToken, value: T): void {\n debug(\"registerValue %s\", tokenToString(token));\n this.instances.set(token, value);\n this.trackCloseable(token, value);\n }\n\n async resolve<T>(token: InjectionToken): Promise<T> {\n const name = tokenToString(token);\n if (this.instances.has(token)) {\n debug(\"resolve %s → cached\", name);\n return this.instances.get(token) as T;\n }\n\n if (this.resolving.has(token)) {\n const path = [...this.resolving, token].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n debug(\"resolve %s → constructing\", name);\n this.resolving.add(token);\n try {\n const provider = this.providers.get(token);\n if (!provider) {\n if (typeof token === \"function\") {\n return this.constructClass(token as Type<T>);\n }\n throw new Error(\n `No provider registered for ${tokenToString(token)}.\\n` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array,\\n' +\n \"or register a provider for it directly.\",\n );\n }\n\n if (isFactoryProvider(provider) && provider.inject) {\n this.recordEdges(token, provider.inject);\n }\n\n const instance = await this.createFromProvider<T>(provider);\n this.instances.set(token, instance);\n\n if (!isValueProvider(provider)) {\n this.trackCloseable(token, instance, provider.onClose);\n }\n\n return instance;\n } finally {\n this.resolving.delete(token);\n }\n }\n\n async resolveClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n if (this.resolving.has(target)) {\n const path = [...this.resolving, target].map(tokenToString).join(\" → \");\n throw new Error(`Circular dependency detected: ${path}`);\n }\n\n this.resolving.add(target);\n try {\n return this.constructClass(target);\n } finally {\n this.resolving.delete(target);\n }\n }\n\n has(token: InjectionToken): boolean {\n return this.instances.has(token) || this.providers.has(token);\n }\n\n getDependencies(token: InjectionToken): ReadonlySet<InjectionToken> {\n return this.edges.get(token) ?? new Set();\n }\n\n async closeAll(): Promise<void> {\n debug(\"closeAll: %d resources\", this.closeStack.length);\n const entries = [...this.closeStack].reverse();\n for (const entry of entries) {\n try {\n debug(\"closing %s\", tokenToString(entry.token));\n await entry.close();\n } catch {\n // Close failure is non-fatal — continue closing remaining services.\n }\n }\n this.closeStack = [];\n this.trackedTokens.clear();\n }\n\n /**\n * Validates that all registered providers have resolvable dependencies.\n * Call after all module providers are registered but before resolution.\n * Throws a descriptive error listing ALL missing dependencies at once.\n */\n validateDependencies(): void {\n const missing: Array<{ consumer: string; dependency: string }> = [];\n const visited = new Set<InjectionToken>();\n\n const walk = (token: InjectionToken): void => {\n if (visited.has(token)) return;\n visited.add(token);\n\n let depTokens: InjectionToken[];\n const provider = this.providers.get(token);\n\n if (provider) {\n depTokens = this.getProviderDependencyTokens(provider);\n } else if (typeof token === \"function\") {\n depTokens = this.getClassDependencyTokens(token as Type);\n } else {\n return;\n }\n\n for (const dep of depTokens) {\n if (this.providers.has(dep) || this.instances.has(dep)) {\n walk(dep);\n } else if (typeof dep === \"function\") {\n walk(dep);\n } else {\n missing.push({\n consumer: tokenToString(token),\n dependency: tokenToString(dep),\n });\n }\n }\n };\n\n for (const token of this.providers.keys()) {\n walk(token);\n }\n\n if (missing.length > 0) {\n const details = missing\n .map(\n ({ consumer, dependency }) =>\n ` ${consumer} requires ${dependency} — no provider registered`,\n )\n .join(\"\\n\");\n throw new Error(\n `Unresolvable dependencies detected during bootstrap:\\n\\n${details}\\n\\n` +\n \"For each unresolved dependency, check that the module providing it is included\\n\" +\n 'in your root module\\'s \"imports\" array, or register a provider for it directly.',\n );\n }\n }\n\n getClassDependencyTokens(target: Type): InjectionToken[] {\n return getClassDependencyTokens(target);\n }\n\n getProviderDependencyTokens(provider: AnyProvider): InjectionToken[] {\n return getProviderDependencyTokens(provider);\n }\n\n /**\n * Constructs a class by resolving constructor dependencies via design:paramtypes.\n * Does NOT manage the resolving set — callers (resolve/resolveClass) own cycle detection.\n */\n private async constructClass<T>(target: Type<T>): Promise<T> {\n if (this.instances.has(target)) {\n return this.instances.get(target) as T;\n }\n\n const isInjectable = Reflect.getOwnMetadata(INJECTABLE_METADATA, target) === true;\n if (!isInjectable && target.length > 0) {\n throw new Error(\n `Class ${target.name} has constructor parameters but is not decorated with @Injectable(). ` +\n \"Add @Injectable() to enable dependency injection, or use a factory provider.\",\n );\n }\n\n const depTokens = this.getClassDependencyTokens(target);\n debug(\"construct %s deps=[%s]\", target.name, depTokens.map(tokenToString).join(\", \"));\n this.recordEdges(target, depTokens);\n\n const deps: unknown[] = [];\n for (const t of depTokens) {\n deps.push(await this.resolve(t));\n }\n\n const instance = new target(...deps) as T;\n this.instances.set(target, instance);\n this.trackCloseable(target, instance);\n return instance;\n }\n\n private recordEdges(from: InjectionToken, to: InjectionToken[]): void {\n let set = this.edges.get(from);\n if (!set) {\n set = new Set();\n this.edges.set(from, set);\n }\n for (const dep of to) {\n set.add(dep);\n }\n }\n\n private trackCloseable<T>(\n token: InjectionToken,\n value: T,\n onClose?: (value: T) => Promise<void> | void,\n ): void {\n if (this.trackedTokens.has(token)) return;\n\n if (onClose) {\n this.closeStack.push({ token, close: () => onClose(value) });\n this.trackedTokens.add(token);\n return;\n }\n\n const closeFn = detectCloseMethod(value);\n if (closeFn) {\n this.closeStack.push({ token, close: closeFn });\n this.trackedTokens.add(token);\n }\n }\n\n private async createFromProvider<T>(provider: AnyProvider): Promise<T> {\n if (isValueProvider(provider)) {\n return provider.useValue as T;\n }\n\n if (isClassProvider(provider)) {\n return this.constructClass(provider.useClass) as Promise<T>;\n }\n\n if (isFactoryProvider(provider)) {\n const deps = provider.inject\n ? await Promise.all(provider.inject.map((t) => this.resolve(t)))\n : [];\n return provider.useFactory(...deps) as T;\n }\n\n throw new Error(\"Invalid provider configuration\");\n }\n}\n","import \"reflect-metadata\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ClassProvider,\n FactoryProvider,\n} from \"@celerity-sdk/types\";\nimport { INJECT_METADATA } from \"../metadata/constants\";\n\nfunction isClassProvider<T>(p: Provider<T>): p is ClassProvider<T> {\n return \"useClass\" in p;\n}\n\nfunction isFactoryProvider<T>(p: Provider<T>): p is FactoryProvider<T> {\n return \"useFactory\" in p;\n}\n\n/**\n * Reads reflect-metadata to determine the constructor dependency tokens for a class.\n * Applies @Inject() overrides where present.\n *\n * Pure function — reads metadata only, no container side effects.\n */\nexport function getClassDependencyTokens(target: Type): InjectionToken[] {\n const paramTypes: Type[] = Reflect.getMetadata(\"design:paramtypes\", target) ?? [];\n const injectOverrides: Map<number, InjectionToken> =\n Reflect.getMetadata(INJECT_METADATA, target) ?? new Map();\n return paramTypes.map((paramType, index) => injectOverrides.get(index) ?? paramType);\n}\n\n/**\n * Determines the dependency tokens for a provider (class, factory, or value).\n *\n * Pure function — reads metadata only, no container side effects.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getProviderDependencyTokens(provider: Provider<any>): InjectionToken[] {\n if (isClassProvider(provider)) {\n return getClassDependencyTokens(provider.useClass);\n }\n if (isFactoryProvider(provider) && provider.inject) {\n return [...provider.inject];\n }\n return [];\n}\n","export const APP_CONFIG = Symbol(\"celerity:app-config\");\nexport const RUNTIME_APP = Symbol(\"celerity:runtime-app\");\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport { bootstrap } from \"../bootstrap/bootstrap\";\nimport { CelerityApplication } from \"./application\";\nimport { ServerlessApplication } from \"./serverless\";\nimport { TestingApplication } from \"../testing/test-app\";\nimport type { ServerlessAdapter } from \"../adapters/interfaces\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport type CreateOptions = {\n adapter?: ServerlessAdapter;\n /** App-wide layers that run after system layers but before handler layers. */\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n /**\n * Override the default system layer stack.\n * @internal Used by TestingApplication and runtime orchestrator.\n */\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport class CelerityFactory {\n static async create(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<CelerityApplication | ServerlessApplication> {\n debug(\"create: bootstrapping %s\", rootModule.name);\n\n // Resolve system layers first.\n // If telemetry is present + enabled, this triggers OTel SDK init\n // and registers auto-instrumentations before user module imports.\n const systemLayers = options?.systemLayers ?? (await createDefaultSystemLayers());\n const appLayers = options?.layers ?? [];\n debug(\"create: %d system layers, %d app layers\", systemLayers.length, appLayers.length);\n\n // Bootstrap user module after auto-instrumentations are registered.\n const { container, registry } = await bootstrap(rootModule);\n\n if (options?.adapter) {\n debug(\"create: using adapter → ServerlessApplication\");\n return new ServerlessApplication(\n registry,\n container,\n options.adapter,\n systemLayers,\n appLayers,\n );\n }\n\n debug(\"create: → CelerityApplication\");\n return new CelerityApplication(registry, container, systemLayers, appLayers);\n }\n\n static async createTestingApp(\n rootModule: Type,\n options?: CreateOptions,\n ): Promise<TestingApplication> {\n debug(\"createTestingApp: bootstrapping %s\", rootModule.name);\n const { container, registry } = await bootstrap(rootModule);\n const systemLayers = options?.systemLayers ?? [];\n const appLayers = options?.layers ?? [];\n return new TestingApplication(registry, container, systemLayers, appLayers);\n }\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\nimport { Container } from \"../di/container\";\nimport { HandlerRegistry } from \"../handlers/registry\";\nimport { walkModuleGraph, validateModuleGraph } from \"./module-graph\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type BootstrapResult = {\n container: Container;\n registry: HandlerRegistry;\n};\n\n/** Bootstrap DI container + handler registry from a root module class. */\nexport async function bootstrap(rootModule: Type): Promise<BootstrapResult> {\n debug(\"bootstrap: starting from %s\", rootModule.name);\n const container = new Container();\n const registry = new HandlerRegistry();\n\n const graph = walkModuleGraph(rootModule, container);\n validateModuleGraph(graph, container);\n await registry.populateFromGraph(graph, container);\n\n debug(\n \"bootstrap: complete — %d modules, %d handlers\",\n graph.size,\n registry.getAllHandlers().length,\n );\n return { container, registry };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n Schema,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { joinHandlerPath } from \"@celerity-sdk/common\";\nimport {\n CONTROLLER_METADATA,\n HTTP_METHOD_METADATA,\n ROUTE_PATH_METADATA,\n PARAM_METADATA,\n GUARD_PROTECTEDBY_METADATA,\n LAYER_METADATA,\n PUBLIC_METADATA,\n CUSTOM_METADATA,\n} from \"../metadata/constants\";\nimport type { ControllerMetadata } from \"../decorators/controller\";\nimport type { ParamMetadata } from \"../decorators/params\";\nimport type { ResolvedHandler } from \"./pipeline\";\nimport { validate, type ValidationSchemas } from \"../layers/validate\";\nimport type { Container } from \"../di/container\";\nimport { buildModuleGraph, registerModuleGraph } from \"../bootstrap/module-graph\";\nimport type { ModuleGraph } from \"../bootstrap/module-graph\";\n\nconst debug = createDebug(\"celerity:core:registry\");\n\nexport class HandlerRegistry {\n private handlers: ResolvedHandler[] = [];\n\n getHandler(path: string, method: string): ResolvedHandler | undefined {\n const found = this.handlers.find(\n (h) =>\n h.path !== undefined &&\n h.method !== undefined &&\n matchRoute(h.path, path) &&\n h.method === method,\n );\n debug(\"getHandler %s %s → %s\", method, path, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getHandlerById(id: string): ResolvedHandler | undefined {\n const found = this.handlers.find((h) => h.id !== undefined && h.id === id);\n debug(\"getHandlerById %s → %s\", id, found ? \"matched\" : \"not found\");\n return found;\n }\n\n getAllHandlers(): ResolvedHandler[] {\n return [...this.handlers];\n }\n\n async populateFromGraph(graph: ModuleGraph, container: Container): Promise<void> {\n for (const [, node] of graph) {\n for (const controllerClass of node.controllers) {\n await this.registerClassHandler(controllerClass, container);\n }\n for (const fnHandler of node.functionHandlers) {\n this.registerFunctionHandler(fnHandler);\n }\n }\n }\n\n async scanModule(moduleClass: Type, container: Container): Promise<void> {\n const graph = buildModuleGraph(moduleClass);\n registerModuleGraph(graph, container);\n await this.populateFromGraph(graph, container);\n }\n\n private async registerClassHandler(controllerClass: Type, container: Container): Promise<void> {\n const controllerMeta: ControllerMetadata | undefined = Reflect.getOwnMetadata(\n CONTROLLER_METADATA,\n controllerClass,\n );\n if (!controllerMeta) return;\n\n const instance = await container.resolve<object>(controllerClass);\n const prototype = Object.getPrototypeOf(instance) as object;\n const methods = Object.getOwnPropertyNames(prototype).filter((name) => name !== \"constructor\");\n\n const classProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, controllerClass) ?? [];\n const classLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, controllerClass) ?? [];\n const classCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, controllerClass) ?? {};\n\n for (const methodName of methods) {\n const method: HttpMethod | undefined = Reflect.getOwnMetadata(\n HTTP_METHOD_METADATA,\n prototype,\n methodName,\n );\n if (!method) continue;\n\n const routePath: string =\n Reflect.getOwnMetadata(ROUTE_PATH_METADATA, prototype, methodName) ?? \"/\";\n const fullPath = joinHandlerPath(controllerMeta.prefix ?? \"\", routePath);\n\n const methodProtectedBy: string[] =\n Reflect.getOwnMetadata(GUARD_PROTECTEDBY_METADATA, prototype, methodName) ?? [];\n const methodLayers: (CelerityLayer | Type<CelerityLayer>)[] =\n Reflect.getOwnMetadata(LAYER_METADATA, prototype, methodName) ?? [];\n const paramMetadata: ParamMetadata[] =\n Reflect.getOwnMetadata(PARAM_METADATA, prototype, methodName) ?? [];\n const isPublic: boolean =\n Reflect.getOwnMetadata(PUBLIC_METADATA, prototype, methodName) === true;\n const methodCustomMetadata: Record<string, unknown> =\n Reflect.getOwnMetadata(CUSTOM_METADATA, prototype, methodName) ?? {};\n\n const descriptor = Object.getOwnPropertyDescriptor(prototype, methodName);\n if (!descriptor?.value || typeof descriptor.value !== \"function\") continue;\n\n const layers = [...classLayers, ...methodLayers];\n const validationSchemas = buildValidationSchemasFromParams(paramMetadata);\n if (validationSchemas) {\n layers.unshift(validate(validationSchemas));\n }\n\n debug(\n \"registerClassHandler: %s %s (%s.%s)\",\n method,\n fullPath,\n controllerClass.name,\n methodName,\n );\n this.handlers.push({\n path: fullPath,\n method,\n protectedBy: [...classProtectedBy, ...methodProtectedBy],\n layers,\n isPublic,\n paramMetadata,\n customMetadata: { ...classCustomMetadata, ...methodCustomMetadata },\n handlerFn: descriptor.value as (...args: unknown[]) => unknown,\n handlerInstance: instance,\n });\n }\n }\n\n private registerFunctionHandler(definition: FunctionHandlerDefinition): void {\n if (definition.type !== \"http\") return;\n\n const meta = definition.metadata as {\n path?: string;\n method?: HttpMethod;\n schema?: { body?: Schema; query?: Schema; params?: Schema; headers?: Schema };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n customMetadata?: Record<string, unknown>;\n };\n\n const layers = [...(meta.layers ?? [])];\n if (meta.schema) {\n const schemas: Record<string, Schema> = {};\n if (meta.schema.body) schemas.body = meta.schema.body;\n if (meta.schema.query) schemas.query = meta.schema.query;\n if (meta.schema.params) schemas.params = meta.schema.params;\n if (meta.schema.headers) schemas.headers = meta.schema.headers;\n if (Object.keys(schemas).length > 0) {\n layers.unshift(validate(schemas));\n }\n }\n\n debug(\n \"registerFunctionHandler: %s\",\n definition.id ?? (meta.method && meta.path ? `${meta.method} ${meta.path}` : \"(no route)\"),\n );\n this.handlers.push({\n id: definition.id,\n path: meta.path,\n method: meta.method,\n protectedBy: [],\n layers,\n isPublic: false,\n paramMetadata: [],\n customMetadata: meta.customMetadata ?? {},\n handlerFn: definition.handler,\n isFunctionHandler: true,\n injectTokens: meta.inject ?? [],\n });\n }\n}\n\nfunction matchRoute(pattern: string, actual: string): boolean {\n const patternParts = pattern.split(\"/\").filter(Boolean);\n const actualParts = actual.split(\"/\").filter(Boolean);\n\n if (patternParts.length !== actualParts.length) return false;\n\n return patternParts.every((part, i) => part.startsWith(\"{\") || part === actualParts[i]);\n}\n\nconst PARAM_TYPE_TO_SCHEMA_KEY: Record<string, keyof ValidationSchemas> = {\n body: \"body\",\n query: \"query\",\n param: \"params\",\n headers: \"headers\",\n};\n\nfunction buildValidationSchemasFromParams(\n paramMetadata: ParamMetadata[],\n): ValidationSchemas | null {\n const wholeObjectSchemas = new Map<keyof ValidationSchemas, Schema>();\n const perKeySchemas = new Map<keyof ValidationSchemas, Map<string, Schema>>();\n\n for (const meta of paramMetadata) {\n if (!meta.schema) continue;\n const schemaKey = PARAM_TYPE_TO_SCHEMA_KEY[meta.type];\n if (!schemaKey) continue;\n\n if (meta.key) {\n let keyMap = perKeySchemas.get(schemaKey);\n if (!keyMap) {\n keyMap = new Map();\n perKeySchemas.set(schemaKey, keyMap);\n }\n keyMap.set(meta.key, meta.schema);\n } else {\n wholeObjectSchemas.set(schemaKey, meta.schema);\n }\n }\n\n const schemas: ValidationSchemas = {};\n let hasSchemas = false;\n\n for (const key of [\"body\", \"query\", \"params\", \"headers\"] as (keyof ValidationSchemas)[]) {\n if (wholeObjectSchemas.has(key)) {\n schemas[key] = wholeObjectSchemas.get(key)!;\n hasSchemas = true;\n } else if (perKeySchemas.has(key)) {\n schemas[key] = composeKeySchemas(perKeySchemas.get(key)!);\n hasSchemas = true;\n }\n }\n\n return hasSchemas ? schemas : null;\n}\n\nfunction composeKeySchemas(keySchemas: Map<string, Schema>): Schema {\n return {\n parse(data: unknown): Record<string, unknown> {\n const record = data as Record<string, unknown>;\n const result: Record<string, unknown> = { ...record };\n for (const [key, schema] of keySchemas) {\n if (key in result) {\n result[key] = schema.parse(result[key]);\n }\n }\n return result;\n },\n };\n}\n","import \"reflect-metadata\";\nimport createDebug from \"debug\";\nimport type {\n Type,\n InjectionToken,\n Provider,\n ModuleMetadata,\n FunctionHandlerDefinition,\n} from \"@celerity-sdk/types\";\nimport { MODULE_METADATA } from \"../metadata/constants\";\nimport type { Container } from \"../di/container\";\nimport { tokenToString } from \"../di/container\";\nimport { getClassDependencyTokens, getProviderDependencyTokens } from \"../di/dependency-tokens\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\nexport type ModuleNode = {\n moduleClass: Type;\n ownTokens: Set<InjectionToken>;\n exports: Set<InjectionToken>;\n imports: Type[];\n controllers: Type[];\n functionHandlers: FunctionHandlerDefinition[];\n providers: (Type | (Provider & { provide: InjectionToken }))[];\n};\n\nexport type ModuleGraph = Map<Type, ModuleNode>;\n\n/**\n * Builds a module graph by walking the module tree depth-first, collecting\n * all metadata into a graph structure without any side effects.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function buildModuleGraph(rootModule: Type): ModuleGraph {\n const graph: ModuleGraph = new Map();\n const resolving = new Set<Type>();\n\n function walk(moduleClass: Type, importChain: Type[]): void {\n if (graph.has(moduleClass)) {\n debug(\"walk %s → already visited\", moduleClass.name);\n return;\n }\n\n if (resolving.has(moduleClass)) {\n const cyclePath = [...importChain, moduleClass].map((m) => m.name).join(\" → \");\n throw new Error(`Circular module import detected: ${cyclePath}`);\n }\n\n resolving.add(moduleClass);\n\n const metadata: ModuleMetadata | undefined = Reflect.getOwnMetadata(\n MODULE_METADATA,\n moduleClass,\n );\n\n if (!metadata) {\n resolving.delete(moduleClass);\n graph.set(moduleClass, {\n moduleClass,\n ownTokens: new Set(),\n exports: new Set(),\n imports: [],\n controllers: [],\n functionHandlers: [],\n providers: [],\n });\n return;\n }\n\n // Recurse into imports first (depth-first)\n const imports = metadata.imports ?? [];\n for (const imported of imports) {\n walk(imported, [...importChain, moduleClass]);\n }\n\n // Collect own tokens from providers\n const ownTokens = new Set<InjectionToken>();\n const providers = metadata.providers ?? [];\n for (const provider of providers) {\n if (typeof provider === \"function\") {\n ownTokens.add(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n ownTokens.add(typed.provide);\n }\n }\n\n // Controllers are also own tokens\n const controllers = metadata.controllers ?? [];\n for (const controller of controllers) {\n ownTokens.add(controller);\n }\n\n // Build exports set — defaults to empty (nothing exported) when omitted\n const exportTokens = new Set<InjectionToken>(metadata.exports ?? []);\n\n resolving.delete(moduleClass);\n debug(\n \"walk %s: %d providers, %d controllers, %d imports\",\n moduleClass.name,\n providers.length,\n controllers.length,\n imports.length,\n );\n graph.set(moduleClass, {\n moduleClass,\n ownTokens,\n exports: exportTokens,\n imports,\n controllers,\n functionHandlers: metadata.functionHandlers ?? [],\n providers,\n });\n }\n\n walk(rootModule, []);\n return graph;\n}\n\n/**\n * Registers all providers and controllers from the module graph into the\n * DI container.\n */\nexport function registerModuleGraph(graph: ModuleGraph, container: Container): void {\n for (const [, node] of graph) {\n for (const provider of node.providers) {\n if (typeof provider === \"function\") {\n container.registerClass(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n container.register(typed.provide, typed);\n }\n }\n\n for (const controller of node.controllers) {\n if (!container.has(controller)) {\n container.registerClass(controller);\n }\n }\n }\n}\n\n/**\n * Walks the module tree once, depth-first, registering providers in the container\n * and collecting all module metadata into a graph structure.\n *\n * Detects circular module imports and deduplicates visited modules.\n */\nexport function walkModuleGraph(rootModule: Type, container: Container): ModuleGraph {\n const graph = buildModuleGraph(rootModule);\n registerModuleGraph(graph, container);\n return graph;\n}\n\ntype Diagnostic = {\n type: \"missing_dependency\" | \"export_violation\" | \"invalid_export\";\n message: string;\n};\n\n/**\n * Validates the module graph for:\n * 1. All provider dependencies are resolvable (replaces container.validateDependencies)\n * 2. Cross-module dependencies respect export boundaries\n * 3. Exported tokens are actually owned by the module\n */\nexport function validateModuleGraph(graph: ModuleGraph, container: Container): void {\n const diagnostics: Diagnostic[] = [];\n\n for (const [, node] of graph) {\n // Check that exported tokens are owned by this module\n for (const exportToken of node.exports) {\n if (!node.ownTokens.has(exportToken)) {\n diagnostics.push({\n type: \"invalid_export\",\n message:\n `${node.moduleClass.name} exports ${tokenToString(exportToken)}, ` +\n \"but that token is not provided by this module.\",\n });\n }\n }\n\n // Compute visible tokens: own + exported tokens from imported modules\n const visibleTokens = new Set<InjectionToken>(node.ownTokens);\n for (const importedModule of node.imports) {\n const importedNode = graph.get(importedModule);\n if (importedNode) {\n for (const exportedToken of importedNode.exports) {\n visibleTokens.add(exportedToken);\n }\n }\n }\n\n // Validate each provider's dependencies\n for (const provider of node.providers) {\n let depTokens: InjectionToken[];\n let consumerToken: InjectionToken;\n\n if (typeof provider === \"function\") {\n consumerToken = provider;\n depTokens = getClassDependencyTokens(provider);\n } else {\n const typed = provider as Provider & { provide: InjectionToken };\n consumerToken = typed.provide;\n depTokens = getProviderDependencyTokens(typed);\n }\n\n checkDependencies(\n consumerToken,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n\n // Validate each controller's dependencies\n for (const controller of node.controllers) {\n const depTokens = getClassDependencyTokens(controller);\n checkDependencies(\n controller,\n depTokens,\n visibleTokens,\n node.moduleClass,\n graph,\n container,\n diagnostics,\n );\n }\n }\n\n debug(\"validateModuleGraph: %d modules, %d diagnostics\", graph.size, diagnostics.length);\n\n if (diagnostics.length > 0) {\n const details = diagnostics.map((d) => ` ${d.message}`).join(\"\\n\");\n throw new Error(`Module validation errors:\\n\\n${details}`);\n }\n}\n\nfunction checkDependencies(\n consumer: InjectionToken,\n depTokens: InjectionToken[],\n visibleTokens: Set<InjectionToken>,\n moduleClass: Type,\n graph: ModuleGraph,\n container: Container,\n diagnostics: Diagnostic[],\n): void {\n for (const dep of depTokens) {\n if (visibleTokens.has(dep)) continue;\n\n // Check if the token is owned by some module in the graph\n const ownerModule = findTokenOwner(dep, graph);\n if (ownerModule) {\n const ownerNode = graph.get(ownerModule)!;\n if (ownerNode.exports.has(dep)) {\n // Token IS exported from its owner, but that module isn't directly imported\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `which is exported from ${ownerModule.name} but ${moduleClass.name} does not import ${ownerModule.name}. ` +\n `Add ${ownerModule.name} to ${moduleClass.name}'s \"imports\" array.`,\n });\n } else {\n // Token exists but isn't exported from its owner\n diagnostics.push({\n type: \"export_violation\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} depends on ${tokenToString(dep)}, ` +\n `but ${tokenToString(dep)} is not exported from ${ownerModule.name}. ` +\n `Add ${tokenToString(dep)} to ${ownerModule.name}'s \"exports\" array.`,\n });\n }\n continue;\n }\n\n // Unregistered class token — auto-adopt into this module's visible scope.\n // The class becomes available within this module only (not exported).\n // Its own dependencies are recursively validated against the same boundaries.\n if (typeof dep === \"function\") {\n if (!container.has(dep)) {\n container.registerClass(dep);\n }\n visibleTokens.add(dep);\n\n const adoptedDeps = getClassDependencyTokens(dep);\n checkDependencies(\n dep,\n adoptedDeps,\n visibleTokens,\n moduleClass,\n graph,\n container,\n diagnostics,\n );\n continue;\n }\n\n // Truly missing — no provider registered for this non-class token\n diagnostics.push({\n type: \"missing_dependency\",\n message:\n `${tokenToString(consumer)} in ${moduleClass.name} requires ${tokenToString(dep)} — no provider registered. ` +\n 'Ensure the module providing it is included in your module\\'s \"imports\" array, ' +\n \"or register a provider for it directly.\",\n });\n }\n}\n\nfunction findTokenOwner(token: InjectionToken, graph: ModuleGraph): Type | null {\n for (const [, node] of graph) {\n if (node.ownTokens.has(token)) {\n return node.moduleClass;\n }\n }\n return null;\n}\n","import createDebug from \"debug\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nconst debug = createDebug(\"celerity:core:factory\");\n\nexport class CelerityApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private runtimeApp?: unknown,\n ) {}\n\n async start(): Promise<void> {\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { run(block: boolean): Promise<void> };\n await app.run(false);\n }\n }\n\n async close(): Promise<void> {\n debug(\"close: shutting down application\");\n if (this.runtimeApp && typeof this.runtimeApp === \"object\") {\n const app = this.runtimeApp as { shutdown(): Promise<void> };\n await app.shutdown();\n }\n\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n\n getSystemLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.systemLayers;\n }\n\n getAppLayers(): (CelerityLayer | Type<CelerityLayer>)[] {\n return this.appLayers;\n }\n}\n","import type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport type { ServerlessAdapter, ServerlessHandler } from \"../adapters/interfaces\";\nimport { disposeLayers } from \"../layers/dispose\";\n\nexport class ServerlessApplication {\n private handler: ServerlessHandler | null = null;\n\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private adapter: ServerlessAdapter,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async start(): Promise<ServerlessHandler> {\n this.handler = this.adapter.createHandler(this.registry, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n return this.handler;\n }\n\n async close(): Promise<void> {\n await this.container.closeAll();\n await disposeLayers([...this.systemLayers, ...this.appLayers]);\n }\n\n getHandler(): ServerlessHandler {\n if (!this.handler) {\n throw new Error(\"ServerlessApplication.start() must be called before getHandler()\");\n }\n return this.handler;\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n","import createDebug from \"debug\";\nimport type {\n HttpRequest,\n HttpResponse,\n HandlerContext,\n CelerityLayer,\n Type,\n ServiceContainer,\n InjectionToken,\n} from \"@celerity-sdk/types\";\nimport { runLayerPipeline } from \"../layers/pipeline\";\nimport { HttpException } from \"../errors/http-exception\";\nimport { extractParam, type ParamMetadata, type ParamType } from \"../decorators/params\";\nimport { buildHttpRequest, buildHttpContext } from \"../functions/context\";\nimport { HandlerMetadataStore } from \"../metadata/handler-metadata\";\n\nconst debug = createDebug(\"celerity:core:pipeline\");\n\nexport type ResolvedHandler = {\n id?: string;\n path?: string;\n method?: string;\n protectedBy: string[];\n layers: (CelerityLayer | Type<CelerityLayer>)[];\n isPublic: boolean;\n paramMetadata: ParamMetadata[];\n customMetadata: Record<string, unknown>;\n handlerFn: (...args: unknown[]) => unknown;\n handlerInstance?: object;\n isFunctionHandler?: boolean;\n injectTokens?: InjectionToken[];\n};\n\nexport type PipelineOptions = {\n container: ServiceContainer;\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n appLayers?: (CelerityLayer | Type<CelerityLayer>)[];\n};\n\nexport async function executeHandlerPipeline(\n handler: ResolvedHandler,\n request: HttpRequest,\n options: PipelineOptions,\n): Promise<HttpResponse> {\n const context: HandlerContext = {\n request,\n metadata: new HandlerMetadataStore(handler.customMetadata ?? {}),\n container: options.container,\n };\n\n const allLayers = [\n ...(options.systemLayers ?? []),\n ...(options.appLayers ?? []),\n ...handler.layers,\n ];\n\n debug(\"%s %s — %d layers\", request.method, request.path, allLayers.length);\n\n try {\n const response = await runLayerPipeline(allLayers, context, async () => {\n const handlerType = handler.isFunctionHandler ? \"function\" : \"class\";\n debug(\"invoking %s handler\", handlerType);\n const result = handler.isFunctionHandler\n ? await invokeFunctionHandler(handler, context)\n : await invokeClassHandler(handler, context);\n return normalizeResponse(result);\n });\n\n debug(\"response %d\", response.status);\n return response;\n } catch (error) {\n if (error instanceof HttpException) {\n debug(\"HttpException %d: %s\", error.statusCode, error.message);\n return {\n status: error.statusCode,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({\n message: error.message,\n ...(error.details ? { details: error.details } : {}),\n }),\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n if (context.logger) {\n context.logger.error(\"Unhandled error in handler pipeline\", {\n error: message,\n ...(error instanceof Error && error.stack ? { stack: error.stack } : {}),\n });\n } else {\n console.error(\"Unhandled error in handler pipeline:\", error);\n }\n\n return {\n status: 500,\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify({ message: \"Internal Server Error\" }),\n };\n }\n}\n\nasync function invokeClassHandler(\n handler: ResolvedHandler,\n context: HandlerContext,\n): Promise<unknown> {\n const args: unknown[] = [];\n const sorted = [...handler.paramMetadata].sort((a, b) => a.index - b.index);\n\n for (const meta of sorted) {\n args[meta.index] = extractValidatedParam(\n meta.type,\n meta.key,\n context.request,\n context.metadata,\n );\n }\n\n return handler.handlerFn.apply(handler.handlerInstance, args);\n}\n\nconst VALIDATED_METADATA_KEYS: Partial<Record<ParamType, string>> = {\n body: \"validatedBody\",\n query: \"validatedQuery\",\n param: \"validatedParams\",\n headers: \"validatedHeaders\",\n};\n\nfunction extractValidatedParam(\n type: ParamType,\n key: string | undefined,\n request: HttpRequest,\n metadata: HandlerContext[\"metadata\"],\n): unknown {\n const metaKey = VALIDATED_METADATA_KEYS[type];\n if (metaKey) {\n const validated = metadata.get(metaKey);\n if (validated !== undefined) {\n if (key && typeof validated === \"object\" && validated !== null) {\n return (validated as Record<string, unknown>)[key];\n }\n return validated;\n }\n }\n return extractParam(type, key, request);\n}\n\nasync function invokeFunctionHandler(\n handler: ResolvedHandler,\n context: HandlerContext,\n): Promise<unknown> {\n const req = buildHttpRequest(context.request, context.metadata);\n const ctx = buildHttpContext(\n context.request,\n context.metadata,\n context.container,\n context.logger,\n );\n\n if (handler.injectTokens && handler.injectTokens.length > 0) {\n const deps: unknown[] = [];\n for (const token of handler.injectTokens) {\n deps.push(await context.container.resolve(token));\n }\n return handler.handlerFn(req, ctx, ...deps);\n }\n\n return handler.handlerFn(req, ctx);\n}\n\nfunction normalizeResponse(result: unknown): HttpResponse {\n if (isHttpResponse(result)) {\n return result;\n }\n\n if (result === undefined || result === null) {\n return { status: 204 };\n }\n\n const body = typeof result === \"string\" ? result : JSON.stringify(result);\n return {\n status: 200,\n headers: { \"content-type\": \"application/json\" },\n body,\n };\n}\n\nfunction isHttpResponse(value: unknown): value is HttpResponse {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"status\" in value &&\n typeof (value as HttpResponse).status === \"number\"\n );\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HandlerMetadata,\n ServiceContainer,\n CelerityLogger,\n} from \"@celerity-sdk/types\";\n\nexport type HttpHandlerRequest<TBody = unknown> = {\n method: HttpMethod;\n path: string;\n params: Record<string, string>;\n query: Record<string, string | string[]>;\n body: TBody;\n headers: Record<string, string | string[]>;\n cookies: Record<string, string>;\n auth: Record<string, unknown> | null;\n clientIp: string | null;\n userAgent: string | null;\n contentType: string | null;\n};\n\nexport type HttpHandlerContext = {\n requestId: string;\n requestTime: string;\n metadata: HandlerMetadata;\n container: ServiceContainer;\n /** Request-scoped logger set by TelemetryLayer. */\n logger?: CelerityLogger;\n raw: HttpRequest;\n};\n\nexport function buildHttpRequest(\n request: HttpRequest,\n metadata: HandlerMetadata,\n): HttpHandlerRequest {\n const validatedBody = metadata.get<unknown>(\"validatedBody\");\n let body: unknown;\n if (validatedBody !== undefined) {\n body = validatedBody;\n } else if (request.binaryBody) {\n body = request.binaryBody;\n } else if (request.textBody) {\n body = JSON.parse(request.textBody);\n } else {\n body = null;\n }\n\n return {\n method: request.method,\n path: request.path,\n params: metadata.get<Record<string, string>>(\"validatedParams\") ?? request.pathParams,\n query: metadata.get<Record<string, string | string[]>>(\"validatedQuery\") ?? request.query,\n body,\n headers: metadata.get<Record<string, string | string[]>>(\"validatedHeaders\") ?? request.headers,\n cookies: request.cookies,\n auth: request.auth,\n clientIp: request.clientIp,\n userAgent: request.userAgent,\n contentType: request.contentType,\n };\n}\n\nexport function buildHttpContext(\n request: HttpRequest,\n metadata: HandlerMetadata,\n container: ServiceContainer,\n logger?: CelerityLogger,\n): HttpHandlerContext {\n return {\n requestId: request.requestId,\n requestTime: request.requestTime,\n metadata,\n container,\n logger,\n raw: request,\n };\n}\n","import type {\n HttpMethod,\n HttpRequest,\n HttpResponse,\n CelerityLayer,\n Type,\n} from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHandlerPipeline } from \"../handlers/pipeline\";\nimport { NotFoundException } from \"../errors/http-exception\";\n\nexport class TestingApplication {\n constructor(\n private registry: HandlerRegistry,\n private container: Container,\n private systemLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n private appLayers: (CelerityLayer | Type<CelerityLayer>)[] = [],\n ) {}\n\n async inject(request: HttpRequest): Promise<HttpResponse> {\n const handler = this.registry.getHandler(request.path, request.method);\n if (!handler) {\n throw new NotFoundException(`No handler found for ${request.method} ${request.path}`);\n }\n return executeHandlerPipeline(handler, request, {\n container: this.container,\n systemLayers: this.systemLayers,\n appLayers: this.appLayers,\n });\n }\n\n getContainer(): Container {\n return this.container;\n }\n\n getRegistry(): HandlerRegistry {\n return this.registry;\n }\n}\n\nexport type MockRequestOptions = {\n pathParams?: Record<string, string>;\n query?: Record<string, string | string[]>;\n headers?: Record<string, string | string[]>;\n cookies?: Record<string, string>;\n body?: unknown;\n auth?: Record<string, unknown>;\n requestId?: string;\n clientIp?: string;\n};\n\nexport function mockRequest(\n method: HttpMethod,\n path: string,\n options: MockRequestOptions = {},\n): HttpRequest {\n return {\n method,\n path,\n pathParams: options.pathParams ?? {},\n query: options.query ?? {},\n headers: options.headers ?? {},\n cookies: options.cookies ?? {},\n textBody: options.body !== undefined ? JSON.stringify(options.body) : null,\n binaryBody: null,\n contentType: options.body !== undefined ? \"application/json\" : null,\n requestId: options.requestId ?? \"test-request-id\",\n requestTime: new Date().toISOString(),\n auth: options.auth ?? null,\n clientIp: options.clientIp ?? \"127.0.0.1\",\n traceContext: null,\n userAgent: \"celerity-testing\",\n matchedRoute: null,\n };\n}\n","import type {\n HttpMethod,\n CelerityLayer,\n FunctionHandlerDefinition,\n Type,\n InjectionToken,\n Schema,\n} from \"@celerity-sdk/types\";\nimport type { HttpHandlerRequest, HttpHandlerContext } from \"./context\";\n\nexport type HttpHandlerConfig<TBody = unknown> = {\n path?: string;\n method?: HttpMethod;\n schema?: {\n body?: Schema<TBody>;\n query?: Schema;\n params?: Schema;\n headers?: Schema;\n };\n layers?: (CelerityLayer | Type<CelerityLayer>)[];\n inject?: InjectionToken[];\n metadata?: Record<string, unknown>;\n};\n\ntype HttpHandlerOptions<TBody = unknown> = Omit<HttpHandlerConfig<TBody>, \"path\" | \"method\">;\n\ntype HttpHandlerFn<TBody = unknown> = (\n req: HttpHandlerRequest<TBody>,\n ctx: HttpHandlerContext,\n ...deps: unknown[]\n) => unknown;\n\nexport function createHttpHandler<TBody = unknown>(\n config: HttpHandlerConfig<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition {\n const metadata: Record<string, unknown> = {\n schema: config.schema,\n layers: config.layers ?? [],\n inject: config.inject ?? [],\n customMetadata: config.metadata ?? {},\n };\n\n if (config.path !== undefined) metadata.path = config.path;\n if (config.method !== undefined) metadata.method = config.method;\n\n return {\n __celerity_handler: true,\n type: \"http\",\n metadata,\n handler: handler as (...args: unknown[]) => unknown,\n };\n}\n\n// -- Shorthand helpers --------------------------------------------------------\n\nexport function httpGet(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpGet(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"GET\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"GET\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPost(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPost<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPost(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"POST\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"POST\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPut(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPut<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPut(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PUT\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PUT\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpPatch(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpPatch<TBody = unknown>(\n path: string,\n options: HttpHandlerOptions<TBody>,\n handler: HttpHandlerFn<TBody>,\n): FunctionHandlerDefinition;\nexport function httpPatch(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"PATCH\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"PATCH\", ...handlerOrOptions }, maybeHandler!);\n}\n\nexport function httpDelete(path: string, handler: HttpHandlerFn): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n options: HttpHandlerOptions,\n handler: HttpHandlerFn,\n): FunctionHandlerDefinition;\nexport function httpDelete(\n path: string,\n handlerOrOptions: HttpHandlerFn | HttpHandlerOptions,\n maybeHandler?: HttpHandlerFn,\n): FunctionHandlerDefinition {\n if (typeof handlerOrOptions === \"function\") {\n return createHttpHandler({ path, method: \"DELETE\" }, handlerOrOptions);\n }\n return createHttpHandler({ path, method: \"DELETE\", ...handlerOrOptions }, maybeHandler!);\n}\n","import { resolve } from \"node:path\";\nimport createDebug from \"debug\";\nimport type { Type } from \"@celerity-sdk/types\";\n\nconst debug = createDebug(\"celerity:core:bootstrap\");\n\n/** Discover and dynamically import the user's root module. */\nexport async function discoverModule(modulePath?: string): Promise<Type> {\n const resolved = modulePath ?? process.env.CELERITY_MODULE_PATH;\n if (!resolved) {\n throw new Error(\n \"Cannot discover module: set CELERITY_MODULE_PATH environment variable or pass modulePath\",\n );\n }\n\n const absolutePath = resolve(resolved);\n debug(\"discoverModule: importing %s\", absolutePath);\n const imported = (await import(absolutePath)) as Record<string, unknown>;\n const rootModule = imported.default ?? findModuleExport(imported);\n\n if (!rootModule || typeof rootModule !== \"function\") {\n throw new Error(`No module class found in \"${resolved}\"`);\n }\n\n debug(\"discoverModule: found %s\", (rootModule as Type).name);\n return rootModule as Type;\n}\n\nfunction findModuleExport(imported: Record<string, unknown>): unknown {\n for (const key of Object.keys(imported)) {\n if (key === \"default\") continue;\n if (typeof imported[key] === \"function\") {\n return imported[key];\n }\n }\n return undefined;\n}\n","import type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { HttpMethod, HttpRequest, HttpResponse } from \"@celerity-sdk/types\";\n\n/** Flatten multi-value records: single-element arrays become plain strings. */\nexport function flattenMultiValueRecord(\n record: Record<string, string[]>,\n): Record<string, string | string[]> {\n const result: Record<string, string | string[]> = {};\n for (const [key, values] of Object.entries(record)) {\n result[key] = values.length === 1 ? values[0] : values;\n }\n return result;\n}\n\n/** Convert NAPI runtime Request → SDK HttpRequest. */\nexport function mapRuntimeRequest(request: RuntimeRequest): HttpRequest {\n return {\n method: request.method.toUpperCase() as HttpMethod,\n path: request.path,\n pathParams: request.pathParams,\n query: flattenMultiValueRecord(request.query),\n headers: flattenMultiValueRecord(request.headers),\n cookies: request.cookies,\n textBody: request.textBody,\n binaryBody: request.binaryBody,\n contentType: request.contentType || null,\n requestId: request.requestId,\n requestTime: request.requestTime,\n auth: request.auth ?? null,\n clientIp: request.clientIp || null,\n traceContext: request.traceContext ?? null,\n userAgent: request.userAgent || null,\n matchedRoute: request.matchedRoute,\n };\n}\n\n/** Convert SDK HttpResponse → NAPI runtime Response. */\nexport function mapToRuntimeResponse(response: HttpResponse): RuntimeResponse {\n return {\n status: response.status,\n headers: response.headers,\n body: response.body,\n binaryBody: response.binaryBody,\n };\n}\n","import type { Request as RuntimeRequest, Response as RuntimeResponse } from \"@celerity-sdk/runtime\";\nimport type { CelerityLayer, Type } from \"@celerity-sdk/types\";\nimport type { Container } from \"../di/container\";\nimport type { HandlerRegistry } from \"../handlers/registry\";\nimport { executeHandlerPipeline } from \"../handlers/pipeline\";\nimport { discoverModule } from \"./discovery\";\nimport { bootstrap } from \"./bootstrap\";\nimport { mapRuntimeRequest, mapToRuntimeResponse } from \"./runtime-mapper\";\nimport { createDefaultSystemLayers } from \"../layers/system\";\n\ntype RuntimeCallback = (err: Error | null, request: RuntimeRequest) => Promise<RuntimeResponse>;\n\nexport type RuntimeBootstrapResult = {\n registry: HandlerRegistry;\n container: Container;\n /** Create a runtime-compatible handler callback for a specific route. */\n createRouteCallback(path: string, method: string): RuntimeCallback | null;\n /** Create a runtime-compatible handler callback by handler ID (blueprint handler field). */\n createRouteCallbackById(handlerId: string): RuntimeCallback | null;\n};\n\n/**\n * Bootstrap the user's module and return an object with per-route callback creation.\n * Used by the runtime host to get handler callbacks for each blueprint route.\n */\nexport async function bootstrapForRuntime(\n modulePath?: string,\n systemLayers?: (CelerityLayer | Type<CelerityLayer>)[],\n): Promise<RuntimeBootstrapResult> {\n // Resolve system layers first — triggers OTel SDK init before user module loads.\n const layers = systemLayers ?? (await createDefaultSystemLayers());\n const rootModule = await discoverModule(modulePath);\n const { container, registry } = await bootstrap(rootModule);\n\n function buildCallback(\n handler: ReturnType<HandlerRegistry[\"getHandler\"]>,\n ): RuntimeCallback | null {\n if (!handler) return null;\n\n return async (_err: Error | null, request: RuntimeRequest): Promise<RuntimeResponse> => {\n const httpRequest = mapRuntimeRequest(request);\n const httpResponse = await executeHandlerPipeline(handler, httpRequest, {\n container,\n systemLayers: layers,\n });\n return mapToRuntimeResponse(httpResponse);\n };\n }\n\n return {\n registry,\n container,\n createRouteCallback(path: string, method: string) {\n return buildCallback(registry.getHandler(path, method));\n },\n createRouteCallbackById(handlerId: string) {\n return buildCallback(registry.getHandlerById(handlerId));\n },\n };\n}\n","import type {\n CoreRuntimeApplication as CoreRuntimeApplicationType,\n CoreRuntimeAppConfig,\n CoreRuntimeConfig,\n} from \"@celerity-sdk/runtime\";\nimport { bootstrapForRuntime } from \"./runtime-entry\";\n\nexport type StartRuntimeOptions = {\n block?: boolean;\n};\n\n/**\n * Full runtime lifecycle orchestrator.\n * Dynamically imports @celerity-sdk/runtime, loads config from CELERITY_* environment\n * variables, bootstraps the user's module, registers handler callbacks, and starts the server.\n */\nexport async function startRuntime(options?: StartRuntimeOptions): Promise<void> {\n // Dynamic import — @celerity-sdk/runtime is an optional peer dependency.\n const pkg = \"@celerity-sdk/runtime\";\n const runtimeModule = (await import(pkg)) as {\n CoreRuntimeApplication: new (config: CoreRuntimeConfig) => CoreRuntimeApplicationType;\n runtimeConfigFromEnv: () => CoreRuntimeConfig;\n };\n\n const config = runtimeModule.runtimeConfigFromEnv();\n const app = new runtimeModule.CoreRuntimeApplication(config);\n\n const appConfig: CoreRuntimeAppConfig = app.setup();\n\n const result = await bootstrapForRuntime();\n\n for (const def of appConfig.api?.http?.handlers ?? []) {\n const callback =\n result.createRouteCallback(def.path, def.method) ??\n result.createRouteCallbackById(def.handler);\n if (callback) {\n app.registerHttpHandler(def.path, def.method, def.timeout, callback);\n }\n }\n\n await app.run(options?.block ?? true);\n}\n"],"mappings":"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","names":["import_reflect_metadata","CONTROLLER_METADATA","Symbol","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","PARAM_METADATA","GUARD_PROTECTEDBY_METADATA","GUARD_CUSTOM_METADATA","LAYER_METADATA","MODULE_METADATA","INJECTABLE_METADATA","INJECT_METADATA","PUBLIC_METADATA","CUSTOM_METADATA","Controller","prefix","target","metadata","undefined","Reflect","defineMetadata","CONTROLLER_METADATA","INJECTABLE_METADATA","import_reflect_metadata","createMethodDecorator","method","path","target","propertyKey","descriptor","Reflect","defineMetadata","HTTP_METHOD_METADATA","ROUTE_PATH_METADATA","Get","Post","Put","Patch","Delete","Head","Options","import_reflect_metadata","createParamDecorator","type","keyOrSchema","schema","target","propertyKey","parameterIndex","existing","Reflect","getOwnMetadata","PARAM_METADATA","meta","index","key","push","defineMetadata","Body","Query","Param","Headers","Auth","Req","Cookies","RequestId","extractParam","request","textBody","JSON","parse","query","pathParams","headers","auth","cookies","requestId","import_reflect_metadata","Guard","name","target","Reflect","defineMetadata","GUARD_CUSTOM_METADATA","ProtectedBy","propertyKey","_descriptor","existing","getOwnMetadata","GUARD_PROTECTEDBY_METADATA","Public","descriptor","PUBLIC_METADATA","import_reflect_metadata","UseLayer","layers","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","LAYER_METADATA","defineMetadata","UseLayers","import_reflect_metadata","SetMetadata","key","value","target","propertyKey","_descriptor","existing","Reflect","getOwnMetadata","CUSTOM_METADATA","defineMetadata","Action","import_reflect_metadata","Injectable","target","Reflect","defineMetadata","INJECTABLE_METADATA","Inject","token","_propertyKey","parameterIndex","existing","getOwnMetadata","INJECT_METADATA","Map","set","import_reflect_metadata","Module","metadata","target","Reflect","defineMetadata","MODULE_METADATA","HttpException","Error","statusCode","message","details","name","BadRequestException","UnauthorizedException","ForbiddenException","NotFoundException","MethodNotAllowedException","NotAcceptableException","ConflictException","GoneException","UnprocessableEntityException","TooManyRequestsException","InternalServerErrorException","NotImplementedException","BadGatewayException","ServiceUnavailableException","GatewayTimeoutException","ValidationLayer","schemas","handle","context","next","request","body","textBody","raw","JSON","parse","metadata","set","error","BadRequestException","formatError","params","pathParams","query","headers","Error","issues","message","validate","debug","createDebug","runLayerPipeline","layers","context","handler","resolved","map","layer","length","index","dispatch","i","Promise","reject","Error","current","name","handle","createDefaultSystemLayers","layers","pkg","mod","TelemetryLayerClass","TelemetryLayer","push","ConfigLayer","disposeLayers","layers","layer","reverse","dispose","HandlerMetadataStore","decoratorData","requestData","Map","decoratorMetadata","Object","entries","get","key","has","set","value","import_reflect_metadata","import_debug","import_reflect_metadata","isClassProvider","p","isFactoryProvider","getClassDependencyTokens","target","paramTypes","Reflect","getMetadata","injectOverrides","INJECT_METADATA","Map","map","paramType","index","get","getProviderDependencyTokens","provider","useClass","inject","debug","createDebug","CLOSE_METHODS","isClassProvider","p","isFactoryProvider","isValueProvider","tokenToString","token","name","String","detectCloseMethod","value","obj","method","Container","providers","Map","instances","resolving","Set","edges","closeStack","trackedTokens","register","provider","type","set","trackCloseable","useValue","onClose","registerClass","target","useClass","registerValue","resolve","has","get","path","map","join","Error","add","constructClass","inject","recordEdges","instance","createFromProvider","delete","resolveClass","getDependencies","closeAll","length","entries","reverse","entry","close","clear","validateDependencies","missing","visited","walk","depTokens","getProviderDependencyTokens","getClassDependencyTokens","dep","push","consumer","dependency","keys","details","isInjectable","Reflect","getOwnMetadata","INJECTABLE_METADATA","deps","t","from","to","closeFn","Promise","all","useFactory","APP_CONFIG","Symbol","RUNTIME_APP","import_debug","import_reflect_metadata","import_debug","import_reflect_metadata","import_debug","import_reflect_metadata","import_debug","debug","createDebug","buildModuleGraph","rootModule","graph","Map","resolving","Set","walk","moduleClass","importChain","has","name","cyclePath","map","m","join","Error","add","metadata","Reflect","getOwnMetadata","MODULE_METADATA","delete","set","ownTokens","exports","imports","controllers","functionHandlers","providers","imported","provider","typed","provide","controller","exportTokens","length","registerModuleGraph","container","node","registerClass","register","walkModuleGraph","validateModuleGraph","diagnostics","exportToken","push","type","message","tokenToString","visibleTokens","importedModule","importedNode","get","exportedToken","depTokens","consumerToken","getClassDependencyTokens","getProviderDependencyTokens","checkDependencies","size","details","d","consumer","dep","ownerModule","findTokenOwner","ownerNode","adoptedDeps","token","debug","createDebug","HandlerRegistry","handlers","getHandler","path","method","found","find","h","undefined","matchRoute","getHandlerById","id","getAllHandlers","populateFromGraph","graph","container","node","controllerClass","controllers","registerClassHandler","fnHandler","functionHandlers","registerFunctionHandler","scanModule","moduleClass","buildModuleGraph","registerModuleGraph","controllerMeta","Reflect","getOwnMetadata","CONTROLLER_METADATA","instance","resolve","prototype","Object","getPrototypeOf","methods","getOwnPropertyNames","filter","name","classProtectedBy","GUARD_PROTECTEDBY_METADATA","classLayers","LAYER_METADATA","classCustomMetadata","CUSTOM_METADATA","methodName","HTTP_METHOD_METADATA","routePath","ROUTE_PATH_METADATA","fullPath","joinHandlerPath","prefix","methodProtectedBy","methodLayers","paramMetadata","PARAM_METADATA","isPublic","PUBLIC_METADATA","methodCustomMetadata","descriptor","getOwnPropertyDescriptor","value","layers","validationSchemas","buildValidationSchemasFromParams","unshift","validate","push","protectedBy","customMetadata","handlerFn","handlerInstance","definition","type","meta","metadata","schema","schemas","body","query","params","headers","keys","length","handler","isFunctionHandler","injectTokens","inject","pattern","actual","patternParts","split","Boolean","actualParts","every","part","i","startsWith","PARAM_TYPE_TO_SCHEMA_KEY","param","wholeObjectSchemas","Map","perKeySchemas","schemaKey","key","keyMap","get","set","hasSchemas","has","composeKeySchemas","keySchemas","parse","data","record","result","debug","createDebug","bootstrap","rootModule","name","container","Container","registry","HandlerRegistry","graph","walkModuleGraph","validateModuleGraph","populateFromGraph","size","getAllHandlers","length","import_debug","debug","createDebug","CelerityApplication","registry","container","systemLayers","appLayers","runtimeApp","start","app","run","close","shutdown","closeAll","disposeLayers","getContainer","getRegistry","getSystemLayers","getAppLayers","ServerlessApplication","handler","registry","container","adapter","systemLayers","appLayers","start","createHandler","close","closeAll","disposeLayers","getHandler","Error","getContainer","getRegistry","import_debug","buildHttpRequest","request","metadata","validatedBody","get","body","undefined","binaryBody","textBody","JSON","parse","method","path","params","pathParams","query","headers","cookies","auth","clientIp","userAgent","contentType","buildHttpContext","container","logger","requestId","requestTime","raw","debug","createDebug","executeHandlerPipeline","handler","request","options","context","metadata","HandlerMetadataStore","customMetadata","container","allLayers","systemLayers","appLayers","layers","method","path","length","response","runLayerPipeline","handlerType","isFunctionHandler","result","invokeFunctionHandler","invokeClassHandler","normalizeResponse","status","error","HttpException","statusCode","message","headers","body","JSON","stringify","details","Error","String","logger","stack","console","args","sorted","paramMetadata","sort","a","b","index","meta","extractValidatedParam","type","key","handlerFn","apply","handlerInstance","VALIDATED_METADATA_KEYS","query","param","metaKey","validated","get","undefined","extractParam","req","buildHttpRequest","ctx","buildHttpContext","injectTokens","deps","token","push","resolve","isHttpResponse","value","TestingApplication","registry","container","systemLayers","appLayers","inject","request","handler","getHandler","path","method","NotFoundException","executeHandlerPipeline","getContainer","getRegistry","mockRequest","options","pathParams","query","headers","cookies","textBody","body","undefined","JSON","stringify","binaryBody","contentType","requestId","requestTime","Date","toISOString","auth","clientIp","traceContext","userAgent","matchedRoute","debug","createDebug","CelerityFactory","create","rootModule","options","name","systemLayers","createDefaultSystemLayers","appLayers","layers","length","container","registry","bootstrap","adapter","ServerlessApplication","CelerityApplication","createTestingApp","TestingApplication","createHttpHandler","config","handler","metadata","schema","layers","inject","customMetadata","path","undefined","method","__celerity_handler","type","httpGet","handlerOrOptions","maybeHandler","httpPost","httpPut","httpPatch","httpDelete","import_debug","debug","createDebug","discoverModule","modulePath","resolved","process","env","CELERITY_MODULE_PATH","Error","absolutePath","resolve","imported","rootModule","default","findModuleExport","name","key","Object","keys","undefined","flattenMultiValueRecord","record","result","key","values","Object","entries","length","mapRuntimeRequest","request","method","toUpperCase","path","pathParams","query","headers","cookies","textBody","binaryBody","contentType","requestId","requestTime","auth","clientIp","traceContext","userAgent","matchedRoute","mapToRuntimeResponse","response","status","body","bootstrapForRuntime","modulePath","systemLayers","layers","createDefaultSystemLayers","rootModule","discoverModule","container","registry","bootstrap","buildCallback","handler","_err","request","httpRequest","mapRuntimeRequest","httpResponse","executeHandlerPipeline","mapToRuntimeResponse","createRouteCallback","path","method","getHandler","createRouteCallbackById","handlerId","getHandlerById","startRuntime","options","pkg","runtimeModule","config","runtimeConfigFromEnv","app","CoreRuntimeApplication","appConfig","setup","result","bootstrapForRuntime","def","api","http","handlers","callback","createRouteCallback","path","method","createRouteCallbackById","handler","registerHttpHandler","timeout","run","block"]}