balda 0.0.3 → 0.0.4
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.
- package/.claude/settings.local.json +7 -0
- package/lib/cli.js +152 -35
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +179 -61
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +294 -127
- package/lib/index.d.ts +294 -127
- package/lib/index.js +179 -61
- package/lib/index.js.map +1 -1
- package/package.json +4 -2
package/lib/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/runtime.ts","../src/errors/balda_error.ts","../src/logger/logger.ts","../src/runtime/native_cwd.ts","../src/cron/cron.ts","../src/cron/decorator/cron_decorator.ts","../src/runtime/native_args.ts","../src/utils.ts","../src/commands/arg_parser.ts","../src/metadata_store.ts","../src/decorators/command/arg.ts","../src/decorators/command/flag.ts","../src/runtime/native_path.ts","../src/server/router/router.ts","../src/decorators/controller/controller.ts","../src/decorators/handlers/del.ts","../src/decorators/handlers/get.ts","../src/decorators/handlers/patch.ts","../src/decorators/handlers/post.ts","../src/decorators/handlers/put.ts","../src/decorators/middleware/middleware.ts","../src/ajv/ajv.ts","../src/ajv/openapi_schema_map.ts","../src/validator/validator.ts","../src/validator/zod_loader.ts","../src/decorators/serialize/serialize.ts","../src/decorators/validation/validate.ts","../src/cron/base_cron.ts","../src/queue/providers/bullmq/bullmq_configuration.ts","../src/errors/client_not_found_error.ts","../src/runtime/native_crypto.ts","../src/queue/providers/bullmq/bullmq.ts","../src/queue/providers/pgboss/pgboss_configuration.ts","../src/queue/providers/pgboss/pgboss.ts","../src/queue/providers/sqs/sqs_configuration.ts","../src/queue/providers/sqs/sqs.ts","../src/queue/queue.ts","../src/queue/queue_service.ts","../src/queue/decorator/queue_decorator.ts","../src/mqtt/base_mqtt.ts","../src/mqtt/mqtt.ts","../src/queue/base_queue.ts","../src/queue/pub.ts","../src/queue/queue_config.ts","../src/runtime/native_exit.ts","../src/commands/base_command.ts","../src/runtime/native_fs.ts","../src/package.ts","../src/commands/base_commands/build_command.ts","../src/commands/base_commands/generate_command.ts","../src/commands/base_commands/generate_controller.ts","../src/commands/base_commands/generate_cron.ts","../src/commands/base_commands/generate_middleware.ts","../src/commands/base_commands/generate_mqtt.ts","../src/commands/base_commands/generate_plugin.ts","../src/commands/base_commands/generate_queue.ts","../src/commands/base_commands/generate_sdk.ts","../src/commands/base_commands/init_command.ts","../src/commands/base_commands/init_queue_command.ts","../src/commands/base_commands/list_command.ts","../src/commands/base_commands/serve_command.ts","../src/commands/base_commands/setup_storage_command.ts","../src/commands/command_registry.ts","../src/runtime/native_request.ts","../src/server/http/request.ts","../src/runtime/native_env.ts","../src/errors/error_factory.ts","../src/errors/method_not_allowed.ts","../src/errors/route_not_found.ts","../src/runtime/native_file.ts","../src/plugins/static/static_constants.ts","../src/plugins/static/static.ts","../src/server/http/response.ts","../src/graphql/graphql.ts","../src/mock/mock_response.ts","../src/runtime/native_server/server_utils.ts","../src/mock/mock_server.ts","../src/plugins/async_local_storage/async_local_storage.ts","../src/plugins/body_parser/body_parser.ts","../src/plugins/compression/compression.ts","../src/plugins/cookie/cookie.ts","../src/plugins/cors/cors.ts","../src/plugins/express/express.ts","../src/errors/file_too_large.ts","../src/runtime/native_os.ts","../src/plugins/file/file.ts","../src/plugins/helmet/helmet.ts","../src/errors/json_not_valid.ts","../src/plugins/json/json.ts","../src/plugins/log/log.ts","../src/plugins/method_override/method_override.ts","../src/plugins/rate_limiter/in_memory_storage.ts","../src/plugins/rate_limiter/rate_limiter.ts","../src/plugins/session/session_store.ts","../src/plugins/session/session.ts","../src/plugins/swagger/swagger.ts","../src/plugins/timeout/timeout.ts","../src/plugins/trust_proxy/trust_proxy.ts","../src/plugins/urlencoded/urlencoded.ts","../src/runtime/native_hash.ts","../src/runtime/native_server/server_bun.ts","../src/runtime/native_server/server_deno.ts","../src/runtime/native_server/server_node.ts","../src/runtime/native_server/server_connector.ts","../src/server/server.ts","../src/server/server_constants.ts","../src/errors/file_not_found_error.ts","../src/storage/providers/blob_storage.ts","../src/storage/providers/local.ts","../src/storage/providers/s3.ts","../src/storage/storage.ts","../src/plugins/base_plugin.ts","../src/server/policy/policy_decorator.ts","../src/server/policy/policy_manager.ts","../src/index.ts"],"names":["runtime_exports","__export","runtime","RunTime","init_runtime","__esmMin","BaldaError","message","createBaseLogger","pino","label","logger","defineLoggerConfig","options","NativeCwd","nativeCwd","CronService","name","args","nodeCronModule","context","cronJobPatterns","allFiles","pattern","files","glob","file","error","setCronGlobalErrorHandler","globalErrorHandler","cron","schedule","target","propertyKey","descriptor","originalMethod","wrappedMethod","instance","NativeArgs","scriptIndex","i","arg","argBasename","j","nativeArgs","toLowerSnakeCase","str","toPascalCase","input","word","toDashCase","parseSizeLimit","sizeLimit","defaultValue","trimmed","kbMatch","mbMatch","value","parseFlag","equalIndex","parseFlagValue","numValue","parseCliArgsAndFlags","cliArgs","parsedArgs","parsedFlags","flag","nextArg","existingValue","getCalledCommandName","MetadataStore","VALIDATION_ERROR_SYMBOL","ARG_SYMBOL","currentCommandName","argName","argValue","errorChain","flagDecorator","primaryFlagName","flagAliases","allFlagVariants","resolvedFlagValue","flagVariant","possibleNames","flagName","rawValue","val","stringVal","NativePath","inputPath","path","paths","nativePath","Node","Router","_Router","basePath","middlewares","method","middleware","handler","swaggerOptions","root","segments","node","seg","idx","r","rawPath","params","middlewareOrHandler","maybeHandler","maybeSwagger","fullPath","isHandlerOnly","provided","middlewareOrCb","maybeCb","groupMiddlewares","cb","childBase","child","route","normalized","joined","v","router","createPolicyMiddleware","policies","req","res","next","policy","controller","classMeta","classMiddlewares","classPolicies","metaMap","meta","allPolicies","policyMiddleware","allMiddlewares","del","get","patch","post","put","AjvStateManager","Ajv","ajv","openapiSchemaMap","validateSchema","inputSchema","data","safe","ValidationError","ZodLoader","isZod","SERIALIZE_WRAPPED","SERIALIZE_METADATA","serializeSchemaRefCache","serialize","schema","status","wrappedFunction","actualStatus","serializeMetadata","body","cacheKey","refKey","compiledSchema","jsonSchema","zod","validateDecorator","validatedBody","validatedQuery","validatedAll","newArgs","customError","validate","BaseCron","BullMQConfiguration","defineBullMQConfiguration","ClientNotFoundError","libraries","NativeCrypto","nativeCrypto","BullMQPubSub","topic","payload","queue","jobId","errorHandler","rest","bullmqClient","worker","job","PGBossConfiguration","definePGBossConfiguration","PGBossPubSub","boss","sendOptions","id","jobs","mod","Ctor","connectionString","pgBoss","SQSConfiguration","defineSQSConfiguration","SQSPubSub","sqs","SendMessageCommand","queueUrl","command","consumerModule","consumerOptions","consumer","SQSClient","config","url","QueueManager","provider","pubsub","QueueService","queueHandlerPatterns","wrappedHandler","BaseMqtt","parseMessage","stringValue","parsed","MqttService","_MqttService","connectionOptions","mqttModule","host","port","protocol","otherOptions","brokerUrl","matchingSubscriptions","sub","topicPattern","subscription","mqttHandlerPatterns","msgTopic","rawMessage","parsedMessage","resolve","setMqttGlobalErrorHandler","mqtt","BaseQueue","publishFactory","publish","defineQueueConfiguration","firstClassIntegrations","key","NativeExit","code","nativeExit","Command","flags","helpFlags","commandName","description","helpText","helpOutput","info","commandClass","colors","lines","helpLines","line","allMeta","argsMeta","flagsMeta","required","aliases","flagKey","flagValue","valueDisplay","example","index","errorNumber","errorType","errorName","NativeFs","arrayBuffer","denoBuffer","stats","bunStats","denoStats","fs","Readable","nodeStream","entries","entry","nativeFs","getUninstalledPackages","packages","nodeModulesPath","uninstalled","pkg","pkgPath","getPackageManager","execWithPrompt","packageManager","dependencies","areDevDeps","rl","It","dependenciesList","prompt","answer","execSync","BuildCommand","esbuild","packageManagerCommand","devFlag","err","assetsDir","plugins","copy","outFile","result","__decorateClass","GenerateCommand","commandRegistry","commandType","commandTemplate","GenerateControllerCommand","controllerTemplate","fileName","className","GenerateCron","cronTemplate","GenerateMiddlewareCommand","middlewareTemplate","middlewareName","GenerateMqttCommand","isValidLiteral","mqttTemplate","GeneratePluginCommand","pluginTemplate","GenerateQueueCommand","queueTemplate","GenerateSdkCommand","sdkGenerator","hasNodeModules","generatorPath","packageCommand","absoluteServerPath","serverModule","serverInstance","possibleExports","exportName","candidate","wasStarted","serverUrl","serverPort","serverHost","serverWithOptions","swaggerJsonUrl","openApiSpec","response","serverWithClose","tempSpecPath","outputDir","commandParts","InitCommand","devDependenciesCommand","uninstalledDevDeps","uninstalledMqtt","uninstalledCron","ext","serverTemplate","indexTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","imports","services","importsBlock","servicesBlock","InitQueueCommand","uninstalledDeps","configTemplate","ListCommand","builtInCommands","userCommands","categorizedCommands","maxNameLength","cmd","desc","deprecatedTag","commands","map","category","sortedCategories","color","ServeCommand","denoCommand","initCommand","SetupStorageCommand","validTypes","missingDeps","installCommand","storageType","packageJsonPath","missing","dep","depPath","outputPath","resolvedPath","configFile","template","baseCommands","CommandRegistry","_CommandRegistry","commandsPattern","commandFiles","register","commandFile","module","NativeRequest","schemaRefCache","Request","_Request","request","zodSchema","cached","plainSchema","fieldName","NativeEnv","_","nativeEnv","errorFactory","isDevelopment","MethodNotAllowedError","RouteNotFoundError","NativeFile","nativeFile","mimeTypesMap","serveStatic","source","urlPath","normalizedPath","staticFileHandler","_req","_res","wildcardPath","filePath","sourcePath","contentType","getContentType","fileContent","Response","htmlString","pathToFile","mimeType","chunk","GraphQL","createSchemaFn","typeDef","typeOrResolver","resolvers","yogaOptions","type","resolversObj","existingTypeResolver","resolver","typeDefs","def","MockResponse","header","subset","expected","assertion","currentPath","targetValue","subsetValue","targetKeys","expectedKeys","executeMiddlewareChain","currentIndex","firstMiddleware","canHaveBody","createGraphQLHandlerInitializer","graphql","handlerPromise","isInitializing","waitForInitialization","initializeHandler","createYoga","createSchema","MockServer","server","headers","query","cookies","ip","boundary","errorRes","formData","encoder","buffers","disposition","totalLength","sum","b","multipartBody","offset","buf","urlencoded","asyncStorage","AsyncLocalStorage","asyncLocalStorage","ctxSetters","store","setter","prop","currentStore","bodyParser","DEFAULT_THRESHOLD","DEFAULT_LEVEL","DEFAULT_FILTER","compression","threshold","level","filter","originalSend","originalJson","originalText","compressResponse","shouldCompress","buffer","getBodyBuffer","compressed","gzipSync","compressedBody","jsonString","cookie","opts","rawCookies","parseCookies","verified","verifySignedCookie","cookieOptions","setCookie","clearCookie","cookieString","pairs","pair","middlewareOptions","cookieValue","signCookie","existingCookies","newCookies","clearOptions","secret","keyData","valueData","signatureBuffer","signatureArray","signature","byte","parts","expectedSignatureBuffer","expectedSignatureArray","expectedSignature","cors","requestOrigin","handlePreflightRequest","handleRegularRequest","allowOrigin","determineOrigin","setCorsHeaders","matchedOrigin","origin","exposedHeaders","allowedHeaders","methodsStr","toBaldaToExpressRequest","baldaReq","headersObj","createExpressResponse","baldaRes","statusOrUrl","redirectUrl","field","prev","newValue","view","callback","obj","filename","fn","fname","links","link","rel","expressMiddleware","expressHandler","expressReq","expressRes","reject","expressNext","mountExpressRouter","expressRouter","normalizedBase","normalizePath","stack","layer","processExpressLayer","routePath","methods","m","handlers","s","registerExpressHandlers","layerPath","layerStack","subLayer","h","lastHandler","finalHandler","createExpressAdapter","pathOrMiddleware","maybeMiddleware","middlewareStack","FileTooLargeError","size","maxSize","NativeOs","nativeOs","DEFAULT_SIZE","fileParser","tmpPaths","boundaryMatch","bodyBuf","boundaryBuf","CRLFCRLF","indexOfSub","haystack","needle","from","outer","start","headerEnd","headersBuf","dataStart","nextBoundary","dataEnd","fields","maxFileSizeBytes","part","formNameMatch","formName","filenameMatch","originalName","contentTypeHeader","sanitizedName","sanitizeFilename","extension","tmpPath","cleanupTmpFiles","helmet","action","hstsRaw","maxAge","includeSubDomains","preload","hstsValue","JsonNotValidError","json","isJsonRequest","byteLength","customErrorMessage","encoding","decodedBody","parseMimeType","semicolonIndex","log","returnIfObjectOrString","startTime","duration","DEFAULT_METHODS","DEFAULT_HEADER","ALLOWED_OVERRIDE_METHODS","methodOverride","allowedMethods","headerName","currentMethod","overrideMethod","normalizedOverride","InMemoryStorage","windowMs","rateLimiter","keyOptions","storageOptions","baseKeyOptions","baseStorageOptions","storage","MemorySessionStore","sid","ttlSeconds","exp","session","ttl","cookieDefaults","sess","swagger","globalOptions","spec","generateOpenAPISpec","uiPath","jsonPath","uiContent","generateRapiDocUI","generateScalarUI","generateElementsUI","generateSwaggerUI","escapeHtml","safeToJSONSchema","routes","processedModels","acc","model","schemaName","components","operation","parameters","extractPathParams","routeBodyContentType","statusCode","securityArr","sec","schemeName","specUrl","paramSchema","regex","match","timeout","timer","trustProxy","useTrust","hop","parseUrlEncodedBody","bodyString","parseUrlEncodedString","searchParams","setNestedValue","dangerousKeys","keys","current","baseKey","bracketKey","lastKey","NativeHash","passwordBuffer","salt","keyMaterial","hashBuffer","saltBase64","hashBase64","hash","expectedHash","actualHash","mismatch","bytes","binary","len","base64","ServerBun","tapOptions","fetch","websocket","ServerDeno","graphqlHandler","socket","event","pipeReadableStreamToNodeResponse","stream","reader","done","ServerNode","httpResponse","preHandler","filteredHeaders","forwardedFor","search","responseResult","chunks","createServer","http2CreateServer","http2CreateSecureServer","httpsCreateServer","ServerConnector","serverOptions","PROTECTED_KEYS","Server","append","optionsOrHandler","notFoundHandler","customControllerPatterns","controllerPatterns","controllerPaths","blacklistedPath","controllerPath","pluginName","pluginOptions","pathname","allMethods","methodNotAllowedError","notFoundError","FileNotFoundError","AzureBlobStorageProvider","expiresInSeconds","blockBlobClient","startsOn","expiresOn","permissions","sasToken","prefix","listPrefix","blob","returnType","downloadResponse","credential","LocalStorageProvider","_key","_expiresInSeconds","searchPath","_contentType","dirPath","relativePath","S3StorageProvider","domainName","keyPairId","privateKey","dateLessThan","item","Storage","providerOptions","providerInstance","BasePlugin","createPolicyDecorator","manager","scope","policyMeta","PolicyManager","providers"],"mappings":"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","file":"index.cjs","sourcesContent":["export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","export class BaldaError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","import pino from \"pino\";\nimport type { LoggerOptions } from \"./logger_types.js\";\n\nconst createBaseLogger = () => {\n const baseOptions: LoggerOptions = {\n level: \"info\",\n formatters: {\n level: (label) => {\n return { level: label };\n },\n },\n };\n\n return pino(baseOptions);\n};\n\n/**\n * The logger instance, can be overridden by the `defineLoggerConfig` function\n */\nexport let logger = createBaseLogger();\n\n/**\n * Define the logger config, this will override the logger instance with the given options\n * @param options - The logger options\n */\nexport const defineLoggerConfig = (options?: LoggerOptions) => {\n logger = pino(options);\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeCwd {\n getCwd(): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n return process.cwd();\n case \"deno\":\n return Deno.cwd();\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeCwd = new NativeCwd();\n","import { glob } from \"glob\";\nimport type { TaskContext } from \"node-cron\";\nimport { BaldaError } from \"../errors/balda_error.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { CronSchedule, CronScheduleParams } from \"./cron.types.js\";\n\nexport class CronService {\n static scheduledJobs: CronSchedule[] = [];\n\n /**\n * @description Schedule a cron job.\n * @internal\n * @example\n * CronService.register('test', '0 0 * * *', () => {\n * console.log('test');\n * }, {\n * timezone: 'Europe/Istanbul',\n * });\n */\n static register(name: string, ...args: CronScheduleParams): void {\n args[2] = {\n name,\n ...args[2],\n };\n\n this.scheduledJobs.push({ name, args });\n }\n\n /**\n * @description Start the cron scheduler.\n */\n static async run() {\n const nodeCronModule = (\n await import(\"node-cron\").catch(() => {\n throw new BaldaError(\n \"node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator\",\n );\n })\n ).default;\n\n logger.info(\"Scheduling cron jobs\");\n if (!this.scheduledJobs.length) {\n logger.info(\"No cron jobs to schedule\");\n return;\n }\n\n for (const { name, args } of this.scheduledJobs) {\n logger.info(`Scheduling cron job: ${name}`);\n const scheduledJob = nodeCronModule.schedule(...args);\n scheduledJob.on(\"execution:failed\", (context) =>\n this.globalErrorHandler(context),\n );\n }\n\n logger.info(\"Cron jobs scheduled\");\n }\n\n /**\n * @description Main error handler for cron jobs. You can write your own error handler by overriding this static method for example with sentry.\n */\n static globalErrorHandler(context: TaskContext) {\n logger.error(context.execution?.error);\n }\n\n /**\n * @description Import all cron jobs from the app/cron/schedules directory\n */\n static async massiveImportCronJobs(cronJobPatterns: string[]) {\n const allFiles: string[] = [];\n\n for (const pattern of cronJobPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing cron job: ${file}`);\n logger.error(error);\n });\n }),\n );\n }\n}\n\nexport const setCronGlobalErrorHandler = (\n globalErrorHandler: (\n ...args: Parameters<(typeof CronService)[\"globalErrorHandler\"]>\n ) => void,\n) => {\n CronService.globalErrorHandler = globalErrorHandler.bind(CronService);\n};\n","import { CronService } from \"../cron.js\";\nimport type { CronScheduleParams } from \"../cron.types.js\";\n\n/**\n * Decorator to schedule a cron job. Must be applied to a class method. By default, the cron job will not overlap with other cron jobs of the same type.\n * ```ts\n * @cron('* * * * *', { timezone: 'Europe/Istanbul' })\n * async test() {\n * console.log('test');\n * }\n * ```\n */\nexport const cron = (\n schedule: CronScheduleParams[0],\n options?: CronScheduleParams[2],\n) => {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value;\n\n const wrappedMethod = async (...args: any[]) => {\n const instance = new target.constructor();\n return await originalMethod.apply(instance, args);\n };\n\n CronService.register(\n `${target.constructor.name}.${propertyKey}`,\n schedule,\n wrappedMethod,\n options,\n );\n\n return descriptor;\n };\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","/**\n * Cross-runtime metadata store used to store metadata for the decorators without using reflect-metadata\n */\nexport class MetadataStore {\n private static metadata = new WeakMap<any, Map<string | symbol, any>>();\n\n /**\n * Set the metadata for the given target and property key\n */\n static set(target: any, propertyKey: string, value: any): void {\n if (!this.metadata.has(target)) {\n this.metadata.set(target, new Map());\n }\n this.metadata.get(target)!.set(propertyKey, value);\n }\n\n /**\n * Get the metadata for the given target and property key\n */\n static get(target: any, propertyKey: string): any {\n return this.metadata.get(target)?.get(propertyKey);\n }\n\n /**\n * Get all the metadata for the given target\n */\n static getAll(target: any): Map<string | symbol, any> {\n return this.metadata.get(target) || new Map();\n }\n\n /**\n * Delete the metadata for the given target and property key\n */\n static delete(target: any, propertyKey: string | symbol): void {\n this.metadata.get(target)?.delete(propertyKey.toString());\n }\n\n /**\n * Clear all the metadata for the given target\n */\n static clear(target: any): void {\n this.metadata.delete(target);\n }\n}\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { ArgOptions } from \"./command_decorator_types.js\";\n\nexport const VALIDATION_ERROR_SYMBOL = \"VALIDATION_ERROR\";\nexport const ARG_SYMBOL = \"ARG\";\n\n/**\n * The arguments of the current command. Shifted to get the next argument each time for each argument decorator.\n */\nlet args = parseCliArgsAndFlags().args.slice(1);\n\n/**\n * Decorator to mark a field of a command class as an argument.\n * @param options - The options for the argument.\n * @warning Arguments are evaluated in the order they are defined in the Command class.\n */\nexport const arg = (options: ArgOptions) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const argName = propertyKey;\n MetadataStore.set(target, propertyKey, {\n type: \"arg\",\n name: argName,\n description: options.description,\n });\n\n let argValue = args.length ? args.shift() : options.defaultValue;\n if (options.required && !argValue) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"arg\",\n name: argName,\n message: \"Required argument not provided\",\n },\n ]);\n\n return;\n }\n\n if (options.parse && argValue) {\n argValue = options.parse(argValue);\n }\n\n Object.defineProperty(target, propertyKey, {\n value: argValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { VALIDATION_ERROR_SYMBOL } from \"./arg.js\";\nimport type {\n FlagOptions,\n FlagType,\n InferFlagType,\n} from \"./command_decorator_types.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\n\n/**\n * Decorator for defining command-line flags with type safety.\n *\n * Supports multiple flag types:\n * - `boolean`: true/false flags\n * - `string`: text values\n * - `number`: numeric values\n * - `list`: array of strings (can be specified multiple times)\n *\n * @example\n * ```typescript\n * class MyCommand extends Command {\n * @flag.string({ name: \"name\", description: \"User name\" })\n * name?: string;\n *\n * @flag.list({ name: \"tag\", aliases: [\"t\"], description: \"Tags\" })\n * tags!: string[];\n * }\n * ```\n *\n * Usage:\n * - Single flag: `--name=value` or `--name value`\n * - List flag: `--tag=one --tag=two --tag=three`\n * - Aliases: `-t one -t two`\n */\nconst flagDecorator = <T extends FlagType>(options: FlagOptions<T>) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const primaryFlagName = options.name || propertyKey;\n const parsedFlags = parseCliArgsAndFlags().flags;\n const flagAliases = options.aliases || [];\n const allFlagVariants = [primaryFlagName, ...flagAliases];\n\n // Find the actual flag value by checking all possible flag names\n let resolvedFlagValue = options.defaultValue;\n\n for (const flagVariant of allFlagVariants) {\n // Check both with and without prefixes\n const possibleNames = [\n flagVariant,\n `-${flagVariant}`,\n `--${flagVariant}`,\n ];\n\n for (const flagName of possibleNames) {\n if (flagName in parsedFlags) {\n const rawValue = parsedFlags[flagName];\n\n if (options.type === \"list\") {\n // For list type, ensure we have an array\n const arrayValue = Array.isArray(rawValue) ? rawValue : [rawValue];\n resolvedFlagValue = arrayValue.map((val) => {\n const stringVal = String(val);\n return options.parse ? options.parse(stringVal) : stringVal;\n }) as InferFlagType<T>;\n } else {\n resolvedFlagValue = rawValue as InferFlagType<T>;\n\n if (options.type === \"boolean\") {\n resolvedFlagValue = Boolean(\n resolvedFlagValue,\n ) as InferFlagType<T>;\n } else if (options.type === \"number\") {\n resolvedFlagValue = Number(resolvedFlagValue) as InferFlagType<T>;\n }\n\n if (options.parse) {\n resolvedFlagValue = options.parse(resolvedFlagValue);\n }\n }\n\n break;\n }\n }\n\n if (resolvedFlagValue !== options.defaultValue) {\n break;\n }\n }\n\n MetadataStore.set(target, propertyKey, {\n type: \"flag\",\n name: primaryFlagName,\n aliases: flagAliases || [],\n description: options.description,\n });\n\n if (options.required) {\n const isValueMissing =\n options.type === \"list\"\n ? !resolvedFlagValue ||\n (Array.isArray(resolvedFlagValue) && resolvedFlagValue.length === 0)\n : !resolvedFlagValue;\n\n if (isValueMissing) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"flag\",\n name: primaryFlagName,\n message: \"Required flag not provided\",\n },\n ]);\n return;\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n value: resolvedFlagValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n\n/** Shorthand decorator for boolean flags */\nflagDecorator.boolean = (options: Omit<FlagOptions<\"boolean\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"boolean\" });\n};\n\n/** Shorthand decorator for string flags */\nflagDecorator.string = (options: Omit<FlagOptions<\"string\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"string\" });\n};\n\n/** Shorthand decorator for number flags */\nflagDecorator.number = (options: Omit<FlagOptions<\"number\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"number\" });\n};\n\n/** Shorthand decorator for list flags (can be specified multiple times) */\nflagDecorator.list = (options: Omit<FlagOptions<\"list\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"list\" });\n};\n\nexport const flag = flagDecorator;\n","// Both Deno and Bun are compatible with path api\nimport path from \"node:path\";\nimport { runtime } from \"./runtime.js\";\n\nclass NativePath {\n basename(inputPath: string): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.basename(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n join(...paths: string[]): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.join(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n extName(inputPath: string): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.extname(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n resolve(...paths: string[]): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.resolve(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativePath = new NativePath();\n","import type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\nimport type { Params, Route } from \"./router_type.js\";\n\nclass Node {\n staticChildren: Map<string, Node>;\n paramChild: { node: Node; name: string } | null;\n wildcardChild: Node | null;\n middleware: ServerRouteMiddleware[] | null;\n handler: ((req: Request, res: Response) => void) | null;\n\n constructor() {\n this.staticChildren = new Map();\n this.paramChild = null;\n this.wildcardChild = null;\n this.middleware = null;\n this.handler = null;\n }\n}\n\n/**\n * Singleton that handles the routing of requests to the appropriate handler(s).\n */\nexport class Router {\n private trees: Map<string, Node>;\n private routes: Route[];\n private middlewares: ServerRouteMiddleware[];\n private basePath: string;\n\n /**\n * Create a new router with an optional base path and default middlewares.\n * Base path is normalized so it never produces duplicate slashes and never ends with a trailing slash (except root).\n */\n constructor(\n basePath: string = \"\",\n middlewares: ServerRouteMiddleware[] = [],\n ) {\n this.trees = new Map();\n this.routes = [];\n this.middlewares = middlewares;\n this.basePath = this.normalizeBasePath(basePath);\n }\n\n /** Returns a shallow copy of all registered routes. */\n getRoutes(): Route[] {\n return this.routes.slice();\n }\n\n /**\n * Add or update a route\n * @internal\n */\n addOrUpdate(\n method: HttpMethod,\n path: string,\n middleware: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void {\n method = method.toUpperCase() as HttpMethod;\n\n // ensure root exists\n let root = this.trees.get(method);\n if (!root) {\n root = new Node();\n this.trees.set(method, root);\n }\n\n // strip query string and split into segments (handling root path correctly)\n const clean = path.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n\n let node = root;\n for (const seg of segments) {\n if (seg === \"*\") {\n if (!node.wildcardChild) {\n node.wildcardChild = new Node();\n }\n node = node.wildcardChild;\n break;\n }\n\n if (seg.startsWith(\":\")) {\n const name = seg.slice(1);\n if (!node.paramChild) {\n node.paramChild = { node: new Node(), name };\n }\n node = node.paramChild.node;\n continue;\n }\n\n // static segment\n if (!node.staticChildren.has(seg)) {\n node.staticChildren.set(seg, new Node());\n }\n node = node.staticChildren.get(seg)!;\n }\n\n // assign middleware & handler\n node.middleware = middleware;\n node.handler = handler;\n\n // upsert in registry\n const idx = this.routes.findIndex(\n (r) => r.method === method && r.path === path,\n );\n if (idx !== -1) {\n this.routes[idx].middleware = middleware;\n this.routes[idx].handler = handler;\n return;\n }\n\n this.routes.push({ method, path, middleware, handler, swaggerOptions });\n }\n\n /**\n * Find the matching route for the given HTTP method and path.\n * Returns the resolved middleware chain, handler, and extracted params; or null if not found.\n */\n find(\n method: string,\n rawPath: string,\n ): {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n } | null {\n method = method.toUpperCase();\n const root = this.trees.get(method);\n if (!root) {\n return null;\n }\n\n const clean = rawPath.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n const params: Params = {};\n\n let node = root;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n\n if (node.staticChildren.has(seg)) {\n node = node.staticChildren.get(seg)!;\n continue;\n }\n\n if (node.paramChild) {\n params[node.paramChild.name] = seg;\n node = node.paramChild.node;\n continue;\n }\n\n if (node.wildcardChild) {\n params[\"*\"] = segments.slice(i).join(\"/\");\n node = node.wildcardChild;\n break;\n }\n\n return null;\n }\n\n if (!node.handler || !node.middleware) {\n return null;\n }\n\n return { middleware: node.middleware, handler: node.handler, params };\n }\n\n /**\n * Register a GET route under this router's base path.\n */\n get(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"GET\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a POST route under this router's base path.\n */\n post(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"POST\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PATCH route under this router's base path.\n */\n patch(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PATCH\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PUT route under this router's base path.\n */\n put(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PUT\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a DELETE route under this router's base path.\n */\n delete(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"DELETE\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an OPTIONS route under this router's base path.\n */\n options(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"OPTIONS\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an HEAD route under this router's base path.\n */\n head(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"HEAD\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Create a grouped router that shares a base path and middlewares.\n * The callback receives a child router where routes are defined; routes\n * are then merged back into the parent with the composed base path and middlewares.\n */\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: Router) => void,\n ): void;\n group(path: string, cb: (router: Router) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: Router) => void),\n maybeCb?: (router: Router) => void,\n ): void {\n const groupMiddlewares = Array.isArray(middlewareOrCb)\n ? middlewareOrCb\n : typeof middlewareOrCb === \"function\"\n ? []\n : middlewareOrCb\n ? [middlewareOrCb]\n : [];\n const cb = (\n Array.isArray(middlewareOrCb)\n ? maybeCb\n : typeof middlewareOrCb === \"function\"\n ? (middlewareOrCb as (router: Router) => void)\n : undefined\n ) as ((router: Router) => void) | undefined;\n\n const childBase = this.joinPath(path);\n const child = new Router(childBase, [\n ...this.middlewares,\n ...groupMiddlewares,\n ]);\n cb?.(child);\n for (const r of child.getRoutes()) {\n this.addOrUpdate(\n r.method as HttpMethod,\n r.path,\n r.middleware,\n r.handler,\n r.swaggerOptions,\n );\n }\n }\n\n /**\n * Apply global middlewares to all routes\n * @param middlewares - The middlewares to apply\n * @internal\n */\n applyGlobalMiddlewaresToAllRoutes(\n middlewares: ServerRouteMiddleware[],\n ): void {\n for (const route of this.routes) {\n this.addOrUpdate(\n route.method as HttpMethod,\n route.path,\n [...middlewares, ...(route.middleware || [])],\n route.handler,\n );\n }\n }\n\n private normalizeBasePath(path: string): string {\n if (!path) {\n return \"\";\n }\n\n let normalized = path.replace(/\\s+/g, \"\");\n normalized = normalized.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n\n if (normalized.length > 1) {\n normalized = normalized.replace(/\\/+$/g, \"\");\n }\n\n return normalized;\n }\n\n private joinPath(path: string): string {\n const parts = [this.basePath, path].filter(\n (v) => typeof v === \"string\" && v.length > 0,\n ) as string[];\n let joined = parts.join(\"/\");\n joined = joined.replace(/\\/+/g, \"/\");\n if (!joined.startsWith(\"/\")) {\n joined = \"/\" + joined;\n }\n if (joined.length > 1) {\n joined = joined.replace(/\\/+$/g, \"\");\n }\n return joined;\n }\n}\n\n/** Main singleton router instance */\nexport const router = new Router();\n","import { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type {\n HttpMethod,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { PolicyMetadata } from \"../../server/policy/policy_types.js\";\nimport { router } from \"../../server/router/router.js\";\n\n/**\n * Creates a middleware that enforces policies before allowing the request to proceed.\n * Returns 401 Unauthorized if any policy check fails.\n */\nconst createPolicyMiddleware = (\n policies: PolicyMetadata[],\n): ServerRouteMiddleware => {\n return async (req, res, next) => {\n for (const policy of policies) {\n const allowed = await policy.manager.canAccess(\n policy.scope,\n policy.handler,\n req,\n );\n if (!allowed) {\n return res.unauthorized({ error: \"Unauthorized\" });\n }\n }\n return next();\n };\n};\n\n/**\n * Decorator to mark a class as a controller, routes defined in the controller will be registered at import time when calling the `listen` method.\n * You can customize the path pattern for controller imports in the server options `controllerPatterns`\n * @param path - The path pattern for the controller.\n * @param swaggerOptions - The swagger options for the controller that will be applied to all routes defined in the controller. Controller options will override route options.\n * @swagger If swagger is enabled, the default service name for all routes defined in the controller will be the controller name.\n * @swagger For naming commodity, the default service name will remove the \"Controller\" suffix if it exists. e.g. \"UserController\" -> \"User\"\n */\nexport const controller = (\n path?: string,\n swaggerOptions?: SwaggerRouteOptions,\n) => {\n return (target: any) => {\n const classMeta = MetadataStore.get(target.prototype, \"__class__\");\n const classMiddlewares = classMeta?.middlewares || [];\n const classPolicies: PolicyMetadata[] = classMeta?.policies || [];\n const metaMap = MetadataStore.getAll(target.prototype);\n const instance = new target();\n\n for (const [propertyKey, meta] of metaMap.entries()) {\n if (!meta.route) {\n continue;\n }\n\n const handler = target.prototype[propertyKey].bind(instance);\n const fullPath = path\n ? nativePath.join(path, meta.route.path)\n : meta.route.path;\n\n // Combine class-level and method-level policies\n const allPolicies: PolicyMetadata[] = [\n ...classPolicies,\n ...(meta.policies || []),\n ];\n\n // Create policy middleware if there are policies to enforce\n const policyMiddleware =\n allPolicies.length > 0 ? [createPolicyMiddleware(allPolicies)] : [];\n\n // Prepend class-level middlewares, then policy middleware, then route-level middlewares\n const allMiddlewares = [\n ...classMiddlewares,\n ...policyMiddleware,\n ...(meta.middlewares || []),\n ];\n router.addOrUpdate(\n meta.route.method as HttpMethod,\n fullPath,\n allMiddlewares,\n handler,\n {\n // default service name\n service: target.name.replace(/Controller$/, \"\"),\n // controller options\n ...swaggerOptions,\n // route options\n ...meta.documentation,\n },\n );\n }\n\n MetadataStore.clear(target.prototype);\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype DelHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a DELETE request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { del, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @del(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const del = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends DelHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"DELETE\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"DELETE\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype GetHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a GET request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { get, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @get(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const get = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends GetHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"GET\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"GET\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype PatchHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a PATCH request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { patch, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @patch(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const patch = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends PatchHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"PATCH\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"PATCH\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype PostHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a POST request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { post, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @post(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const post = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends PostHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"POST\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"POST\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype PutHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a PUT request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { put, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @put(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n */\nexport const put = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends PutHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"PUT\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"PUT\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\n\n/**\n * Decorator to mark a middleware for a route or a controller class\n */\nexport const middleware = (\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n) => {\n return (\n target: any,\n propertyKey?: string,\n descriptor?: PropertyDescriptor,\n ) => {\n // Class decorator usage\n if (typeof propertyKey === \"undefined\") {\n let meta = MetadataStore.get(target.prototype, \"__class__\");\n if (!meta) {\n meta = { middlewares: [] };\n }\n\n if (!meta.middlewares) {\n meta.middlewares = [];\n }\n\n if (!middleware) {\n throw new Error(\n `Middleware ${String(\n middleware,\n )} not found, are you sure you defined it before using it?`,\n );\n }\n\n if (!Array.isArray(middleware)) {\n middleware = [middleware];\n }\n\n meta.middlewares.push(...middleware);\n MetadataStore.set(target.prototype, \"__class__\", meta);\n return target;\n }\n\n // Method decorator usage\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [] };\n }\n\n if (!meta.middlewares) {\n meta.middlewares = [];\n }\n\n if (!Array.isArray(middleware)) {\n middleware = [middleware];\n }\n\n meta.middlewares.push(...middleware);\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { Ajv } from \"ajv\";\n\n/**\n * Global state for the AJV instance used for JSON Schema validation.\n *\n * ## Custom AJV Instance\n *\n * You can provide your own AJV instance with custom configuration:\n *\n * ```typescript\n * import { Ajv } from 'ajv';\n * import { AjvStateManager } from 'balda';\n *\n * const customAjv = new Ajv({\n * validateSchema: false, // Required - must be false\n * strict: false, // Required - must be false\n * allErrors: true, // Optional - your custom config\n * // ... other custom options\n * });\n *\n * // Add custom formats, keywords, etc.\n * customAjv.addFormat('custom-format', /regex/);\n *\n * // Set as global instance\n * AjvStateManager.setGlobalInstance(customAjv);\n * ```\n *\n * **IMPORTANT:** The following options are required and must not be changed:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n *\n * Changing these values will cause validation errors and break Zod schema support.\n */\nexport class AjvStateManager {\n static ajv: Ajv = new Ajv({\n validateSchema: false, // Required - do not change\n strict: false, // Required - do not change\n });\n\n static {\n this.ajv.addFormat(\n \"email\",\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n );\n\n this.ajv.addFormat(\n \"url\",\n /^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/,\n );\n\n this.ajv.addFormat(\"date\", /^\\d{4}-\\d{2}-\\d{2}$/);\n\n this.ajv.addFormat(\n \"datetime\",\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?(?:Z|[+-]\\d{2}:\\d{2})$/,\n );\n\n this.ajv.addFormat(\"time\", /^\\d{2}:\\d{2}:\\d{2}$/);\n this.ajv.addFormat(\"binary\", /^(?:[0-9a-fA-F]{2})+$/);\n this.ajv.addFormat(\n \"base64\",\n /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n );\n this.ajv.addFormat(\n \"uuid\",\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n );\n }\n\n /**\n * Sets the global AJV instance to use for JSON Schema validation.\n * @param ajv - The AJV instance to set as global.\n * @warning The AJV instance must be configured with the following options:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n * Changing these values will cause validation errors and break Zod schema support.\n */\n static setGlobalInstance(ajv: Ajv) {\n this.ajv = ajv;\n this.ajv.opts.strict = false;\n this.ajv.opts.validateSchema = false;\n }\n}\n","import type { AjvCompileReturnType } from \"./ajv_types.js\";\n\n/**\n * Maps globally the controller schemas to the compiled AJV schemas in order to cache them.\n * Uses Symbol (for object schema references) or string (for primitive schemas) as cache keys.\n */\nexport const openapiSchemaMap = new Map<\n symbol | string,\n AjvCompileReturnType\n>();\n","import { ValidationError } from \"ajv\";\nimport { AjvCompileReturnType } from \"../ajv/ajv_types.js\";\n\n/**\n * Validates data against an AJV schema synchronously.\n *\n * @param inputSchema - The compiled AJV validator function\n * @param data - The data to validate\n * @param safe - If true, returns undefined instead of throwing on validation failure\n * @returns The validated data\n * @throws Error if validation fails and safe is false\n */\nexport const validateSchema = (\n inputSchema: AjvCompileReturnType,\n data: any,\n safe: boolean = false,\n): any => {\n const isValid = inputSchema(data);\n if (!isValid) {\n if (safe) {\n return data;\n }\n\n throw new ValidationError(inputSchema.errors || []);\n }\n\n return data;\n};\n","/**\n * Manages lazy loading of the Zod library at runtime.\n * Zod is a peer dependency and only loaded if Zod schemas are used.\n */\nimport type { ZodType } from \"zod\";\n\nexport class ZodLoader {\n private static zodModule: typeof import(\"zod\") | null = null;\n private static loadPromise: Promise<typeof import(\"zod\")> | null = null;\n\n /**\n * Lazily loads the Zod library at runtime.\n * @throws Error if Zod is not installed\n */\n static async load(): Promise<typeof import(\"zod\")> {\n if (this.zodModule) {\n return this.zodModule;\n }\n\n if (this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = (async () => {\n try {\n this.zodModule = await import(\"zod\");\n return this.zodModule;\n } catch (error) {\n throw new Error(\n \"Zod is not installed. Install it with: npm install zod\\n\" +\n \"Zod is a peer dependency required when using Zod schemas for validation.\",\n );\n }\n })();\n\n return this.loadPromise;\n }\n\n /**\n * Gets the loaded Zod module synchronously.\n * @throws Error if Zod has not been loaded yet\n */\n static get(): typeof import(\"zod\") {\n if (!this.zodModule) {\n throw new Error(\n \"Zod has not been loaded yet. Call ZodLoader.load() first.\",\n );\n }\n return this.zodModule;\n }\n\n /**\n * Checks if a value is a Zod schema\n */\n static isZodSchema(value: any): value is ZodType {\n const isZod =\n typeof value === \"object\" &&\n value !== null &&\n \"_def\" in value &&\n typeof value.parse === \"function\" &&\n typeof value.safeParse === \"function\";\n\n if (isZod && !(\"toJSONSchema\" in value)) {\n throw new Error(\n \"Zod4 is required with the toJSONSchema() method in order to work. Install it with: npm install zod with minimum version 4.0.0\",\n );\n }\n\n return isZod;\n }\n}\n","import type { ZodType } from \"zod\";\nimport { AjvStateManager } from \"../../ajv/ajv.js\";\nimport type { AjvCompileParams } from \"../../ajv/ajv_types.js\";\nimport { openapiSchemaMap } from \"../../ajv/openapi_schema_map.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { validateSchema } from \"../../validator/validator.js\";\nimport { ZodLoader } from \"../../validator/zod_loader.js\";\nimport type { SerializeOptions } from \"./serialize_types.js\";\n\nconst SERIALIZE_WRAPPED = Symbol(\"serializeWrapped\");\nconst SERIALIZE_METADATA = Symbol(\"serializeMetadata\");\n\n/**\n * WeakMap to cache schema objects by reference in serialize decorator.\n * Uses Symbol for unique cache keys to prevent any potential counter overflow in long-running servers.\n */\nconst serializeSchemaRefCache = new WeakMap<object, symbol>();\n\nexport const serialize = <T extends ZodType | AjvCompileParams[0]>(\n schema: T,\n options?: SerializeOptions,\n) => {\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n let meta = MetadataStore.get(target, propertyKey) || {\n middlewares: [],\n route: {},\n };\n if (!meta.documentation) {\n meta.documentation = {};\n }\n if (!meta.documentation.responses) {\n meta.documentation.responses = {};\n }\n if (!meta.serializeOptions) {\n meta.serializeOptions = {};\n }\n\n const status = Number(options?.status ?? 200);\n meta.documentation.responses[status] = schema;\n meta.serializeOptions[status] = options?.safe ?? true;\n MetadataStore.set(target, propertyKey, meta);\n\n if (!descriptor.value[SERIALIZE_METADATA]) {\n descriptor.value[SERIALIZE_METADATA] = {};\n }\n\n descriptor.value[SERIALIZE_METADATA][status] = {\n name: propertyKey,\n schema,\n safe: options?.safe ?? true,\n };\n\n if (!descriptor.value[SERIALIZE_WRAPPED]) {\n const originalMethod = descriptor.value;\n const wrappedFunction = async function (this: any, ...args: any[]) {\n const res = args[1] as Response;\n await originalMethod.apply(this, args);\n const actualStatus = res.responseStatus;\n\n const serializeMetadata = wrappedFunction[SERIALIZE_METADATA];\n const schema = serializeMetadata?.[actualStatus]?.schema;\n const safe = serializeMetadata?.[actualStatus]?.safe ?? true;\n\n if (schema && !safe) {\n const body = res.getBody();\n try {\n let cacheKey: string;\n\n // Use WeakMap cache for schema object references\n if (ZodLoader.isZodSchema(schema)) {\n let refKey = serializeSchemaRefCache.get(schema);\n if (!refKey) {\n refKey = Symbol(\"serialize_zod_schema\");\n serializeSchemaRefCache.set(schema, refKey);\n }\n\n let compiledSchema = openapiSchemaMap.get(refKey);\n if (!compiledSchema) {\n const jsonSchema = schema.toJSONSchema();\n compiledSchema = AjvStateManager.ajv.compile(jsonSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n } else if (typeof schema === \"object\" && schema !== null) {\n // Plain JSON schema object\n let refKey = serializeSchemaRefCache.get(schema);\n if (!refKey) {\n refKey = Symbol(\"serialize_json_schema\");\n serializeSchemaRefCache.set(schema, refKey);\n }\n\n let compiledSchema = openapiSchemaMap.get(refKey);\n if (!compiledSchema) {\n compiledSchema = AjvStateManager.ajv.compile(\n schema as AjvCompileParams[0],\n );\n openapiSchemaMap.set(refKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n } else {\n // Fallback to JSON.stringify for primitives or edge cases\n cacheKey = JSON.stringify(schema);\n let compiledSchema = openapiSchemaMap.get(cacheKey);\n if (!compiledSchema) {\n compiledSchema = AjvStateManager.ajv.compile(\n schema as AjvCompileParams[0],\n );\n openapiSchemaMap.set(cacheKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n }\n } catch (error) {\n const zod = await ZodLoader.load();\n if (error instanceof zod.ZodError) {\n res.internalServerError({\n received: body,\n schema,\n error,\n });\n return;\n }\n\n throw error;\n }\n }\n };\n\n wrappedFunction[SERIALIZE_WRAPPED] = true;\n wrappedFunction[SERIALIZE_METADATA] = originalMethod[SERIALIZE_METADATA];\n descriptor.value = wrappedFunction;\n }\n };\n};\n","import type { ZodType } from \"zod\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { ZodLoader } from \"../../validator/zod_loader.js\";\nimport type {\n CustomValidationError,\n ValidationOptions,\n} from \"./validate_types.js\";\nimport { AjvCompileParams } from \"../../ajv/ajv_types.js\";\n\n/**\n * Decorator to validate request data using Zod schemas.\n * Each validate method injects a new parameter to the handler function with the validated data. Arguments are injected in the order of the validate methods.\n * Using this decorator will also update the Swagger documentation with the validated schema (except for the .all schema since there is no way to if using query strings or body).\n * @param options - Validation options including body, query, or all schemas\n * @warning If validation fails, a 400 error will be returned with the validation errors to the client.\n * @warning Only synchronous Zod schemas are supported. Async refinements or transforms will throw an error.\n * @example\n * ```ts\n * import { validate } from \"./validate.js\";\n * import { controller, post } from \"../handlers/post.js\";\n * import { Request } from \"../../server/http/request.js\";\n * import { Response } from \"../../server/http/response.js\";\n * import { z } from \"zod\";\n *\n * const PayloadSchema = z.object({\n * name: z.string(),\n * email: z.string().email(),\n * });\n *\n * @controller(\"/users\")\n * export class UserController {\n * @post(\"/\")\n * @validate.body(PayloadSchema) // This will also update the Swagger documentation with the validated schemas and will override the existing schemas.\n * async createUser(req: Request, res: Response, payload: z.infer<typeof PayloadSchema>) {\n * // payload is now validated and typed\n * const { name, email } = payload;\n * }\n * }\n * ```\n */\nconst validateDecorator = (\n options: ValidationOptions & { customError?: CustomValidationError },\n) => {\n // Schemas will be compiled lazily on first request via Request.compileAndValidate\n // This avoids compilation errors at decorator evaluation time\n\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: {} };\n }\n\n if (!meta.documentation) {\n meta.documentation = {};\n }\n\n if (options.body) {\n meta.documentation.requestBody = options.body;\n }\n\n if (options.query) {\n meta.documentation.query = options.query;\n }\n\n if (options.all) {\n meta.documentation.requestBody = options.body;\n meta.documentation.query = options.query;\n }\n\n MetadataStore.set(target, propertyKey, meta);\n\n descriptor.value = async function (...args: any[]) {\n const req = args[0] as Request;\n const res = args[1] as Response;\n\n try {\n let validatedBody: any = undefined;\n let validatedQuery: any = undefined;\n let validatedAll: any = undefined;\n\n if (options.body) {\n validatedBody = req.validate(options.body, options.safe);\n }\n\n if (options.query) {\n validatedQuery = req.validateQuery(options.query, options.safe);\n }\n\n if (options.all) {\n validatedAll = req.validateAll(options.all, options.safe);\n }\n\n const newArgs = [...args];\n if (validatedBody !== undefined) {\n newArgs.push(validatedBody);\n }\n if (validatedQuery !== undefined) {\n newArgs.push(validatedQuery);\n }\n if (validatedAll !== undefined) {\n newArgs.push(validatedAll);\n }\n\n return originalMethod.apply(this, newArgs);\n } catch (error) {\n const zod = await ZodLoader.load();\n const isZodError = error instanceof zod.ZodError;\n\n if (!isZodError) {\n throw error;\n }\n\n if (options.customError) {\n return res.status(options.customError.status || 400).json({\n received: req.body,\n schema: options.body,\n error,\n });\n }\n\n return res.badRequest(error);\n }\n };\n\n return descriptor;\n };\n};\n\n/**\n * Decorator to validate the query parameters against a Zod schema or OpenAPI schema\n * @param schema - The Zod schema or OpenAPI schema to validate the query parameters against\n * @returns The decorator function\n */\nvalidateDecorator.query = (\n schema: ZodType | AjvCompileParams[0],\n customError?: CustomValidationError,\n) => {\n return validateDecorator({ query: schema, customError });\n};\n\n/**\n * Decorator to validate the request body against a Zod schema\n * @param schema - The Zod schema to validate the request body against\n * @returns The decorator function\n */\nvalidateDecorator.body = (\n schema: ZodType | AjvCompileParams[0],\n customError?: CustomValidationError,\n) => {\n return validateDecorator({ body: schema, customError });\n};\n\n/**\n * Decorator to validate both the request body and query parameters against a Zod schema\n * @param schema - The Zod schema to validate both the request body and query parameters against\n * @returns The decorator function\n */\nvalidateDecorator.all = (\n schema: ZodType | AjvCompileParams[0],\n customError?: CustomValidationError,\n) => {\n return validateDecorator({ all: schema, customError });\n};\n\nexport const validate = validateDecorator;\n","import { logger } from \"../logger/logger.js\";\n\n/**\n * Base class for cron jobs with logger instance\n * @example\n * export default class MyCron extends BaseCron {\n * @cron(\"* * * * *\")\n * handle() {\n * this.logger.info(\"Running cron job\");\n * }\n * }\n */\nexport class BaseCron {\n protected readonly logger = logger.child({ scope: this.constructor.name });\n}\n","import type { Job, Queue } from \"bullmq\";\nimport { SyncOrAsync } from \"../../../type_util.js\";\n\n/**\n * Options for BullMQ configuration\n * @param options - The options for BullMQ\n * @param errorHandler - Custom error handler that will be triggered when a job fails, for logging or debug purposes\n */\nexport type BullMQConfigurationOptions = ConstructorParameters<\n typeof Queue\n>[1] & { errorHandler?: (job: Job, error: Error) => SyncOrAsync };\n\nexport class BullMQConfiguration {\n static options: BullMQConfigurationOptions = {\n connection: {},\n };\n}\n\n/**\n * Define globally custom BullMQ configuration\n * @param options - The BullMQ configuration options\n */\nexport const defineBullMQConfiguration = (\n options: BullMQConfigurationOptions,\n): void => {\n BullMQConfiguration.options = options ?? {\n connection: {},\n };\n};\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class ClientNotFoundError extends BaldaError {\n constructor(...libraries: string[]) {\n super(\n `Library not installed: ${libraries.join(\", \")}, try run npm install ${libraries.join(\" \")}`,\n );\n }\n}\n","class NativeCrypto {\n randomUUID(): string {\n return crypto.randomUUID();\n }\n}\n\nexport const nativeCrypto = new NativeCrypto();\n","import type { Job, Queue, Worker } from \"bullmq\";\nimport type {\n PublishOptions,\n PubSub,\n QueueTopic,\n QueueTopicKey,\n} from \"../../queue_types.js\";\nimport { BullMQConfiguration } from \"./bullmq_configuration.js\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { nativeCrypto } from \"../../../runtime/native_crypto.js\";\n\nexport class BullMQPubSub implements PubSub<\"bullmq\"> {\n private queues: Map<string, Queue> = new Map();\n private workers: Map<string, Worker> = new Map();\n declare private bullmqClient: typeof import(\"bullmq\");\n\n async publish<T extends QueueTopicKey>(\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<\"bullmq\">,\n ): Promise<{ id: string }> {\n const queue = await this.getQueue(topic);\n const jobId = nativeCrypto.randomUUID();\n await queue.add(topic, payload, {\n jobId: jobId,\n ...BullMQConfiguration.options?.defaultJobOptions,\n ...options,\n });\n\n return { id: jobId };\n }\n\n async subscribe<T extends QueueTopicKey>(\n topic: T,\n handler: (payload: QueueTopic[T]) => Promise<void>,\n ) {\n if (this.workers.has(topic)) {\n throw new Error(`[BullMQ] Already subscribed to topic \"${topic}\"`);\n }\n\n const { errorHandler, ...rest } = BullMQConfiguration.options ?? {};\n const bullmqClient = await this.getBullMQClient();\n const worker = new bullmqClient.Worker(\n topic,\n async (job: Job) => {\n try {\n await handler(job.data);\n } catch (error) {\n (await errorHandler?.(job, error as Error)) ?? Promise.reject(error);\n }\n },\n {\n ...rest,\n },\n );\n\n this.workers.set(topic, worker);\n }\n\n private async getQueue(topic: string): Promise<Queue> {\n if (!this.queues.has(topic)) {\n const bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n\n const queue = new bullmqClient.Queue(topic, {\n ...(BullMQConfiguration.options || { connection: {} }),\n });\n\n this.queues.set(topic, queue);\n }\n\n return this.queues.get(topic)!;\n }\n\n private async getBullMQClient(): Promise<typeof import(\"bullmq\")> {\n if (!this.bullmqClient) {\n this.bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n }\n\n return this.bullmqClient;\n }\n}\n","import type { SyncOrAsync } from \"../../../type_util.js\";\n\nexport type PGBossConfigurationOptions = {\n connectionString?: string;\n boss?: unknown;\n errorHandler?: (error: Error) => SyncOrAsync;\n};\n\nexport class PGBossConfiguration {\n static options: PGBossConfigurationOptions = {};\n}\n\nexport const definePGBossConfiguration = (\n options: PGBossConfigurationOptions,\n): void => {\n PGBossConfiguration.options = options ?? {};\n};\n","import type { PgBoss } from \"pg-boss\";\nimport type { Job } from \"pg-boss\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { PGBossConfiguration } from \"./pgboss_configuration.js\";\nimport type {\n PGBossSendOptions,\n PublishOptions,\n PubSub,\n QueueTopic,\n QueueTopicKey,\n} from \"../../queue_types.js\";\n\nexport class PGBossPubSub implements PubSub<\"pgboss\"> {\n declare private boss: PgBoss;\n private createdQueues: Set<string> = new Set();\n\n async publish<T extends QueueTopicKey>(\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<\"pgboss\">,\n ): Promise<{ id: string }> {\n const boss = await this.getBoss();\n await this.ensureQueue(String(topic));\n const sendOptions = (options || {}) as PGBossSendOptions;\n const id = await boss.send(String(topic), payload, sendOptions);\n return { id: String(id ?? \"\") };\n }\n\n async subscribe<T extends QueueTopicKey>(\n topic: T,\n handler: (payload: QueueTopic[T]) => Promise<void>,\n ): Promise<void> {\n const boss = await this.getBoss();\n await this.ensureQueue(String(topic));\n const options = PGBossConfiguration.options;\n if (options.errorHandler) {\n boss.on(\"error\", options.errorHandler);\n }\n\n await boss.work(\n String(topic),\n async (job: Job<unknown> | Job<unknown>[]) => {\n const jobs = Array.isArray(job) ? job : [job];\n for (const job of jobs) {\n await handler(job.data as QueueTopic[T]);\n }\n },\n );\n }\n\n private async getBoss(): Promise<PgBoss> {\n if (this.boss) {\n return this.boss;\n }\n\n const mod = await import(\"pg-boss\").catch(() => {\n throw new ClientNotFoundError(\"pg-boss\", \"pg\");\n });\n\n type PGBossCtor = new (config?: unknown) => PgBoss;\n const maybeDefault = (mod.PgBoss as { default?: PGBossCtor }).default;\n const Ctor: PGBossCtor =\n maybeDefault ?? (mod.PgBoss as unknown as PGBossCtor);\n\n const { connectionString, boss } = PGBossConfiguration.options;\n const arg = connectionString ?? boss;\n const instance = new Ctor(arg);\n\n if (PGBossConfiguration.options?.errorHandler) {\n instance.on(\"error\", PGBossConfiguration.options.errorHandler);\n }\n\n await instance.start();\n this.boss = instance;\n return this.boss;\n }\n\n private async ensureQueue(topic: string): Promise<void> {\n if (this.createdQueues.has(topic)) {\n return;\n }\n\n const pgBoss = await this.getBoss();\n if (typeof pgBoss.createQueue === \"function\") {\n await pgBoss.createQueue(topic);\n }\n\n this.createdQueues.add(topic);\n }\n}\n","import type { SQSClientConfig } from \"@aws-sdk/client-sqs\";\nimport type { QueueTopicKey } from \"../../queue_types.js\";\nimport type { SyncOrAsync } from \"../../../type_util.js\";\n\nexport type SQSConfigurationOptions = {\n client?: SQSClientConfig;\n consumer?: {\n batchSize?: number;\n visibilityTimeout?: number;\n waitTimeSeconds?: number;\n queueUrlMap: Record<QueueTopicKey, string>;\n };\n errorHandler?: (error: Error) => SyncOrAsync;\n};\n\nexport class SQSConfiguration {\n static options: SQSConfigurationOptions = {};\n}\n\nexport const defineSQSConfiguration = (\n options: SQSConfigurationOptions,\n): void => {\n SQSConfiguration.options = options ?? {};\n};\n","import type { Message, SQSClient, SQSClientConfig } from \"@aws-sdk/client-sqs\";\nimport type { Consumer, ConsumerOptions } from \"sqs-consumer\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { SQSConfiguration } from \"./sqs_configuration.js\";\nimport type {\n PublishOptions,\n PubSub,\n QueueTopic,\n QueueTopicKey,\n SQSPublishOptions,\n} from \"../../queue_types.js\";\n\nexport class SQSPubSub implements PubSub<\"sqs\"> {\n private consumers: Map<string, Consumer> = new Map();\n private client?: SQSClient;\n declare private sqsLib: typeof import(\"@aws-sdk/client-sqs\");\n declare private sqsConsumerLib: typeof import(\"sqs-consumer\");\n\n async publish<T extends QueueTopicKey>(\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<\"sqs\">,\n ): Promise<{ id: string }> {\n const { ...rest } = options ?? {};\n\n const sqs = await this.getClient();\n const { SendMessageCommand } = await this.getSqsLib();\n const queueUrl = await this.resolveQueueUrl(String(topic));\n if (!queueUrl) {\n throw new Error(\n `[SQS] Queue url not configured for topic \"${String(topic)}\"`,\n );\n }\n\n const command = new SendMessageCommand({\n MessageBody: JSON.stringify(payload),\n MessageAttributes: {\n topic: { DataType: \"String\", StringValue: String(topic) },\n },\n ...(rest as SQSPublishOptions),\n QueueUrl: queueUrl,\n });\n\n const response = await sqs.send(command);\n return { id: response.MessageId ?? \"\" };\n }\n\n async subscribe<T extends QueueTopicKey>(\n topic: T,\n handler: (payload: QueueTopic[T]) => Promise<void>,\n ): Promise<void> {\n if (this.consumers.has(String(topic))) {\n throw new Error(`[SQS] Already subscribed to topic \"${String(topic)}\"`);\n }\n\n const options = SQSConfiguration.options;\n const consumerModule = await this.getSqsConsumerLib();\n const consumerOptions: ConsumerOptions & { queueUrl: string } = {\n ...(options.consumer || {}),\n sqs: await this.getClient(),\n queueUrl: await this.resolveQueueUrl(String(topic)),\n handleMessage: async (message: Message) => {\n const payload = JSON.parse(message.Body || \"{}\");\n await handler(payload);\n },\n } as any;\n\n const consumer = consumerModule.Consumer.create(consumerOptions);\n const errorHandler = options.errorHandler;\n if (errorHandler) {\n consumer.on(\"error\", errorHandler);\n consumer.on(\"processing_error\", errorHandler);\n }\n\n consumer.start();\n this.consumers.set(String(topic), consumer);\n }\n\n private async getClient(): Promise<SQSClient> {\n if (this.client) {\n return this.client;\n }\n\n const { SQSClient } = await this.getSqsLib();\n const config: SQSClientConfig | undefined = SQSConfiguration.options.client;\n this.client = new SQSClient(config ?? {});\n return this.client;\n }\n\n private async getSqsLib(): Promise<typeof import(\"@aws-sdk/client-sqs\")> {\n if (!this.sqsLib) {\n this.sqsLib = await import(\"@aws-sdk/client-sqs\").catch(() => {\n throw new ClientNotFoundError(\"@aws-sdk/client-sqs\", \"sqs-consumer\");\n });\n }\n\n return this.sqsLib;\n }\n\n private async getSqsConsumerLib(): Promise<typeof import(\"sqs-consumer\")> {\n if (!this.sqsConsumerLib) {\n this.sqsConsumerLib = await import(\"sqs-consumer\").catch(() => {\n throw new ClientNotFoundError(\"sqs-consumer\");\n });\n }\n\n return this.sqsConsumerLib;\n }\n\n private async resolveQueueUrl(topic: string): Promise<string> {\n const attrs = SQSConfiguration.options.consumer;\n const url = (attrs as any)?.queueUrlMap?.[topic] as string | undefined;\n if (!url) {\n throw new Error(`[SQS] Queue url not configured for topic \"${topic}\"`);\n }\n return url;\n }\n}\n","import { BullMQPubSub } from \"./providers/bullmq/bullmq.js\";\nimport { PGBossPubSub } from \"./providers/pgboss/pgboss.js\";\nimport { SQSPubSub } from \"./providers/sqs/sqs.js\";\nimport type { PubSub, QueueProviderKey } from \"./queue_types.js\";\n\nexport class QueueManager {\n static map: Map<QueueProviderKey, PubSub> = new Map();\n\n static {\n this.map.set(\"bullmq\", new BullMQPubSub() as PubSub<\"bullmq\">);\n this.map.set(\"sqs\", new SQSPubSub() as PubSub<\"sqs\">);\n this.map.set(\"pgboss\", new PGBossPubSub() as PubSub<\"pgboss\">);\n }\n\n static getProvider<P extends QueueProviderKey>(provider: P): PubSub<P> {\n if (!this.map.has(provider)) {\n throw new Error(`[QueueSubscriber] Provider ${provider} not found`);\n }\n\n return this.map.get(provider)! as PubSub<P>;\n }\n\n static setProvider(\n provider: QueueProviderKey,\n pubsub: PubSub<QueueProviderKey>,\n ) {\n this.map.set(provider, pubsub);\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { QueueManager } from \"./queue.js\";\nimport type { QueueProviderKey, QueueTopicKey } from \"./queue_types.js\";\n\ntype QueueRegistration = {\n name: string;\n topic: QueueTopicKey;\n handler: (payload: any) => Promise<void>;\n provider: QueueProviderKey;\n};\n\nexport class QueueService {\n static scheduledSubscribers: QueueRegistration[] = [];\n\n static register(\n name: string,\n topic: QueueRegistration[\"topic\"],\n handler: QueueRegistration[\"handler\"],\n options?: { provider?: QueueProviderKey },\n ): void {\n this.scheduledSubscribers.push({\n name,\n topic,\n handler,\n provider: options?.provider ?? \"bullmq\",\n });\n }\n\n static async run() {\n logger.info(\"Subscribing queue handlers\");\n if (!this.scheduledSubscribers.length) {\n logger.info(\"No queue handlers to subscribe\");\n return;\n }\n\n for (const { topic, handler, provider } of this.scheduledSubscribers) {\n logger.info(`Subscribing to queue: ${String(topic)}`);\n const pubsub = QueueManager.getProvider(provider);\n await pubsub.subscribe(topic, handler as any);\n }\n\n logger.info(\"Queue handlers subscribed\");\n }\n\n static async massiveImportQueues(queueHandlerPatterns: string[]) {\n const allFiles: string[] = [];\n\n for (const pattern of queueHandlerPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing queue handler: ${file}`);\n logger.error(error);\n });\n }),\n );\n }\n}\n","import type {\n QueueProviderKey,\n QueueTopic,\n QueueTopicKey,\n} from \"../queue_types.js\";\nimport { QueueService } from \"../queue_service.js\";\n\n/**\n * Decorator to register a queue handler\n * @param provider - The provider to use\n * @param topic - The topic to subscribe to\n * @returns A function to decorate the handler\n */\nexport const queue = <P extends QueueProviderKey, T extends QueueTopicKey>(\n provider: P,\n topic: T,\n) => {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value as (\n payload: QueueTopic[T],\n ) => Promise<void>;\n\n const wrappedHandler = async (payload: QueueTopic[T]) => {\n const instance = new target.constructor();\n return originalMethod.apply(instance, [payload]);\n };\n\n QueueService.register(\n `${target.constructor.name}.${propertyKey}`,\n topic,\n wrappedHandler,\n { provider },\n );\n\n return descriptor;\n };\n};\n\n/**\n * Decorator to register a queue handler for BullMQ\n * @param topic - The topic to subscribe to\n * @returns A function to decorate the handler\n */\nqueue.bullmq = <T extends QueueTopicKey>(topic: T) => queue(\"bullmq\", topic);\n\n/**\n * Decorator to register a queue handler for SQS\n * @param topic - The topic to subscribe to\n * @returns A function to decorate the handler\n */\nqueue.sqs = <T extends QueueTopicKey>(topic: T) => queue(\"sqs\", topic);\n\n/**\n * Decorator to register a queue handler for PGBoss\n * @param topic - The topic to subscribe to\n * @returns A function to decorate the handler\n */\nqueue.pgboss = <T extends QueueTopicKey>(topic: T) => queue(\"pgboss\", topic);\n","import { logger } from \"../logger/logger.js\";\n\n/**\n * Base class for MQTT handlers with logger instance\n * @example\n * declare module \"balda\" {\n * export interface BaseMqtt {\n * logger: Logger;\n * }\n * }\n *\n * export default class TemperatureHandler extends BaseMqtt {\n * @mqtt(\"home/temperature\")\n * handle(topic: string, message: Buffer) {\n * this.logger.info(\"Received temperature:\", message.toString());\n * }\n * }\n */\nexport class BaseMqtt {\n protected readonly logger = logger.child({ scope: this.constructor.name });\n}\n","import { glob } from \"glob\";\nimport type { IClientSubscribeOptions, MqttClient } from \"mqtt\";\nimport { BaldaError } from \"../errors/balda_error.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { SyncOrAsync } from \"../type_util.js\";\nimport type {\n MqttConnectionOptions,\n MqttHandler,\n MqttPublishOptions,\n MqttSubscription,\n MqttTopics,\n} from \"./mqtt.types.js\";\n\n/**\n * Parse MQTT message payload\n * @internal\n * Attempts to parse in order: JSON object -> string -> Buffer\n */\nconst parseMessage = (\n message: Buffer,\n): Buffer | Record<string, any> | string => {\n if (!Buffer.isBuffer(message)) {\n return message;\n }\n\n const stringValue = message.toString();\n\n if (!stringValue.length) {\n return stringValue;\n }\n\n try {\n const parsed = JSON.parse(stringValue);\n if (typeof parsed === \"object\" && parsed !== null) {\n return parsed;\n }\n return stringValue;\n } catch {\n return stringValue;\n }\n};\n\nexport class MqttService {\n static subscriptions: MqttSubscription<MqttTopics>[] = [];\n static client: MqttClient | null = null;\n static connectionOptions: MqttConnectionOptions = {};\n\n /**\n * @description Register an MQTT subscription handler.\n * @internal\n * @example\n * MqttService.register('test', 'home/temperature', (topic, message) => {\n * console.log('Received message:', message.toString());\n * }, { qos: 1 });\n */\n static register<T extends MqttTopics>(\n name: string,\n topic: keyof T,\n handler: MqttHandler<T>,\n options?: IClientSubscribeOptions,\n ): void {\n this.subscriptions.push({\n name,\n topic: topic as never,\n handler: handler as unknown as MqttHandler<MqttTopics>,\n options,\n });\n }\n\n /**\n * @description Connect to the MQTT broker and subscribe to all registered topics.\n */\n static async connect(\n connectionOptions: MqttConnectionOptions = {},\n ): Promise<void> {\n const mqttModule = await import(\"mqtt\").catch(() => {\n throw new BaldaError(\n \"mqtt not installed as a dependency, it is required in order to use MQTT subscriptions with the @mqtt decorator\",\n );\n });\n\n this.connectionOptions = connectionOptions;\n\n logger.info(\"Starting MQTT client\");\n if (!this.subscriptions.length) {\n logger.info(\"No MQTT subscriptions to register\");\n }\n\n const {\n host = \"localhost\",\n port = 1883,\n protocol = \"mqtt\",\n ...otherOptions\n } = connectionOptions;\n\n const brokerUrl = `${protocol}://${host}:${port}`;\n this.client = await mqttModule.connectAsync(brokerUrl, otherOptions);\n\n logger.info(\"MQTT client connected\");\n\n // Set up event handlers\n this.client.on(\"error\", async (error) => {\n await this.globalErrorHandler(error);\n });\n\n this.client.on(\"message\", (topic, message) => {\n this.handleMessage(topic, message);\n });\n\n this.client.on(\"disconnect\", () => {\n logger.info(\"MQTT client disconnected\");\n });\n\n this.client.on(\"reconnect\", async () => {\n await this.globalErrorHandler(new Error(\"MQTT client reconnecting\"));\n });\n\n // Subscribe to all registered topics (client is already connected)\n this.subscribeToTopics();\n }\n\n /**\n * @description Subscribe to all registered topics.\n * @internal\n */\n private static subscribeToTopics() {\n if (!this.client) {\n return;\n }\n\n for (const { name, topic, options } of this.subscriptions) {\n logger.info(`Subscribing to MQTT topic: ${topic} (${name})`);\n this.client.subscribe(topic, options || {}, (error) => {\n if (error) {\n logger.error(\n `Failed to subscribe to topic ${topic}: ${error.message}`,\n );\n return;\n }\n logger.info(`Successfully subscribed to topic: ${topic}`);\n });\n }\n }\n\n /**\n * @description Handle incoming MQTT messages.\n * @internal\n */\n private static async handleMessage(topic: string | never, message: Buffer) {\n const matchingSubscriptions = this.subscriptions.filter((sub) => {\n if (sub.topic === topic) {\n return true;\n }\n\n if (!topic || typeof topic !== \"string\") {\n return false;\n }\n\n const topicPattern = (sub.topic as string)\n .replace(/\\+/g, \"[^/]+\")\n .replace(/#$/, \".*\");\n const regex = new RegExp(`^${topicPattern}$`);\n return regex.test(topic);\n });\n\n for (const subscription of matchingSubscriptions) {\n try {\n await subscription.handler(\n topic as keyof MqttTopics,\n message as unknown as MqttTopics[keyof MqttTopics],\n );\n } catch (error) {\n logger.error(\n `Error handling MQTT message for topic ${topic} in ${subscription.name}`,\n );\n this.globalErrorHandler(error as Error);\n }\n }\n }\n\n /**\n * @description Main error handler for MQTT operations. You can write your own error handler by overriding this static method for example with sentry.\n */\n static globalErrorHandler(error: Error): SyncOrAsync<void> {\n logger.error(error);\n }\n\n static setOnDisconnectHandler(handler: () => void) {\n this.client?.on(\"disconnect\", handler);\n }\n\n static setOnReconnectHandler(handler: () => void) {\n this.client?.on(\"reconnect\", handler);\n }\n\n /**\n * @description Import all MQTT handlers from specified patterns\n */\n static async massiveImportMqttHandlers(mqttHandlerPatterns: string[]) {\n const allFiles: string[] = [];\n\n for (const pattern of mqttHandlerPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing MQTT handler: ${file}`);\n logger.error(error);\n });\n }),\n );\n }\n\n /**\n * Create a decorator to subscribe to an MQTT topic\n * Messages are automatically parsed: Buffer -> JSON object (if valid) -> string\n * Supports MQTT wildcards: + (single level) and # (multi level)\n *\n * Handler signature can be either:\n * - `handler(message: T)` - just the message (topic omitted)\n * - `handler(topic: string, message: T)` - include topic for wildcards or logging\n *\n * @example\n * @mqtt.handler('home/temperature', { qos: 1 })\n * handleTemperature(message: { value: number; unit: string }) {\n * console.log('Temperature:', message.value, message.unit);\n * }\n *\n * @example With topic parameter (useful for wildcards)\n * @mqtt.handler('home/+/temperature', { qos: 1 })\n * handleRoomTemperature(topic: string, message: string) {\n * const room = topic.split('/')[1];\n * console.log(`${room} temperature:`, message);\n * }\n */\n subscribe<T extends MqttTopics = MqttTopics>(\n topic: keyof T,\n options?: IClientSubscribeOptions,\n ) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n\n if (!originalMethod) {\n return descriptor;\n }\n\n const wrappedMethod = async (\n msgTopic: string,\n rawMessage: Buffer,\n ): Promise<void> => {\n const instance = new target.constructor();\n const parsedMessage = parseMessage(rawMessage);\n\n if (originalMethod.length === 1) {\n await originalMethod.call(instance, parsedMessage);\n return;\n }\n\n await originalMethod.call(instance, msgTopic, parsedMessage);\n };\n\n MqttService.register(\n `${target.constructor.name}.${propertyKey}`,\n topic,\n wrappedMethod as unknown as MqttHandler<T>,\n options,\n );\n\n return descriptor;\n };\n }\n\n /**\n * @description Publish a message to an MQTT topic\n * @param topic - The topic to publish to\n * @param message - The message payload (string, Buffer, or object that will be JSON stringified)\n * @param options - Publish options (qos, retain, etc.)\n * @throws BaldaError if the MQTT client is not connected or is not installed as a dependency\n */\n async publish<T extends MqttTopics>(\n topic: keyof T,\n message: T[keyof T],\n options?: MqttPublishOptions,\n ): Promise<void> {\n if (!MqttService.client) {\n throw new BaldaError(\n \"MQTT client is not connected. Call MqttService.connect() first.\",\n );\n }\n\n if (!MqttService.client.connected) {\n throw new BaldaError(\n \"MQTT client is not connected. Call MqttService.connect() first.\",\n );\n }\n\n let payload: string | Buffer;\n\n if (Buffer.isBuffer(message)) {\n payload = message;\n } else if (typeof message === \"object\") {\n payload = JSON.stringify(message);\n } else {\n payload = String(message);\n }\n\n try {\n await MqttService.client.publishAsync(\n topic as string,\n payload,\n options || {},\n );\n logger.debug(`Published message to topic: ${String(topic)}`);\n } catch (error) {\n logger.error(\n `Failed to publish to topic ${String(topic)}: ${(error as Error).message}`,\n );\n throw error;\n }\n }\n\n /**\n * @description Disconnect the MQTT client gracefully\n */\n static async disconnect() {\n if (!this.client) {\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.client?.end(false, {}, () => {\n logger.info(\"MQTT client disconnected gracefully\");\n this.client = null;\n resolve();\n });\n });\n }\n}\n\nexport const setMqttGlobalErrorHandler = (\n globalErrorHandler: (\n ...args: Parameters<(typeof MqttService)[\"globalErrorHandler\"]>\n ) => void,\n) => {\n MqttService.globalErrorHandler = globalErrorHandler.bind(MqttService);\n};\n\n/**\n * Singleton instance for publishing MQTT messages\n * @example\n * import { mqtt } from 'balda';\n *\n * await mqtt.publish('home/temperature', { value: 23.5, unit: 'C' }, { qos: 1 });\n */\nexport const mqtt = new MqttService();\n","import { logger } from \"../logger/logger.js\";\n\n/**\n * Base class for queue handlers with logger instance\n * @example\n * export default class MyQueue extends BaseQueue {\n * @queue(\"bullmq\", \"my-topic\")\n * async handle(payload: MyPayload) {\n * this.logger.info({ payload }, \"Processing queue message\");\n * }\n * }\n */\nexport class BaseQueue {\n protected readonly logger = logger.child({ scope: this.constructor.name });\n}\n","import { QueueManager } from \"./queue.js\";\nimport type {\n PublishOptions,\n QueueProviderKey,\n QueueTopic,\n QueueTopicKey,\n} from \"./queue_types.js\";\n\nconst publishFactory = async <\n P extends QueueProviderKey,\n T extends QueueTopicKey,\n>(\n provider: P,\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<P>,\n): Promise<{ id: string }> => {\n const pubsub = QueueManager.getProvider(provider);\n return pubsub.publish(topic, payload, options ?? ({} as PublishOptions<P>));\n};\n\n/**\n * Shorthand for publish to bullmq queue\n * @param topic - The topic to publish to\n * @param payload - The payload to publish\n * @param options - The options to use\n * @returns The id of the published job\n */\npublishFactory.bullmq = async <T extends QueueTopicKey>(\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<\"bullmq\">,\n): Promise<{ id: string }> => {\n return publishFactory(\"bullmq\", topic, payload, options);\n};\n\npublishFactory.sqs = async <T extends QueueTopicKey>(\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<\"sqs\">,\n): Promise<{ id: string }> => {\n return publishFactory(\"sqs\", topic, payload, options);\n};\n\npublishFactory.pgboss = async <T extends QueueTopicKey>(\n topic: T,\n payload: QueueTopic[T],\n options?: PublishOptions<\"pgboss\">,\n): Promise<{ id: string }> => {\n return publishFactory(\"pgboss\", topic, payload, options);\n};\n\n/**\n * Main publisher for balda queue, has shortcuts for base providers, e.g. `publish.bullmq`\n * @param provider - The provider to use\n * @param topic - The topic to publish to\n * @param payload - The payload to publish\n * @param options - The options to use\n * @returns The id of the published job\n */\nexport const publish = publishFactory;\n","import { defineBullMQConfiguration } from \"./providers/bullmq/bullmq_configuration.js\";\nimport type { CustomQueueConfiguration } from \"./providers/custom/custom.js\";\nimport { definePGBossConfiguration } from \"./providers/pgboss/pgboss_configuration.js\";\nimport { defineSQSConfiguration } from \"./providers/sqs/sqs_configuration.js\";\nimport { QueueManager } from \"./queue.js\";\nimport type { PubSub, QueueProviderKey } from \"./queue_types.js\";\n\n/**\n * Main entry point to define the queue configuration, meant to be called only once in the application bootstrap\n * @bullmq - The BullMQ configuration options\n * @pgboss - The PGBoss configuration options\n * @sqs - The SQS configuration options\n * @string - The custom queue provider name with it's PubSub implementation\n * @example\n * defineQueueConfiguration({\n * bullmq: {\n * connection: {\n * host: \"127.0.0.1\",\n * password: \"root\",\n * username: \"default\",\n * db: 0,\n * },\n * },\n * pgboss: {\n * connectionString: \"postgres://root:root@localhost:5432/database\",\n * },\n * sqs: {\n * client: { region: \"us-east-1\" },\n * },\n * custom: new CustomPubSub(),\n * });\n * @example\n * defineQueueConfiguration({\n * custom: new CustomPubSub(),\n * });\n */\nexport const defineQueueConfiguration = (\n options: {\n bullmq?: Parameters<typeof defineBullMQConfiguration>[0];\n pgboss?: Parameters<typeof definePGBossConfiguration>[0];\n sqs?: Parameters<typeof defineSQSConfiguration>[0];\n } & {\n [key in Exclude<\n QueueProviderKey,\n \"bullmq\" | \"pgboss\" | \"sqs\"\n >]?: CustomQueueConfiguration;\n },\n): void => {\n const firstClassIntegrations = [\"bullmq\", \"pgboss\", \"sqs\"];\n if (options.bullmq) {\n defineBullMQConfiguration(options.bullmq);\n }\n if (options.pgboss) {\n definePGBossConfiguration(options.pgboss);\n }\n if (options.sqs) {\n defineSQSConfiguration(options.sqs);\n }\n\n for (const key of Object.keys(options)) {\n const provider = key as QueueProviderKey;\n if (!firstClassIntegrations.includes(provider)) {\n QueueManager.setProvider(\n provider,\n options[provider] as PubSub<QueueProviderKey>,\n );\n }\n }\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeExit {\n exit(code: number): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.exit(code);\n case \"deno\":\n Deno.exit(code);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeExit = new NativeExit();\n","import { VALIDATION_ERROR_SYMBOL } from \"../decorators/command/arg.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { MetadataStore } from \"../metadata_store.js\";\nimport { nativeExit } from \"../runtime/native_exit.js\";\nimport {\n Argument,\n type FlagSchema,\n parseCliArgsAndFlags,\n} from \"./arg_parser.js\";\nimport type { CommandOptions } from \"./command_types.js\";\n\n/**\n * Base class for all cli commands.\n * @abstract\n */\nexport abstract class Command {\n /**\n * The name of the command.\n */\n static commandName: string = this.name;\n /**\n * package manager that called the command (e.g. npx, yarn, bun etc.)\n */\n static calledBy: string = this.name;\n /**\n * The description of the command.\n */\n static description: string = \"\";\n /**\n * The help text of the command.\n */\n static help: string[] | string = [];\n /**\n * The options of the command.\n */\n static options: CommandOptions = {\n keepAlive: false,\n };\n\n /**\n * Static arguments in order to be validated by decorators. Will be fetched in the command instance.\n */\n static args: Argument[] = parseCliArgsAndFlags().args.slice(1);\n\n /**\n * Static flags in order to be validated by decorators. Will be fetched in the command instance.\n */\n static flags: FlagSchema = parseCliArgsAndFlags().flags;\n\n static readonly logger = logger;\n\n /**\n * Main entry point for the command.\n */\n static handle(): Promise<void> {\n throw new Error(\n `Handle method not implemented in command class ${this.name}`,\n );\n }\n\n /**\n * Enhanced help flag handler with rich formatting and command information\n */\n static handleHelpFlag(flags: FlagSchema): void {\n const helpFlags = [\"-h\", \"--help\"];\n const hasHelpFlag = Object.keys(flags).some((flag) =>\n helpFlags.includes(flag),\n );\n\n if (!hasHelpFlag) {\n return;\n }\n\n const commandName = this.commandName;\n const description = this.description || \"No description available\";\n const helpText = this.help || [];\n const options = this.options;\n\n const helpOutput = this.generateHelpOutput(\n {\n name: commandName,\n description,\n helpText,\n options,\n args: this.args,\n flags: this.flags,\n },\n this,\n );\n\n console.log(helpOutput);\n nativeExit.exit(0);\n }\n\n private static readonly generateHelpOutput = (\n info: {\n name: string;\n description: string;\n helpText: string[] | string;\n options: CommandOptions;\n args: Argument[];\n flags: FlagSchema;\n },\n commandClass: any,\n ): string => {\n const { name, description, helpText, options, args, flags } = info;\n\n const colors = {\n title: \"\\x1b[1;36m\", // Bright cyan\n subtitle: \"\\x1b[1;33m\", // Bright yellow\n description: \"\\x1b[0;37m\", // White\n code: \"\\x1b[0;32m\", // Green\n flag: \"\\x1b[0;35m\", // Magenta\n reset: \"\\x1b[0m\", // Reset\n error: \"\\x1b[0;31m\", // Red\n success: \"\\x1b[0;32m\", // Green\n info: \"\\x1b[0;34m\", // Blue\n };\n\n const lines = [\n `${colors.title}${name}${colors.reset}`,\n `${colors.description}${description}${colors.reset}`,\n \"\",\n `${colors.subtitle}Usage:${colors.reset}`,\n ` ${colors.code}${name}${colors.reset} [options] [arguments]`,\n \"\",\n `${colors.subtitle}Options:${colors.reset}`,\n ` ${colors.flag}-h, --help${colors.reset} Show this help message`,\n \"\",\n `${colors.subtitle}Command Options:${colors.reset}`,\n ` ${colors.flag}keepAlive${colors.reset} ${(options?.keepAlive ?? false) ? colors.success + \"Enabled\" + colors.reset : colors.error + \"Disabled\" + colors.reset}`,\n \"\",\n ];\n\n if (helpText) {\n const helpLines = Array.isArray(helpText) ? helpText : [helpText];\n lines.push(`${colors.subtitle}Help:${colors.reset}`);\n helpLines.forEach((line) => {\n lines.push(` ${colors.description}${line}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n // Always show available arguments and flags from decorators\n const allMeta = MetadataStore.getAll(commandClass);\n const argsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"arg\",\n );\n const flagsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"flag\",\n );\n\n if (argsMeta.length) {\n lines.push(`${colors.subtitle}Available Arguments:${colors.reset}`);\n argsMeta.forEach((meta) => {\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.code}${meta.name}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n if (flagsMeta.length) {\n lines.push(`${colors.subtitle}Available Flags:${colors.reset}`);\n flagsMeta.forEach((meta) => {\n if (meta.aliases && !Array.isArray(meta.aliases)) {\n meta.aliases = [meta.aliases];\n }\n\n const aliases = meta.aliases.length\n ? ` ${colors.flag}(${meta.aliases.join(\", \")})${colors.reset}`\n : \"\";\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}--${meta.name}${aliases}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n // Show current context if arguments or flags were provided\n if ((args?.length ?? 0) > 0 || (flags && Object.keys(flags).length > 0)) {\n lines.push(`${colors.subtitle}Current Context:${colors.reset}`);\n\n if (args?.length) {\n lines.push(\n ` ${colors.info}Provided Arguments:${colors.reset} ${colors.code}${args.join(\" \")}${colors.reset}`,\n );\n }\n\n if (flags && Object.keys(flags).length > 0) {\n lines.push(` ${colors.info}Provided Flags:${colors.reset}`);\n Object.keys(flags).forEach((flagKey) => {\n const flagValue = flags[flagKey];\n const valueDisplay =\n flagValue !== undefined && flagValue !== null\n ? ` = ${colors.code}${flagValue}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}${flagKey}${colors.reset}${valueDisplay}`,\n );\n });\n }\n lines.push(\"\");\n }\n\n if (\n helpText &&\n (Array.isArray(helpText)\n ? helpText.some((line) => line.includes(\"example\"))\n : helpText.includes(\"example\"))\n ) {\n lines.push(`${colors.subtitle}Examples:${colors.reset}`);\n const examples = Array.isArray(helpText)\n ? helpText.filter((line) => line.includes(\"example\"))\n : [helpText.split(\"example\")[1].trim()];\n examples.forEach((example) => {\n lines.push(` ${colors.code}${example}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n };\n\n static readonly validateContext = (target: any): void => {\n const errorChain = Array.from(\n MetadataStore.get(target, VALIDATION_ERROR_SYMBOL) || [],\n ) as Array<{ type: string; name: string; message: string }>;\n\n if (errorChain.length) {\n const colors = {\n error: \"\\x1b[0;31m\", // Red\n title: \"\\x1b[1;31m\", // Bright red\n reset: \"\\x1b[0m\", // Reset\n info: \"\\x1b[0;34m\", // Blue\n code: \"\\x1b[0;32m\", // Green\n };\n\n console.error(`${colors.title}❌ Validation Errors:${colors.reset}`);\n console.error(\"\");\n\n errorChain.forEach((error, index) => {\n const errorNumber = `${colors.info}${index + 1}.${colors.reset}`;\n const errorType = `${colors.error}${error.type.toUpperCase()}${colors.reset}`;\n const errorName = `${colors.code}${error.name}${colors.reset}`;\n\n console.error(\n ` ${errorNumber} ${errorType} ${errorName}: ${colors.error}${error.message}${colors.reset}`,\n );\n });\n\n console.error(\"\");\n console.error(\n `${colors.info}💡 Tip: Use --help for usage information${colors.reset}`,\n );\n nativeExit.exit(1);\n }\n };\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeFs {\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n const bunFs = await import(\"fs\");\n return bunFs.existsSync(path);\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(\n path: string,\n options?: { encoding?: \"utf8\" },\n ): Promise<Uint8Array | string> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const data = await fs.readFile(path, {\n encoding: options?.encoding ?? null,\n });\n\n if (options?.encoding === \"utf8\") {\n return data as string;\n }\n\n return new Uint8Array(data as Buffer);\n case \"bun\":\n const arrayBuffer = Bun.file(path);\n if (options?.encoding === \"utf8\") {\n return arrayBuffer.text();\n }\n\n return new Uint8Array(await arrayBuffer.arrayBuffer());\n case \"deno\":\n const denoBuffer = await Deno.readFile(path);\n if (options?.encoding === \"utf8\") {\n return new TextDecoder().decode(denoBuffer);\n }\n\n return new Uint8Array(denoBuffer);\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunFs = await import(\"fs/promises\");\n const bunStats = await bunFs.stat(path);\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async streamFile(path: string): Promise<ReadableStream> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n const { Readable } = await import(\"stream\");\n const nodeStream = fs.createReadStream(path);\n return Readable.toWeb(nodeStream) as unknown as ReadableStream;\n\n case \"bun\":\n return Bun.file(path).stream();\n case \"deno\":\n const denoFile = await Deno.open(path);\n return denoFile.readable;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readdir(path: string): Promise<string[]> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"fs/promises\");\n return fs.readdir(path);\n case \"deno\":\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n\n return entries;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","import { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\n/**\n * Check if packages are already installed in node_modules\n */\nexport const getUninstalledPackages = async (\n packages: string[],\n): Promise<string[]> => {\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n\n if (!hasNodeModules) {\n return packages;\n }\n\n const uninstalled: string[] = [];\n\n for (const pkg of packages) {\n const pkgPath = nativePath.join(nodeModulesPath, pkg);\n const isInstalled = await nativeFs.exists(pkgPath);\n\n if (!isInstalled) {\n uninstalled.push(pkg);\n }\n }\n\n return uninstalled;\n};\n\nexport const getPackageManager = async (): Promise<\n [string, string, string]\n> => {\n const hasYarnLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"yarn.lock\"),\n );\n\n if (hasYarnLock) {\n return [\"yarn\", \"add\", \"-D\"];\n }\n\n const hasPnpmLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"pnpm-lock.yaml\"),\n );\n\n if (hasPnpmLock) {\n return [\"pnpm\", \"add\", \"-D\"];\n }\n\n const hasPackageLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"package-lock.json\"),\n );\n\n if (hasPackageLock) {\n return [\"npm\", \"install\", \"-D\"];\n }\n\n const hasBunLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"bun.lockb\"),\n );\n\n if (hasBunLock) {\n return [\"bun\", \"add\", \"-D\"];\n }\n\n const hasDenoLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"deno.lock\"),\n );\n\n if (hasDenoLock) {\n return [\"deno\", \"add\", \"-D\"];\n }\n\n return [\"npm\", \"install\", \"-D\"];\n};\n\n/**\n * Prompts user for confirmation and executes a command if approved\n * @param command - The command to execute\n * @param packageManager - The package manager name (e.g., \"npm\", \"yarn\")\n * @param dependencies - Array of dependencies to display\n * @param options - execSync options\n * @returns Promise that resolves to true if executed, false if skipped\n */\nexport const execWithPrompt = async (\n command: string,\n packageManager: string,\n dependencies: string[],\n options?: Parameters<typeof execSync>[1],\n areDevDeps: boolean = true,\n): Promise<boolean> => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const dependenciesList = dependencies.join(\", \");\n const prompt = `Do you want to install the following ${areDevDeps ? \"dev\" : \"\"} dependencies using ${packageManager}?\\n${dependenciesList}\\n(y/n): `;\n\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n\n if (answer.toLowerCase() === \"y\" || answer.toLowerCase() === \"yes\") {\n execSync(command, options);\n resolve(true);\n return;\n }\n\n resolve(false);\n });\n });\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\n\nexport default class BuildCommand extends Command {\n static commandName = \"build\";\n static description = \"Build the project for production, node.js only\";\n static help = [\n \"Build the project for production, node.js only\",\n \"It will create a production build of the project in the dist directory\",\n \"Must have a tsconfig.json file in the root of the project\",\n \"Must have esbuild installed as a dependency while running the command\",\n \"Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory\",\n \"Example: npx balda build -t ./tsconfig.json -a ./assets\",\n ];\n\n @flag({\n type: \"boolean\",\n aliases: [\"c\"],\n name: \"clear-dist\",\n required: false,\n defaultValue: false,\n description:\n \"Whether to clear the dist directory before building the project\",\n })\n static clearDist: boolean;\n\n @flag({\n type: \"string\",\n aliases: [\"e\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"./dist\",\n description: \"The path to the output directory, default is ./dist\",\n })\n static output: string;\n\n @flag({\n type: \"string\",\n aliases: [\"t\"],\n name: \"tsconfig\",\n required: false,\n defaultValue: \"./tsconfig.json\",\n description:\n \"The path to the tsconfig.json file, default is ./tsconfig.json\",\n })\n static tsconfig: string;\n\n @flag({\n type: \"string\",\n aliases: [\"a\"],\n name: \"assets\",\n required: false,\n description:\n \"The path to the assets directory that will be loaded in the production build\",\n })\n static assets: string;\n\n @flag({\n type: \"string\",\n aliases: [\"f\"],\n name: \"format\",\n required: false,\n defaultValue: \"esm\",\n description:\n \"The format to build the project, default is esm, can be 'esm' or 'cjs'\",\n })\n static format: \"esm\" | \"cjs\";\n\n @flag({\n type: \"string\",\n aliases: [\"p\"],\n name: \"packages\",\n required: false,\n defaultValue: \"external\",\n description:\n \"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'\",\n })\n static packages: \"external\" | \"bundle\";\n\n @flag({\n type: \"boolean\",\n aliases: [\"s\"],\n name: \"sourcemap\",\n required: false,\n defaultValue: true,\n description: \"Whether to generate sourcemaps or not, default is true\",\n })\n static sourcemap: boolean;\n\n static async handle(): Promise<void> {\n if (typeof process === undefined) {\n this.logger.error(\"Build command is only supported in node.js\");\n process.exit(1);\n }\n\n if (![\"esm\", \"cjs\"].includes(this.format)) {\n this.logger.error(\"Invalid format, must be 'esm' or 'cjs'\");\n process.exit(1);\n }\n\n if (![\"bundle\", \"external\"].includes(this.packages)) {\n this.logger.error(\"Invalid packages, must be 'bundle' or 'external'\");\n process.exit(1);\n }\n\n const isEsBuildInstalled = await import(\"esbuild\")\n .then((esbuild) => true)\n .catch(() => false);\n\n if (!isEsBuildInstalled) {\n const [packageManager, packageManagerCommand, devFlag] =\n await getPackageManager();\n\n const didInstall = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} esbuild ${devFlag}`,\n packageManager,\n [\"esbuild\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!didInstall) {\n this.logger.warn(\n `User chose to not continue with the installation of esbuild, exiting...`,\n );\n process.exit(0);\n }\n }\n\n const esbuild = await import(\"esbuild\").catch((err) => {\n this.logger.error(\n \"esbuild is not installed, please install it with `npm install -D esbuild` to use the build command\",\n );\n throw new Error(\"esbuild is not installed\");\n });\n\n const assetsDir = path.join(this.output, \"assets\");\n const plugins = [];\n if (this.assets) {\n const { copy } = await import(\"esbuild-plugin-copy\").catch((err) => {\n this.logger.error(\n \"esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command\",\n );\n throw new Error(\"esbuild-plugin-copy is not installed\");\n });\n\n if (!fs.existsSync(assetsDir)) {\n fs.mkdirSync(assetsDir, { recursive: true });\n }\n\n plugins.push(\n copy({\n assets: {\n from: this.assets,\n to: assetsDir,\n },\n }),\n );\n }\n\n if (this.clearDist && fs.existsSync(this.output)) {\n this.logger.info(`Clearing dist directory...`);\n fs.rmSync(this.output, { recursive: true });\n }\n\n this.logger.info(`Building project...`);\n const outFile = path.join(this.output, \"server.js\");\n const result = await esbuild.build({\n tsconfig: this.tsconfig,\n entryPoints: [this.entry],\n bundle: true,\n platform: \"node\",\n outfile: outFile,\n minify: true,\n sourcemap: this.sourcemap,\n plugins,\n format: this.format,\n packages: this.packages,\n });\n\n if (result.errors.length) {\n this.logger.error(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n errors: result.errors,\n },\n null,\n 2,\n ),\n );\n\n process.exit(1);\n }\n\n if (result.warnings.length) {\n this.logger.warn(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n warnings: result.warnings,\n },\n null,\n 2,\n ),\n );\n }\n\n this.logger.info(\n JSON.stringify(\n {\n message: `Project built successfully in ${outFile}`,\n output: outFile,\n assets: this.assets ? true : false,\n },\n null,\n 2,\n ),\n );\n process.exit(0);\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class GenerateCommand extends Command {\n static commandName = \"generate-command\";\n static description = \"Generate a new command in the specified path\";\n static help = [\n \"Generate a new cli command in the specified path\",\n \"Example: npx balda generate-command my-command -p src/commands\",\n ];\n\n /**\n * The path where the command will be generated\n */\n static path = \"src/commands\";\n\n @arg({\n description: \"The name of the command to generate\",\n required: true,\n })\n static name: string;\n\n static async handle(): Promise<void> {\n // Check if command already exists to prevent overriding built-in commands\n const existingCommand = commandRegistry.getCommand(this.name);\n if (existingCommand) {\n const isBuiltIn = commandRegistry.isBuiltInCommand(this.name);\n const commandType = isBuiltIn ? \"built-in\" : \"user-defined\";\n this.logger.error(\n { commandName: this.name, type: commandType },\n `Command \"${this.name}\" already exists as a ${commandType} command. Cannot override existing commands.`,\n );\n return;\n }\n\n const commandTemplate = this.getCommandTemplate();\n this.path = nativePath.join(this.path, `${this.name}.ts`);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(commandTemplate),\n );\n\n this.logger.info(\n `Command ${this.name} created successfully at ${this.path}`,\n );\n }\n\n static getCommandTemplate() {\n return `import { Command, CommandOptions } from \"balda\";\n\nexport default class extends Command {\n static commandName = \"${this.name}\";\n static description = \"Command description\";\n\n static options: CommandOptions = {\n // Define your command options here\n keepAlive: false,\n };\n\n static async handle(): Promise<void> {\n // Implement your command logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toDashCase, toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateControllerCommand extends Command {\n static commandName = \"generate-controller\";\n static description = \"Generate a new controller in the specified path\";\n static help = [\n \"Generate a new controller in the specified path\",\n \"Example: npx balda generate-controller user -p src/controllers\",\n ];\n\n @arg({\n description: \"The name of the controller to generate\",\n required: true,\n })\n static controllerName: string;\n\n @flag({\n description:\n \"The path to the controller to generate, default is src/controllers\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/controllers\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const controllerTemplate = this.getControllerTemplate();\n const fileName = `${this.controllerName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(controllerTemplate),\n );\n\n this.logger.info(\n `Controller ${this.controllerName} created successfully at ${this.path}`,\n );\n }\n\n static getControllerTemplate() {\n const className = toPascalCase(this.controllerName);\n return `import { controller, get, post, put, del, Request, Response } from \"balda\";\n\n@controller(\"/${toDashCase(this.controllerName)}\")\nexport default class ${className}Controller {\n @get(\"/\")\n async index(req: Request, res: Response) {\n return { message: \"List all ${this.controllerName.toLowerCase()}s\" };\n }\n\n @get(\"/:id\")\n async show(req: Request, res: Response) {\n return { message: \\`Get ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n\n @post(\"/\")\n async create(req: Request, res: Response) {\n return { message: \\`Create ${this.controllerName.toLowerCase()}\\`, data: req.body };\n }\n\n @put(\"/:id\")\n async update(req: Request, res: Response) {\n return { message: \\`Update ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\`, data: req.body };\n }\n\n @del(\"/:id\")\n async destroy(req: Request, res: Response) {\n return { message: \\`Delete ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateCron extends Command {\n static commandName = \"generate-cron\";\n static description = \"Generate a new cron job in the specified path\";\n static help = [\n \"Generate a new cron job in the specified path\",\n \"Example: npx balda generate-cron my-cron -p src/cron\",\n ];\n\n @arg({\n description: \"The name of the cron job file to generate\",\n required: true,\n })\n static fileName: string;\n\n @flag({\n description: \"The path to the cron job to generate, default is src/cron\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/cron\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const cronTemplate = this.getCronTemplate();\n this.path = nativePath.join(this.path, `${this.fileName}.ts`);\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(cronTemplate));\n\n this.logger.info(\n `Cron job ${this.fileName} created successfully at ${this.path}`,\n );\n }\n\n static getCronTemplate() {\n return `import { BaseCron, cron } from \"balda\";\n\nexport default class extends BaseCron {\n @cron(\"* * * * *\")\n handle() {\n this.logger.info(\"Running cron job\");\n // Implement your cron job logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMiddlewareCommand extends Command {\n static commandName = \"generate-middleware\";\n static description = \"Generate a new middleware in the specified path\";\n static help = [\n \"Generate a new middleware in the specified path\",\n \"Example: npx balda generate-middleware auth -p src/middlewares\",\n ];\n\n @arg({\n description: \"The name of the middleware to generate\",\n required: true,\n })\n static middlewareName: string;\n\n @flag({\n description:\n \"The path to the middleware to generate, default is src/middlewares\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/middlewares\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const middlewareTemplate = this.getMiddlewareTemplate();\n const fileName = `${this.middlewareName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(middlewareTemplate),\n );\n\n this.logger.info(\n `Middleware ${this.middlewareName} created successfully at ${this.path}`,\n );\n }\n\n static getMiddlewareTemplate() {\n const middlewareName = toPascalCase(this.middlewareName);\n return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\n/**\n * ${middlewareName} middleware\n * @description Add your middleware logic here\n */\nexport const ${middlewareName}: ServerRouteMiddleware = async () => {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Add your middleware logic here\n return next();\n };\n};`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMqttCommand extends Command {\n static commandName = \"generate-mqtt\";\n static description = \"Generate a new MQTT handler in the specified path\";\n static help = [\n \"Generate a new MQTT handler in the specified path\",\n \"Example: npx balda generate-mqtt temperature-handler -p src/mqtt\",\n ];\n\n @flag({\n description:\n \"The path to the MQTT handler to generate, default is src/mqtt\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/mqtt\",\n })\n static path: string;\n\n @arg({\n description: \"The MQTT topic to subscribe to\",\n required: true,\n })\n static topic: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.topic.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const mqttTemplate = this.getMqttTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.topic.replace(/\\//g, \"_\"))}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(mqttTemplate));\n\n this.logger.info(\n `MQTT handler for topic ${this.topic} created successfully at ${this.path}`,\n );\n }\n\n static getMqttTemplate(isValidLiteral: boolean) {\n return `import { BaseMqtt, mqtt } from \"balda\";\n\n/**\n * Define your MQTT topics interface for type safety\n */\ndeclare module \"balda\" {\n interface MqttTopics {\n ${isValidLiteral ? `${this.topic}: string;` : `'${this.topic}': string;`}\n }\n}\n\nexport default class extends BaseMqtt {\n @mqtt.subscribe(\"${this.topic}\")\n async handle(message: string) {\n this.logger.info({ message }, \"Message received\");\n // Implement your MQTT handler logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GeneratePluginCommand extends Command {\n static commandName = \"generate-plugin\";\n static description = \"Generate a new plugin in the specified path\";\n static help = [\n \"Generate a new plugin in the specified path\",\n \"Example: npx balda generate-plugin my-plugin -p src/plugins\",\n ];\n\n @arg({\n description: \"The name of the plugin to generate\",\n required: true,\n })\n static pluginName: string;\n\n @flag({\n description: \"The path to the plugin to generate, default is src/plugins\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/plugins\",\n })\n static pluginPath: string;\n\n static async handle(): Promise<void> {\n const pluginTemplate = this.getPluginTemplate();\n this.pluginPath = nativePath.join(this.pluginPath, `${this.pluginName}.ts`);\n\n if (\n !(await nativeFs.exists(nativePath.join(process.cwd(), this.pluginPath)))\n ) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.pluginPath.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.pluginPath,\n new TextEncoder().encode(pluginTemplate),\n );\n\n this.logger.info(\n `Plugin ${this.name} created successfully at ${this.pluginPath}`,\n );\n }\n\n static getPluginTemplate() {\n return `import { BasePlugin, Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\nexport default class extends BasePlugin {\n async handle(): Promise<ServerRouteMiddleware> {\n return async (req: Request, res: Response, next: NextFunction) => {\n console.log(\"${this.pluginName} plugin is running\");\n await next();\n };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateQueueCommand extends Command {\n static commandName = \"generate-queue\";\n static description = \"Generate a new queue in the specified path\";\n static help = [\n \"Generate a new queue in the specified path\",\n \"Example: npx balda generate-queue my-queue -p src/queues --provider bullmq\",\n ];\n\n @arg({\n description: \"The name of the queue to generate\",\n required: true,\n })\n static queueName: string;\n\n @flag({\n description: \"The path to the queue to generate, default is src/queues\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/queues\",\n })\n static path: string;\n\n @flag({\n description: \"The provider of the queue to generate, default is bullmq\",\n type: \"string\",\n aliases: [\"pr\"],\n name: \"provider\",\n required: false,\n defaultValue: \"bullmq\",\n })\n static provider: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.queueName.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const queueTemplate = this.getQueueTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.queueName)}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(queueTemplate),\n );\n\n this.logger.info(\n `Queue ${this.queueName} created successfully at ${this.path}`,\n );\n }\n\n static getQueueTemplate(isValidLiteral: boolean) {\n return `import { BaseQueue, queue } from \"balda\";\n\nexport type Payload = {\n // Add your payload here\n};\n\ndeclare module \"balda\" {\n export interface QueueTopic {\n ${isValidLiteral ? this.queueName : `'${this.queueName}'`}: Payload;\n }\n}\n\nexport default class extends BaseQueue {\n @queue('${this.provider}', '${this.queueName}')\n async handle(payload: Payload) {\n // Implement your queue logic here\n this.logger.info({ payload }, 'Payload received');\n return Promise.resolve();\n }\n}`;\n }\n}\n","import { execSync } from \"node:child_process\";\nimport { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport type { Server } from \"../../server/server.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateSdkCommand extends Command {\n static commandName = \"generate-sdk\";\n static description =\n \"Generate a TypeScript SDK from your server's OpenAPI specification\";\n static help = [\n \"Generate a TypeScript SDK from your server's OpenAPI specification\",\n \"This command imports your server instance, starts it if needed, downloads the OpenAPI spec, and generates an SDK\",\n \"\",\n \"Arguments:\",\n \" serverPath Path to the server instance file (default: test/server/instance.ts)\",\n \"\",\n \"Flags:\",\n \" -o, --output <path> Output directory for generated SDK (default: sdk)\",\n \" -s, --swagger-path <path> Swagger UI path on your server (default: /docs)\",\n \" -c, --client <type> HTTP client to use: axios or fetch (default: fetch)\",\n \" --unwrap-response-data Automatically unwrap response data property\",\n \" --single-http-client Generate single HTTP client instance\",\n \" --type-prefix <prefix> Add prefix to all generated types\",\n \" --type-suffix <suffix> Add suffix to all generated types\",\n \" --enum-names-as-values Use enum names as values\",\n \" --sort-types Sort types alphabetically\",\n \"\",\n \"Examples:\",\n \" npx balda generate-sdk\",\n \" npx balda generate-sdk src/server/index.ts -o ./client-sdk\",\n \" npx balda generate-sdk src/server.ts --client axios\",\n \" npx balda generate-sdk --unwrap-response-data --single-http-client\",\n \" npx balda generate-sdk --type-prefix Api --sort-types\",\n ];\n\n @arg({\n description:\n \"Path to the server instance file (should export a Server instance)\",\n required: false,\n defaultValue: \"test/server/instance.ts\",\n })\n static serverPath: string;\n\n @flag({\n description: \"Output directory for generated SDK\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"sdk\",\n })\n static outputPath: string;\n\n @flag({\n description: \"Swagger UI path on your server\",\n type: \"string\",\n aliases: [\"s\"],\n name: \"swagger-path\",\n required: false,\n defaultValue: \"/docs\",\n })\n static swaggerPath: string;\n\n @flag({\n description: \"HTTP client to use (axios or fetch)\",\n type: \"string\",\n aliases: [\"c\"],\n name: \"client\",\n required: false,\n defaultValue: \"fetch\",\n })\n static httpClient: string;\n\n @flag({\n description: \"Unwrap response data automatically\",\n type: \"boolean\",\n name: \"unwrap-response-data\",\n required: false,\n defaultValue: false,\n })\n static unwrapResponseData: boolean;\n\n @flag({\n description: \"Generate single HTTP client instance\",\n type: \"boolean\",\n name: \"single-http-client\",\n required: false,\n defaultValue: false,\n })\n static singleHttpClient: boolean;\n\n @flag({\n description: \"Add prefix to all generated types\",\n type: \"string\",\n name: \"type-prefix\",\n required: false,\n })\n static typePrefix?: string;\n\n @flag({\n description: \"Add suffix to all generated types\",\n type: \"string\",\n name: \"type-suffix\",\n required: false,\n })\n static typeSuffix?: string;\n\n @flag({\n description: \"Use enum names as values\",\n type: \"boolean\",\n name: \"enum-names-as-values\",\n required: false,\n defaultValue: false,\n })\n static enumNamesAsValues: boolean;\n\n @flag({\n description: \"Sort types alphabetically\",\n type: \"boolean\",\n name: \"sort-types\",\n required: false,\n defaultValue: false,\n })\n static sortTypes: boolean;\n\n static async handle(): Promise<void> {\n console.log(\"\\n🚀 Starting SDK generation...\\n\");\n\n // Step 1: Check if swagger-typescript-api is installed\n const sdkGenerator = \"swagger-typescript-api\";\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n const generatorPath = nativePath.join(nodeModulesPath, sdkGenerator);\n const hasGenerator = hasNodeModules\n ? await nativeFs.exists(generatorPath)\n : false;\n\n if (!hasGenerator) {\n console.log(\n `📦 ${sdkGenerator} not found. Installing as dev dependency...\\n`,\n );\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} ${sdkGenerator} ${devFlag}`,\n packageManager,\n [sdkGenerator],\n { stdio: \"inherit\" },\n true,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ SDK generation cancelled: swagger-typescript-api installation was skipped.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ ${sdkGenerator} installed successfully!\\x1b[0m\\n`,\n );\n }\n\n // Step 2: Import and start the server\n const absoluteServerPath = nativePath.resolve(\n process.cwd(),\n this.serverPath,\n );\n const serverPathExists = await nativeFs.exists(absoluteServerPath);\n\n if (!serverPathExists) {\n console.error(\n `\\x1b[31m❌ Error: Server file not found at ${absoluteServerPath}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(`📂 Loading server from: ${this.serverPath}`);\n\n let serverModule: Record<string, unknown>;\n try {\n // Import the server module\n const fileUrl = `file://${absoluteServerPath}`;\n serverModule = (await import(fileUrl)) as Record<string, unknown>;\n } catch (error) {\n console.error(`\\x1b[31m❌ Error importing server module:\\x1b[0m`, error);\n return;\n }\n\n // Find the Server instance in the module exports\n let serverInstance: Server | null = null;\n const possibleExports = [\n \"server\",\n \"serverBuilder\",\n \"app\",\n \"default\",\n \"Server\",\n ];\n\n for (const exportName of possibleExports) {\n if (serverModule[exportName]) {\n const candidate = serverModule[exportName] as Record<string, unknown>;\n if (\n candidate &&\n typeof candidate === \"object\" &&\n ((candidate.constructor as { name?: string })?.name === \"Server\" ||\n typeof (candidate as { listen?: unknown }).listen === \"function\" ||\n typeof (candidate as { start?: unknown }).start === \"function\")\n ) {\n serverInstance = candidate as unknown as Server;\n console.log(`✅ Found server instance in export: \"${exportName}\"\\n`);\n break;\n }\n }\n }\n\n if (!serverInstance) {\n console.error(\n `\\x1b[31m❌ Error: No Server instance found in ${this.serverPath}\\x1b[0m`,\n );\n console.log(\n `\\x1b[90mExpected exports: ${possibleExports.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n // Step 3: Start the server\n let wasStarted = false;\n let serverUrl = \"\";\n let serverPort = 80;\n let serverHost = \"localhost\";\n\n try {\n // Try to get server configuration\n const serverWithOptions = serverInstance as Server & {\n options?: { port?: number; host?: string };\n listen?: () => Promise<void>;\n close?: () => Promise<void>;\n };\n\n if (serverWithOptions.options) {\n serverPort = serverWithOptions.options.port || 80;\n serverHost = serverWithOptions.options.host || \"localhost\";\n }\n\n serverUrl = `http://${serverHost}:${serverPort}`;\n\n // Start the server\n console.log(`🌐 Starting server on ${serverUrl}...`);\n if (typeof serverWithOptions.listen === \"function\") {\n await serverWithOptions.listen();\n wasStarted = true;\n console.log(`✅ Server started successfully!\\n`);\n } else {\n throw new Error(\"Server instance does not have a listen() method\");\n }\n } catch (error) {\n console.error(`\\x1b[31m❌ Error starting server:\\x1b[0m`, error);\n return;\n }\n\n // Step 4: Download OpenAPI spec\n const swaggerJsonUrl = `${serverUrl}${this.swaggerPath}/json`;\n console.log(`📥 Downloading OpenAPI spec from: ${swaggerJsonUrl}`);\n\n let openApiSpec: Record<string, unknown>;\n try {\n const response = await globalThis.fetch(swaggerJsonUrl);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch OpenAPI spec: ${response.status} ${response.statusText}`,\n );\n }\n openApiSpec = (await response.json()) as Record<string, unknown>;\n console.log(`✅ OpenAPI spec downloaded successfully!\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error downloading OpenAPI spec:\\x1b[0m`, error);\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 5: Save OpenAPI spec to temp file\n const tempSpecPath = nativePath.join(process.cwd(), \".openapi-spec.json\");\n try {\n await nativeFs.writeFile(\n tempSpecPath,\n new TextEncoder().encode(JSON.stringify(openApiSpec, null, 2)),\n );\n } catch (error) {\n console.error(\n `\\x1b[31m❌ Error saving OpenAPI spec to file:\\x1b[0m`,\n error,\n );\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 6: Generate SDK using swagger-typescript-api\n const outputDir = nativePath.resolve(process.cwd(), this.outputPath);\n console.log(`🔨 Generating SDK...\\n`);\n\n try {\n // Create output directory if it doesn't exist\n if (!(await nativeFs.exists(outputDir))) {\n await nativeFs.mkdir(outputDir, { recursive: true });\n }\n\n // Build command with options\n const commandParts = [\n \"npx swagger-typescript-api generate\",\n `--path=\"${tempSpecPath}\"`,\n `--output=\"${this.outputPath}\"`,\n `--http-client ${this.httpClient}`,\n \"--modular\",\n \"--extract-request-params\",\n \"--extract-request-body\",\n \"--extract-response-body\",\n \"--extract-response-error\",\n ];\n\n // Add optional flags\n if (this.unwrapResponseData) {\n commandParts.push(\"--unwrap-response-data\");\n }\n\n if (this.singleHttpClient) {\n commandParts.push(\"--single-http-client\");\n }\n\n if (this.typePrefix) {\n commandParts.push(`--type-prefix \"${this.typePrefix}\"`);\n }\n\n if (this.typeSuffix) {\n commandParts.push(`--type-suffix \"${this.typeSuffix}\"`);\n }\n\n if (this.enumNamesAsValues) {\n commandParts.push(\"--enum-names-as-values\");\n }\n\n if (this.sortTypes) {\n commandParts.push(\"--sort-types\");\n }\n\n const command = commandParts.join(\" \");\n\n execSync(command, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n\n console.log(`\\n\\x1b[32m✅ SDK generated successfully!\\x1b[0m`);\n console.log(`\\x1b[32m📁 SDK location: ${outputDir}\\x1b[0m\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error generating SDK:\\x1b[0m`, error);\n } finally {\n // Cleanup: Remove temp spec file\n try {\n await nativeFs.unlink(tempSpecPath);\n } catch {\n // Ignore cleanup errors\n }\n\n // Cleanup: Stop server if we started it\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n console.log(\"🛑 Stopping server...\");\n await serverWithClose.close?.();\n console.log(\"✅ Server stopped.\\n\");\n } catch {\n console.log(\"\\x1b[33m⚠️ Could not stop server gracefully.\\x1b[0m\\n\");\n }\n }\n }\n\n console.log(\"\\x1b[32m✨ SDK generation complete!\\x1b[0m\\n\");\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitCommand extends Command {\n static commandName = \"init\";\n static description =\n \"Initialize a new balda project in the current directory\";\n static help = [\n \"Initialize a new balda project, it is given for granted that balda is installed in the project as a dependency\",\n \"All the files are created in the /src directory (created if not exists)\",\n \"It adds a server.ts for the file instance and a index.ts for the entry point with a dummy hello world route\",\n \"Example: npx balda init -p ./src -t true\",\n ];\n\n @flag.string({\n description:\n \"The path to the project, default is the current directory /src\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"./src\",\n })\n static srcPath: string;\n\n @flag.boolean({\n description: \"Whether to use typescript, default is true\",\n aliases: \"t\",\n name: \"typescript\",\n required: false,\n defaultValue: true,\n })\n static typescript: boolean;\n\n @flag.boolean({\n description: \"Initialize MQTT service connection\",\n aliases: \"m\",\n name: \"mqtt\",\n required: false,\n defaultValue: false,\n })\n static mqtt: boolean;\n\n @flag.boolean({\n description: \"Initialize Cron service\",\n aliases: \"c\",\n name: \"cron\",\n required: false,\n defaultValue: false,\n })\n static cron: boolean;\n\n static devDependencies: string[] = [\n \"esbuild\",\n \"esbuild-plugin-copy\",\n \"tsx\",\n \"typescript\",\n ];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing project...\");\n const [packageManager, packageManagerCommand, devDependenciesCommand] =\n await getPackageManager();\n\n // if the package manager is npm, yarn or pnpm, install the dev dependencies since we're on node.js\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledDevDeps = await getUninstalledPackages(\n this.devDependencies,\n );\n\n if (uninstalledDevDeps.length) {\n this.logger.info(\n `Found ${uninstalledDevDeps.length} missing dev dependencies`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDevDeps.join(\" \")} -${devDependenciesCommand}`,\n packageManager,\n uninstalledDevDeps,\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Project initialization aborted.\",\n );\n return;\n }\n }\n\n if (!uninstalledDevDeps.length) {\n this.logger.info(\"All dev dependencies are already installed\");\n }\n }\n\n // Handle optional service dependencies\n if (this.mqtt && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledMqtt = await getUninstalledPackages([\"mqtt\"]);\n\n if (uninstalledMqtt.length) {\n const mqttInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} mqtt`,\n packageManager,\n [\"mqtt\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!mqttInstalled) {\n this.logger.info(\n \"MQTT installation cancelled by user. Skipping MQTT scaffolding.\",\n );\n this.mqtt = false;\n }\n }\n\n if (!uninstalledMqtt.length) {\n this.logger.info(\"MQTT package is already installed\");\n }\n }\n\n if (this.cron && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledCron = await getUninstalledPackages([\"node-cron\"]);\n\n if (uninstalledCron.length > 0) {\n const cronInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} node-cron`,\n packageManager,\n [\"node-cron\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!cronInstalled) {\n this.logger.info(\n \"node-cron installation cancelled by user. Skipping Cron scaffolding.\",\n );\n this.cron = false;\n }\n }\n\n if (!uninstalledCron.length) {\n this.logger.info(\"node-cron package is already installed\");\n }\n }\n\n const ext = this.typescript ? \"ts\" : \"js\";\n const serverTemplate = this.getServerTemplate();\n const indexTemplate = this.getIndexTemplate();\n\n if (!nativeFs.exists(this.srcPath)) {\n await nativeFs.mkdir(this.srcPath, { recursive: true });\n }\n\n this.logger.info(`Creating server.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/server.${ext}`,\n new TextEncoder().encode(serverTemplate),\n );\n\n this.logger.info(`Creating index.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/index.${ext}`,\n new TextEncoder().encode(indexTemplate),\n );\n\n // Create MQTT configuration if requested\n if (this.mqtt) {\n const mqttDir = nativePath.join(this.srcPath, \"mqtt\");\n if (!(await nativeFs.exists(mqttDir))) {\n await nativeFs.mkdir(mqttDir, { recursive: true });\n }\n\n const mqttConfigTemplate = this.getMqttConfigTemplate();\n this.logger.info(`Creating mqtt/mqtt.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(mqttDir, `mqtt.config.${ext}`),\n new TextEncoder().encode(mqttConfigTemplate),\n );\n }\n\n // Create Cron configuration if requested\n if (this.cron) {\n const cronDir = nativePath.join(this.srcPath, \"cron\");\n if (!(await nativeFs.exists(cronDir))) {\n await nativeFs.mkdir(cronDir, { recursive: true });\n }\n\n const cronConfigTemplate = this.getCronConfigTemplate();\n this.logger.info(`Creating cron/cron.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(cronDir, `cron.config.${ext}`),\n new TextEncoder().encode(cronConfigTemplate),\n );\n }\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n return `import { Server } from \"balda\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n plugins: {\n json: {\n sizeLimit: \"100kb\",\n },\n },\n});\n\nexport { serverInstance as server };\n`;\n }\n\n static getIndexTemplate() {\n const imports: string[] = ['import { server } from \"./server.js\";'];\n const services: string[] = [];\n\n if (this.mqtt) {\n imports.push('import \"./mqtt/mqtt.config.js\";');\n imports.push('import { MqttService } from \"balda\";');\n services.push(`\n // Initialize MQTT service\n await MqttService.connect({\n host: \"localhost\",\n port: 1883,\n protocol: \"mqtt\",\n });\n console.log(\"MQTT service connected\");`);\n }\n\n if (this.cron) {\n imports.push('import \"./cron/cron.config.js\";');\n imports.push('import { CronService } from \"balda\";');\n services.push(`\n // Initialize Cron service\n await CronService.run();\n console.log(\"Cron service started\");`);\n }\n\n const importsBlock = imports.join(\"\\n\");\n const servicesBlock = services.length > 0 ? services.join(\"\\n\") : \"\";\n\n return `${importsBlock}\n${servicesBlock ? `\\n${servicesBlock}\\n` : \"\"}\nserver.listen(({ url }) => {\n console.log(\\`Server is running on \\${url}\\`);\n});\n`;\n }\n\n static getMqttConfigTemplate() {\n return `// MQTT Configuration\n// This file is imported to set up MQTT connection options\n// Add your MQTT handlers in separate files within this directory\n// Use: npx balda generate-mqtt <handler-name> to create new handlers\n`;\n }\n\n static getCronConfigTemplate() {\n return `// Cron Configuration\n// This file is imported to set up Cron jobs\n// Add your cron jobs in separate files within this directory\n// Use: npx balda generate-cron <job-name> to create new cron jobs\n`;\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitQueueCommand extends Command {\n static commandName = \"init-queue\";\n static description =\n \"Initialize queue provider configuration with required dependencies\";\n static help = [\n \"Initialize a queue provider configuration file with basic credentials\",\n \"Automatically installs required packages for the selected provider\",\n \"Only scaffolds the connection, handlers should be created with generate-queue command\",\n \"Example: npx balda init-queue -t bullmq -o src/queue\",\n ];\n\n @flag.string({\n description: \"Queue provider type (bullmq, sqs, pgboss) - required\",\n aliases: \"t\",\n name: \"type\",\n required: true,\n })\n static queueType: \"bullmq\" | \"sqs\" | \"pgboss\";\n\n @flag.string({\n description:\n \"Output directory for queue configuration, default is src/queue\",\n aliases: \"o\",\n name: \"output\",\n required: false,\n defaultValue: \"src/queue\",\n })\n static outputPath: string;\n\n static queueDependencies: Record<string, string[]> = {\n bullmq: [\"bullmq\", \"ioredis\"],\n sqs: [\"@aws-sdk/client-sqs\", \"sqs-consumer\"],\n pgboss: [\"pg-boss\", \"pg\"],\n };\n\n static async handle(): Promise<void> {\n this.logger.info(`Initializing ${this.queueType} queue provider...`);\n\n if (![\"bullmq\", \"sqs\", \"pgboss\"].includes(this.queueType)) {\n this.logger.error(\n `Invalid queue type: ${this.queueType}. Must be one of: bullmq, sqs, pgboss`,\n );\n return;\n }\n\n const [packageManager, packageManagerCommand] = await getPackageManager();\n\n // Install dependencies if on npm, yarn, or pnpm\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const dependencies = this.queueDependencies[this.queueType];\n const uninstalledDeps = await getUninstalledPackages(dependencies);\n\n if (uninstalledDeps.length > 0) {\n this.logger.info(\n `Found ${uninstalledDeps.length} missing dependencies for ${this.queueType}`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDeps.join(\" \")}`,\n packageManager,\n uninstalledDeps,\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Queue initialization aborted.\",\n );\n return;\n }\n }\n\n if (uninstalledDeps.length === 0) {\n this.logger.info(\n `All ${this.queueType} dependencies are already installed`,\n );\n }\n }\n\n const configTemplate = this.getConfigTemplate();\n const fileName = `${this.queueType}.config.ts`;\n const fullPath = nativePath.join(this.outputPath, fileName);\n\n if (!(await nativeFs.exists(this.outputPath))) {\n await nativeFs.mkdir(this.outputPath, { recursive: true });\n }\n\n this.logger.info(`Creating ${fileName} file at ${this.outputPath}...`);\n await nativeFs.writeFile(\n fullPath,\n new TextEncoder().encode(configTemplate),\n );\n\n this.logger.info(\n `Queue configuration initialized successfully at ${fullPath}`,\n );\n this.logger.info(\n `Remember to update the configuration with your actual credentials`,\n );\n this.logger.info(`Use 'npx balda generate-queue' to create queue handlers`);\n }\n\n static getConfigTemplate(): string {\n if (this.queueType === \"bullmq\") {\n return this.getBullMQTemplate();\n }\n\n if (this.queueType === \"sqs\") {\n return this.getSQSTemplate();\n }\n\n if (this.queueType === \"pgboss\") {\n return this.getPGBossTemplate();\n }\n\n return \"\";\n }\n\n static getBullMQTemplate(): string {\n return `import { defineBullMQConfiguration } from \"balda\";\n\ndefineBullMQConfiguration({\n connection: {\n host: process.env.REDIS_HOST || \"localhost\",\n port: parseInt(process.env.REDIS_PORT || \"6379\", 10),\n password: process.env.REDIS_PASSWORD,\n },\n defaultJobOptions: {\n attempts: 3,\n backoff: {\n type: \"exponential\",\n delay: 1000,\n },\n },\n errorHandler: async (job, error) => {\n console.error(\\`Job \\${job.id} failed:\\`, error);\n },\n});\n`;\n }\n\n static getSQSTemplate(): string {\n return `import { defineSQSConfiguration } from \"balda\";\n\ndefineSQSConfiguration({\n client: {\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n consumer: {\n batchSize: 10,\n visibilityTimeout: 30,\n waitTimeSeconds: 20,\n queueUrlMap: {\n // Map your queue topics to SQS queue URLs\n // Example: \"user-notifications\": process.env.USER_NOTIFICATIONS_QUEUE_URL || \"\",\n },\n },\n errorHandler: (error) => {\n console.error(\"SQS error:\", error);\n },\n});\n`;\n }\n\n static getPGBossTemplate(): string {\n return `import { definePGBossConfiguration } from \"balda\";\n\ndefinePGBossConfiguration({\n connectionString:\n process.env.DATABASE_URL ||\n \"postgresql://user:password@localhost:5432/database\",\n errorHandler: (error) => {\n console.error(\"PG-Boss error:\", error);\n },\n});\n`;\n }\n}\n","import { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class ListCommand extends Command {\n static commandName = \"list\";\n static description = \"List all available commands\";\n static help = [\n \"Display all registered Balda CLI commands with their descriptions\",\n \"Example: npx balda list\",\n ];\n\n static async handle(): Promise<void> {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Group user commands by category\n if (userCommands.length > 0) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n\n const categorizedCommands = this.groupByCategory(userCommands);\n this.displayCategorizedCommands(categorizedCommands);\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length > 0) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n }\n\n private static groupByCategory(\n commands: (typeof Command)[],\n ): Map<string, (typeof Command)[]> {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n }\n\n private static displayCategorizedCommands(\n categorizedCommands: Map<string, (typeof Command)[]>,\n ): void {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (commands.length === 0) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n }\n}\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager, execWithPrompt } from \"../../package.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { runtime } from \"../../runtime/runtime.js\";\nimport { Command } from \"../base_command.js\";\nimport { CommandOptions } from \"../command_types.js\";\nimport { arg } from \"../../decorators/command/arg.js\";\n\nexport default class ServeCommand extends Command {\n static commandName = \"serve\";\n static description = \"Run the server in dev mode with hot reload\";\n static help = [\n \"This command is intended to be run from the root of the project\",\n \"Bun and Deno have native dev hot reload\",\n \"Runtime is automatically inferred\",\n \"Node.js requires tsx to be installed for both typescript and javascript files\",\n \"Node.js dev dependencies (tsx) are installed automatically if not detected\",\n ];\n\n static runtime = runtime.type;\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @arg({\n required: false,\n defaultValue: \"src/index.ts\",\n description: \"The entry point of the project, default is src/index.ts\",\n })\n static entry: string;\n\n @flag.string({\n aliases: [\"d\"],\n name: \"deno-import-map\",\n required: false,\n description: \"Path to deno import map\",\n })\n static denoImportMap?: string;\n\n static async handle(): Promise<void> {\n if (this.runtime === \"bun\") {\n execSync(`bun run --watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n if (this.runtime === \"deno\") {\n let denoCommand = `deno run --watch --unstable-sloppy-imports --allow-all`;\n if (this.denoImportMap) {\n denoCommand = `${denoCommand} --import-map ${this.denoImportMap}`;\n }\n\n execSync(`${denoCommand} ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n this.handleNodeHotReload();\n }\n\n private static async handleNodeHotReload() {\n const hasTsx = fs.existsSync(\"node_modules/.bin/tsx\");\n if (!hasTsx) {\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} tsx ${devFlag}`,\n packageManager,\n [\"tsx\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Cannot start dev server without tsx.\",\n );\n return;\n }\n }\n\n const initCommand = this.calledBy !== \"node\" ? this.calledBy : \"npx\";\n execSync(`${initCommand} tsx watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class SetupStorageCommand extends Command {\n static commandName = \"setup-storage\";\n static description = \"Setup storage provider with required dependencies\";\n static help = [\n \"Install dependencies and create storage configuration for a specific provider\",\n \"Flags:\",\n \" -t, --type <provider> Storage provider type (s3, azure, local)\",\n \" -o, --output <path> Output directory for storage setup (default: src/storage/)\",\n \"\",\n \"Examples:\",\n \" npx balda setup:storage -t s3\",\n \" npx balda setup:storage --type azure --output src/config/\",\n ];\n\n @flag({\n description: \"Storage provider type (s3, azure, local)\",\n type: \"string\",\n aliases: [\"t\"],\n name: \"type\",\n required: true,\n })\n static storageType: string;\n\n @flag({\n description: \"Output directory for storage setup\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"src/storage/\",\n })\n static outputPath: string;\n\n static async handle(): Promise<void> {\n if (!this.storageType) {\n console.error(\n \"\\x1b[31m❌ Error: Storage type is required. Use -t or --type flag.\\x1b[0m\",\n );\n console.log(\"\\x1b[90mExample: npx balda setup:storage -t s3\\x1b[0m\\n\");\n return;\n }\n\n if (!this.outputPath) {\n await nativeFs.mkdir(nativePath.join(process.cwd(), this.outputPath), {\n recursive: true,\n });\n }\n\n const validTypes = [\"s3\", \"azure\", \"local\"];\n if (!validTypes.includes(this.storageType)) {\n console.error(\n `\\x1b[31m❌ Error: Invalid storage type '${this.storageType}'. Valid types: ${validTypes.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(\n `\\n🚀 Setting up ${this.storageType.toUpperCase()} storage provider...\\n`,\n );\n\n const dependencies = this.getDependencies(this.storageType);\n\n if (dependencies.length === 0) {\n console.log(\n `\\x1b[32m✅ ${this.storageType.toUpperCase()} storage doesn't require additional dependencies.\\x1b[0m\\n`,\n );\n }\n\n if (dependencies.length) {\n const missingDeps = await this.checkMissingDependencies(dependencies);\n\n if (missingDeps.length === 0) {\n console.log(\n `\\x1b[32m✅ All required dependencies are already installed.\\x1b[0m\\n`,\n );\n }\n\n if (missingDeps.length) {\n const [packageManager, installCommand] = await getPackageManager();\n const command = `${packageManager} ${installCommand} ${missingDeps.join(\" \")}`;\n\n const installed = await execWithPrompt(\n command,\n packageManager,\n missingDeps,\n { stdio: \"inherit\" },\n false,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ Dependency installation skipped by user.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ Dependencies installed successfully!\\x1b[0m\\n`,\n );\n }\n }\n\n await this.createStorageSetup(this.storageType, this.outputPath);\n\n console.log(\n `\\x1b[32m✨ ${this.storageType.toUpperCase()} storage setup complete!\\x1b[0m\\n`,\n );\n }\n\n private static getDependencies(storageType: string): string[] {\n const dependencyMap: Record<string, string[]> = {\n s3: [\n \"@aws-sdk/client-s3\",\n \"@aws-sdk/s3-request-presigner\",\n \"@aws-sdk/cloudfront-signer\",\n ],\n azure: [\"@azure/storage-blob\"],\n local: [],\n };\n\n return dependencyMap[storageType] || [];\n }\n\n private static async checkMissingDependencies(\n dependencies: string[],\n ): Promise<string[]> {\n const packageJsonPath = nativePath.join(process.cwd(), \"package.json\");\n const exists = await nativeFs.exists(packageJsonPath);\n if (!exists) {\n return dependencies;\n }\n\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const nodeModulesExists = await nativeFs.exists(nodeModulesPath);\n if (!nodeModulesExists) {\n return dependencies;\n }\n\n const missing: string[] = [];\n for (const dep of dependencies) {\n const depPath = nativePath.join(nodeModulesPath, dep);\n const depExists = await nativeFs.exists(depPath);\n if (!depExists) {\n missing.push(dep);\n }\n }\n\n return missing;\n }\n\n private static async createStorageSetup(\n storageType: string,\n outputPath: string,\n ): Promise<void> {\n const resolvedPath = nativePath.join(process.cwd(), outputPath);\n const exists = await nativeFs.exists(resolvedPath);\n\n if (!exists) {\n await nativeFs.mkdir(resolvedPath, { recursive: true });\n }\n\n const configFile = nativePath.join(resolvedPath, `storage.ts`);\n const configExists = await nativeFs.exists(configFile);\n if (configExists) {\n console.log(\n `\\x1b[33m⚠️ Configuration file already exists: ${configFile}\\x1b[0m`,\n );\n return;\n }\n\n const template = this.getConfigTemplate(storageType);\n await nativeFs.writeFile(configFile, new TextEncoder().encode(template));\n\n console.log(`\\x1b[32m✅ Created configuration file: ${configFile}\\x1b[0m`);\n }\n\n private static getConfigTemplate(storageType: string): string {\n const templates: Record<string, string> = {\n s3: `import { Storage, S3StorageProvider } from \"balda\";\n\n/**\n * S3 Storage Configuration\n *\n * Environment variables required:\n * - AWS_ACCESS_KEY_ID\n * - AWS_SECRET_ACCESS_KEY\n * - AWS_REGION\n * - S3_BUCKET\n *\n * Optional for CloudFront:\n * - CLOUDFRONT_DOMAIN\n * - CLOUDFRONT_KEY_PAIR_ID\n * - CLOUDFRONT_PRIVATE_KEY\n */\n\nexport const storage = new Storage(\n {\n s3: new S3StorageProvider({\n s3ClientConfig: {\n bucketName: process.env.S3_BUCKET || \"your-bucket-name\",\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n // Uncomment to enable CloudFront signed URLs\n // cloudfrontOptions: {\n // domainName: process.env.CLOUDFRONT_DOMAIN || \"\",\n // keyPairId: process.env.CLOUDFRONT_KEY_PAIR_ID || \"\",\n // privateKey: process.env.CLOUDFRONT_PRIVATE_KEY || \"\",\n // },\n }),\n },\n {\n defaultProvider: \"s3\",\n },\n);\n`,\n azure: `import { Storage, AzureBlobStorageProvider } from \"balda\";\n\n/**\n * Azure Blob Storage Configuration\n *\n * Environment variables required:\n * - AZURE_STORAGE_CONNECTION_STRING\n * - AZURE_CONTAINER_NAME\n * - AZURE_STORAGE_ACCOUNT\n * - AZURE_STORAGE_KEY\n */\n\nexport const storage = new Storage(\n {\n azure: new AzureBlobStorageProvider({\n containerName: process.env.AZURE_CONTAINER_NAME || \"your-container-name\",\n connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || \"\",\n storageAccountName: process.env.AZURE_STORAGE_ACCOUNT || \"\",\n storageAccountKey: process.env.AZURE_STORAGE_KEY || \"\",\n }),\n },\n {\n defaultProvider: \"azure\",\n },\n);\n`,\n local: `import { Storage, LocalStorageProvider } from \"balda\";\n\n/**\n * Local Storage Configuration\n */\nexport const storage = new Storage(\n {\n local: new LocalStorageProvider({\n directory: \"./uploads\",\n }),\n },\n {\n defaultProvider: \"local\",\n },\n);\n`,\n };\n\n return templates[storageType] || \"\";\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport type { Command } from \"./base_command.js\";\nimport BuildCommand from \"./base_commands/build_command.js\";\nimport GenerateCommand from \"./base_commands/generate_command.js\";\nimport GenerateControllerCommand from \"./base_commands/generate_controller.js\";\nimport GenerateCronCommand from \"./base_commands/generate_cron.js\";\nimport GenerateMiddlewareCommand from \"./base_commands/generate_middleware.js\";\nimport GenerateMqttCommand from \"./base_commands/generate_mqtt.js\";\nimport GeneratePluginCommand from \"./base_commands/generate_plugin.js\";\nimport GenerateQueueCommand from \"./base_commands/generate_queue.js\";\nimport GenerateSdkCommand from \"./base_commands/generate_sdk.js\";\nimport InitCommand from \"./base_commands/init_command.js\";\nimport InitQueueCommand from \"./base_commands/init_queue_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport ServeCommand from \"./base_commands/serve_command.js\";\nimport SetupStorageCommand from \"./base_commands/setup_storage_command.js\";\n\n// Base commands are always loaded\nexport const baseCommands = [\n GeneratePluginCommand,\n GenerateCommand,\n GenerateCronCommand,\n GenerateMqttCommand,\n GenerateQueueCommand,\n GenerateControllerCommand,\n GenerateMiddlewareCommand,\n GenerateSdkCommand,\n InitCommand,\n InitQueueCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n SetupStorageCommand,\n];\n\n/**\n * Singleton that registers all commands and provides a way to execute them.\n * Commands are loaded from the commands directory, and are expected to have a default export with the command class that extends the base command class.\n * Commands can be run both as `.js` or `.ts` files. If the file is a ts file `typescript` npm package must be installed.\n * You can use the `CommandRegistry.setCommandsPattern` method to change the pattern of the commands to load.\n * @example\n * // commands/test.ts\n * export default class TestCommand extends Command {\n * static name = \"test\";\n * async handle() {\n * console.log(\"Test command\");\n * }\n * }\n */\nexport class CommandRegistry {\n private commands: Map<string, typeof Command>;\n private builtInCommands: Set<string>;\n static commandsPattern = \"src/commands/**/*.{ts,js}\";\n static logger = logger;\n\n /**\n * Private constructor to prevent direct instantiation\n * @internal Not meant to be used outside by the user\n */\n private constructor() {\n this.commands = new Map();\n this.builtInCommands = new Set();\n }\n\n static getInstance() {\n return new CommandRegistry();\n }\n\n static setCommandsPattern(pattern: string) {\n this.commandsPattern = pattern;\n }\n\n getCommand(name: string): typeof Command | null {\n return this.commands.get(name) ?? null;\n }\n\n getCommands(): (typeof Command)[] {\n return Array.from(this.commands.values());\n }\n\n getBuiltInCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter((cmd) =>\n this.builtInCommands.has(cmd.commandName),\n );\n }\n\n getUserDefinedCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter(\n (cmd) => !this.builtInCommands.has(cmd.commandName),\n );\n }\n\n isBuiltInCommand(commandName: string): boolean {\n return this.builtInCommands.has(commandName);\n }\n\n async loadCommands(commandsPattern: string) {\n CommandRegistry.logger.info(`Loading commands from ${commandsPattern}`);\n\n const commandFiles = await glob(commandsPattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n // if even one file is ts check if ts-node is installed\n if (commandFiles.some((file) => file.endsWith(\".ts\"))) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n } catch {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n }\n\n for (const commandFile of commandFiles) {\n const command = await import(commandFile)\n .then((module) => {\n if (module.default) {\n return module.default;\n }\n\n return module;\n })\n .catch((error) => {\n CommandRegistry.logger.error(\n `Error loading command ${commandFile}: ${error}`,\n );\n return null;\n });\n\n if (command) {\n this.commands.set(command.commandName, command);\n }\n }\n\n for (const command of baseCommands) {\n this.commands.set(command.commandName, command);\n this.builtInCommands.add(command.commandName);\n }\n }\n}\n\nexport const commandRegistry = CommandRegistry.getInstance();\n","declare global {\n interface Request {\n params: Record<string, string>;\n query: Record<string, string>;\n }\n}\n\nexport class NativeRequest extends Request {}\n","import type { ZodAny } from \"zod\";\nimport { AjvStateManager } from \"../../ajv/ajv.js\";\nimport { AjvCompileParams } from \"../../ajv/ajv_types.js\";\nimport { openapiSchemaMap } from \"../../ajv/openapi_schema_map.js\";\nimport type { AsyncLocalStorageContext } from \"../../plugins/async_local_storage/async_local_storage_types.js\";\nimport type { FormFile } from \"../../plugins/file/file_types.js\";\nimport { nativeCrypto } from \"../../runtime/native_crypto.js\";\nimport { NativeRequest } from \"../../runtime/native_request.js\";\nimport { validateSchema } from \"../../validator/validator.js\";\nimport { ZodLoader } from \"../../validator/zod_loader.js\";\n\n/**\n * WeakMap to cache schema objects by reference, avoiding expensive JSON.stringify calls.\n * Uses Symbol for unique cache keys to prevent any potential counter overflow in long-running servers.\n */\nconst schemaRefCache = new WeakMap<object, symbol>();\n\n/**\n * The request object.\n * This is the main object that is passed to the handler function.\n * It contains the request body, query parameters, files, cookies, etc.\n * It also contains the validation methods.\n */\nexport class Request<\n Params extends Record<string, string> = any,\n> extends NativeRequest {\n static fromRequest(request: Request | NativeRequest): Request {\n return new Request(request.url, {\n method: request.method,\n body: request.body,\n headers: request.headers,\n });\n }\n\n private static compileAndValidate(\n inputSchema: ZodAny | AjvCompileParams[0],\n data: any,\n safe: boolean,\n ): any {\n let jsonSchema: any;\n let cacheKey: string;\n\n if (ZodLoader.isZodSchema(inputSchema)) {\n const zodSchema = inputSchema as ZodAny;\n\n // Try to get cache key from WeakMap first\n let refKey = schemaRefCache.get(zodSchema);\n if (!refKey) {\n refKey = Symbol(\"zod_schema\");\n schemaRefCache.set(zodSchema, refKey);\n }\n\n // Check if we already have a compiled schema\n let cached = openapiSchemaMap.get(refKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n // Convert to JSON schema and compile\n jsonSchema = zodSchema.toJSONSchema();\n const compiledSchema = AjvStateManager.ajv.compile(jsonSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n const plainSchema = inputSchema as AjvCompileParams[0];\n\n // Try to use WeakMap cache for object references\n if (typeof plainSchema === \"object\" && plainSchema !== null) {\n let refKey = schemaRefCache.get(plainSchema);\n if (!refKey) {\n refKey = Symbol(\"json_schema\");\n schemaRefCache.set(plainSchema, refKey);\n }\n\n const cached = openapiSchemaMap.get(refKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n const compiledSchema = AjvStateManager.ajv.compile(plainSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n // Fallback to JSON.stringify for primitives or edge cases\n cacheKey = JSON.stringify(plainSchema);\n const cached = openapiSchemaMap.get(cacheKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n const compiledSchema = AjvStateManager.ajv.compile(plainSchema);\n openapiSchemaMap.set(cacheKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n /**\n * Enrich native request with validation methods.\n */\n static enrichRequest(request: Request): Request {\n request.validate = (\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any => {\n return Request.compileAndValidate(inputSchema, request.body || {}, safe);\n };\n\n request.validateQuery = (\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any => {\n return Request.compileAndValidate(inputSchema, request.query || {}, safe);\n };\n\n request.validateAll = (\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any => {\n return Request.compileAndValidate(\n inputSchema,\n {\n ...(request.body ? { body: request.body } : {}),\n ...(request.query ? { query: request.query } : {}),\n },\n safe,\n );\n };\n\n request.file = (fieldName: string) => {\n return request.files.find((file) => file.formName === fieldName) ?? null;\n };\n\n request.files = [];\n request.saveSession = async () => {};\n request.destroySession = async () => {};\n request.session = {};\n request.cookies = {};\n request.cookie = (name: string) => {\n return request.cookies[name];\n };\n\n return request;\n }\n\n /**\n * The context of the request. Can be augmented extending AsyncLocalStorageContext interface\n * @asyncLocalStorage middleware is required\n * @example\n * ```ts\n * declare module \"balda\" {\n * interface AsyncLocalStorageContext {\n * userId: string;\n * }\n * }\n * ```\n */\n ctx: AsyncLocalStorageContext = {} as AsyncLocalStorageContext;\n\n /**\n * The file of the request.\n * @fileParser middleware is required\n */\n file: (fieldName: string) => FormFile | null = (fieldName: string) => {\n return this.files.find((file) => file.formName === fieldName) ?? null;\n };\n\n /**\n * The cookies of the request.\n * @cookie middleware is required\n */\n cookies: Record<string, string> = {};\n\n /**\n * The cookie of the request.\n * @cookie middleware is required\n */\n cookie: (name: string) => string | undefined = (name: string) => {\n return this.cookies[name];\n };\n\n /**\n * tells if the request has timed out.\n * @timeout middleware is required\n */\n timeout?: boolean;\n\n /**\n * The session of the request. Uses cookies to send the session id\n * @cookie middleware is required\n * @session middleware is required\n */\n session?: Record<string, any> = undefined;\n\n /**\n * The session of the request. Uses cookies to send the session id\n * @cookie middleware is required\n * @session middleware is required\n */\n saveSession: () => Promise<void> = async () => {};\n\n /**\n * The session of the request.\n * @cookie middleware is required\n * @session middleware is required\n */\n destroySession: () => Promise<void> = async () => {};\n\n /**\n * The ip address of the request.\n * Tries to get the ip address from the `x-forwarded-for` header. If not available, it will use the remote address from the request.\n */\n ip?: string;\n\n /**\n * The files of the request. Only available for multipart/form-data requests and if the file parser middleware is used.\n */\n files: FormFile[] = [];\n\n /**\n * The parameters of the request. Can be typed with a generic in the Request object\n * @example\n * ```ts\n * Request<{ id: string }>\n */\n params: Params = {} as Params;\n\n /**\n * The query parameters of the request.\n */\n query: Record<string, string> = {};\n\n /**\n * The raw body of the request. Only available for POST, PUT, PATCH and DELETE requests.\n */\n declare rawBody?: ArrayBuffer;\n\n declare private _id: string;\n\n /**\n * The id of the request.\n */\n get id(): string {\n if (!this._id) {\n this._id = nativeCrypto.randomUUID();\n }\n\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n }\n\n /**\n * The parsed body of the request\n */\n override body: any;\n\n /**\n * The validated body of the request.\n * @param inputSchema - The schema to validate the body against (Zod schema or JSON Schema).\n * @param safe - If true, the function will return the original body if the validation fails instead of throwing an error.\n */\n validate(\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any {\n return Request.compileAndValidate(inputSchema, this.body || {}, safe);\n }\n\n /**\n * Validates the query string of the request.\n * @param inputSchema - The schema to validate the query against (Zod schema or JSON Schema).\n * @param safe - If true, the function will return undefined if the validation fails instead of throwing an error.\n */\n validateQuery(\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any {\n return Request.compileAndValidate(inputSchema, this.query || {}, safe);\n }\n\n /**\n * Validates the body and query string of the request.\n * @param inputSchema - The schema to validate against (Zod schema or JSON Schema).\n * @param safe - If true, the function will return undefined if the validation fails instead of throwing an error.\n */\n validateAll(\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any {\n return Request.compileAndValidate(\n inputSchema,\n {\n ...(this.body ?? {}),\n ...(this.query ?? {}),\n },\n safe,\n );\n }\n}\n","import { runtime } from \"./runtime.js\";\n\nexport class NativeEnv {\n get(key: string): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return process.env[key] ?? \"\";\n default:\n throw new Error(`Unsupported runtime: ${runtime.type}`);\n }\n }\n\n getEnvironment(): Record<string, string> {\n switch (runtime.type) {\n case \"node\":\n case \"deno\":\n case \"bun\":\n return Object.fromEntries(\n Object.entries(process.env).filter(\n ([_, value]) => value !== undefined,\n ),\n ) as Record<string, string>;\n }\n }\n}\n","import type { BaldaError } from \"./balda_error.js\";\nimport { NativeEnv } from \"../runtime/native_env.js\";\n\nconst nativeEnv = new NativeEnv();\n\nexport const errorFactory = (error: BaldaError) => {\n const isDevelopment = nativeEnv.get(\"NODE_ENV\") !== \"production\";\n\n return {\n code: error.name || \"INTERNAL_ERROR\",\n message: error.message,\n ...(isDevelopment && { stack: error.stack, cause: error.cause }),\n };\n};\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class MethodNotAllowedError extends BaldaError {\n constructor(path: string, method: string) {\n super(`METHOD_NOT_ALLOWED: Cannot ${method} ${path}`);\n }\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class RouteNotFoundError extends BaldaError {\n constructor(path: string, method: string) {\n super(`ROUTE_NOT_FOUND: Cannot ${method} ${path}`);\n }\n}\n","import fs from \"node:fs\";\nimport { runtime } from \"./runtime.js\";\n\nexport type ReadFileOptions = {\n encoding?: string;\n flag?: string;\n};\n\nclass NativeFile {\n file(\n path: string,\n options?: ReadFileOptions,\n ): Buffer | Uint8Array | ArrayBuffer {\n switch (runtime.type) {\n // We do not use Bun api since we need this operation to be sync\n case \"bun\":\n case \"node\":\n return fs.readFileSync(path, options as any);\n case \"deno\":\n return Deno.readFileSync(path);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFile = new NativeFile();\n","export const mimeTypesMap = new Map<string, string>([\n // text/web\n [\".html\", \"text/html\"],\n [\".htm\", \"text/html\"],\n [\".css\", \"text/css\"],\n [\".js\", \"application/javascript\"],\n [\".mjs\", \"application/javascript\"],\n [\".cjs\", \"application/javascript\"],\n [\".ts\", \"application/typescript\"],\n [\".jsx\", \"text/jsx\"],\n [\".tsx\", \"text/tsx\"],\n [\".json\", \"application/json\"],\n [\".xml\", \"application/xml\"],\n [\".yaml\", \"application/yaml\"],\n [\".yml\", \"application/yaml\"],\n [\".csv\", \"text/csv\"],\n [\".txt\", \"text/plain\"],\n [\".md\", \"text/markdown\"],\n [\".markdown\", \"text/markdown\"],\n\n // image\n [\".png\", \"image/png\"],\n [\".jpg\", \"image/jpeg\"],\n [\".jpeg\", \"image/jpeg\"],\n [\".gif\", \"image/gif\"],\n [\".svg\", \"image/svg+xml\"],\n [\".ico\", \"image/x-icon\"],\n [\".webp\", \"image/webp\"],\n [\".avif\", \"image/avif\"],\n [\".bmp\", \"image/bmp\"],\n [\".tiff\", \"image/tiff\"],\n [\".tif\", \"image/tiff\"],\n [\".heic\", \"image/heic\"],\n [\".heif\", \"image/heif\"],\n\n // video\n [\".mp4\", \"video/mp4\"],\n [\".webm\", \"video/webm\"],\n [\".avi\", \"video/x-msvideo\"],\n [\".mov\", \"video/quicktime\"],\n [\".mkv\", \"video/x-matroska\"],\n [\".wmv\", \"video/x-ms-wmv\"],\n [\".flv\", \"video/x-flv\"],\n [\".m4v\", \"video/x-m4v\"],\n [\".mpeg\", \"video/mpeg\"],\n [\".mpg\", \"video/mpeg\"],\n [\".3gp\", \"video/3gpp\"],\n\n // audio\n [\".mp3\", \"audio/mpeg\"],\n [\".wav\", \"audio/wav\"],\n [\".ogg\", \"audio/ogg\"],\n [\".flac\", \"audio/flac\"],\n [\".aac\", \"audio/aac\"],\n [\".m4a\", \"audio/mp4\"],\n [\".wma\", \"audio/x-ms-wma\"],\n [\".opus\", \"audio/opus\"],\n [\".mid\", \"audio/midi\"],\n [\".midi\", \"audio/midi\"],\n\n // font\n [\".woff\", \"font/woff\"],\n [\".woff2\", \"font/woff2\"],\n [\".ttf\", \"font/ttf\"],\n [\".otf\", \"font/otf\"],\n [\".eot\", \"application/vnd.ms-fontobject\"],\n\n // document\n [\".pdf\", \"application/pdf\"],\n [\".doc\", \"application/msword\"],\n [\n \".docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n ],\n [\".xls\", \"application/vnd.ms-excel\"],\n [\n \".xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n ],\n [\".ppt\", \"application/vnd.ms-powerpoint\"],\n [\n \".pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ],\n [\".odt\", \"application/vnd.oasis.opendocument.text\"],\n [\".ods\", \"application/vnd.oasis.opendocument.spreadsheet\"],\n [\".odp\", \"application/vnd.oasis.opendocument.presentation\"],\n [\".rtf\", \"application/rtf\"],\n [\".epub\", \"application/epub+zip\"],\n\n // archives\n [\".zip\", \"application/zip\"],\n [\".tar\", \"application/x-tar\"],\n [\".gz\", \"application/gzip\"],\n [\".gzip\", \"application/gzip\"],\n [\".bz2\", \"application/x-bzip2\"],\n [\".xz\", \"application/x-xz\"],\n [\".rar\", \"application/vnd.rar\"],\n [\".7z\", \"application/x-7z-compressed\"],\n\n // other\n [\".wasm\", \"application/wasm\"],\n [\".map\", \"application/json\"],\n [\".webmanifest\", \"application/manifest+json\"],\n [\".ics\", \"text/calendar\"],\n [\".vcf\", \"text/vcard\"],\n [\".sql\", \"application/sql\"],\n [\".sh\", \"application/x-sh\"],\n [\".bat\", \"application/x-msdos-program\"],\n [\".exe\", \"application/x-msdownload\"],\n [\".dll\", \"application/x-msdownload\"],\n [\".bin\", \"application/octet-stream\"],\n [\".iso\", \"application/x-iso9660-image\"],\n [\".dmg\", \"application/x-apple-diskimage\"],\n [\".apk\", \"application/vnd.android.package-archive\"],\n [\".jar\", \"application/java-archive\"],\n [\".swf\", \"application/x-shockwave-flash\"],\n]);\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { MethodNotAllowedError } from \"../../errors/method_not_allowed.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { SwaggerRouteOptions } from \"../swagger/swagger_types.js\";\nimport { nativeFile } from \"../../runtime/native_file.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { mimeTypesMap } from \"../../plugins/static/static_constants.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { StaticPluginOptions } from \"./static_types.js\";\n\n/**\n * Creates a static file serving middleware and registers all routes for the given path\n * @param options - The options for serving static files\n * @param options.source - The file system directory path where the assets are located\n * @param options.path - The URL path where the assets will be served\n * @param swaggerOptions - Optional swagger documentation options\n * @example\n * serveStatic({ source: 'tmp/assets', path: '/assets' }) // Serves from ./tmp/assets at /assets/*\n *\n * @example\n * serveStatic({ source: 'public', path: '/public' }) // Serves from ./public at /public/*\n */\nexport const serveStatic = (\n options: StaticPluginOptions,\n swaggerOptions?: SwaggerRouteOptions,\n): ServerRouteMiddleware => {\n const { source, path: urlPath } = options;\n\n // Normalize URL path\n let normalizedPath = urlPath;\n\n // Ensure path starts with /\n if (!normalizedPath.startsWith(\"/\")) {\n normalizedPath = \"/\" + normalizedPath;\n }\n\n // Remove trailing slash if present\n if (normalizedPath !== \"/\" && normalizedPath.endsWith(\"/\")) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n\n // Static files handler\n router.addOrUpdate(\n \"GET\",\n `${normalizedPath}/*`,\n [],\n async (req, res) => {\n return staticFileHandler(req, res, source);\n },\n {\n service: \"StaticFiles\",\n ...swaggerOptions,\n },\n );\n\n return async (_req: Request, _res: Response, next: NextFunction) => {\n return next();\n };\n};\n\nasync function staticFileHandler(req: Request, res: Response, path: string) {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n return res.status(405).json({\n ...errorFactory(new MethodNotAllowedError(req.url, req.method)),\n });\n }\n\n const wildcardPath = req.params[\"*\"] || \"\";\n const filePath = nativePath.join(path, wildcardPath);\n const resolvedPath = nativePath.resolve(nativeCwd.getCwd(), filePath);\n const sourcePath = nativePath.resolve(nativeCwd.getCwd(), path);\n if (!resolvedPath.startsWith(sourcePath)) {\n return res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }\n\n try {\n const stats = await nativeFs.stat(resolvedPath);\n if (!stats.isFile) {\n return res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }\n } catch (error: any) {\n if (error.code === \"ENOENT\") {\n return res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }\n throw error;\n }\n\n const contentType = getContentType(nativePath.extName(resolvedPath));\n res.setHeader(\"Content-Type\", contentType);\n const fileContent = nativeFile.file(resolvedPath);\n res.raw(fileContent);\n}\n\nexport function getContentType(ext: string) {\n return mimeTypesMap.get(ext) || \"application/octet-stream\";\n}\n","import { type ServerResponse } from \"node:http\";\nimport { type CookieOptions } from \"../../plugins/cookie/cookie_types.js\";\nimport { getContentType } from \"../../plugins/static/static.js\";\nimport { nativeFile } from \"../../runtime/native_file.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\n\n/**\n * The response object.\n * This is the main object that is passed to the handler function.\n * It contains the response body, status, headers, etc.\n * It also contains the methods to send the response.\n */\nexport class Response {\n /**\n * The node http response object available only on the node runtime, useful for direct response manipulation\n * @warning undefined on other runtimes since they already use Web API Response object\n */\n declare nodeResponse: ServerResponse;\n\n /**\n * The status of the response\n */\n responseStatus: number;\n\n /**\n * The headers of the response\n */\n headers: Record<string, string>;\n\n /**\n * The body of the response\n */\n private body: any | Promise<any>;\n\n constructor(status: number = 200) {\n this.responseStatus = status;\n this.headers = {};\n }\n\n /**\n * Set a header for the response\n */\n setHeader(key: string, value: string): this {\n this.headers[key] = value;\n return this;\n }\n\n /**\n * Set the status of the response, status defaults to 200\n */\n status(status: number): this {\n this.responseStatus = status;\n return this;\n }\n\n /**\n * Send a response with the given body, tries to determine the content type based on the body type, status defaults to 200\n * @warning If cannot determine the content type, it will be sent as is\n */\n send(body: any): void {\n if (body === null || body === undefined) {\n return this.text(\"\");\n }\n\n if (typeof body === \"string\") {\n return this.text(body);\n }\n\n if (\n typeof body === \"number\" ||\n typeof body === \"boolean\" ||\n typeof body === \"bigint\"\n ) {\n return this.raw(body);\n }\n\n if (typeof Buffer !== \"undefined\" && body instanceof Buffer) {\n return this.download(new Uint8Array(body));\n }\n\n if (body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return this.download(new Uint8Array(body));\n }\n\n if (typeof body === \"object\" && body !== null) {\n try {\n return this.json(body);\n } catch (error) {\n return this.text(String(body));\n }\n }\n\n if (typeof body === \"symbol\") {\n return this.text(body.toString());\n }\n\n this.body = body;\n }\n\n /**\n * Send a response with the given body without any content type or encoding (as is), status defaults to 200\n */\n raw(body: any): void {\n this.body = body;\n }\n\n /**\n * Send a response with the given text, status defaults to 200\n */\n text(body: string): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"text/plain\",\n };\n }\n\n /**\n * Send a response with the given JSON, status defaults to 200\n */\n json<T extends Record<string, unknown> | Array<unknown>>(body: T): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"application/json\",\n };\n }\n\n /**\n * Send a response with the given HTML, status defaults to 200\n */\n html(htmlString: string): void {\n this.body = htmlString;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"text/html\",\n };\n }\n\n /**\n * Send a response with the given XML, status defaults to 200\n */\n xml(body: string): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"application/xml\",\n };\n }\n\n /**\n * Send a response with the given binary with Content-Type of application/octet-stream header, status defaults to 200\n */\n download(body: Uint8Array | Buffer): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"application/octet-stream\",\n };\n }\n\n /**\n * Send a response with the given file content, status defaults to 200\n * @param options only affects node and bun environment\n */\n file(\n pathToFile: string,\n options?: {\n encoding?: string;\n flag?: string;\n },\n ): void {\n const ext = nativePath.extName(pathToFile);\n const mimeType = getContentType(ext);\n this.body = nativeFile.file(pathToFile, options);\n this.headers = {\n ...this.headers,\n \"Content-Type\": mimeType,\n };\n }\n\n /**\n * 2XX Success\n */\n\n /**\n * 200 OK\n */\n ok(body?: any): void {\n this.status(200).send(body);\n }\n\n /**\n * 201 Created\n */\n created(body?: any): void {\n this.status(201).send(body);\n }\n\n /**\n * 202 Accepted\n */\n accepted(body?: any): void {\n this.status(202).send(body);\n }\n\n /**\n * 204 No Content\n */\n noContent(): void {\n this.status(204).send(\"\");\n }\n\n /**\n * 206 Partial Content\n */\n partialContent(body?: any): void {\n this.status(206).send(body);\n }\n\n /**\n * 3XX Redirection\n */\n\n /**\n * 300 Multiple Choices\n */\n multipleChoices(url: string): void {\n this.status(300).setHeader(\"Location\", url);\n }\n\n redirect(url: string): void {\n this.status(302).setHeader(\"Location\", url);\n }\n\n /**\n * 301 Moved Permanently\n */\n movedPermanently(url: string): void {\n this.status(301).setHeader(\"Location\", url);\n }\n\n /**\n * 302 Found (Temporary Redirect)\n */\n found(url: string): void {\n this.status(302).setHeader(\"Location\", url);\n }\n\n /**\n * 303 See Other\n */\n seeOther(url: string): void {\n this.status(303).setHeader(\"Location\", url);\n }\n\n /**\n * 304 Not Modified\n */\n notModified(): void {\n this.status(304).send(\"\");\n }\n\n /**\n * 307 Temporary Redirect\n */\n temporaryRedirect(url: string): void {\n this.status(307).setHeader(\"Location\", url);\n }\n\n /**\n * 308 Permanent Redirect\n */\n permanentRedirect(url: string): void {\n this.status(308).setHeader(\"Location\", url);\n }\n\n /**\n * 4XX Client Errors\n */\n\n /**\n * 400 Bad Request\n */\n badRequest(body?: any): void {\n this.status(400).send(body);\n }\n\n /**\n * 401 Unauthorized\n */\n unauthorized(body?: any): void {\n this.status(401).send(body);\n }\n\n /**\n * 403 Forbidden\n */\n forbidden(body?: any): void {\n this.status(403).send(body);\n }\n\n /**\n * 404 Not Found\n */\n notFound(body?: any): void {\n this.status(404).send(body);\n }\n\n /**\n * 405 Method Not Allowed\n */\n methodNotAllowed(body?: any): void {\n this.status(405).send(body);\n }\n\n /**\n * 406 Not Acceptable\n */\n notAcceptable(body?: any): void {\n this.status(406).send(body);\n }\n\n /**\n * 409 Conflict\n */\n conflict(body?: any): void {\n this.status(409).send(body);\n }\n\n /**\n * 410 Gone\n */\n gone(body?: any): void {\n this.status(410).send(body);\n }\n\n /**\n * 413 Payload Too Large\n */\n payloadTooLarge(body?: any): void {\n this.status(413).send(body);\n }\n\n /**\n * 415 Unsupported Media Type\n */\n unsupportedMediaType(body?: any): void {\n this.status(415).send(body);\n }\n\n /**\n * 422 Unprocessable Entity\n */\n unprocessableEntity(body?: any): void {\n this.status(422).send(body);\n }\n\n /**\n * 429 Too Many Requests\n */\n tooManyRequests(body?: any): void {\n this.status(429).send(body);\n }\n\n /**\n * 5XX Server Errors\n */\n internalServerError(body?: any): void {\n this.status(500).send(body);\n }\n\n /**\n * 501 Not Implemented\n */\n notImplemented(body?: any): void {\n this.status(501).send(body);\n }\n\n /**\n * 502 Bad Gateway\n */\n badGateway(body?: any): void {\n this.status(502).send(body);\n }\n\n /**\n * 503 Service Unavailable\n */\n serviceUnavailable(body?: any): void {\n this.status(503).send(body);\n }\n\n /**\n * 504 Gateway Timeout\n */\n gatewayTimeout(body?: any): void {\n this.status(504).send(body);\n }\n\n /**\n * 505 HTTP Version Not Supported\n */\n httpVersionNotSupported(body?: any): void {\n this.status(505).send(body);\n }\n\n /**\n * Set a cookie for the response, cookie middleware must be registered in order to use this function\n */\n cookie?(_name: string, _value: string, _options?: CookieOptions): void;\n\n /**\n * Clear a cookie for the response, cookie middleware must be registered in order to use this function\n */\n clearCookie?(_name: string, _options?: CookieOptions): void;\n\n /**\n * Stream a response using an async generator or ReadableStream\n * Sets appropriate headers for Server-Sent Events by default\n */\n stream(\n source: AsyncGenerator<any> | Generator<any> | ReadableStream,\n options?: { customHeaders?: Record<string, string> },\n ): void {\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n ...options?.customHeaders,\n };\n\n if (source instanceof ReadableStream) {\n this.body = source;\n return;\n }\n\n this.body = new ReadableStream({\n async start(controller) {\n for await (const chunk of source) {\n controller.enqueue(new TextEncoder().encode(chunk));\n }\n\n controller.close();\n },\n });\n }\n\n /**\n * Get the body of the response\n */\n getBody(): any {\n return this.body;\n }\n}\n","import type { GraphQLSchema } from \"graphql\";\nimport type { createSchema, createYoga } from \"graphql-yoga\";\nimport type {\n GraphQLContext,\n GraphQLOptions,\n GraphQLResolverMap,\n GraphQLResolvers,\n GraphQLResolverType,\n GraphQLTypeDef,\n} from \"./graphql_types.js\";\n\nexport type { GraphQLContext };\n\nexport class GraphQL {\n private schemaOptions: Parameters<typeof createSchema>[0];\n private yogaOptions: Parameters<typeof createYoga>[0];\n isEnabled: boolean;\n\n constructor(options?: GraphQLOptions) {\n const config = this.initializeConfiguration(options);\n this.schemaOptions = config.schemaOptions;\n this.yogaOptions = config.yogaOptions;\n this.isEnabled = config.isEnabled;\n }\n\n getSchema(createSchemaFn: typeof createSchema): GraphQLSchema {\n return createSchemaFn(this.schemaOptions);\n }\n\n getYogaOptions(): Parameters<typeof createYoga>[0] {\n return this.yogaOptions;\n }\n\n /**\n * Add a type definition to the schema\n */\n addTypeDef(typeDef: GraphQLTypeDef): void {\n const isFunction = typeof typeDef === \"function\";\n if (isFunction) {\n this.addTypeDef(typeDef());\n return;\n }\n\n const isArray = Array.isArray(typeDef);\n if (isArray) {\n this.addTypeDefArray(typeDef);\n return;\n }\n\n this.ensureTypeDefsArray();\n (this.schemaOptions.typeDefs as unknown[]).push(typeDef);\n }\n\n /**\n * Add a resolver to the schema\n * @param type - The resolver type (Query, Mutation, Subscription, or a custom type name)\n * @param resolvers - An object mapping field names to resolver functions, or a full resolver object\n */\n addResolver(type: GraphQLResolverType, resolvers: GraphQLResolverMap): void;\n addResolver(resolver: GraphQLResolvers): void;\n addResolver(type: string, resolvers: GraphQLResolverMap): void;\n addResolver(\n typeOrResolver: GraphQLResolverType | GraphQLResolvers | string,\n resolvers?: GraphQLResolverMap,\n ): void {\n const isStringType = typeof typeOrResolver === \"string\" && resolvers;\n if (isStringType) {\n this.addResolverByType(typeOrResolver, resolvers);\n return;\n }\n\n this.addFullResolver(typeOrResolver as GraphQLResolvers);\n }\n\n private initializeConfiguration(options?: GraphQLOptions) {\n const hasNoOptions = !options;\n if (hasNoOptions) {\n return this.createDisabledConfiguration();\n }\n return this.createEnabledConfiguration(options);\n }\n\n private createDisabledConfiguration() {\n return {\n schemaOptions: {\n typeDefs: ``,\n resolvers: {},\n },\n yogaOptions: {},\n isEnabled: false,\n };\n }\n\n private createEnabledConfiguration(options: GraphQLOptions) {\n return {\n schemaOptions: this.resolveSchemaOptions(options.schema),\n yogaOptions: this.resolveYogaOptions(options.yogaOptions),\n isEnabled: true,\n };\n }\n\n private resolveSchemaOptions(\n schema: GraphQLOptions[\"schema\"],\n ): Parameters<typeof createSchema>[0] {\n const hasSchema = schema !== undefined;\n if (hasSchema) {\n return schema;\n }\n return {\n typeDefs: ``,\n resolvers: {},\n };\n }\n\n private resolveYogaOptions(\n yogaOptions: GraphQLOptions[\"yogaOptions\"],\n ): Parameters<typeof createYoga>[0] {\n const hasYogaOptions = yogaOptions !== undefined;\n if (hasYogaOptions) {\n return yogaOptions;\n }\n return {};\n }\n\n private addResolverByType(type: string, resolvers: GraphQLResolverMap): void {\n this.ensureResolversInitialized();\n\n const isArrayResolvers = Array.isArray(this.schemaOptions.resolvers);\n if (isArrayResolvers) {\n (this.schemaOptions.resolvers as unknown[]).push({ [type]: resolvers });\n return;\n }\n\n this.mergeResolverIntoObject(type, resolvers);\n }\n\n private ensureResolversInitialized(): void {\n const hasNoResolvers = !this.schemaOptions.resolvers;\n if (hasNoResolvers) {\n this.schemaOptions.resolvers = {};\n }\n }\n\n private mergeResolverIntoObject(\n type: string,\n resolvers: GraphQLResolverMap,\n ): void {\n const resolversObj = this.schemaOptions.resolvers as Record<\n string,\n unknown\n >;\n const existingTypeResolver = resolversObj[type];\n const isObjectResolver =\n existingTypeResolver && typeof existingTypeResolver === \"object\";\n\n if (isObjectResolver) {\n resolversObj[type] = {\n ...(existingTypeResolver as Record<string, unknown>),\n ...resolvers,\n };\n return;\n }\n\n resolversObj[type] = resolvers;\n }\n\n private addFullResolver(resolver: GraphQLResolvers): void {\n this.ensureResolversInitialized();\n\n const isArray = Array.isArray(resolver);\n if (isArray) {\n this.addResolverArray(resolver);\n return;\n }\n\n const isObject = typeof resolver === \"object\" && resolver !== null;\n if (isObject) {\n this.addResolverObject(resolver);\n return;\n }\n\n this.schemaOptions.resolvers = resolver;\n }\n\n private addResolverArray(resolver: GraphQLResolvers[]): void {\n const currentIsArray = Array.isArray(this.schemaOptions.resolvers);\n if (currentIsArray) {\n this.schemaOptions.resolvers = [\n ...(this.schemaOptions.resolvers as unknown[]),\n ...resolver,\n ] as GraphQLResolvers;\n return;\n }\n\n this.schemaOptions.resolvers = [\n this.schemaOptions.resolvers,\n ...resolver,\n ] as GraphQLResolvers;\n }\n\n private addResolverObject(resolver: GraphQLResolvers): void {\n const currentIsArray = Array.isArray(this.schemaOptions.resolvers);\n if (currentIsArray) {\n this.schemaOptions.resolvers = [\n ...(this.schemaOptions.resolvers as unknown[]),\n resolver,\n ] as GraphQLResolvers;\n return;\n }\n\n this.schemaOptions.resolvers = {\n ...(this.schemaOptions.resolvers as Record<string, unknown>),\n ...(resolver as Record<string, unknown>),\n } as GraphQLResolvers;\n }\n\n private addTypeDefArray(typeDefs: GraphQLTypeDef[]): void {\n for (const def of typeDefs) {\n this.addTypeDef(def);\n }\n }\n\n private ensureTypeDefsArray(): void {\n const isAlreadyArray = Array.isArray(this.schemaOptions.typeDefs);\n if (isAlreadyArray) {\n return;\n }\n\n const hasExistingTypeDefs = this.schemaOptions.typeDefs !== undefined;\n if (hasExistingTypeDefs) {\n this.schemaOptions.typeDefs = [\n this.schemaOptions.typeDefs,\n ] as GraphQLTypeDef;\n return;\n }\n\n this.schemaOptions.typeDefs = [] as unknown as GraphQLTypeDef;\n }\n}\n","import { Response } from \"../server/http/response.js\";\n\nexport class MockResponse<T = any> {\n constructor(private readonly response: Response) {}\n\n // base getters\n body(): T {\n return this.response.getBody();\n }\n\n statusCode(): number {\n return this.response.responseStatus;\n }\n\n headers(): Record<string, string> {\n return this.response.headers;\n }\n\n // assertions\n assertStatus(status: number): this {\n if (this.response.responseStatus !== status) {\n throw new Error(\n `Expected status ${status}, but got ${this.response.responseStatus}`,\n );\n }\n return this;\n }\n\n assertHeader(header: string, value: string): this {\n if (this.response.headers[header] !== value) {\n throw new Error(\n `Expected header ${header} to be ${value}, but got ${this.response.headers[header]}`,\n );\n }\n return this;\n }\n\n assertHeaderExists(header: string): this {\n if (!(header in this.response.headers)) {\n throw new Error(\n `Expected header ${header} to exist, but it was not found`,\n );\n }\n return this;\n }\n\n assertHeaderNotExists(header: string): this {\n if (header in this.response.headers) {\n throw new Error(\n `Expected header ${header} to not exist, but it was found with value: ${this.response.headers[header]}`,\n );\n }\n return this;\n }\n\n // TODO: body assertions\n\n assertBodySubset(subset: Partial<T>): this {\n this.assertSubset(this.body(), subset, \"body\");\n return this;\n }\n\n assertBodyDeepEqual(expected: T): this {\n this.assertDeepEqual(this.body(), expected, \"body\");\n return this;\n }\n\n assertBodyNotSubset(subset: Partial<T>): this {\n this.assertNotSubset(this.body(), subset, \"body\");\n return this;\n }\n\n assertBodyNotDeepEqual(expected: T): this {\n this.assertNotDeepEqual(this.body(), expected, \"body\");\n return this;\n }\n\n assertCustom(assertion: (response: Response) => void): this {\n assertion(this.response);\n return this;\n }\n\n private assertSubset(target: any, subset: any, path: string): void {\n for (const key in subset) {\n const currentPath = path === \"\" ? key : `${path}.${key}`;\n const targetValue = target[key];\n const subsetValue = subset[key];\n\n if (!(key in target)) {\n throw new Error(\n `Expected ${path} to have key ${key}, but it was not found`,\n );\n }\n\n if (this.isObject(subsetValue) && this.isObject(targetValue)) {\n this.assertSubset(targetValue, subsetValue, currentPath);\n } else if (Array.isArray(subsetValue) && Array.isArray(targetValue)) {\n this.assertArraySubset(targetValue, subsetValue, currentPath);\n } else if (targetValue !== subsetValue) {\n throw new Error(\n `Expected ${currentPath} to be ${subsetValue}, but got ${targetValue}`,\n );\n }\n }\n }\n\n private assertDeepEqual(target: any, expected: any, path: string): void {\n if (this.isObject(target) && this.isObject(expected)) {\n const targetKeys = Object.keys(target);\n const expectedKeys = Object.keys(expected);\n\n if (targetKeys.length !== expectedKeys.length) {\n throw new Error(\n `Expected ${path} to have ${expectedKeys.length} keys, but got ${targetKeys.length}`,\n );\n }\n\n for (const key of expectedKeys) {\n const currentPath = path === \"body\" ? key : `${path}.${key}`;\n this.assertDeepEqual(target[key], expected[key], currentPath);\n }\n } else if (Array.isArray(target) && Array.isArray(expected)) {\n this.assertArrayDeepEqual(target, expected, path);\n } else if (target !== expected) {\n throw new Error(`Expected ${path} to be ${expected}, but got ${target}`);\n }\n }\n\n private assertNotSubset(target: any, subset: any, path: string): void {\n try {\n this.assertSubset(target, subset, path);\n throw new Error(\n `Expected ${path} to NOT contain the subset, but it does`,\n );\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Expected\")) {\n // Original assertion failed, which means it's NOT a subset - this is what we want\n return;\n }\n throw error;\n }\n }\n\n private assertNotDeepEqual(target: any, expected: any, path: string): void {\n try {\n this.assertDeepEqual(target, expected, path);\n throw new Error(`Expected ${path} to NOT be deeply equal, but it is`);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Expected\")) {\n // Original assertion failed, which means they're NOT equal - this is what we want\n return;\n }\n throw error;\n }\n }\n\n private assertArraySubset(target: any[], subset: any[], path: string): void {\n if (subset.length > target.length) {\n throw new Error(\n `Expected ${path} to have at least ${subset.length} elements, but got ${target.length}`,\n );\n }\n\n for (let i = 0; i < subset.length; i++) {\n const currentPath = `${path}[${i}]`;\n const targetValue = target[i];\n const subsetValue = subset[i];\n\n if (this.isObject(subsetValue) && this.isObject(targetValue)) {\n this.assertSubset(targetValue, subsetValue, currentPath);\n } else if (Array.isArray(subsetValue) && Array.isArray(targetValue)) {\n this.assertArraySubset(targetValue, subsetValue, currentPath);\n } else if (targetValue !== subsetValue) {\n throw new Error(\n `Expected ${currentPath} to be ${subsetValue}, but got ${targetValue}`,\n );\n }\n }\n }\n\n private assertArrayDeepEqual(\n target: any[],\n expected: any[],\n path: string,\n ): void {\n if (target.length !== expected.length) {\n throw new Error(\n `Expected ${path} to have ${expected.length} elements, but got ${target.length}`,\n );\n }\n\n for (let i = 0; i < expected.length; i++) {\n const currentPath = `${path}[${i}]`;\n this.assertDeepEqual(target[i], expected[i], currentPath);\n }\n }\n\n private isObject(value: any): boolean {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n }\n}\n","import type { GraphQL } from \"../../graphql/graphql.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport { Response } from \"../../server/http/response.js\";\nimport type {\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"./server_types.js\";\n\n/**\n * Execute a middleware chain\n */\nexport const executeMiddlewareChain = async (\n middlewares: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n req: Request,\n res: Response = new Response(),\n): Promise<Response> => {\n let currentIndex = 0;\n if (!middlewares.length) {\n await handler(req, res);\n return res;\n }\n\n const next = async (): Promise<void> => {\n currentIndex++;\n\n if (currentIndex >= middlewares.length) {\n await handler(req, res);\n return;\n }\n\n const middleware = middlewares[currentIndex];\n await middleware(req, res, next);\n };\n\n const firstMiddleware = middlewares[0];\n await firstMiddleware(req, res, next);\n\n return res;\n};\n\nexport const canHaveBody = (method?: string) => {\n if (!method) {\n return true;\n }\n\n return [\"post\", \"put\", \"patch\", \"delete\"].includes(method.toLowerCase());\n};\n\n/**\n * Create a GraphQL handler initializer with caching\n * Returns a function that lazily loads and initializes the GraphQL handler\n */\nexport const createGraphQLHandlerInitializer = (graphql: GraphQL) => {\n let handlerPromise: Promise<\n ReturnType<typeof import(\"graphql-yoga\").createYoga>\n > | null = null;\n let isInitializing = false;\n\n const waitForInitialization = async (): Promise<void> => {\n while (isInitializing) {\n await new Promise((resolve) => setTimeout(resolve, 10));\n }\n };\n\n const initializeHandler = async (): Promise<\n ReturnType<typeof import(\"graphql-yoga\").createYoga>\n > => {\n try {\n const { createYoga, createSchema } = await import(\"graphql-yoga\");\n const schema = graphql.getSchema(createSchema);\n const yogaOptions = graphql.getYogaOptions();\n return createYoga({\n graphqlEndpoint: \"/graphql\",\n ...yogaOptions,\n schema,\n });\n } catch (error) {\n const isModuleNotFound =\n error instanceof Error &&\n (error.message.includes(\"Cannot find module\") ||\n error.message.includes(\"Cannot find package\"));\n if (isModuleNotFound) {\n throw new Error(\n \"GraphQL is enabled but 'graphql-yoga' is not installed. \" +\n \"Install it with: npm install graphql graphql-yoga\",\n );\n }\n throw error;\n }\n };\n\n return async (): Promise<ReturnType<\n typeof import(\"graphql-yoga\").createYoga\n > | null> => {\n const isDisabled = !graphql.isEnabled;\n if (isDisabled) {\n return null;\n }\n\n const alreadyInitialized = handlerPromise !== null;\n if (alreadyInitialized) {\n return handlerPromise;\n }\n\n const currentlyInitializing = isInitializing;\n if (currentlyInitializing) {\n await waitForInitialization();\n return handlerPromise;\n }\n\n isInitializing = true;\n\n try {\n handlerPromise = initializeHandler();\n const handler = await handlerPromise;\n return handler;\n } catch (error) {\n handlerPromise = null;\n throw error;\n } finally {\n isInitializing = false;\n }\n };\n};\n","import { logger } from \"../logger/logger.js\";\nimport { MockResponse } from \"./mock_response.js\";\nimport { MockServerOptions } from \"./mock_server_types.js\";\nimport { HttpMethod } from \"../runtime/native_server/server_types.js\";\nimport {\n canHaveBody,\n executeMiddlewareChain,\n} from \"../runtime/native_server/server_utils.js\";\nimport { Request } from \"../server/http/request.js\";\nimport { Response } from \"../server/http/response.js\";\nimport { router } from \"../server/router/router.js\";\nimport type { Server } from \"../server/server.js\";\nimport { NodeHttpClient } from \"../server/server_types.js\";\n\n/**\n * Allows to mock server requests without needing to start the server, useful for testing purposes\n */\nexport class MockServer {\n readonly server: Server<NodeHttpClient>;\n\n constructor(server: Server<NodeHttpClient>) {\n this.server = server;\n }\n\n /**\n * Simulates an HTTP request without making an actual network call, useful for testing purposes\n * Executes the middleware chain and handler of the route\n * @param method - The HTTP method (GET, POST, PUT, DELETE, PATCH)\n * @param path - The request path\n * @param options - Request options including body, headers, query params, etc.\n * @throws {Error} - If more than one of body, formData, urlencoded is provided\n */\n async request<T = any>(\n method: HttpMethod,\n path: string,\n options: MockServerOptions = {},\n ): Promise<MockResponse<T>> {\n const { headers = {}, query = {}, cookies = {}, ip } = options;\n this.validateOptions(options);\n\n const route = router.find(method.toUpperCase(), path);\n if (!route) {\n const res = new Response(404);\n res.json({\n caller: \"MockServer\",\n error: \"Route not found\",\n path,\n method,\n });\n return new MockResponse(res);\n }\n\n let body = options.body;\n let contentType = \"application/json\";\n\n if (\n body &&\n typeof body === \"object\" &&\n !(body instanceof Uint8Array) &&\n !(body instanceof ArrayBuffer)\n ) {\n body = JSON.stringify(body);\n }\n\n if (options.formData) {\n const boundary = `----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;\n contentType = `multipart/form-data; boundary=${boundary}`;\n\n const multipartBody = await this.formDataToMultipart(\n options.formData,\n boundary,\n );\n body = multipartBody;\n }\n\n if (options.urlencoded) {\n contentType = \"application/x-www-form-urlencoded\";\n body = new URLSearchParams(options.urlencoded).toString();\n }\n\n const url = new URL(\n `http://${this.server.host}:${this.server.port}${path}`,\n );\n url.search = new URLSearchParams(query).toString();\n\n const req = new Request(url.toString(), {\n method: method.toUpperCase(),\n body: canHaveBody(method) ? body : undefined,\n headers: {\n \"content-type\": contentType,\n ...headers,\n },\n });\n\n req.query = { ...Object.fromEntries(url.searchParams.entries()), ...query };\n req.params = route.params;\n req.cookies = cookies;\n req.ip = ip;\n\n try {\n const res = await executeMiddlewareChain(\n route.middleware,\n route.handler,\n req,\n );\n return new MockResponse(res);\n } catch (error) {\n logger.error(\n { error },\n `Error processing mock request ${method} ${path}:`,\n );\n const errorRes = new Response(500);\n errorRes.json({\n error: \"Internal server error\",\n message: error instanceof Error ? error.message : String(error),\n });\n return new MockResponse(errorRes);\n }\n }\n\n async get<T = any>(\n path: string,\n options?: Omit<MockServerOptions, \"body\" | \"formData\" | \"urlencoded\">,\n ): Promise<MockResponse<T>> {\n return this.request(\"GET\", path, options);\n }\n\n async post<T = any>(\n path: string,\n options?: MockServerOptions,\n ): Promise<MockResponse<T>> {\n return this.request(\"POST\", path, options);\n }\n\n async put<T = any>(\n path: string,\n options?: MockServerOptions,\n ): Promise<MockResponse<T>> {\n return this.request(\"PUT\", path, options);\n }\n\n async patch<T = any>(\n path: string,\n options?: MockServerOptions,\n ): Promise<MockResponse<T>> {\n return this.request(\"PATCH\", path, options);\n }\n\n async delete<T = any>(\n path: string,\n options?: Omit<MockServerOptions, \"body\" | \"formData\">,\n ): Promise<MockResponse<T>> {\n return this.request(\"DELETE\", path, options);\n }\n\n /**\n * Converts FormData to a proper multipart/form-data body with boundaries\n */\n private async formDataToMultipart(\n formData: FormData,\n boundary: string,\n ): Promise<Uint8Array> {\n const encoder = new TextEncoder();\n const buffers: Uint8Array[] = [];\n\n for (const [name, value] of formData.entries()) {\n buffers.push(encoder.encode(`--${boundary}\\r\\n`));\n\n let disposition = `Content-Disposition: form-data; name=\"${name}\"`;\n let contentType = \"\";\n\n if ((value as any) instanceof File) {\n disposition += `; filename=\"${(value as any).name}\"`;\n contentType = `Content-Type: ${(value as any).type || \"application/octet-stream\"}\\r\\n`;\n }\n\n buffers.push(encoder.encode(`${disposition}\\r\\n${contentType}\\r\\n`));\n\n if ((value as any) instanceof File) {\n const arrayBuffer = await (value as any).arrayBuffer();\n buffers.push(new Uint8Array(arrayBuffer));\n buffers.push(encoder.encode(\"\\r\\n\"));\n } else {\n buffers.push(encoder.encode(`${String(value)}\\r\\n`));\n }\n }\n\n buffers.push(encoder.encode(`--${boundary}--\\r\\n`));\n\n const totalLength = buffers.reduce((sum, b) => sum + b.byteLength, 0);\n const multipartBody = new Uint8Array(totalLength);\n let offset = 0;\n for (const buf of buffers) {\n multipartBody.set(buf, offset);\n offset += buf.byteLength;\n }\n\n return multipartBody;\n }\n\n private validateOptions(options: MockServerOptions) {\n const { body, formData, urlencoded } = options;\n if (body && (formData || urlencoded)) {\n throw new Error(\"Only one of body, formData, urlencoded can be provided\");\n }\n\n if (formData && (urlencoded || body)) {\n throw new Error(\"Only one of formData, urlencoded can be provided\");\n }\n\n if (urlencoded && (body || formData)) {\n throw new Error(\"Only one of urlencoded, body can be provided\");\n }\n }\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type {\n AsyncLocalStorageContext,\n AsyncLocalStorageContextSetters,\n} from \"./async_local_storage_types.js\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport const asyncStorage = new AsyncLocalStorage<Record<string, any>>();\n\n/**\n * Async local storage plugin middleware, used to store data in the request context\n */\nexport const asyncLocalStorage = (\n ctxSetters: AsyncLocalStorageContextSetters,\n): ServerRouteMiddleware => {\n return async (req: Request, _res: Response, next: NextFunction) => {\n const store: Record<string, any> = {};\n\n for (const [key, setter] of Object.entries(ctxSetters)) {\n store[key] = (setter as (req: Request) => {})(req);\n }\n\n asyncStorage.run(store, () => {\n req.ctx = new Proxy({} as AsyncLocalStorageContext, {\n get(_, prop) {\n const currentStore = asyncStorage.getStore();\n return currentStore?.[prop as string];\n },\n set(_, prop, value) {\n const currentStore = asyncStorage.getStore();\n if (currentStore) {\n currentStore[prop as string] = value;\n return true;\n }\n\n return false;\n },\n ownKeys() {\n const currentStore = asyncStorage.getStore();\n return currentStore ? Object.keys(currentStore) : [];\n },\n has(_, prop) {\n const currentStore = asyncStorage.getStore();\n return currentStore ? prop in currentStore : false;\n },\n });\n\n next();\n });\n };\n};\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport { canHaveBody } from \"../../runtime/native_server/server_utils.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\n/**\n * Middleware to parse the body of the request. GET, DELETE and OPTIONS requests are not parsed. Used internally by the server.\n * @internal\n */\nexport const bodyParser = (): ServerRouteMiddleware => {\n return async (req: Request, _res: Response, next: NextFunction) => {\n if (!canHaveBody(req.method)) {\n return next();\n }\n\n req.rawBody = await req.arrayBuffer();\n Object.defineProperty(req, \"body\", {\n value: undefined,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n\n return next();\n };\n};\n","import { gzipSync } from \"node:zlib\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { CompressionOptions } from \"./compression_types.js\";\n\nconst DEFAULT_THRESHOLD = 1024; // 1KB\nconst DEFAULT_LEVEL = 6;\n\n// Default compressible content types\nconst DEFAULT_FILTER = [\n /text\\/.+/,\n /application\\/json/,\n /application\\/javascript/,\n /application\\/xml/,\n /application\\/.*\\+json/,\n /application\\/.*\\+xml/,\n];\n\n/**\n * Compression middleware for gzip compression of response bodies\n *\n * @param options Compression middleware options\n */\nexport const compression = (\n options?: CompressionOptions,\n): ServerRouteMiddleware => {\n const threshold = options?.threshold ?? DEFAULT_THRESHOLD;\n const level = Math.max(0, Math.min(9, options?.level ?? DEFAULT_LEVEL));\n const filter = options?.filter ?? DEFAULT_FILTER;\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const acceptEncoding = req.headers.get(\"accept-encoding\") || \"\";\n const supportsGzip = acceptEncoding.includes(\"gzip\");\n if (!supportsGzip) {\n return next();\n }\n\n const originalSend = res.send.bind(res);\n const originalJson = res.json.bind(res);\n const originalText = res.text.bind(res);\n\n const compressResponse = (body: any, contentType?: string): any => {\n if (!shouldCompress(body, contentType, threshold, filter)) {\n return body;\n }\n\n const buffer = getBodyBuffer(body);\n if (!buffer || buffer.length < threshold) {\n return body;\n }\n\n const compressed = gzipSync(buffer, { level });\n res.setHeader(\"Content-Encoding\", \"gzip\");\n res.setHeader(\"Content-Length\", compressed.length.toString());\n\n return compressed;\n };\n\n res.send = function (body: any): void {\n const contentType = res.headers[\"content-type\"];\n const compressedBody = compressResponse(body, contentType);\n return originalSend(compressedBody);\n };\n\n res.json = function (body: any): void {\n const jsonString = JSON.stringify(body);\n const compressedBody = compressResponse(jsonString, \"application/json\");\n if (compressedBody !== jsonString) {\n res.setHeader(\"Content-Type\", \"application/json\");\n return originalSend(compressedBody);\n }\n return originalJson(body);\n };\n\n res.text = function (body: string): void {\n const compressedBody = compressResponse(body, \"text/plain\");\n if (compressedBody !== body) {\n res.setHeader(\"Content-Type\", \"text/plain\");\n return originalSend(compressedBody);\n }\n return originalText(body);\n };\n\n await next();\n };\n};\n\nconst shouldCompress = (\n body: any,\n contentType: string | undefined,\n threshold: number,\n filter: RegExp[],\n): boolean => {\n if (!body || !contentType) {\n return false;\n }\n\n const buffer = getBodyBuffer(body);\n if (!buffer || buffer.length < threshold) {\n return false;\n }\n\n return filter.some((pattern) => pattern.test(contentType));\n};\n\nconst getBodyBuffer = (body: any): Buffer | null => {\n if (typeof body === \"string\") {\n return Buffer.from(body, \"utf-8\");\n }\n\n if (Buffer.isBuffer(body)) {\n return body;\n }\n\n if (body instanceof Uint8Array) {\n return Buffer.from(body);\n }\n\n if (typeof body === \"object\") {\n return Buffer.from(JSON.stringify(body), \"utf-8\");\n }\n\n return null;\n};\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { CookieMiddlewareOptions, CookieOptions } from \"./cookie_types.js\";\n\n/**\n * Cookie middleware for parsing and setting cookies, must be used in order to use the cookie methods on the request and response objects\n *\n * @param options Cookie middleware options\n */\nexport const cookie = (\n options?: CookieMiddlewareOptions,\n): ServerRouteMiddleware => {\n const opts: Required<CookieMiddlewareOptions> = {\n secret: options?.secret ?? \"\",\n defaults: {\n path: \"/\",\n httpOnly: true,\n secure: true,\n sameSite: \"Lax\",\n ...options?.defaults,\n },\n parse: options?.parse ?? true,\n sign: options?.sign ?? false,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n if (opts.parse) {\n const rawCookies = parseCookies(req.headers.get(\"cookie\") || \"\");\n req.cookies = {};\n\n for (const [name, value] of Object.entries(rawCookies)) {\n if (opts.sign && opts.secret) {\n const verified = await verifySignedCookie(value, opts.secret);\n if (verified !== false) {\n req.cookies[name] = verified;\n }\n continue;\n }\n\n req.cookies[name] = value;\n }\n }\n\n // Add cookie methods to response\n res.cookie = (\n name: string,\n value: string,\n cookieOptions?: CookieOptions,\n ) => {\n setCookie(res, name, value, { ...opts.defaults, ...cookieOptions }, opts);\n };\n\n res.clearCookie = (name: string, cookieOptions?: CookieOptions) => {\n clearCookie(res, name, { ...opts.defaults, ...cookieOptions });\n };\n\n await next();\n };\n};\n\n/**\n * Parse cookie string into an object\n */\nfunction parseCookies(cookieString: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n\n if (!cookieString) {\n return cookies;\n }\n\n const pairs = cookieString.split(\";\");\n\n for (const pair of pairs) {\n const [name, value] = pair.trim().split(\"=\");\n if (name && value) {\n cookies[decodeURIComponent(name)] = decodeURIComponent(value);\n }\n }\n\n return cookies;\n}\n\n/**\n * Set a cookie on the response\n */\nasync function setCookie(\n res: Response,\n name: string,\n value: string,\n options: CookieOptions,\n middlewareOptions: Required<CookieMiddlewareOptions>,\n): Promise<void> {\n let cookieValue = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n // Add domain\n if (options.domain) {\n cookieValue += `; Domain=${options.domain}`;\n }\n\n // Add path\n if (options.path) {\n cookieValue += `; Path=${options.path}`;\n }\n\n // Add expires\n if (options.expires) {\n cookieValue += `; Expires=${options.expires.toUTCString()}`;\n }\n\n // Add maxAge\n if (options.maxAge) {\n cookieValue += `; Max-Age=${options.maxAge}`;\n }\n\n // Add secure\n if (options.secure) {\n cookieValue += \"; Secure\";\n }\n\n // Add httpOnly\n if (options.httpOnly) {\n cookieValue += \"; HttpOnly\";\n }\n\n // Add sameSite\n if (options.sameSite) {\n cookieValue += `; SameSite=${options.sameSite}`;\n }\n\n // Add priority\n if (options.priority) {\n cookieValue += `; Priority=${options.priority}`;\n }\n\n if (middlewareOptions.sign && middlewareOptions.secret) {\n cookieValue = await signCookie(cookieValue, middlewareOptions.secret);\n }\n\n // Set the Set-Cookie header\n const existingCookies = res.headers[\"set-cookie\"] || \"\";\n const newCookies = existingCookies\n ? `${existingCookies}, ${cookieValue}`\n : cookieValue;\n res.setHeader(\"Set-Cookie\", newCookies);\n}\n\n/**\n * Clear a cookie by setting it to expire in the past\n */\nfunction clearCookie(\n res: Response,\n name: string,\n options: CookieOptions,\n): void {\n const clearOptions: CookieOptions = {\n ...options,\n expires: new Date(0),\n maxAge: 0,\n };\n\n setCookie(res, name, \"\", clearOptions, {\n secret: \"\",\n defaults: {},\n parse: true,\n sign: false,\n });\n}\n\n/**\n * Sign a cookie value with HMAC-SHA256 using the secret\n */\nasync function signCookie(value: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(secret);\n const valueData = encoder.encode(value);\n\n const key = await crypto.subtle.importKey(\n \"raw\",\n keyData,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n\n const signatureBuffer = await crypto.subtle.sign(\"HMAC\", key, valueData);\n\n const signatureArray = new Uint8Array(signatureBuffer);\n const signature = Array.from(signatureArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return `${value}.${signature}`;\n}\n\n/**\n * Verify a signed cookie\n */\nasync function verifySignedCookie(\n value: string,\n secret: string,\n): Promise<string | false> {\n const parts = value.split(\".\");\n if (parts.length !== 2) {\n return false;\n }\n\n const [cookieValue, signature] = parts;\n\n const encoder = new TextEncoder();\n const keyData = encoder.encode(secret);\n const valueData = encoder.encode(cookieValue);\n\n const key = await crypto.subtle.importKey(\n \"raw\",\n keyData,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n\n const expectedSignatureBuffer = await crypto.subtle.sign(\n \"HMAC\",\n key,\n valueData,\n );\n\n const expectedSignatureArray = new Uint8Array(expectedSignatureBuffer);\n const expectedSignature = Array.from(expectedSignatureArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return signature === expectedSignature ? cookieValue : false;\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { CorsOptions } from \"./cors_types.js\";\n\n/**\n * CORS plugin\n *\n * ⚠️ SECURITY WARNING: By default, this plugin allows ALL origins ('*').\n * For production environments, explicitly configure allowed origins.\n *\n * @param options CORS options (all optional)\n *\n * @example\n * // Development (permissive)\n * cors()\n *\n * @example\n * // Production (secure)\n * cors({\n * origin: ['https://example.com', 'https://app.example.com'],\n * credentials: true\n * })\n */\nexport const cors = (options?: CorsOptions): ServerRouteMiddleware => {\n const opts: CorsOptions = {\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"PATCH\", \"POST\", \"DELETE\"],\n allowedHeaders: \"\",\n exposedHeaders: \"\",\n credentials: false,\n maxAge: undefined,\n preflightContinue: false,\n optionsSuccessStatus: 204,\n ...options,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const requestOrigin = req.headers.get(\"origin\") || \"\";\n\n if (req.method === \"OPTIONS\") {\n return handlePreflightRequest(req, res, opts, requestOrigin, next);\n }\n\n handleRegularRequest(req, res, opts, requestOrigin);\n await next();\n };\n};\n\n/**\n * Handle CORS preflight OPTIONS requests\n */\nfunction handlePreflightRequest(\n _req: Request,\n res: Response,\n opts: CorsOptions,\n requestOrigin: string,\n next: NextFunction,\n): void {\n const allowOrigin = determineOrigin(opts, requestOrigin);\n if (!allowOrigin) {\n res.forbidden(\"CORS origin not allowed\");\n return;\n }\n\n // Set CORS headers for preflight\n setCorsHeaders(res, opts, allowOrigin);\n\n // Handle preflight continue option\n if (opts.preflightContinue) {\n next();\n return;\n }\n\n // End preflight request\n res.status(opts.optionsSuccessStatus || 204);\n res.send(\"\");\n}\n\n/**\n * Handle regular CORS requests (non-OPTIONS)\n */\nfunction handleRegularRequest(\n _req: Request,\n res: Response,\n opts: CorsOptions,\n requestOrigin: string,\n): void {\n const allowOrigin = determineOrigin(opts, requestOrigin);\n if (!allowOrigin) {\n return;\n }\n\n setCorsHeaders(res, opts, allowOrigin);\n}\n\n/**\n * Determine if origin is allowed and return the appropriate origin value\n */\nfunction determineOrigin(\n opts: CorsOptions,\n requestOrigin: string,\n): string | false {\n // String origin\n if (typeof opts.origin === \"string\") {\n return opts.origin;\n }\n\n // Array of origins\n if (Array.isArray(opts.origin)) {\n const matchedOrigin = opts.origin.find((origin) =>\n typeof origin === \"string\"\n ? origin === requestOrigin\n : origin instanceof RegExp && origin.test(requestOrigin),\n );\n\n return typeof matchedOrigin === \"string\" ? matchedOrigin : false;\n }\n\n return \"*\";\n}\n\n/**\n * Set all CORS headers on the response\n */\nfunction setCorsHeaders(\n res: Response,\n opts: CorsOptions,\n allowOrigin: string,\n): void {\n res.setHeader(\"Access-Control-Allow-Origin\", allowOrigin);\n\n if (opts.credentials) {\n res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n if (opts.exposedHeaders && opts.exposedHeaders !== \"\") {\n const exposedHeaders = Array.isArray(opts.exposedHeaders)\n ? opts.exposedHeaders.join(\",\")\n : opts.exposedHeaders;\n res.setHeader(\"Access-Control-Expose-Headers\", exposedHeaders);\n }\n\n if (opts.allowedHeaders && opts.allowedHeaders !== \"\") {\n const allowedHeaders = Array.isArray(opts.allowedHeaders)\n ? opts.allowedHeaders.join(\",\")\n : opts.allowedHeaders;\n res.setHeader(\"Access-Control-Allow-Headers\", allowedHeaders);\n }\n\n const methodsStr = Array.isArray(opts.methods)\n ? opts.methods.join(\",\")\n : opts.methods;\n res.setHeader(\"Access-Control-Allow-Methods\", String(methodsStr || \"\"));\n\n if (typeof opts.maxAge === \"number\") {\n res.setHeader(\"Access-Control-Max-Age\", opts.maxAge.toString());\n }\n}\n","import type {\n NextFunction as ExpressNextFunction,\n Request as ExpressRequest,\n Response as ExpressResponse,\n Router as ExpressRouter,\n RequestHandler,\n} from \"express\";\nimport type {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request as BaldaRequest } from \"../../server/http/request.js\";\nimport type { Response as BaldaResponse } from \"../../server/http/response.js\";\nimport { router } from \"../../server/router/router.js\";\n\n/**\n * Converts a Balda Request to an Express-compatible request object\n */\nfunction toBaldaToExpressRequest(\n baldaReq: BaldaRequest,\n basePath: string = \"\",\n): ExpressRequest {\n const url = new URL(baldaReq.url);\n const headersObj = Object.fromEntries(baldaReq.headers.entries());\n\n const expressReq = {\n body: baldaReq.body,\n query: baldaReq.query as any,\n params: baldaReq.params,\n cookies: baldaReq.cookies,\n session: baldaReq.session,\n originalUrl: url.pathname + url.search,\n baseUrl: basePath,\n path: url.pathname.replace(basePath, \"\") || \"/\",\n method: baldaReq.method,\n ip: baldaReq.ip,\n headers: headersObj,\n url: url.pathname,\n get(name: string) {\n return baldaReq.headers.get(name.toLowerCase()) ?? undefined;\n },\n header(name: string) {\n return baldaReq.headers.get(name.toLowerCase()) ?? undefined;\n },\n app: {},\n res: null,\n route: null,\n protocol: url.protocol.replace(\":\", \"\"),\n secure: url.protocol === \"https:\",\n hostname: url.hostname,\n host: url.host,\n fresh: false,\n stale: true,\n xhr: headersObj[\"x-requested-with\"]?.toLowerCase() === \"xmlhttprequest\",\n accepts: () => undefined,\n acceptsCharsets: () => undefined,\n acceptsEncodings: () => undefined,\n acceptsLanguages: () => undefined,\n is: () => null,\n range: () => undefined,\n param: (name: string) => baldaReq.params[name] ?? baldaReq.query[name],\n files: baldaReq.files,\n file: baldaReq.file,\n rawBody: baldaReq.rawBody,\n } as unknown as ExpressRequest;\n\n return expressReq;\n}\n\ninterface ExpressResponseWrapper {\n locals: Record<string, any>;\n headersSent: boolean;\n statusCode: number;\n status(code: number): this;\n sendStatus(code: number): this;\n send(body?: any): this;\n json(body?: any): this;\n redirect(statusOrUrl: number | string, url?: string): this;\n setHeader(name: string, value: string | number | readonly string[]): this;\n set(field: string | Record<string, string>, value?: string): this;\n header(field: string | Record<string, string>, value?: string): this;\n type(contentType: string): this;\n contentType(type: string): this;\n end(data?: any): this;\n write(chunk: any): boolean;\n get(name: string): string | undefined;\n getHeader(name: string): string | undefined;\n removeHeader(name: string): this;\n append(field: string, value: string | string[]): this;\n cookie(name: string, value: string, options?: any): this;\n clearCookie(name: string, options?: any): this;\n render(view: string, options?: any, callback?: any): void;\n format(obj: any): this;\n attachment(filename?: string): this;\n sendFile(path: string, options?: any, fn?: any): void;\n download(\n path: string,\n filename?: string | any,\n options?: any,\n fn?: any,\n ): void;\n links(links: Record<string, string>): this;\n location(url: string): this;\n vary(field: string): this;\n app: Record<string, any>;\n req: null;\n}\n\n/**\n * Creates an Express-compatible response wrapper around Balda Response\n */\nfunction createExpressResponse(baldaRes: BaldaResponse): ExpressResponse {\n const expressRes: ExpressResponseWrapper = {\n locals: {},\n headersSent: false,\n statusCode: baldaRes.responseStatus,\n\n status(code: number) {\n baldaRes.status(code);\n this.statusCode = code;\n return this;\n },\n\n sendStatus(code: number) {\n this.status(code).send(String(code));\n return this;\n },\n\n send(body?: any) {\n this.headersSent = true;\n const hasContentType = !!baldaRes.headers[\"Content-Type\"];\n\n if (!hasContentType && typeof body === \"string\") {\n const trimmed = body.trim();\n if (\n trimmed.startsWith(\"<!DOCTYPE\") ||\n trimmed.startsWith(\"<html\") ||\n trimmed.startsWith(\"<HTML\")\n ) {\n baldaRes.html(body);\n return this;\n }\n }\n\n baldaRes.send(body);\n return this;\n },\n\n json(body?: any) {\n this.headersSent = true;\n baldaRes.json(body);\n return this;\n },\n\n redirect(statusOrUrl: number | string, url?: string) {\n this.headersSent = true;\n const redirectUrl = typeof statusOrUrl === \"string\" ? statusOrUrl : url!;\n const status = typeof statusOrUrl === \"number\" ? statusOrUrl : 302;\n baldaRes.status(status).setHeader(\"Location\", redirectUrl);\n baldaRes.send(\"\");\n return this;\n },\n\n setHeader(name: string, value: string | number | readonly string[]) {\n const stringValue = Array.isArray(value)\n ? value.join(\", \")\n : String(value);\n baldaRes.setHeader(name, stringValue);\n return this;\n },\n\n set(field: string | Record<string, string>, value?: string) {\n if (typeof field === \"object\") {\n for (const [key, val] of Object.entries(field)) {\n baldaRes.setHeader(key, val);\n }\n } else if (value !== undefined) {\n baldaRes.setHeader(field, value);\n }\n return this;\n },\n\n header(field: string | Record<string, string>, value?: string) {\n return this.set(field, value);\n },\n\n type(contentType: string) {\n baldaRes.setHeader(\"Content-Type\", contentType);\n return this;\n },\n\n contentType(type: string) {\n return this.type(type);\n },\n\n end(data?: any) {\n this.headersSent = true;\n baldaRes.send(data ?? \"\");\n return this;\n },\n\n write(chunk: any) {\n return true;\n },\n\n get(name: string) {\n return baldaRes.headers[name];\n },\n\n getHeader(name: string) {\n return baldaRes.headers[name];\n },\n\n removeHeader(name: string) {\n delete baldaRes.headers[name];\n return this;\n },\n\n append(field: string, value: string | string[]) {\n const prev = baldaRes.headers[field];\n const newValue = Array.isArray(value) ? value.join(\", \") : value;\n baldaRes.setHeader(field, prev ? `${prev}, ${newValue}` : newValue);\n return this;\n },\n\n cookie(name: string, value: string, options?: any) {\n baldaRes.cookie?.(name, value, options);\n return this;\n },\n\n clearCookie(name: string, options?: any) {\n baldaRes.clearCookie?.(name, options);\n return this;\n },\n\n render(view: string, options?: any, callback?: any) {\n throw new Error(\n \"render() is not supported in Express compatibility layer\",\n );\n },\n\n format(obj: any) {\n return this;\n },\n\n attachment(filename?: string) {\n if (filename) {\n baldaRes.setHeader(\n \"Content-Disposition\",\n `attachment; filename=\"${filename}\"`,\n );\n } else {\n baldaRes.setHeader(\"Content-Disposition\", \"attachment\");\n }\n return this;\n },\n\n sendFile(path: string, options?: any, fn?: any) {\n baldaRes.file(path);\n },\n\n download(path: string, filename?: string | any, options?: any, fn?: any) {\n const fname =\n typeof filename === \"string\" ? filename : path.split(\"/\").pop();\n this.attachment(fname);\n baldaRes.file(path);\n },\n\n links(links: Record<string, string>) {\n const link = Object.entries(links)\n .map(([rel, url]) => `<${url}>; rel=\"${rel}\"`)\n .join(\", \");\n baldaRes.setHeader(\"Link\", link);\n return this;\n },\n\n location(url: string) {\n baldaRes.setHeader(\"Location\", url);\n return this;\n },\n\n vary(field: string) {\n baldaRes.setHeader(\"Vary\", field);\n return this;\n },\n\n app: {},\n req: null,\n };\n\n return expressRes as unknown as ExpressResponse;\n}\n\n/**\n * Converts an Express middleware to a Balda middleware\n */\nexport function expressMiddleware(\n expressHandler: RequestHandler,\n basePath: string = \"\",\n): ServerRouteMiddleware {\n return async (\n baldaReq: BaldaRequest,\n baldaRes: BaldaResponse,\n next: NextFunction,\n ) => {\n const expressReq = toBaldaToExpressRequest(baldaReq, basePath);\n const expressRes = createExpressResponse(baldaRes);\n\n await new Promise<void>((resolve, reject) => {\n const expressNext: ExpressNextFunction = (err?: any) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n\n try {\n const result = expressHandler(expressReq, expressRes, expressNext);\n if (result instanceof Promise) {\n result.catch(reject);\n }\n } catch (error) {\n reject(error);\n }\n });\n\n await next();\n };\n}\n\n/**\n * Converts an Express handler to a Balda handler\n */\nexport function expressHandler(\n handler: RequestHandler,\n basePath: string = \"\",\n): ServerRouteHandler {\n return async (baldaReq: BaldaRequest, baldaRes: BaldaResponse) => {\n const expressReq = toBaldaToExpressRequest(baldaReq, basePath);\n const expressRes = createExpressResponse(baldaRes);\n\n const next: ExpressNextFunction = () => {};\n await handler(expressReq, expressRes, next);\n };\n}\n\ninterface RouterLayer {\n route?: {\n path: string;\n methods: Record<string, boolean>;\n stack: Array<{\n handle: RequestHandler;\n method?: string;\n }>;\n };\n handle?: RequestHandler | ExpressRouter;\n regexp?: RegExp;\n path?: string;\n name?: string;\n}\n\n/**\n * Mounts an Express router at a specific base path\n * This extracts all routes from the Express router and registers them with Balda\n */\nexport function mountExpressRouter(\n basePath: string,\n expressRouter: ExpressRouter,\n): void {\n const normalizedBase = normalizePath(basePath);\n const stack = (expressRouter as any).stack as RouterLayer[] | undefined;\n\n if (!stack) {\n console.warn(\"Express router has no stack - routes may not be registered\");\n return;\n }\n\n for (const layer of stack) {\n processExpressLayer(layer, normalizedBase);\n }\n}\n\nfunction processExpressLayer(layer: RouterLayer, basePath: string): void {\n if (layer.route) {\n const routePath = normalizePath(basePath + layer.route.path);\n const methods = Object.keys(layer.route.methods).filter(\n (m) => layer.route!.methods[m],\n );\n\n for (const method of methods) {\n const handlers = layer.route.stack.map((s) => s.handle);\n registerExpressHandlers(\n method.toUpperCase() as HttpMethod,\n routePath,\n handlers,\n basePath,\n );\n }\n return;\n }\n\n if (layer.handle && typeof layer.handle === \"function\") {\n const layerPath = layer.path || \"\";\n const fullPath = normalizePath(basePath + layerPath);\n const layerStack = (layer.handle as any).stack as RouterLayer[] | undefined;\n\n if (layerStack && Array.isArray(layerStack)) {\n for (const subLayer of layerStack) {\n processExpressLayer(subLayer, fullPath);\n }\n return;\n }\n\n const wildcardPath = fullPath === \"/\" ? \"/*\" : `${fullPath}/*`;\n const middleware = expressMiddleware(\n layer.handle as RequestHandler,\n basePath,\n );\n\n const methods: HttpMethod[] = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ];\n for (const method of methods) {\n router.addOrUpdate(method, wildcardPath, [middleware], async () => {}, {\n excludeFromSwagger: true,\n });\n }\n }\n}\n\nfunction registerExpressHandlers(\n method: HttpMethod,\n path: string,\n handlers: RequestHandler[],\n basePath: string,\n): void {\n const middlewares: ServerRouteMiddleware[] = handlers\n .slice(0, -1)\n .map((h) => expressMiddleware(h, basePath));\n\n const lastHandler = handlers[handlers.length - 1];\n const finalHandler = expressHandler(lastHandler, basePath);\n\n router.addOrUpdate(method, path, middlewares, finalHandler, {\n excludeFromSwagger: true,\n });\n}\n\nfunction normalizePath(path: string): string {\n let normalized = path.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n if (normalized.length > 1 && normalized.endsWith(\"/\")) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\n\n/**\n * Creates an Express adapter that provides a use method for mounting Express middleware/routers\n *\n * @example\n * ```ts\n * import AdminJS from 'adminjs'\n * import AdminJSExpress from '@adminjs/express'\n * import { createExpressAdapter } from 'balda'\n *\n * const admin = new AdminJS({...})\n * const adminRouter = AdminJSExpress.buildRouter(admin)\n *\n * const server = new Server()\n * const express = createExpressAdapter(server)\n * express.use('/admin', adminRouter)\n * ```\n */\nexport function createExpressAdapter(server: {\n use: (...middlewares: ServerRouteMiddleware[]) => void;\n}) {\n return {\n use(\n pathOrMiddleware: string | RequestHandler | ExpressRouter,\n maybeMiddleware?: RequestHandler | ExpressRouter,\n ) {\n if (typeof pathOrMiddleware === \"string\") {\n const path = pathOrMiddleware;\n const middleware = maybeMiddleware!;\n const middlewareStack = (middleware as any).stack;\n\n if (middlewareStack && Array.isArray(middlewareStack)) {\n mountExpressRouter(path, middleware as ExpressRouter);\n return;\n }\n\n server.use(expressMiddleware(middleware as RequestHandler, path));\n return;\n }\n\n const middleware = pathOrMiddleware;\n const middlewareStack = (middleware as any).stack;\n\n if (middlewareStack && Array.isArray(middlewareStack)) {\n mountExpressRouter(\"/\", middleware as ExpressRouter);\n return;\n }\n\n server.use(expressMiddleware(middleware as RequestHandler));\n },\n };\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class FileTooLargeError extends BaldaError {\n constructor(filename: string, size: number, maxSize: number) {\n super(\n `FILE_TOO_LARGE: \"${filename}\" is too large. Max size is ${maxSize} bytes, but got ${size} bytes`,\n );\n }\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeOs {\n async tmpdir(): Promise<string> {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n const os = await import(\"node:os\");\n return os.tmpdir();\n case \"deno\":\n return Deno.makeTempDir();\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeOs = new NativeOs();\n","import { BaldaError } from \"../../errors/balda_error.js\";\nimport { errorFactory } from \"../../errors/error_factory.js\";\nimport { FileTooLargeError } from \"../../errors/file_too_large.js\";\nimport { nativeCrypto } from \"../../runtime/native_crypto.js\";\nimport { nativeOs } from \"../../runtime/native_os.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport type {\n FilePluginOptions,\n FormFile,\n} from \"../../plugins/file/file_types.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { parseSizeLimit } from \"../../utils.js\";\n\n// 1MB in bytes\nconst DEFAULT_SIZE = 1024 * 1024;\n\n/**\n * Middleware to handle multipart/form-data file uploads with security validations.\n * - Validates files against `FilePluginOptions`: size limits, file count, MIME types.\n * - Sanitizes filenames to prevent path traversal attacks.\n * - Uses cryptographically secure random filenames (UUID) in temporary storage.\n * - Stores uploaded files in a runtime-agnostic temporary directory and exposes them via `req.files`.\n * - Automatically cleans up temporary files after request completion or on error.\n * - Can be used as global middleware or route-specific middleware.\n */\nexport const fileParser = (\n options?: FilePluginOptions,\n): ServerRouteMiddleware => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const tmpPaths: string[] = [];\n try {\n const contentType =\n req.headers.get(\"content-type\") ?? req.headers.get(\"Content-Type\");\n\n if (!contentType || !contentType.startsWith(\"multipart/form-data\")) {\n return next();\n }\n\n if (!req.rawBody) {\n return next();\n }\n\n const boundaryMatch = contentType.match(/boundary=(.*)(;|$)/i);\n if (!boundaryMatch) {\n return next();\n }\n\n const boundary = boundaryMatch[1].replace(/(^\\s*\"?|\"?\\s*$)/g, \"\");\n\n const bodyBuf = new Uint8Array(req.rawBody);\n const boundaryBuf = new TextEncoder().encode(`--${boundary}`);\n const CRLFCRLF = new Uint8Array([13, 10, 13, 10]);\n\n const parts: Array<{ headers: string; data: Uint8Array }> = [];\n\n const indexOfSub = (\n haystack: Uint8Array,\n needle: Uint8Array,\n from: number = 0,\n ): number => {\n outer: for (let i = from; i <= haystack.length - needle.length; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) {\n continue outer;\n }\n }\n return i;\n }\n\n return -1;\n };\n\n let start = indexOfSub(bodyBuf, boundaryBuf);\n while (start !== -1) {\n start += boundaryBuf.length;\n\n if (bodyBuf[start] === 45 && bodyBuf[start + 1] === 45) {\n break;\n }\n\n if (bodyBuf[start] === 13 && bodyBuf[start + 1] === 10) {\n start += 2;\n }\n\n const headerEnd = indexOfSub(bodyBuf, CRLFCRLF, start);\n if (headerEnd === -1) {\n break;\n }\n\n const headersBuf = bodyBuf.subarray(start, headerEnd);\n const headers = new TextDecoder().decode(headersBuf);\n\n const dataStart = headerEnd + CRLFCRLF.length;\n const nextBoundary = indexOfSub(bodyBuf, boundaryBuf, dataStart);\n if (nextBoundary === -1) {\n break;\n }\n\n let dataEnd = nextBoundary - 1;\n if (bodyBuf[dataEnd] === 10) {\n dataEnd--;\n }\n\n if (bodyBuf[dataEnd] === 13) {\n dataEnd--;\n }\n\n const data = bodyBuf.subarray(dataStart, dataEnd + 1);\n parts.push({ headers, data });\n start = nextBoundary;\n }\n\n const files: FormFile[] = [];\n const fields: Record<string, string> = {};\n const maxFileSizeBytes =\n parseSizeLimit(options?.maxFileSize, DEFAULT_SIZE) ?? DEFAULT_SIZE;\n\n for (const part of parts) {\n const disposition = part.headers\n .split(\"\\r\\n\")\n .find((h) => h.toLowerCase().startsWith(\"content-disposition:\"));\n\n if (!disposition) {\n continue;\n }\n\n const formNameMatch = disposition.match(/name=\"([^\"]+)\"/);\n if (!formNameMatch) {\n continue;\n }\n const formName = formNameMatch[1];\n\n const filenameMatch = disposition.match(/filename=\"([^\"]*)\"/);\n const originalName = filenameMatch ? filenameMatch[1] : \"\";\n const isFile = Boolean(originalName);\n\n if (isFile) {\n if (options?.maxFiles && files.length >= options.maxFiles) {\n return res.badRequest({\n ...errorFactory(\n new BaldaError(\n `Too many files: Maximum ${options.maxFiles} files allowed`,\n ),\n ),\n });\n }\n\n if (maxFileSizeBytes && part.data.length > maxFileSizeBytes) {\n return res.badRequest({\n ...errorFactory(\n new FileTooLargeError(\n originalName,\n part.data.length,\n maxFileSizeBytes,\n ),\n ),\n });\n }\n\n const contentTypeHeader = part.headers\n .split(\"\\r\\n\")\n .find((h) => h.toLowerCase().startsWith(\"content-type:\"));\n\n const mimeType = contentTypeHeader\n ? contentTypeHeader.split(\":\")[1].trim()\n : \"application/octet-stream\";\n\n if (\n options?.allowedMimeTypes &&\n !options.allowedMimeTypes.includes(mimeType)\n ) {\n return res.badRequest({\n ...errorFactory(\n new BaldaError(\n `Invalid file type: \"${mimeType}\" is not allowed. Allowed types: ${options.allowedMimeTypes.join(\", \")}`,\n ),\n ),\n });\n }\n\n const sanitizedName = sanitizeFilename(originalName);\n const extension = nativePath.extName(sanitizedName);\n const tmpPath = nativePath.join(\n await nativeOs.tmpdir(),\n `${nativeCrypto.randomUUID()}${extension}`,\n );\n await nativeFs.writeFile(tmpPath, part.data);\n tmpPaths.push(tmpPath);\n\n files.push({\n formName,\n mimeType,\n size: part.data.length,\n tmpPath,\n originalName,\n });\n } else {\n fields[formName] = new TextDecoder().decode(part.data);\n }\n }\n\n req.files = files;\n req.body = fields;\n\n await next();\n\n await cleanupTmpFiles(tmpPaths);\n } catch (error) {\n await cleanupTmpFiles(tmpPaths);\n throw error;\n }\n };\n};\n\nconst cleanupTmpFiles = async (paths: string[]) => {\n await Promise.allSettled(paths.map((path) => nativeFs.unlink(path)));\n};\n\nconst sanitizeFilename = (filename: string): string => {\n return filename\n .replace(/\\.\\./g, \"\")\n .replace(/[\\/\\\\]/g, \"\")\n .replace(/\\0/g, \"\")\n .replace(/[\\x00-\\x1f\\x80-\\x9f]/g, \"\")\n .trim();\n};\n","import { HelmetOptions } from \"./helmet_types.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\n/**\n * Sets common HTTP security headers\n * @param options Helmet options (all optional)\n */\nexport const helmet = (options?: HelmetOptions): ServerRouteMiddleware => {\n const opts: Required<HelmetOptions> = {\n dnsPrefetchControl: true,\n frameguard: { action: \"SAMEORIGIN\" },\n hsts: { maxAge: 15552000, includeSubDomains: true, preload: false },\n contentTypeOptions: true,\n ieNoOpen: true,\n xssFilter: true,\n referrerPolicy: \"no-referrer\",\n crossOriginResourcePolicy: \"same-origin\",\n crossOriginOpenerPolicy: \"same-origin\",\n crossOriginEmbedderPolicy: \"require-corp\",\n contentSecurityPolicy: false,\n ...options,\n };\n\n return async (_req: Request, res: Response, next: NextFunction) => {\n // X-DNS-Prefetch-Control\n if (opts.dnsPrefetchControl) {\n res.setHeader(\"X-DNS-Prefetch-Control\", \"off\");\n }\n // X-Frame-Options\n if (opts.frameguard) {\n let action = \"SAMEORIGIN\";\n if (typeof opts.frameguard === \"object\") {\n action = opts.frameguard.action;\n }\n res.setHeader(\"X-Frame-Options\", action);\n }\n // Strict-Transport-Security\n if (opts.hsts) {\n let hstsRaw: Partial<{\n maxAge: number;\n includeSubDomains: boolean;\n preload: boolean;\n }> = {};\n if (typeof opts.hsts === \"object\") {\n hstsRaw = opts.hsts;\n }\n const maxAge = hstsRaw.maxAge !== undefined ? hstsRaw.maxAge : 15552000;\n const includeSubDomains =\n hstsRaw.includeSubDomains !== undefined\n ? hstsRaw.includeSubDomains\n : true;\n const preload = hstsRaw.preload !== undefined ? hstsRaw.preload : false;\n let hstsValue = `max-age=${maxAge}`;\n if (includeSubDomains !== false) {\n hstsValue += \"; includeSubDomains\";\n }\n if (preload) {\n hstsValue += \"; preload\";\n }\n res.setHeader(\"Strict-Transport-Security\", hstsValue);\n }\n // X-Content-Type-Options\n if (opts.contentTypeOptions) {\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n }\n // X-Download-Options\n if (opts.ieNoOpen) {\n res.setHeader(\"X-Download-Options\", \"noopen\");\n }\n // X-XSS-Protection\n if (opts.xssFilter) {\n res.setHeader(\"X-XSS-Protection\", \"0\");\n }\n // Referrer-Policy\n if (opts.referrerPolicy) {\n res.setHeader(\"Referrer-Policy\", opts.referrerPolicy);\n }\n // Cross-Origin-Resource-Policy\n if (opts.crossOriginResourcePolicy) {\n res.setHeader(\n \"Cross-Origin-Resource-Policy\",\n opts.crossOriginResourcePolicy,\n );\n }\n // Cross-Origin-Opener-Policy\n if (opts.crossOriginOpenerPolicy) {\n res.setHeader(\"Cross-Origin-Opener-Policy\", opts.crossOriginOpenerPolicy);\n }\n // Cross-Origin-Embedder-Policy\n if (opts.crossOriginEmbedderPolicy) {\n res.setHeader(\n \"Cross-Origin-Embedder-Policy\",\n opts.crossOriginEmbedderPolicy,\n );\n }\n // Content-Security-Policy\n if (opts.contentSecurityPolicy) {\n res.setHeader(\"Content-Security-Policy\", opts.contentSecurityPolicy);\n }\n\n await next();\n };\n};\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class JsonNotValidError extends BaldaError {\n constructor(json: any) {\n super(`JSON_NOT_VALID: \"${JSON.stringify(json)}\" is not a valid JSON`);\n }\n}\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { JsonNotValidError } from \"../../errors/json_not_valid.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport { canHaveBody } from \"../../runtime/native_server/server_utils.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { parseSizeLimit } from \"../../utils.js\";\nimport type { JsonOptions } from \"./json_options.js\";\n\n// 100kb in bytes\nconst DEFAULT_SIZE = 100 * 1024;\n\n/**\n * Middleware to parse the JSON body of the request. GET, DELETE and OPTIONS requests are not parsed.\n * @param options - The options for the JSON middleware.\n * @param options.sizeLimit - The maximum size of the JSON body. Default: 100kb\n */\nexport const json = (options?: JsonOptions): ServerRouteMiddleware => {\n return async (req: Request, res: Response, next: NextFunction) => {\n if (!isJsonRequest(req) || !canHaveBody(req.method)) {\n return next();\n }\n\n const sizeLimit =\n parseSizeLimit(options?.sizeLimit, DEFAULT_SIZE) ?? DEFAULT_SIZE;\n const arrayBuffer = req.rawBody;\n\n if (!arrayBuffer) {\n if (options?.parseEmptyBodyAsObject) {\n req.body = {};\n }\n\n return next();\n }\n\n const byteLength = arrayBuffer.byteLength;\n if (!byteLength) {\n if (options?.parseEmptyBodyAsObject) {\n req.body = {};\n }\n\n return next();\n }\n\n if (byteLength > sizeLimit) {\n const customErrorMessage = {\n status: 413,\n message: \"ERR_REQUEST_BODY_TOO_LARGE\",\n ...options?.customErrorMessage,\n };\n\n return res.status(customErrorMessage.status).json({\n error: customErrorMessage.message,\n });\n }\n\n try {\n const encoding = options?.encoding ?? \"utf-8\";\n const decodedBody = new TextDecoder(encoding).decode(arrayBuffer);\n req.body = JSON.parse(decodedBody);\n } catch (error) {\n if (error instanceof SyntaxError) {\n return res.badRequest({\n ...errorFactory(new JsonNotValidError(\"Invalid JSON syntax\")),\n });\n }\n\n return res.badRequest({\n ...errorFactory(new JsonNotValidError(\"Invalid request body encoding\")),\n });\n }\n\n await next();\n };\n};\n\nfunction isJsonRequest(req: Request): boolean {\n const contentType = getContentType(req);\n if (!contentType) {\n return false;\n }\n\n const mimeType = parseMimeType(contentType);\n return mimeType === \"application/json\";\n}\n\nfunction getContentType(req: Request): string | null {\n const contentType =\n req.headers.get(\"content-type\") ?? req.headers.get(\"Content-Type\");\n if (!contentType) {\n return null;\n }\n\n if (Array.isArray(contentType)) {\n return contentType[0] || null;\n }\n\n return contentType;\n}\n\nfunction parseMimeType(contentType: string): string {\n const trimmed = contentType.trim();\n const semicolonIndex = trimmed.indexOf(\";\");\n\n if (semicolonIndex === -1) {\n return trimmed.toLowerCase();\n }\n\n return trimmed.substring(0, semicolonIndex).trim().toLowerCase();\n}\n","import { logger } from \"../../logger/logger.js\";\nimport type { LogOptions } from \"./log_types.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\n/**\n * Logs the request and response of the handler, can be set both on a specific route or on a global middleware.\n * @warning Only json objects and strings are logged from the request and response.\n */\nexport const log = (options?: LogOptions): ServerRouteMiddleware => {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const body = req.body;\n if (options?.logRequest ?? true) {\n logger.info({\n type: \"request\",\n requestId: req.id,\n method:\n (options?.requestPayload?.method ?? true) ? req.method : undefined,\n url: (options?.requestPayload?.url ?? true) ? req.url : undefined,\n ip: (options?.requestPayload?.ip ?? true) ? req.ip : undefined,\n headers:\n (options?.requestPayload?.headers ?? true)\n ? req.headers\n : undefined,\n body:\n (options?.requestPayload?.body ?? false)\n ? returnIfObjectOrString(body)\n : undefined,\n });\n }\n\n const startTime = performance.now();\n await next();\n const endTime = performance.now();\n const duration = endTime - startTime;\n\n if (options?.logResponse ?? true) {\n logger.info({\n type: \"response\",\n requestId: req.id,\n status: options?.responsePayload?.status ?? res.responseStatus,\n duration: `${duration.toFixed(2)}ms`,\n body:\n (options?.responsePayload?.body ?? false)\n ? returnIfObjectOrString(res.getBody())\n : undefined,\n headers:\n (options?.responsePayload?.headers ?? false)\n ? res.headers\n : undefined,\n });\n }\n } catch (error) {\n logger.error(error);\n throw error;\n }\n };\n};\n\nfunction returnIfObjectOrString(value: any): any {\n if (typeof value === \"string\") {\n return value;\n }\n\n // must be Record<string, any> in order to be logged as json\n if (value && typeof value === \"object\" && value.constructor === Object) {\n return value;\n }\n\n return;\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { MethodOverrideOptions } from \"./method_override_types.js\";\n\nconst DEFAULT_METHODS = [\"POST\"];\nconst DEFAULT_HEADER = \"X-HTTP-Method-Override\";\nconst ALLOWED_OVERRIDE_METHODS = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\n/**\n * Method override middleware for supporting HTTP verbs like PUT/DELETE in clients that don't support them\n *\n * @param options Method override middleware options\n */\nexport const methodOverride = (\n options?: MethodOverrideOptions,\n): ServerRouteMiddleware => {\n const allowedMethods = (options?.methods ?? DEFAULT_METHODS).map((m) =>\n m.toUpperCase(),\n );\n const headerName = options?.header ?? DEFAULT_HEADER;\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const currentMethod = req.method.toUpperCase();\n\n if (!allowedMethods.includes(currentMethod)) {\n return next();\n }\n\n const overrideMethod = req.headers.get(headerName);\n\n if (!overrideMethod) {\n return next();\n }\n\n const normalizedOverride = overrideMethod.toUpperCase();\n if (!ALLOWED_OVERRIDE_METHODS.includes(normalizedOverride)) {\n return next();\n }\n\n (req as any).method = normalizedOverride;\n\n await next();\n };\n};\n","export interface InMemoryStorageInterface {\n get: (key: string) => Promise<number>;\n set: (key: string, value: number) => Promise<void>;\n}\n\nexport class InMemoryStorage implements InMemoryStorageInterface {\n private storage: Map<string, number> = new Map();\n private windowMs: number;\n\n constructor(windowMs: number) {\n this.windowMs = windowMs;\n }\n\n async set(key: string, value: number): Promise<void> {\n this.storage.set(key, value);\n setTimeout(() => {\n this.storage.delete(key);\n }, this.windowMs);\n }\n\n async get(key: string): Promise<number> {\n const entry = this.storage.get(key);\n if (!entry) {\n return 0;\n }\n\n return entry;\n }\n\n protected async delete(key: string): Promise<void> {\n this.storage.delete(key);\n }\n}\n","import {\n InMemoryStorage,\n InMemoryStorageInterface,\n} from \"./in_memory_storage.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type {\n RateLimiterKeyOptions,\n StorageOptions,\n} from \"./rate_limiter_types.js\";\n\n/**\n * Rate limiter plugin\n * Rate limiter is a plugin that limits the number of requests to a resource.\n * It can be used to protect a resource from abuse.\n * @param keyOptions Rate limiter key options, tells the middleware how to retrieve the key from the request in to discriminate what to rate limit (all optional, defaults to ip)\n * @param storageOptions Rate limiter storage options, tells the middleware how to store the rate limit data (all optional, defaults to memory)\n */\nexport const rateLimiter = (\n keyOptions?: RateLimiterKeyOptions,\n storageOptions?: StorageOptions,\n): ServerRouteMiddleware => {\n const baseKeyOptions: RateLimiterKeyOptions = {\n type: \"ip\",\n limit: 100,\n message: \"ERR_RATE_LIMIT_EXCEEDED\",\n statusCode: 429,\n ...keyOptions,\n };\n\n const baseStorageOptions: StorageOptions = {\n type: \"memory\",\n ...storageOptions,\n };\n\n if (baseStorageOptions.type === \"memory\" && !baseStorageOptions.windowMs) {\n baseStorageOptions.windowMs = 60000;\n }\n\n const storage: InMemoryStorageInterface =\n baseStorageOptions.type === \"memory\"\n ? new InMemoryStorage(baseStorageOptions.windowMs!)\n : {\n get: baseStorageOptions.get,\n set: baseStorageOptions.set,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const key = baseKeyOptions.type === \"ip\" ? req.ip : baseKeyOptions.key(req);\n const value = await storage.get(key!);\n if (value >= baseKeyOptions.limit!) {\n return res.status(baseKeyOptions.statusCode!).json({\n message: baseKeyOptions.message,\n });\n }\n\n await storage.set(key!, value + 1);\n return next();\n };\n};\n","import type { SessionStore } from \"./session_types.js\";\n\nexport class MemorySessionStore implements SessionStore {\n private store = new Map<\n string,\n { value: Record<string, any>; exp?: number }\n >();\n\n async get(sid: string): Promise<Record<string, any> | undefined> {\n const entry = this.store.get(sid);\n if (!entry) {\n return;\n }\n\n if (entry.exp && Date.now() > entry.exp) {\n this.store.delete(sid);\n return;\n }\n\n return entry.value;\n }\n\n async set(\n sid: string,\n value: Record<string, any>,\n ttlSeconds?: number,\n ): Promise<void> {\n const exp = ttlSeconds ? Date.now() + ttlSeconds * 1000 : undefined;\n this.store.set(sid, { value, exp });\n }\n\n async destroy(sid: string): Promise<void> {\n this.store.delete(sid);\n }\n}\n","import { MemorySessionStore } from \"./session_store.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { SessionOptions, SessionStore } from \"./session_types.js\";\nimport { nativeCrypto } from \"../../runtime/native_crypto.js\";\n\n/**\n * Session plugin middleware, used to store the session in the request and response objects\n * Uses cookies to send the session id\n * @warning Must be used after the cookie middleware\n * @param options Session options\n * @param options.name The name of the session cookie\n * @param options.ttl The TTL of the session in seconds\n * @param options.store The store to use for the session\n * @param options.cookie The cookie options\n */\nexport const session = (options?: SessionOptions): ServerRouteMiddleware => {\n const name = options?.name ?? \"sid\";\n const ttl = options?.ttl ?? 60 * 60 * 24; // 1 day\n const store: SessionStore = options?.store ?? new MemorySessionStore();\n const cookieDefaults = {\n path: \"/\",\n httpOnly: true,\n secure: false,\n sameSite: \"Lax\" as const,\n ...(options?.cookie ?? {}),\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const sidFromCookie = req.cookies && req.cookies[name];\n let sid = sidFromCookie;\n let sess = sid ? await store.get(sid) : undefined;\n\n if (!sid || !sess) {\n sid ||= nativeCrypto.randomUUID();\n sess ||= {};\n await store.set(sid, sess, ttl);\n res.cookie?.(name, sid, cookieDefaults);\n }\n\n req.session = sess;\n req.saveSession = async () => store.set(sid, sess, ttl);\n req.destroySession = async () => {\n await store.destroy(sid!);\n res.clearCookie?.(name, cookieDefaults);\n };\n\n await next();\n await store.set(sid, sess, ttl);\n };\n};\n","import type { ZodObject, ZodType } from \"zod\";\nimport { AjvCompileReturnType } from \"../../ajv/ajv_types.js\";\nimport type {\n SwaggerGlobalOptions,\n SwaggerRouteOptions,\n} from \"../../plugins/swagger/swagger_types.js\";\nimport { router } from \"../../server/router/router.js\";\n\n/**\n * Swagger plugin that serves the swagger UI and JSON specification, by default the UI will be available at /docs and the JSON specification at /docs/json\n * @warning The json specification is always available at /${globalOptions.path}/json\n * @internal\n */\nexport const swagger = (\n globalOptions?: SwaggerGlobalOptions | boolean,\n): void => {\n let swaggerOptions: SwaggerGlobalOptions = {\n type: \"standard\",\n path: \"/docs\",\n title: \"Balda API Documentation\",\n description: \"API Documentation from the Balda Framework\",\n version: \"1.0.0\",\n servers: [\"http://localhost\"],\n security: [],\n tags: [],\n components: {},\n securitySchemes: {},\n models: {},\n };\n\n if (globalOptions && typeof globalOptions !== \"boolean\") {\n swaggerOptions = {\n ...swaggerOptions,\n ...globalOptions,\n };\n }\n\n const spec = generateOpenAPISpec(swaggerOptions);\n const uiPath = `${swaggerOptions.path}`;\n const jsonPath = `${uiPath}/json`;\n\n let uiContent: string;\n if (swaggerOptions.type === \"rapidoc\") {\n uiContent = generateRapiDocUI(jsonPath, swaggerOptions);\n } else if (swaggerOptions.type === \"scalar\") {\n uiContent = generateScalarUI(jsonPath, swaggerOptions);\n } else if (swaggerOptions.type === \"elements\") {\n uiContent = generateElementsUI(jsonPath, swaggerOptions);\n } else if (swaggerOptions.type === \"custom\") {\n uiContent = swaggerOptions.customUIGenerator(jsonPath, swaggerOptions);\n } else {\n uiContent = generateSwaggerUI(jsonPath, swaggerOptions);\n }\n\n router.addOrUpdate(\"GET\", uiPath, [], (_req, res) => {\n res.html(uiContent);\n });\n\n router.addOrUpdate(\"GET\", jsonPath, [], (_req, res) => {\n res.json(spec);\n });\n};\n\n/**\n * Escape HTML to prevent XSS attacks\n */\nconst escapeHtml = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\n\nfunction safeToJSONSchema(\n schema: ZodType | AjvCompileReturnType | Record<string, unknown>,\n): Record<string, any> {\n if (!schema || typeof schema !== \"object\") {\n return { type: \"string\" };\n }\n\n return schema as Record<string, unknown>;\n}\n\nfunction generateOpenAPISpec(globalOptions: SwaggerGlobalOptions) {\n const routes = router.getRoutes();\n const paths: Record<string, any> = {};\n\n // Process models - normalize to Record\n let processedModels: Record<string, Record<string, unknown>> | undefined;\n if (globalOptions.models) {\n if (Array.isArray(globalOptions.models)) {\n // Array of models: extract name from $id/title or use index\n processedModels = globalOptions.models.reduce(\n (acc, model, index) => {\n const jsonSchema = safeToJSONSchema(model);\n const schemaName =\n (jsonSchema as Record<string, string>).$id ||\n (jsonSchema as Record<string, string>).title ||\n `Model${index}`;\n acc[schemaName] = jsonSchema;\n return acc;\n },\n {} as Record<string, Record<string, unknown>>,\n );\n } else {\n // Record of models: use the key as name\n processedModels = {};\n for (const [name, model] of Object.entries(globalOptions.models)) {\n processedModels[name] = safeToJSONSchema(model);\n }\n }\n }\n\n const components = {\n ...globalOptions.components,\n securitySchemes: globalOptions.securitySchemes || {},\n schemas: processedModels\n ? {\n ...(globalOptions.components?.schemas || {}),\n ...processedModels,\n }\n : globalOptions.components?.schemas\n ? { ...globalOptions.components.schemas }\n : undefined,\n };\n\n for (const route of routes) {\n const swaggerOptions: SwaggerRouteOptions | undefined =\n route.swaggerOptions;\n if (swaggerOptions?.excludeFromSwagger) continue;\n\n if (!paths[route.path]) paths[route.path] = {};\n const method = route.method.toLowerCase();\n const operation: Record<string, any> = {\n summary: swaggerOptions?.name || `${method.toUpperCase()} ${route.path}`,\n description: swaggerOptions?.description || \"\",\n tags: swaggerOptions?.service ? [swaggerOptions.service] : [],\n deprecated: swaggerOptions?.deprecated || false,\n };\n\n let parameters: any[] = [];\n if (swaggerOptions?.query) {\n if (\n swaggerOptions.query.type === \"object\" &&\n (swaggerOptions.query as ZodObject).shape\n ) {\n for (const [name, schema] of Object.entries(\n (swaggerOptions.query as ZodObject).shape,\n )) {\n // Skip if schema is invalid\n if (!schema || typeof schema !== \"object\") {\n continue;\n }\n\n parameters.push({\n name,\n in: \"query\",\n required: Array.isArray(\n (swaggerOptions.query as ZodObject).shape[name].required,\n )\n ? (swaggerOptions.query as ZodObject).shape[\n name\n ].required.includes(name)\n : false,\n schema: safeToJSONSchema(schema as ZodType),\n });\n }\n }\n }\n if (swaggerOptions && (swaggerOptions as Record<string, unknown>).params) {\n parameters = parameters.concat(\n extractPathParams(route.path, (swaggerOptions as any).params),\n );\n } else {\n parameters = parameters.concat(extractPathParams(route.path));\n }\n\n if (parameters.length > 0) {\n operation.parameters = parameters;\n }\n\n if (swaggerOptions?.requestBody) {\n let routeBodyContentType = \"application/json\";\n if (swaggerOptions.bodyType === \"form-data\") {\n routeBodyContentType = \"multipart/form-data\";\n } else if (swaggerOptions.bodyType === \"urlencoded\") {\n routeBodyContentType = \"application/x-www-form-urlencoded\";\n }\n operation.requestBody = {\n content: {\n [routeBodyContentType]: {\n schema: safeToJSONSchema(swaggerOptions.requestBody as ZodType),\n },\n },\n required: true,\n };\n } else if (\n swaggerOptions?.bodyType &&\n (swaggerOptions.bodyType.includes(\"form-data\") ||\n swaggerOptions.bodyType.includes(\"urlencoded\"))\n ) {\n operation.requestBody = {\n content: {\n [swaggerOptions.bodyType]: {\n schema: { type: \"object\" },\n },\n },\n required: true,\n };\n }\n\n operation.responses = {};\n if (swaggerOptions?.responses) {\n for (const [statusCode, schema] of Object.entries(\n swaggerOptions.responses,\n )) {\n operation.responses[statusCode] = {\n description: `Response for ${statusCode}`,\n content: {\n \"application/json\": {\n schema: safeToJSONSchema(schema),\n },\n },\n };\n }\n }\n if (swaggerOptions?.errors) {\n for (const [statusCode, schema] of Object.entries(\n swaggerOptions.errors,\n )) {\n operation.responses[statusCode] = {\n description: `Error response for ${statusCode}`,\n content: {\n \"application/json\": {\n schema: safeToJSONSchema(schema),\n },\n },\n };\n }\n }\n\n if (Object.keys(operation.responses).length === 0) {\n operation.responses[\"200\"] = {\n description: \"Successful response\",\n content: {\n \"application/json\": {\n schema: { type: \"object\" },\n },\n },\n };\n }\n\n // First we try route specific security\n if (swaggerOptions?.security) {\n const securityArr: any[] = [];\n if (!Array.isArray(swaggerOptions.security)) {\n swaggerOptions.security = [swaggerOptions.security];\n }\n\n for (const sec of swaggerOptions.security) {\n if (sec.type === \"bearer\") {\n if (!components.securitySchemes.bearer) {\n components.securitySchemes.bearer = {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: sec.bearerFormat || \"JWT\",\n description: sec.description,\n } as any;\n }\n securityArr.push({ bearer: [] });\n } else if (sec.type === \"apiKey\") {\n // Use sec.name as the scheme name\n if (!components.securitySchemes[sec.name]) {\n components.securitySchemes[sec.name] = {\n type: \"apiKey\",\n name: sec.name,\n in: sec.in,\n description: sec.description,\n };\n }\n securityArr.push({ [sec.name]: [] });\n } else if (sec.type === \"oauth2\") {\n const schemeName = sec.name || \"oauth2\";\n if (!components.securitySchemes[schemeName]) {\n components.securitySchemes[schemeName] = {\n type: \"oauth2\",\n flows: sec.flows,\n description: sec.description,\n };\n }\n securityArr.push({ [schemeName]: [] });\n } else if (sec.type === \"openIdConnect\") {\n const schemeName = sec.name || \"openIdConnect\";\n if (!components.securitySchemes[schemeName]) {\n components.securitySchemes[schemeName] = {\n type: \"openIdConnect\",\n openIdConnectUrl: sec.openIdConnectUrl,\n description: sec.description,\n };\n }\n securityArr.push({ [schemeName]: [] });\n }\n }\n if (securityArr.length) operation.security = securityArr;\n } else if (globalOptions.security) {\n // If no route specific security, we use the global security\n operation.security = globalOptions.security;\n }\n\n paths[route.path][method] = operation;\n }\n\n return {\n openapi: \"3.0.0\",\n info: {\n title: globalOptions.title,\n description: globalOptions.description,\n version: globalOptions.version,\n ...globalOptions.info,\n },\n servers: globalOptions.servers?.map((url) => ({ url })) || [{ url: \"/\" }],\n paths,\n components,\n security: globalOptions.security || [],\n tags: globalOptions.tags\n ? Object.entries(globalOptions.tags).map(([name, config]) => ({\n name,\n ...config,\n }))\n : [],\n };\n}\n\nfunction generateSwaggerUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <title>${escapeHtml(globalOptions.title)}</title>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css\" />\n <style>\n html {\n box-sizing: border-box;\n overflow: -moz-scrollbars-vertical;\n overflow-y: scroll;\n }\n *, *:before, *:after {\n box-sizing: inherit;\n }\n body {\n margin:0;\n background: #fafafa;\n }\n </style>\n</head>\n<body>\n <div id=\"swagger-ui\"></div>\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js\"></script>\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js\"></script>\n <script>\n window.onload = function() {\n const ui = SwaggerUIBundle({\n url: '${specUrl}',\n dom_id: '#swagger-ui',\n deepLinking: true,\n presets: [\n SwaggerUIBundle.presets.apis,\n SwaggerUIStandalonePreset\n ],\n plugins: [\n SwaggerUIBundle.plugins.DownloadUrl\n ],\n layout: \"StandaloneLayout\",\n validatorUrl: null,\n oauth2RedirectUrl: window.location.origin + '/swagger-ui/oauth2-redirect.html'\n });\n };\n </script>\n</body>\n</html>`;\n}\n\nfunction generateRapiDocUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html>\n <head>\n <title>${escapeHtml(globalOptions.title)}</title>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <link rel=\"icon\" type=\"image/png\" href=\"https://mrin9.github.io/RapiDoc/images/favicon.png\">\n <style>\n body { margin: 0; padding: 0; }\n </style>\n </head>\n <body>\n <rapi-doc\n spec-url=\"${specUrl}\"\n render-style=\"read\"\n layout=\"column\"\n show-header=\"true\"\n allow-server-selection=\"true\"\n allow-authentication=\"true\"\n allow-server-variables=\"true\"\n theme=\"light\"\n primary-color=\"#009688\"\n regular-font=\"Open Sans, sans-serif\"\n mono-font=\"Fira Mono, monospace\"\n >\n </rapi-doc>\n <script type=\"module\" src=\"https://unpkg.com/rapidoc/dist/rapidoc-min.js\"></script>\n </body>\n</html>\n `;\n}\n\nfunction generateScalarUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <title>${escapeHtml(globalOptions.title)}</title>\n <style>\n body {\n margin: 0;\n padding: 0;\n }\n </style>\n </head>\n <body>\n <script\n id=\"api-reference\"\n type=\"application/json\"\n data-configuration='{\"spec\":{\"url\":\"${specUrl}\"},\"theme\":\"default\"}'\n ></script>\n <script src=\"https://unpkg.com/@scalar/api-reference@latest/dist/browser/standalone.js\"></script>\n </body>\n</html>\n `;\n}\n\nfunction generateElementsUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <title>${escapeHtml(globalOptions.title)}</title>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/@stoplight/elements@7.7.9/styles.min.css\">\n <style>\n body {\n margin: 0;\n padding: 0;\n height: 100vh;\n overflow: hidden;\n }\n </style>\n </head>\n <body>\n <elements-api\n apiDescriptionUrl=\"${specUrl}\"\n router=\"hash\"\n layout=\"sidebar\"\n />\n <script src=\"https://unpkg.com/@stoplight/elements@7.7.9/web-components.min.js\"></script>\n </body>\n</html>\n `;\n}\n\n/**\n * Extract path parameters from a route path (e.g., /users/:id -> [{ name: \"id\", in: \"path\", required: true }])\n */\nfunction extractPathParams(path: string, paramSchema?: ZodType): any[] {\n const params: any[] = [];\n const regex = /:([a-zA-Z0-9_]+)/g;\n let match;\n while ((match = regex.exec(path)) !== null) {\n const name = match[1];\n let schema: Record<string, unknown> = { type: \"string\" };\n if (\n paramSchema &&\n (paramSchema as ZodObject).shape &&\n (paramSchema as ZodObject).shape[name]\n ) {\n schema = safeToJSONSchema(\n (paramSchema as ZodObject).shape[name] as ZodType,\n ) || {\n type: \"string\",\n };\n }\n params.push({\n name,\n in: \"path\",\n required: true,\n schema,\n });\n }\n return params;\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { TimeoutOptions } from \"./timeout_types.js\";\n\n/**\n * Timeout plugin middleware, used to timeout the request if it takes too long\n * It fills the req.timeout property with true if the request times out\n * @param options Timeout options\n * @param options.ms The timeout in milliseconds\n * @param options.status The status code to return if the request times out\n * @param options.message The message to return if the request times out\n */\nexport const timeout = (options: TimeoutOptions): ServerRouteMiddleware => {\n return async (req: Request, _res: Response, next: NextFunction) => {\n req.timeout = false;\n const timer = setTimeout(() => {\n req.timeout = true;\n }, options.ms);\n\n try {\n await next();\n } finally {\n clearTimeout(timer);\n }\n };\n};\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { TrustProxyOptions } from \"./trust_proxy_types.js\";\n\n/**\n * Trust proxy plugin middleware, used to trust the proxy headers to get the client ip\n * @param options Trust proxy options (all optional)\n * @param options.trust Whether to trust the proxy headers\n * @param options.header The header name to read the client IP chain from\n * @param options.hop The hop to use to get the client IP\n */\n\nexport const trustProxy = (\n options?: TrustProxyOptions,\n): ServerRouteMiddleware => {\n const headerName = options?.header ?? \"x-forwarded-for\";\n const useTrust = options?.trust ?? true;\n const hop = options?.hop ?? \"first\";\n\n return async (req: Request, _res: Response, next: NextFunction) => {\n if (!useTrust) {\n return next();\n }\n\n const header = req.headers.get(headerName);\n if (header && typeof header === \"string\") {\n const parts = header\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (parts.length) {\n req.ip = hop === \"first\" ? parts[0] : parts[parts.length - 1];\n }\n }\n\n return next();\n };\n};\n","import type { UrlEncodedOptions } from \"./urlencoded_types.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { parseSizeLimit } from \"../../utils.js\";\n\n// 1MB in bytes\nconst DEFAULT_SIZE = 1024 * 1024;\n\n/**\n * URL-encoded form data parser middleware\n * Parses application/x-www-form-urlencoded bodies and populates req.body\n * @param options URL-encoded parsing options\n * @param options.limit The maximum size of the URL-encoded body. Supports \"5mb\", \"100kb\" format. Defaults to \"1mb\".\n * @param options.extended Whether to parse extended syntax (objects and arrays). Defaults to false.\n * @param options.charset The character encoding to use when parsing. Defaults to 'utf8'.\n * @param options.allowEmpty Whether to allow empty values. Defaults to true.\n * @param options.parameterLimit Maximum number of parameters to parse. Defaults to 1000.\n */\nexport const urlencoded = (\n options?: UrlEncodedOptions,\n): ServerRouteMiddleware => {\n const limit = parseSizeLimit(options?.limit, DEFAULT_SIZE) ?? DEFAULT_SIZE;\n const opts = {\n limit,\n extended: options?.extended ?? false,\n charset: options?.charset ?? \"utf8\",\n allowEmpty: options?.allowEmpty ?? true,\n parameterLimit: options?.parameterLimit ?? 1000,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers.get(\"content-type\") || \"\";\n if (!contentType.includes(\"application/x-www-form-urlencoded\")) {\n return next();\n }\n\n try {\n await parseUrlEncodedBody(req, opts);\n await next();\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"limit\")) {\n res.status(413).json({\n error: \"Payload too large\",\n message: \"Request body exceeds the size limit\",\n });\n return;\n }\n\n throw error;\n }\n };\n};\n\n/**\n * Parse URL-encoded body and populate req.body\n */\nasync function parseUrlEncodedBody(\n req: Request,\n opts: {\n limit: number;\n extended: boolean;\n charset: string;\n allowEmpty: boolean;\n parameterLimit: number;\n },\n): Promise<void> {\n const arrayBuffer = req.rawBody!;\n\n if (arrayBuffer.byteLength > opts.limit) {\n throw new Error(\n `Body size ${arrayBuffer.byteLength} exceeds limit ${opts.limit}`,\n );\n }\n\n const decoder = new TextDecoder(opts.charset);\n const bodyString = decoder.decode(arrayBuffer);\n const parsed = parseUrlEncodedString(bodyString, opts);\n req.body = parsed;\n}\n\n/**\n * Parse URL-encoded string into an object\n */\nfunction parseUrlEncodedString(\n str: string,\n opts: {\n extended: boolean;\n allowEmpty: boolean;\n parameterLimit: number;\n },\n): Record<string, any> {\n const result: Record<string, any> = {};\n const searchParams = new URLSearchParams(str);\n if (searchParams.size > opts.parameterLimit) {\n throw new Error(\n `Too many parameters: ${searchParams.size} exceeds limit ${opts.parameterLimit}`,\n );\n }\n\n for (const [key, value] of searchParams.entries()) {\n if (!opts.allowEmpty && value === \"\") {\n continue;\n }\n\n if (opts.extended) {\n setNestedValue(result, key, value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Set nested value for extended mode (e.g., user[name]=john -> { user: { name: 'john' } })\n */\nfunction setNestedValue(\n obj: Record<string, any>,\n key: string,\n value: string,\n): void {\n const dangerousKeys = [\"__proto__\", \"constructor\", \"prototype\"];\n if (dangerousKeys.includes(key)) {\n return;\n }\n\n const keys = key.match(/\\[([^\\]]*)\\]/g);\n if (!keys) {\n if (!dangerousKeys.includes(key)) {\n obj[key] = value;\n }\n return;\n }\n\n let current = obj;\n const baseKey = key.split(\"[\")[0];\n\n // Security: Check base key\n if (dangerousKeys.includes(baseKey)) {\n return;\n }\n\n for (let i = 0; i < keys.length - 1; i++) {\n const bracketKey = keys[i].slice(1, -1);\n\n // Security: Check each nested key\n if (dangerousKeys.includes(bracketKey)) {\n return;\n }\n\n if (!current[baseKey]) {\n current[baseKey] = {};\n }\n\n if (bracketKey === \"\") {\n if (!Array.isArray(current[baseKey])) {\n current[baseKey] = [];\n }\n current = current[baseKey];\n continue;\n }\n\n if (!current[baseKey][bracketKey]) {\n current[baseKey][bracketKey] = {};\n }\n\n current = current[baseKey][bracketKey];\n }\n\n const lastKey = keys[keys.length - 1].slice(1, -1);\n\n // Security: Check last key\n if (dangerousKeys.includes(lastKey)) {\n return;\n }\n\n if (lastKey === \"\") {\n if (!Array.isArray(current)) {\n current = [];\n }\n\n current.push(value);\n return;\n }\n\n current[lastKey] = value;\n}\n","class NativeHash {\n private readonly ITERATIONS = 600_000;\n private readonly SALT_LENGTH = 16;\n private readonly KEY_LENGTH = 256;\n\n async hash(data: string): Promise<string> {\n if (!data) {\n throw new Error(\"Data to hash cannot be empty\");\n }\n\n const encoder = new TextEncoder();\n const passwordBuffer = encoder.encode(data);\n\n const salt = crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH));\n\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n passwordBuffer,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\"],\n );\n\n const hashBuffer = await crypto.subtle.deriveBits(\n {\n name: \"PBKDF2\",\n salt: salt,\n iterations: this.ITERATIONS,\n hash: \"SHA-256\",\n },\n keyMaterial,\n this.KEY_LENGTH,\n );\n\n const saltBase64 = this.encodeBase64(salt);\n const hashBase64 = this.encodeBase64(new Uint8Array(hashBuffer));\n\n return `${saltBase64}:${hashBase64}`;\n }\n\n async compare(hash: string, data: string): Promise<boolean> {\n if (!hash || !data) {\n return false;\n }\n\n try {\n const encoder = new TextEncoder();\n const passwordBuffer = encoder.encode(data);\n\n const parts = hash.split(\":\");\n if (parts.length !== 2) {\n throw new Error(\"Invalid hash format\");\n }\n\n const [saltBase64, hashBase64] = parts;\n\n const salt = this.decodeBase64(saltBase64);\n const expectedHash = this.decodeBase64(hashBase64);\n\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n passwordBuffer,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\"],\n );\n\n const hashBuffer = await crypto.subtle.deriveBits(\n {\n name: \"PBKDF2\",\n salt: salt as BufferSource,\n iterations: this.ITERATIONS,\n hash: \"SHA-256\",\n },\n keyMaterial,\n this.KEY_LENGTH,\n );\n\n const actualHash = new Uint8Array(hashBuffer);\n\n if (actualHash.length !== expectedHash.length) {\n return false;\n }\n\n let mismatch = 0;\n for (let i = 0; i < actualHash.length; i++) {\n mismatch |= actualHash[i] ^ expectedHash[i];\n }\n\n return mismatch === 0;\n } catch (error) {\n return false;\n }\n }\n\n private encodeBase64(bytes: Uint8Array): string {\n let binary = \"\";\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return btoa(binary);\n }\n\n private decodeBase64(base64: string): Uint8Array {\n const binary = atob(base64);\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n\nexport const hash = new NativeHash();\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { GraphQL } from \"../../graphql/graphql.js\";\nimport { Request } from \"../../server/http/request.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport type {\n HttpMethod,\n ServerConnectInput,\n ServerRoute,\n ServerTapOptions,\n} from \"./server_types.js\";\nimport {\n createGraphQLHandlerInitializer,\n executeMiddlewareChain,\n} from \"./server_utils.js\";\n\nexport class ServerBun implements ServerInterface {\n port: number;\n hostname: string;\n host: string;\n routes: ServerRoute[];\n tapOptions?: ServerTapOptions;\n graphql: GraphQL;\n declare url: string;\n declare runtimeServer: ReturnType<typeof Bun.serve>;\n private ensureGraphQLHandler: ReturnType<\n typeof createGraphQLHandlerInitializer\n >;\n\n constructor(input?: ServerConnectInput) {\n this.routes = input?.routes ?? [];\n this.port = input?.port ?? 80;\n this.hostname = input?.host ?? \"0.0.0.0\";\n this.host = input?.host ?? \"0.0.0.0\";\n this.url = `http://${this.host}:${this.port}`;\n this.tapOptions = input?.tapOptions;\n this.graphql = input?.graphql ?? new GraphQL();\n this.ensureGraphQLHandler = createGraphQLHandlerInitializer(this.graphql);\n }\n\n listen(): void {\n const tapOptions = this.tapOptions?.bun;\n const { fetch, websocket, ...rest } = tapOptions ?? {};\n\n this.runtimeServer = Bun.serve({\n port: this.port,\n hostname: this.hostname,\n fetch: async (req, server) => {\n const url = new URL(req.url);\n const match = router.find(req.method as HttpMethod, url.pathname);\n\n Request.enrichRequest(req as Request);\n req.params = match?.params ?? {};\n req.query = Object.fromEntries(url.searchParams.entries());\n (req as any).ip =\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0] ??\n server.requestIP(req)?.address;\n\n // User input handler\n await fetch?.call(this, req as unknown as Request, server);\n\n // GraphQL handler\n if (\n this.graphql.isEnabled &&\n url.pathname.startsWith(\n this.graphql.getYogaOptions().graphqlEndpoint ?? \"/graphql\",\n )\n ) {\n const handler = await this.ensureGraphQLHandler();\n if (handler) {\n return handler.fetch(req, { server });\n }\n }\n\n // ws upgrade handler - only attempt if websocket config exists and request is upgrade\n if (websocket && req.headers.get(\"upgrade\") === \"websocket\") {\n const success = server.upgrade(req, { data: {} });\n if (success) {\n return;\n }\n }\n\n const response = await executeMiddlewareChain(\n match?.middleware ?? [],\n match?.handler ??\n ((req, res) => {\n res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }),\n req as Request,\n );\n\n const responseHeaders = response.headers;\n if (responseHeaders[\"Content-Type\"] === \"application/json\") {\n return Response.json(response.getBody(), {\n status: response.responseStatus,\n headers: response.headers,\n });\n }\n\n return new Response(response.getBody(), {\n status: response.responseStatus,\n headers: response.headers,\n });\n },\n // Pass websocket config to Bun.serve if provided\n ...(websocket ? { websocket } : {}),\n ...(rest as any),\n });\n\n this.url = this.runtimeServer.url.toString();\n }\n\n async close(): Promise<void> {\n if (!this.runtimeServer) {\n throw new Error(\"Server is not listening or not initialized\");\n }\n\n await this.runtimeServer.stop();\n }\n}\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { GraphQL } from \"../../graphql/graphql.js\";\nimport { Request } from \"../../server/http/request.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport type {\n HttpMethod,\n ServerConnectInput,\n ServerRoute,\n ServerTapOptions,\n} from \"./server_types.js\";\nimport {\n createGraphQLHandlerInitializer,\n executeMiddlewareChain,\n} from \"./server_utils.js\";\n\nexport class ServerDeno implements ServerInterface {\n declare port: number;\n declare hostname: string;\n declare host: string;\n declare url: string;\n declare routes: ServerRoute[];\n declare runtimeServer: ReturnType<typeof Deno.serve>;\n declare tapOptions?: ServerTapOptions;\n graphql: GraphQL;\n private ensureGraphQLHandler: ReturnType<\n typeof createGraphQLHandlerInitializer\n >;\n\n constructor(input?: ServerConnectInput) {\n this.routes = input?.routes ?? [];\n this.port = input?.port ?? 80;\n this.hostname = input?.host ?? \"0.0.0.0\";\n this.host = input?.host ?? \"0.0.0.0\";\n this.url = `http://${this.host}:${this.port}`;\n this.tapOptions = input?.tapOptions;\n this.graphql = input?.graphql ?? new GraphQL();\n this.ensureGraphQLHandler = createGraphQLHandlerInitializer(this.graphql);\n }\n\n listen(): void {\n const tapOptions = this.tapOptions?.deno;\n const { handler, ...rest } = tapOptions ?? {};\n\n this.runtimeServer = Deno.serve({\n port: this.port,\n hostname: this.hostname,\n handler: async (req, info) => {\n const url = new URL(req.url);\n const match = router.find(req.method as HttpMethod, url.pathname);\n\n Request.enrichRequest(req as Request);\n req.params = match?.params ?? {};\n req.query = Object.fromEntries(url.searchParams.entries());\n (req as any).ip =\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0] ??\n info.remoteAddr?.hostname;\n\n // User input handler\n const handlerResponse = await handler?.(req, info);\n if (handlerResponse) {\n return new Response(null, { status: 426 });\n }\n\n // GraphQL handler\n if (\n this.graphql.isEnabled &&\n url.pathname.startsWith(\n this.graphql.getYogaOptions().graphqlEndpoint ?? \"/graphql\",\n )\n ) {\n const graphqlHandler = await this.ensureGraphQLHandler();\n if (graphqlHandler) {\n return graphqlHandler.fetch(req, { info });\n }\n }\n\n // ws upgrade handler\n if (\n req.headers.get(\"upgrade\") === \"websocket\" &&\n this.tapOptions?.deno?.websocket\n ) {\n const { socket, response } = Deno.upgradeWebSocket(req);\n\n // Set event handlers instead of calling them immediately\n if (this.tapOptions?.deno?.websocket?.open) {\n socket.onopen = () =>\n this.tapOptions?.deno?.websocket?.open?.(socket);\n }\n\n if (this.tapOptions?.deno?.websocket?.message) {\n socket.onmessage = (event) => {\n this.tapOptions?.deno?.websocket?.message?.(socket, event.data);\n };\n }\n\n if (this.tapOptions?.deno?.websocket?.close) {\n socket.onclose = () =>\n this.tapOptions?.deno?.websocket?.close?.(socket);\n }\n\n return response;\n }\n\n const res = await executeMiddlewareChain(\n match?.middleware ?? [],\n match?.handler ??\n ((req, res) => {\n res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }),\n req as Request,\n );\n\n const responseHeaders = res.headers;\n if (responseHeaders[\"Content-Type\"] === \"application/json\") {\n return Response.json(res.getBody(), {\n status: res.responseStatus,\n headers: res.headers,\n });\n }\n\n return new Response(res.getBody(), {\n status: res.responseStatus,\n headers: res.headers,\n });\n },\n ...rest,\n });\n\n this.url = `http://${this.host}:${this.port}`;\n }\n\n async close(): Promise<void> {\n if (!this.runtimeServer) {\n throw new Error(\"Server is not listening or not initialized\");\n }\n\n await this.runtimeServer.shutdown();\n }\n}\n","import {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport {\n createSecureServer as http2CreateSecureServer,\n createServer as http2CreateServer,\n type Http2ServerRequest,\n type Http2ServerResponse,\n} from \"node:http2\";\nimport { createServer as httpsCreateServer } from \"node:https\";\nimport { errorFactory } from \"../../errors/error_factory.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { GraphQL } from \"../../graphql/graphql.js\";\nimport { NodeHttpClient } from \"../../server/server_types.js\";\nimport { Request } from \"../../server/http/request.js\";\nimport { Response } from \"../../server/http/response.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport type {\n HttpMethod,\n HttpsServerOptions,\n NodeServer,\n NodeTapOptions,\n ServerConnectInput,\n ServerRoute,\n ServerTapOptions,\n} from \"./server_types.js\";\nimport {\n canHaveBody,\n createGraphQLHandlerInitializer,\n executeMiddlewareChain,\n} from \"./server_utils.js\";\n\nasync function pipeReadableStreamToNodeResponse(\n stream: ReadableStream,\n res: ServerResponse,\n) {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n res.end();\n break;\n }\n res.write(value);\n }\n } catch (error) {\n res.destroy(error as Error);\n }\n}\n\nexport class ServerNode<H extends NodeHttpClient> implements ServerInterface {\n port: number;\n host: string;\n url: string;\n routes: ServerRoute[];\n tapOptions?: ServerTapOptions;\n runtimeServer: NodeServer;\n nodeHttpClient: H;\n httpsOptions?: HttpsServerOptions;\n graphql: GraphQL;\n private ensureGraphQLHandler: ReturnType<\n typeof createGraphQLHandlerInitializer\n >;\n\n constructor(input?: ServerConnectInput<H>) {\n this.routes = input?.routes ?? [];\n this.port = input?.port ?? 80;\n this.host = input?.host ?? \"0.0.0.0\";\n this.tapOptions = input?.tapOptions;\n this.nodeHttpClient = input?.nodeHttpClient ?? (\"http\" as H);\n this.httpsOptions =\n input?.nodeHttpClient === \"https\" ||\n input?.nodeHttpClient === \"http2-secure\"\n ? (input as unknown as ServerConnectInput<\"https\">)?.httpsOptions\n : undefined;\n\n this.graphql = input?.graphql ?? new GraphQL();\n this.ensureGraphQLHandler = createGraphQLHandlerInitializer(this.graphql);\n const protocol =\n this.nodeHttpClient === \"https\" || this.nodeHttpClient === \"http2-secure\"\n ? \"https\"\n : \"http\";\n this.url = `${protocol}://${this.host}:${this.port}`;\n\n this.runtimeServer = this.createServer(\n async (\n req: IncomingMessage,\n httpResponse: ServerResponse,\n ): Promise<void> => {\n if (this.tapOptions && this.tapOptions.node) {\n const preHandler = this.tapOptions.node as NodeTapOptions;\n await preHandler?.(req);\n }\n\n if (\n this.graphql.isEnabled &&\n req.url?.startsWith(\n this.graphql.getYogaOptions().graphqlEndpoint ?? \"/graphql\",\n )\n ) {\n const handler = await this.ensureGraphQLHandler();\n if (handler) {\n handler(req, httpResponse);\n return;\n }\n }\n\n const match = router.find(req.method as HttpMethod, req.url!);\n const filteredHeaders: Record<string, string> = {};\n for (const key of Object.keys(req.headers)) {\n if (key.startsWith(\":\")) {\n continue;\n }\n const value = req.headers[key];\n if (value !== undefined) {\n filteredHeaders[key] = Array.isArray(value)\n ? value.join(\", \")\n : value;\n }\n }\n\n const request = new Request(`${this.url}${req.url}`, {\n method: req.method,\n body: canHaveBody(req.method)\n ? await this.readRequestBody(req)\n : undefined,\n headers: filteredHeaders,\n });\n\n let forwardedFor = req.headers[\"x-forwarded-for\"];\n if (Array.isArray(forwardedFor)) {\n forwardedFor = forwardedFor[0];\n }\n\n request.ip = forwardedFor ?? req.socket.remoteAddress;\n\n const [_, search = \"\"] = req.url?.split(\"?\", 2) ?? [];\n request.query = Object.fromEntries(new URLSearchParams(search));\n request.params = match?.params ?? {};\n\n const response = new Response();\n response.nodeResponse = httpResponse;\n\n const responseResult = await executeMiddlewareChain(\n match?.middleware ?? [],\n match?.handler ??\n ((req, res) => {\n res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }),\n request,\n response,\n );\n\n if (httpResponse.headersSent || httpResponse.writableEnded) {\n return;\n }\n\n let body = responseResult.getBody();\n if (body instanceof ReadableStream) {\n pipeReadableStreamToNodeResponse(body, httpResponse);\n return;\n }\n\n if (body instanceof Buffer || body instanceof Uint8Array) {\n body = body;\n } else if (typeof body === \"string\") {\n body = body;\n } else if (\n responseResult.headers[\"Content-Type\"] === \"application/json\" &&\n typeof body !== \"string\"\n ) {\n body = JSON.stringify(body);\n } else {\n body = String(body);\n }\n\n httpResponse.writeHead(\n responseResult.responseStatus,\n responseResult.headers,\n );\n httpResponse.end(body);\n },\n );\n }\n\n listen(): void {\n this.runtimeServer.listen(this.port, this.host);\n }\n\n async close(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.runtimeServer.close((err) => {\n if (err && \"code\" in err && err.code !== \"ERR_SERVER_NOT_RUNNING\") {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n\n private async readRequestBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk) => chunks.push(Buffer.from(chunk)));\n req.on(\"error\", reject);\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString()));\n });\n }\n\n private createServer(\n handler: (req: IncomingMessage, res: ServerResponse) => Promise<void>,\n ): NodeServer {\n if (this.nodeHttpClient === \"http\") {\n return createServer(handler);\n }\n\n if (this.nodeHttpClient === \"http2\") {\n return http2CreateServer(\n handler as unknown as (\n req: Http2ServerRequest,\n res: Http2ServerResponse,\n ) => Promise<void>,\n );\n }\n\n if (this.nodeHttpClient === \"http2-secure\") {\n if (!this.httpsOptions) {\n throw new Error(\n \"httpsOptions (key, cert) are required when using http2-secure client\",\n );\n }\n return http2CreateSecureServer(\n this.httpsOptions,\n handler as unknown as (\n req: Http2ServerRequest,\n res: Http2ServerResponse,\n ) => Promise<void>,\n );\n }\n\n if (!this.httpsOptions) {\n throw new Error(\n \"httpsOptions (key, cert) are required when using https client\",\n );\n }\n return httpsCreateServer(this.httpsOptions, handler);\n }\n}\n","import { type RunTimeType } from \"../runtime.js\";\nimport { ServerBun } from \"./server_bun.js\";\nimport { ServerDeno } from \"./server_deno.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport { ServerNode } from \"./server_node.js\";\nimport type {\n RuntimeServerMap,\n ServerConnectInput,\n ServerRoute,\n} from \"./server_types.js\";\n\nexport class ServerConnector {\n routes: ServerRoute[];\n\n private server: ServerInterface;\n\n constructor(serverOptions?: ServerConnectInput) {\n this.server = this.getRuntimeServer(serverOptions);\n this.routes = this.server.routes;\n }\n\n get url(): string {\n return this.server.url;\n }\n\n get port(): number {\n return this.server.port;\n }\n\n get host(): string {\n return this.server.host;\n }\n\n /**\n * Get the server for the given runtime\n * @example \"node\" returns HttpServer\n * @example \"bun\" returns ReturnType<typeof Bun.serve>\n * @example \"deno\" returns ReturnType<typeof Deno.serve>\n * @param _ - The runtime to get the server for\n * @returns The server for the given runtime\n */\n getServer<T extends RunTimeType>(_: T): RuntimeServerMap<T> {\n return this.server.runtimeServer as RuntimeServerMap<T>;\n }\n\n listen(): void {\n return this.server.listen();\n }\n\n async close(): Promise<void> {\n return this.server.close();\n }\n\n private getRuntimeServer(\n serverOptions?: ServerConnectInput,\n ): ServerInterface {\n if (serverOptions?.runtime === \"bun\") {\n return new ServerBun(serverOptions);\n } else if (serverOptions?.runtime === \"node\") {\n return new ServerNode(serverOptions);\n } else if (serverOptions?.runtime === \"deno\") {\n return new ServerDeno(serverOptions);\n }\n\n throw new Error(\n \"No server implementation found for runtime: \" + serverOptions?.runtime,\n );\n }\n}\n","import type { Router as ExpressRouter, RequestHandler } from \"express\";\nimport { glob } from \"glob\";\nimport { AjvStateManager } from \"../ajv/ajv.js\";\nimport { errorFactory } from \"../errors/error_factory.js\";\nimport { MethodNotAllowedError } from \"../errors/method_not_allowed.js\";\nimport { RouteNotFoundError } from \"../errors/route_not_found.js\";\nimport { GraphQL } from \"../graphql/graphql.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { MockServer } from \"../mock/mock_server.js\";\nimport { asyncLocalStorage } from \"../plugins/async_local_storage/async_local_storage.js\";\nimport type { AsyncLocalStorageContextSetters } from \"../plugins/async_local_storage/async_local_storage_types.js\";\nimport { bodyParser } from \"../plugins/body_parser/body_parser.js\";\nimport { compression } from \"../plugins/compression/compression.js\";\nimport type { CompressionOptions } from \"../plugins/compression/compression_types.js\";\nimport { cookie } from \"../plugins/cookie/cookie.js\";\nimport type { CookieMiddlewareOptions } from \"../plugins/cookie/cookie_types.js\";\nimport { cors } from \"../plugins/cors/cors.js\";\nimport type { CorsOptions } from \"../plugins/cors/cors_types.js\";\nimport {\n createExpressAdapter,\n expressMiddleware,\n mountExpressRouter,\n} from \"../plugins/express/express.js\";\nimport { fileParser } from \"../plugins/file/file.js\";\nimport type { FilePluginOptions } from \"../plugins/file/file_types.js\";\nimport { helmet } from \"../plugins/helmet/helmet.js\";\nimport type { HelmetOptions } from \"../plugins/helmet/helmet_types.js\";\nimport { json } from \"../plugins/json/json.js\";\nimport type { JsonOptions } from \"../plugins/json/json_options.js\";\nimport { log } from \"../plugins/log/log.js\";\nimport type { LogOptions } from \"../plugins/log/log_types.js\";\nimport { methodOverride } from \"../plugins/method_override/method_override.js\";\nimport type { MethodOverrideOptions } from \"../plugins/method_override/method_override_types.js\";\nimport { rateLimiter } from \"../plugins/rate_limiter/rate_limiter.js\";\nimport type {\n RateLimiterKeyOptions,\n StorageOptions,\n} from \"../plugins/rate_limiter/rate_limiter_types.js\";\nimport { session } from \"../plugins/session/session.js\";\nimport type { SessionOptions } from \"../plugins/session/session_types.js\";\nimport { serveStatic } from \"../plugins/static/static.js\";\nimport type { StaticPluginOptions } from \"../plugins/static/static_types.js\";\nimport { swagger } from \"../plugins/swagger/swagger.js\";\nimport type { SwaggerRouteOptions } from \"../plugins/swagger/swagger_types.js\";\nimport { timeout as timeoutMw } from \"../plugins/timeout/timeout.js\";\nimport type { TimeoutOptions } from \"../plugins/timeout/timeout_types.js\";\nimport { trustProxy } from \"../plugins/trust_proxy/trust_proxy.js\";\nimport type { TrustProxyOptions } from \"../plugins/trust_proxy/trust_proxy_types.js\";\nimport { urlencoded } from \"../plugins/urlencoded/urlencoded.js\";\nimport type { UrlEncodedOptions } from \"../plugins/urlencoded/urlencoded_types.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { NativeEnv } from \"../runtime/native_env.js\";\nimport { nativeFs } from \"../runtime/native_fs.js\";\nimport { hash as nativeHash } from \"../runtime/native_hash.js\";\nimport { nativePath } from \"../runtime/native_path.js\";\nimport { ServerConnector } from \"../runtime/native_server/server_connector.js\";\nimport type {\n HttpsServerOptions,\n RuntimeServerMap,\n ServerListenCallback,\n ServerRouteHandler,\n ServerRouteMiddleware,\n ServerTapOptions,\n} from \"../runtime/native_server/server_types.js\";\nimport { runtime } from \"../runtime/runtime.js\";\nimport type { SyncOrAsync } from \"../type_util.js\";\nimport { router } from \"./router/router.js\";\nimport type { ClientRouter, Route } from \"./router/router_type.js\";\nimport { PROTECTED_KEYS } from \"./server_constants.js\";\nimport type {\n NodeHttpClient,\n ResolvedServerOptions,\n ServerErrorHandler,\n ServerInterface,\n ServerOptions,\n ServerPlugin,\n SignalEvent,\n StandardMethodOptions,\n} from \"./server_types.js\";\n\n/**\n * The server class that is used to create and manage the server\n */\nexport class Server<\n H extends NodeHttpClient = NodeHttpClient,\n> implements ServerInterface {\n isListening: boolean;\n isProduction: boolean;\n graphql: GraphQL;\n\n readonly router: ClientRouter = router;\n\n private wasInitialized: boolean;\n private serverConnector: ServerConnector;\n private globalMiddlewares: ServerRouteMiddleware[] = [];\n private serverOptions: ResolvedServerOptions;\n private controllerImportBlacklistedPaths: string[] = [\"node_modules\"];\n private notFoundHandler?: ServerRouteHandler;\n private readonly nativeEnv: NativeEnv = new NativeEnv();\n private httpsOptions?: HttpsServerOptions;\n\n /**\n * The constructor for the server\n * @warning Routes will only be defined after calling the `listen` method so you're free to define middlewares before calling it\n * @param options - The options for the server\n * @param options.port - The port to listen on, if not provided, it will use the PORT environment variable, if not provided, it will default to 80\n * @param options.host - The hostname to listen on, if not provided, it will use the HOST environment variable, if not provided, it will default to 0.0.0.0\n * @param options.controllerPatterns - The patterns to match for controllers, defaults to an empty array\n * @param options.plugins - The plugins to apply to the server, by default no plugins are applied, plugins are applied in the order they are defined in the options\n * @param options.logger - The logger to use for the server, by default a default logger is used\n * @param options.tapOptions - Options fetch to the runtime server before the server is up and running\n */\n constructor(options?: ServerOptions<H>) {\n this.wasInitialized = false;\n this.serverOptions = {\n nodeHttpClient: options?.nodeHttpClient ?? (\"http\" as H),\n port: options?.port ?? Number(this.nativeEnv.get(\"PORT\")) ?? 80,\n host: options?.host ?? this.nativeEnv.get(\"HOST\") ?? \"0.0.0.0\",\n controllerPatterns: options?.controllerPatterns ?? [],\n plugins: options?.plugins ?? {},\n tapOptions: options?.tapOptions ?? ({} as ServerTapOptions),\n swagger: options?.swagger ?? true,\n useBodyParser: options?.useBodyParser ?? true,\n graphql: options?.graphql ?? undefined,\n };\n\n if (options?.ajvInstance) {\n AjvStateManager.setGlobalInstance(options.ajvInstance);\n }\n\n this.httpsOptions =\n options?.nodeHttpClient === \"https\" ||\n options?.nodeHttpClient === \"http2-secure\"\n ? (options as ServerOptions<\"https\">).httpsOptions\n : undefined;\n\n this.isListening = false;\n this.isProduction = this.nativeEnv.get(\"NODE_ENV\") === \"production\";\n this.graphql = new GraphQL(this.serverOptions.graphql);\n\n this.serverConnector = new ServerConnector({\n routes: [],\n port: this.serverOptions.port,\n host: this.serverOptions.host,\n tapOptions: this.serverOptions.tapOptions,\n runtime: runtime.type,\n nodeHttpClient: this.serverOptions.nodeHttpClient,\n httpsOptions: this.httpsOptions,\n graphql: this.graphql,\n });\n\n if (this.serverOptions.useBodyParser) {\n this.use(bodyParser());\n }\n }\n\n get url(): string {\n return this.serverConnector.url;\n }\n\n get port(): number {\n return this.serverConnector.port;\n }\n\n get host(): string {\n return this.serverConnector.host;\n }\n\n get routes(): Route[] {\n return router.getRoutes() || [];\n }\n\n async hash(data: string): Promise<string> {\n return nativeHash.hash(data);\n }\n\n async compareHash(hash: string, data: string): Promise<boolean> {\n return nativeHash.compare(hash, data);\n }\n\n getEnvironment(): Record<string, string> {\n return this.nativeEnv.getEnvironment();\n }\n\n tmpDir(...append: string[]): string {\n const baseTmpDir = \"tmp\";\n return nativePath.join(baseTmpDir, ...append);\n }\n\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n await nativeFs.mkdir(path, options);\n }\n\n get(path: string, handler: ServerRouteHandler): void;\n get(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n get(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"GET\", path, middlewares, handler, swaggerOptions);\n }\n\n post(path: string, handler: ServerRouteHandler): void;\n post(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n post(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"POST\", path, middlewares, handler, swaggerOptions);\n }\n\n patch(path: string, handler: ServerRouteHandler): void;\n patch(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n patch(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"PATCH\", path, middlewares, handler, swaggerOptions);\n }\n\n put(path: string, handler: ServerRouteHandler): void;\n put(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n put(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"PUT\", path, middlewares, handler, swaggerOptions);\n }\n\n delete(path: string, handler: ServerRouteHandler): void;\n delete(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n delete(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"DELETE\", path, middlewares, handler, swaggerOptions);\n }\n\n options(path: string, handler: ServerRouteHandler): void;\n options(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n options(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"OPTIONS\", path, middlewares, handler, swaggerOptions);\n }\n\n head(path: string, handler: ServerRouteHandler): void;\n head(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n head(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"HEAD\", path, middlewares, handler, swaggerOptions);\n }\n\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: ClientRouter) => void,\n ): void;\n group(path: string, cb: (router: ClientRouter) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: ClientRouter) => void),\n maybeCb?: (router: ClientRouter) => void,\n ): void {\n this.router.group(\n path,\n middlewareOrCb as ServerRouteMiddleware[] | ServerRouteMiddleware,\n maybeCb as (router: ClientRouter) => void,\n );\n }\n\n getNodeServer(): RuntimeServerMap<\"node\", H> {\n if (runtime.type !== \"node\") {\n throw new Error(\n \"Server is not using node runtime, you can't call `.getNodeServer()`\",\n );\n }\n\n return this.serverConnector.getServer(\"node\") as RuntimeServerMap<\n \"node\",\n H\n >;\n }\n\n getBunServer(): RuntimeServerMap<\"bun\"> {\n if (runtime.type !== \"bun\") {\n throw new Error(\n \"Server is not using bun runtime, you can't call `.getBunServer()`\",\n );\n }\n\n return this.serverConnector.getServer(\"bun\");\n }\n\n getDenoServer(): RuntimeServerMap<\"deno\"> {\n if (runtime.type !== \"deno\") {\n throw new Error(\n \"Server is not using deno runtime, you can't call `.getDenoServer()`\",\n );\n }\n\n return this.serverConnector.getServer(\"deno\");\n }\n\n embed(key: string, value: any): void {\n if (typeof key !== \"string\" || key.trim() === \"\") {\n throw new Error(\n `Invalid key provided to embed: ${key}. Key must be a non-empty string.`,\n );\n }\n\n if (PROTECTED_KEYS.includes(key)) {\n throw new Error(\n `Cannot embed value with key '${key}' as it conflicts with a protected server property.`,\n );\n }\n\n Object.defineProperty(this, key, {\n value,\n writable: false,\n configurable: true,\n enumerable: true,\n });\n }\n\n exit(code: number = 0): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.exit(code);\n case \"deno\":\n Deno.exit(code);\n default:\n throw new Error(`Unsupported runtime: ${runtime.type}`);\n }\n }\n\n on(event: SignalEvent, cb: () => SyncOrAsync): void;\n on(event: string, cb: () => SyncOrAsync): void;\n on(event: SignalEvent | string, cb: () => SyncOrAsync): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.on(event, cb);\n break;\n case \"deno\":\n Deno.addSignalListener(event as Deno.Signal, cb);\n break;\n default:\n throw new Error(\n `Unsupported runtime: ${runtime.type}, only node, bun and deno are supported`,\n );\n }\n }\n\n once(event: SignalEvent, cb: () => SyncOrAsync): void;\n once(event: string, cb: () => SyncOrAsync): void;\n once(event: SignalEvent | string, cb: () => SyncOrAsync): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.once(event, cb);\n break;\n case \"deno\":\n Deno.addSignalListener(event as Deno.Signal, cb);\n break;\n default:\n throw new Error(\n `Unsupported runtime: ${runtime.type}, only node, bun and deno are supported`,\n );\n }\n }\n\n use(...middlewares: ServerRouteMiddleware[]): void {\n this.globalMiddlewares.push(...middlewares);\n }\n\n useExpress(\n pathOrMiddleware: string | RequestHandler | ExpressRouter,\n maybeMiddleware?: RequestHandler | ExpressRouter,\n ): void {\n const adapter = createExpressAdapter(this);\n adapter.use(pathOrMiddleware, maybeMiddleware);\n }\n\n expressMiddleware(middleware: RequestHandler): ServerRouteMiddleware {\n return expressMiddleware(middleware);\n }\n\n mountExpressRouter(basePath: string, expressRouter: ExpressRouter): void {\n mountExpressRouter(basePath, expressRouter);\n }\n\n setErrorHandler(errorHandler?: ServerErrorHandler): void {\n this.globalMiddlewares.unshift(async (req, res, next) => {\n try {\n await next();\n } catch (error) {\n await errorHandler?.(req, res, next, error as Error);\n }\n });\n }\n\n /**\n * Sets a custom handler for 404 Not Found responses.\n * If not set, the default RouteNotFoundError will be used.\n *\n * @param notFoundHandler - Optional handler to customize 404 responses\n * @example\n * server.setNotFoundHandler((req, res) => {\n * res.status(404).json({ error: \"Custom not found message\" });\n * });\n */\n setNotFoundHandler(notFoundHandler?: ServerRouteHandler): void {\n this.notFoundHandler = notFoundHandler?.bind(this);\n }\n\n listen(cb?: ServerListenCallback): void {\n if (this.isListening) {\n throw new Error(\n \"Server is already listening, you can't call `.listen()` multiple times\",\n );\n }\n\n this.bootstrap().then(() => {\n this.serverConnector.listen();\n this.isListening = true;\n if (this.serverOptions.swagger) {\n swagger(this.serverOptions.swagger);\n }\n\n cb?.({\n port: this.port,\n host: this.host,\n url: this.url,\n });\n });\n }\n\n async close(): Promise<void> {\n await this.serverConnector.close();\n this.isListening = false;\n }\n\n /**\n * Returns a mock server instance that can be used to test the server without starting it\n * It will import the controllers and apply the plugins to the mock server\n * @param options - The options for the mock server\n * @param options.controllerPatterns - Custom controller patterns to import if the mock server must not be initialized with the same controller patterns as the server\n */\n async getMockServer(\n options?: Pick<ServerOptions, \"controllerPatterns\">,\n ): Promise<MockServer> {\n await this.bootstrap(options);\n return new MockServer(this);\n }\n\n private async importControllers(\n customControllerPatterns?: string[],\n ): Promise<void> {\n const controllerPatterns =\n customControllerPatterns ?? this.serverOptions.controllerPatterns;\n let controllerPaths = await Promise.all(\n controllerPatterns.map(async (pattern) => {\n return glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n }),\n ).then((paths) => paths.flat());\n\n controllerPaths = controllerPaths.flat();\n controllerPaths = controllerPaths.filter(\n (path) =>\n !this.controllerImportBlacklistedPaths.some((blacklistedPath) =>\n path.includes(blacklistedPath),\n ),\n );\n\n logger.debug(`Found ${controllerPaths.length} controllers to import`);\n await Promise.all(\n controllerPaths.map(async (controllerPath) => {\n logger.debug(`Importing controller ${controllerPath}`);\n await import(controllerPath).catch((err) => {\n logger.error(`Error importing controller ${controllerPath}: ${err}`);\n });\n }),\n );\n }\n\n private extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): {\n middlewares: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n swaggerOptions?: SwaggerRouteOptions;\n } {\n if (typeof optionsOrHandler === \"function\") {\n // Handler only\n return {\n middlewares: [],\n handler: optionsOrHandler as ServerRouteHandler,\n swaggerOptions: undefined,\n };\n }\n\n // StandardMethodOptions\n const options = optionsOrHandler as StandardMethodOptions;\n const middlewares = Array.isArray(options.middlewares)\n ? options.middlewares\n : options.middlewares\n ? [options.middlewares]\n : [];\n\n return {\n middlewares,\n handler: maybeHandler!,\n swaggerOptions: options.swagger,\n };\n }\n\n private applyPlugins(plugins: ServerPlugin): void {\n Object.entries(plugins).forEach(([pluginName, pluginOptions]) => {\n switch (pluginName as keyof ServerPlugin) {\n case \"cors\":\n this.use(cors(pluginOptions as CorsOptions));\n break;\n case \"json\":\n this.use(json(pluginOptions as JsonOptions));\n break;\n case \"static\":\n this.use(serveStatic(pluginOptions as StaticPluginOptions));\n break;\n case \"fileParser\":\n this.use(fileParser(pluginOptions as FilePluginOptions));\n break;\n case \"helmet\":\n this.use(helmet(pluginOptions as HelmetOptions));\n break;\n case \"cookie\":\n this.use(cookie(pluginOptions as CookieMiddlewareOptions));\n break;\n case \"methodOverride\":\n this.use(methodOverride(pluginOptions as MethodOverrideOptions));\n break;\n case \"compression\":\n this.use(compression(pluginOptions as CompressionOptions));\n break;\n case \"log\":\n this.use(log(pluginOptions as LogOptions));\n break;\n case \"rateLimiter\":\n const { keyOptions, storageOptions } = pluginOptions as {\n keyOptions?: RateLimiterKeyOptions;\n storageOptions?: StorageOptions;\n };\n\n this.use(rateLimiter(keyOptions, storageOptions));\n break;\n case \"urlencoded\":\n this.use(urlencoded(pluginOptions as UrlEncodedOptions));\n break;\n case \"trustProxy\":\n this.use(trustProxy(pluginOptions as TrustProxyOptions));\n break;\n case \"timeout\":\n this.use(timeoutMw(pluginOptions as TimeoutOptions));\n break;\n case \"session\":\n this.use(session(pluginOptions as SessionOptions));\n break;\n case \"asyncLocalStorage\":\n this.use(\n asyncLocalStorage(pluginOptions as AsyncLocalStorageContextSetters),\n );\n break;\n default:\n logger.warn(`Unknown plugin ${pluginName}`);\n break;\n }\n });\n }\n\n /**\n * Initializes the server by importing the controllers and applying the plugins, it's idempotent, it will not re-import the controllers or apply the plugins if the server was already initialized (e.g. mockServer init)\n * @internal\n */\n private async bootstrap(\n options?: Pick<ServerOptions, \"controllerPatterns\">,\n ): Promise<void> {\n if (this.wasInitialized) {\n return;\n }\n\n await this.importControllers(options?.controllerPatterns);\n this.applyPlugins(this.serverOptions.plugins);\n this.registerNotFoundRoutes();\n if (this.globalMiddlewares.length) {\n router.applyGlobalMiddlewaresToAllRoutes(this.globalMiddlewares);\n }\n\n this.wasInitialized = true;\n }\n\n /**\n * Handles not found routes by delegating to custom handler or default error response\n * Checks if the path exists for other methods and returns 405 if so\n * @internal\n */\n private handleNotFound: ServerRouteHandler = (req, res) => {\n if (this.notFoundHandler) {\n this.notFoundHandler(req, res);\n return;\n }\n\n const pathname = new URL(req.url).pathname;\n const allMethods = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ] as const;\n const allowedMethods: string[] = [];\n\n for (const method of allMethods) {\n if (method === req.method.toUpperCase()) {\n continue;\n }\n\n const match = router.find(method, pathname);\n if (match && match.handler !== this.handleNotFound) {\n allowedMethods.push(method);\n }\n }\n\n if (allowedMethods.length) {\n res.setHeader(\"Allow\", allowedMethods.join(\", \"));\n const methodNotAllowedError = new MethodNotAllowedError(\n pathname,\n req.method,\n );\n\n res.methodNotAllowed({\n ...errorFactory(methodNotAllowedError),\n });\n\n return;\n }\n\n const notFoundError = new RouteNotFoundError(pathname, req.method);\n res.notFound({\n ...errorFactory(notFoundError),\n });\n };\n\n /**\n * Registers a not found route for all routes that are not defined\n * @internal\n */\n private registerNotFoundRoutes(): void {\n const methods = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ] as const;\n for (const method of methods) {\n router.addOrUpdate(method, \"*\", [], this.handleNotFound, {\n excludeFromSwagger: true,\n });\n }\n }\n}\n","export const PROTECTED_KEYS = [\n \"isListening\",\n \"url\",\n \"port\",\n \"host\",\n \"routes\",\n \"embed\",\n \"constructor\",\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"getNodeServer\",\n \"getBunServer\",\n \"getDenoServer\",\n \"use\",\n \"setErrorHandler\",\n \"listen\",\n \"close\",\n \"tapOptions\",\n \"startUpOptions\",\n \"tmpDir\",\n \"logger\",\n \"getMockServer\",\n \"useExpress\",\n \"expressMiddleware\",\n \"mountExpressRouter\",\n \"setNotFoundHandler\",\n \"setGlobalCronErrorHandler\",\n \"startRegisteredCrons\",\n \"bootstrap\",\n \"handleNotFound\",\n \"registerNotFoundRoutes\",\n \"importControllers\",\n \"applyPlugins\",\n];\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class FileNotFoundError extends BaldaError {\n constructor(key: string) {\n super(`File not found: ${key}`);\n }\n}\n","import type {\n BlobServiceClient,\n ContainerClient,\n StorageSharedKeyCredential,\n} from \"@azure/storage-blob\";\nimport { Readable } from \"node:stream\";\nimport { BaldaError } from \"../../errors/balda_error.js\";\nimport { FileNotFoundError } from \"../../errors/file_not_found_error.js\";\nimport type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n} from \"../storage_types.js\";\n\nexport type BlobStorageProviderOptions = {\n /**\n * The container name\n */\n containerName: string;\n /**\n * The connection string to the storage account\n */\n connectionString: string;\n /**\n * The storage account name\n */\n storageAccountName: string;\n /**\n * The storage account key\n */\n storageAccountKey: string;\n};\n\nexport class AzureBlobStorageProvider implements StorageInterface {\n declare private azureBlobLib: typeof import(\"@azure/storage-blob\");\n declare private blobServiceClient: BlobServiceClient;\n declare private containerClient: ContainerClient;\n declare private sharedKeyCredential: StorageSharedKeyCredential;\n\n constructor(private readonly options: BlobStorageProviderOptions) {}\n\n async getDownloadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const startsOn = new Date(Date.now() - 5 * 60 * 1000);\n const expiresOn = new Date(Date.now() + expiresInSeconds * 1000);\n\n const permissions = this.azureBlobLib.BlobSASPermissions.parse(\"r\");\n\n const sasToken = this.azureBlobLib\n .generateBlobSASQueryParameters(\n {\n containerName: this.options.containerName,\n blobName: key,\n permissions,\n startsOn,\n expiresOn,\n },\n this.sharedKeyCredential,\n )\n .toString();\n\n return `${blockBlobClient.url}?${sasToken}`;\n }\n\n async getUploadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const startsOn = new Date(Date.now() - 5 * 60 * 1000);\n const expiresOn = new Date(Date.now() + expiresInSeconds * 1000);\n\n const permissions = this.azureBlobLib.BlobSASPermissions.parse(\"w\");\n\n const sasToken = this.azureBlobLib\n .generateBlobSASQueryParameters(\n {\n containerName: this.options.containerName,\n blobName: key,\n permissions,\n startsOn,\n expiresOn,\n },\n this.sharedKeyCredential,\n )\n .toString();\n\n return `${blockBlobClient.url}?${sasToken}`;\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n await this.ensureClient();\n\n const files: string[] = [];\n const listPrefix = prefix\n ? prefix.endsWith(\"/\")\n ? prefix\n : `${prefix}/`\n : undefined;\n\n for await (const blob of this.containerClient.listBlobsFlat({\n prefix: listPrefix,\n })) {\n files.push(blob.name);\n }\n\n return files;\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n await this.ensureClient();\n\n try {\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const downloadResponse = await blockBlobClient.download();\n\n if (!downloadResponse.readableStreamBody) {\n throw new FileNotFoundError(key);\n }\n\n const type = returnType as ReturnType;\n if (type === \"stream\") {\n return Readable.toWeb(\n downloadResponse.readableStreamBody as Readable,\n ) as unknown as ReturnTypeMap<R>;\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of downloadResponse.readableStreamBody) {\n chunks.push(\n Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as string),\n );\n }\n\n const buffer = Buffer.concat(chunks);\n switch (type) {\n case \"raw\": {\n return new Uint8Array(buffer) as ReturnTypeMap<R>;\n }\n case \"text\": {\n return buffer.toString() as ReturnTypeMap<R>;\n }\n default: {\n throw new BaldaError(\"Invalid return type\");\n }\n }\n } catch (error) {\n if ((error as any).statusCode === 404) {\n throw new FileNotFoundError(key);\n }\n throw error;\n }\n }\n\n async putObject<T = Uint8Array>(\n key: string,\n value: T,\n contentType?: string,\n ): Promise<void> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const data = value as Uint8Array;\n\n await blockBlobClient.upload(data, data.length, {\n blobHTTPHeaders: {\n blobContentType: contentType || \"application/octet-stream\",\n },\n });\n }\n\n async deleteObject(key: string): Promise<void> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n try {\n await blockBlobClient.delete();\n } catch (error: unknown) {\n if (\n error &&\n typeof error === \"object\" &&\n \"statusCode\" in error &&\n error.statusCode === 404\n ) {\n return;\n }\n throw error;\n }\n }\n\n private async ensureClient(): Promise<void> {\n if (this.azureBlobLib) {\n return;\n }\n\n this.azureBlobLib = await import(\"@azure/storage-blob\").catch(() => {\n throw new BaldaError(\n \"Library not installed: @azure/storage-blob, try run npm install @azure/storage-blob\",\n );\n });\n\n this.blobServiceClient =\n this.azureBlobLib.BlobServiceClient.fromConnectionString(\n this.options.connectionString,\n );\n\n this.containerClient = this.blobServiceClient.getContainerClient(\n this.options.containerName,\n );\n\n const credential = this.blobServiceClient.credential;\n if (!(credential instanceof this.azureBlobLib.StorageSharedKeyCredential)) {\n throw new BaldaError(\n \"BlobStorage requires a shared key credential to generate SAS URLs\",\n );\n }\n\n this.sharedKeyCredential = credential;\n }\n}\n","import { BaldaError } from \"../../errors/balda_error.js\";\nimport { FileNotFoundError } from \"../../errors/file_not_found_error.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n} from \"../storage_types.js\";\n\nexport type LocalStorageProviderOptions = {\n /**\n * The directory to store the files\n */\n directory: string;\n};\n\n/**\n * Local storage provider, stores files in the local filesystem\n * Note: This provider does not support signed URLs (getDownloadUrl/getUploadUrl)\n */\nexport class LocalStorageProvider implements StorageInterface {\n private wasDirectoryEnsured: boolean = false;\n constructor(private readonly options: LocalStorageProviderOptions) {}\n\n async getDownloadUrl(\n _key: string,\n _expiresInSeconds = 3600,\n ): Promise<string> {\n throw new BaldaError(\n \"LocalStorageProvider does not support getDownloadUrl. Use S3 or Azure Blob storage for signed URLs.\",\n );\n }\n\n async getUploadUrl(_key: string, _expiresInSeconds = 3600): Promise<string> {\n throw new BaldaError(\n \"LocalStorageProvider does not support getUploadUrl. Use S3 or Azure Blob storage for signed URLs.\",\n );\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const basePath = nativePath.resolve(this.options.directory);\n const searchPath = prefix ? nativePath.join(basePath, prefix) : basePath;\n\n const exists = await nativeFs.exists(searchPath);\n if (!exists) {\n return [];\n }\n\n const files: string[] = [];\n await this.listFilesRecursively(searchPath, basePath, files);\n return files;\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const filePath = nativePath.join(this.options.directory, key);\n const exists = await nativeFs.exists(filePath);\n if (!exists) {\n throw new FileNotFoundError(key);\n }\n\n const type = returnType as ReturnType;\n switch (type) {\n case \"raw\": {\n return (await nativeFs.readFile(filePath)) as ReturnTypeMap<R>;\n }\n case \"text\": {\n return (await nativeFs.readFile(filePath, {\n encoding: \"utf8\",\n })) as ReturnTypeMap<R>;\n }\n case \"stream\": {\n return (await nativeFs.streamFile(filePath)) as ReturnTypeMap<R>;\n }\n default: {\n throw new BaldaError(\"Invalid return type\");\n }\n }\n }\n\n async putObject<T = Uint8Array>(\n key: string,\n value: T,\n _contentType?: string,\n ): Promise<void> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const filePath = nativePath.join(this.options.directory, key);\n const dirPath = nativePath.join(filePath, \"..\");\n\n await nativeFs.mkdir(dirPath, { recursive: true });\n await nativeFs.writeFile(filePath, value as Uint8Array);\n }\n\n async deleteObject(key: string): Promise<void> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const filePath = nativePath.join(this.options.directory, key);\n const exists = await nativeFs.exists(filePath);\n\n if (exists) {\n await nativeFs.unlink(filePath);\n }\n }\n\n private async listFilesRecursively(\n currentPath: string,\n basePath: string,\n files: string[],\n ): Promise<void> {\n const stats = await nativeFs.stat(currentPath);\n\n if (stats.isFile) {\n const relativePath = currentPath.replace(basePath, \"\").replace(/^\\//, \"\");\n files.push(relativePath);\n return;\n }\n\n if (!stats.isDirectory) {\n return;\n }\n\n const entries = await this.readDirectory(currentPath);\n for (const entry of entries) {\n const fullPath = nativePath.join(currentPath, entry);\n await this.listFilesRecursively(fullPath, basePath, files);\n }\n }\n\n private async readDirectory(path: string): Promise<string[]> {\n const { runtime } = await import(\"../../runtime/runtime.js\");\n\n switch (runtime.type) {\n case \"node\": {\n const fs = await import(\"fs/promises\");\n return await fs.readdir(path);\n }\n case \"bun\": {\n const fs = await import(\"fs/promises\");\n return await fs.readdir(path);\n }\n case \"deno\": {\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n return entries;\n }\n default:\n throw new BaldaError(\"Unsupported runtime\");\n }\n }\n\n private async ensureDirectoryExists() {\n if (await nativeFs.exists(this.options.directory)) {\n return;\n }\n\n await nativeFs.mkdir(this.options.directory, { recursive: true });\n this.wasDirectoryEnsured = true;\n }\n}\n","import type { S3Client } from \"@aws-sdk/client-s3\";\nimport { BaldaError } from \"../../errors/balda_error.js\";\nimport { FileNotFoundError } from \"../../errors/file_not_found_error.js\";\nimport type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n} from \"../storage_types.js\";\n\ntype S3ClientConfig = ConstructorParameters<typeof S3Client>[0];\n\nexport type S3StorageProviderOptions = {\n s3ClientConfig: S3ClientConfig & { bucketName: string };\n /**\n * The cloudfront options (optional), allows to get the cloudfront signed url for an object, enables the `getDownloadUrl` method that throws an error if not configured\n */\n cloudfrontOptions?: {\n /**\n * The CloudFront distribution domain name (e.g., 'd1234567890.cloudfront.net')\n */\n domainName: string;\n /**\n * The CloudFront key pair ID\n */\n keyPairId: string;\n /**\n * The private key in PEM format for signing URLs\n */\n privateKey: string;\n };\n};\n\nexport class S3StorageProvider implements StorageInterface {\n declare private s3Lib: typeof import(\"@aws-sdk/client-s3\");\n declare private s3PresignerLib: typeof import(\"@aws-sdk/s3-request-presigner\");\n declare private cloudfrontSignerLib: typeof import(\"@aws-sdk/cloudfront-signer\");\n declare private s3Client: S3Client;\n readonly options: S3StorageProviderOptions;\n\n constructor(options: S3StorageProviderOptions) {\n this.options = options;\n }\n\n async getDownloadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n\n if (!this.options.cloudfrontOptions) {\n throw new BaldaError(\"getDownloadUrl requires CloudFront configuration\");\n }\n\n const { domainName, keyPairId, privateKey } =\n this.options.cloudfrontOptions;\n const url = `https://${domainName}/${key}`;\n const dateLessThan = new Date(\n Date.now() + expiresInSeconds * 1000,\n ).toISOString();\n\n return this.cloudfrontSignerLib.getSignedUrl({\n url,\n keyPairId,\n privateKey,\n dateLessThan,\n });\n }\n\n async getUploadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n const command = new this.s3Lib.PutObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n });\n\n return this.s3PresignerLib.getSignedUrl(\n this.s3Client as any,\n command as any,\n {\n expiresIn: expiresInSeconds,\n },\n );\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n await this.ensureClient();\n const command = new this.s3Lib.ListObjectsV2Command({\n Bucket: this.options.s3ClientConfig.bucketName,\n Prefix: prefix,\n });\n const response = await this.s3Client.send(command);\n return response.Contents?.map((item) => item.Key!).filter(Boolean) ?? [];\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n await this.ensureClient();\n const command = new this.s3Lib.GetObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n });\n\n try {\n const response = await this.s3Client.send(command);\n if (!response.Body) {\n throw new FileNotFoundError(key);\n }\n\n const type = returnType as ReturnType;\n switch (type) {\n case \"raw\": {\n return (await response.Body.transformToByteArray()) as ReturnTypeMap<R>;\n }\n case \"text\": {\n return (await response.Body.transformToString()) as ReturnTypeMap<R>;\n }\n case \"stream\": {\n return response.Body.transformToWebStream() as ReturnTypeMap<R>;\n }\n default: {\n throw new BaldaError(\"Invalid return type\");\n }\n }\n } catch (error) {\n if ((error as any).name === \"NoSuchKey\") {\n throw new FileNotFoundError(key);\n }\n throw error;\n }\n }\n\n async putObject<T = Uint8Array>(\n key: string,\n value: T,\n contentType?: string,\n ): Promise<void> {\n await this.ensureClient();\n const command = new this.s3Lib.PutObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n Body: value as any,\n ContentType: contentType,\n });\n await this.s3Client.send(command);\n }\n\n async deleteObject(key: string): Promise<void> {\n await this.ensureClient();\n const command = new this.s3Lib.DeleteObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n });\n await this.s3Client.send(command);\n }\n\n private async ensureClient(): Promise<void> {\n if (this.s3Lib) {\n return;\n }\n\n this.s3Lib = await import(\"@aws-sdk/client-s3\")\n .then((mod) => mod.default)\n .catch(() => {\n throw new BaldaError(\n \"Library not installed: @aws-sdk/client-s3, try run npm install @aws-sdk/client-s3\",\n );\n });\n\n this.s3PresignerLib = await import(\"@aws-sdk/s3-request-presigner\")\n .then((mod) => mod.default)\n .catch(() => {\n throw new BaldaError(\n \"Library not installed: @aws-sdk/s3-request-presigner, try run npm install @aws-sdk/s3-request-presigner\",\n );\n });\n\n if (this.options.cloudfrontOptions) {\n this.cloudfrontSignerLib = await import(\"@aws-sdk/cloudfront-signer\")\n .then((mod) => mod.default)\n .catch(() => {\n throw new BaldaError(\n \"Library not installed: @aws-sdk/cloudfront-signer, try run npm install @aws-sdk/cloudfront-signer\",\n );\n });\n }\n\n this.s3Client = new this.s3Lib.S3Client(this.options.s3ClientConfig ?? {});\n }\n}\n","import type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n StorageOptions,\n StorageProviderOptions,\n} from \"./storage_types.js\";\n\nexport class Storage<\n T extends StorageProviderOptions,\n> implements StorageInterface {\n private readonly providerOptions: T;\n private readonly defaultProvider: keyof T;\n private readonly providerMap: Map<keyof T, StorageInterface>;\n\n constructor(providerOptions: T, storageOptions: StorageOptions<T>) {\n this.providerOptions = providerOptions;\n this.defaultProvider = storageOptions.defaultProvider;\n this.providerMap = new Map(\n Object.entries(providerOptions).map(([key, value]) => [key, value]),\n );\n }\n\n /**\n * Use a specific provider\n * @param provider - The provider to use\n * @returns The storage instance\n */\n use(provider: keyof T): StorageInterface {\n const providerInstance = this.providerMap.get(provider);\n if (!providerInstance) {\n throw new Error(`[Storage] Provider ${String(provider)} not found`);\n }\n\n return providerInstance as StorageInterface;\n }\n\n async getDownloadUrl(\n key: string,\n expiresInSeconds?: number,\n ): Promise<string> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.getDownloadUrl(key, expiresInSeconds);\n }\n\n async getUploadUrl(key: string, expiresInSeconds?: number): Promise<string> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.getUploadUrl(key, expiresInSeconds);\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.listObjects(prefix);\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n\n return provider.getObject(key, returnType);\n }\n\n async putObject<T = Buffer<ArrayBufferLike>>(\n key: string,\n value: T,\n contentType?: string,\n ): Promise<void> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.putObject(key, value, contentType);\n }\n\n async deleteObject(key: string): Promise<void> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.deleteObject(key);\n }\n}\n","import type { ServerRouteMiddleware } from \"../runtime/native_server/server_types.js\";\n\n/**\n * Base class for all plugins.\n *\n * Plugins are used to extend the functionality of the server.\n *\n * @example\n * ```ts\n * import { Server, BasePlugin } from \"balda\";\n *\n * export class MyPlugin extends BasePlugin {\n * async handle(): Promise<ServerRouteMiddleware> {\n * return async (req, res, next) => {\n * console.log(\"My plugin is running\");\n * await next();\n * };\n * }\n * }\n *\n * const server = new Server();\n * server.use(new MyPlugin().handle());\n * ```\n *\n * @abstract\n */\nexport abstract class BasePlugin {\n abstract handle(...args: any[]): Promise<ServerRouteMiddleware>;\n}\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { PolicyManager } from \"./policy_manager.js\";\nimport type {\n PolicyDecorator,\n PolicyMetadata,\n PolicyProvider,\n} from \"./policy_types.js\";\n\nexport const createPolicyDecorator = <T extends Record<string, PolicyProvider>>(\n manager: PolicyManager<T>,\n): PolicyDecorator<T> => {\n return <S extends keyof T & string, H extends keyof T[S] & string>(\n scope: S,\n handler: H,\n ) => {\n return (\n target: any,\n propertyKey?: string,\n descriptor?: PropertyDescriptor,\n ) => {\n const policyMeta: PolicyMetadata = { scope, handler, manager };\n\n if (typeof propertyKey === \"undefined\") {\n let meta = MetadataStore.get(target.prototype, \"__class__\");\n if (!meta) {\n meta = { policies: [] };\n }\n\n if (!meta.policies) {\n meta.policies = [];\n }\n\n meta.policies.push(policyMeta);\n MetadataStore.set(target.prototype, \"__class__\", meta);\n return target;\n }\n\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { policies: [] };\n }\n\n if (!meta.policies) {\n meta.policies = [];\n }\n\n meta.policies.push(policyMeta);\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n };\n};\n","import { BaldaError } from \"../../errors/balda_error.js\";\nimport { createPolicyDecorator } from \"./policy_decorator.js\";\nimport type { PolicyDecorator, PolicyProvider } from \"./policy_types.js\";\n\nexport class PolicyManager<T extends Record<string, PolicyProvider>> {\n private readonly providers: T;\n\n constructor(providers: T) {\n this.providers = providers;\n }\n\n /**\n * Creates a decorator for the policy manager with typed parameters\n */\n createDecorator(): PolicyDecorator<T> {\n return createPolicyDecorator(this);\n }\n\n /**\n * Checks if the user has access to the given scope and handler\n * @param scope - The scope to check access for\n * @param handler - The handler to check access for\n * @param args - The arguments to pass to the handler\n */\n canAccess<K extends keyof T, L extends T[K]>(\n scope: K,\n handler: keyof L,\n ...args: Parameters<T[K][keyof T[K]]>\n ): ReturnType<T[K][keyof T[K]]> {\n const provider = this.providers[scope];\n if (!provider) {\n throw new BaldaError(`Policy provider for ${String(scope)} not found`);\n }\n\n return provider[handler as keyof T[K]](...args) as ReturnType<\n T[K][keyof T[K]]\n >;\n }\n}\n","// Decorators\nexport * from \"./cron/decorator/cron_decorator.js\";\nexport * from \"./decorators/command/arg.js\";\nexport * from \"./decorators/command/flag.js\";\nexport * from \"./decorators/controller/controller.js\";\nexport * from \"./decorators/handlers/del.js\";\nexport * from \"./decorators/handlers/get.js\";\nexport * from \"./decorators/handlers/patch.js\";\nexport * from \"./decorators/handlers/post.js\";\nexport * from \"./decorators/handlers/put.js\";\nexport * from \"./decorators/middleware/middleware.js\";\nexport * from \"./decorators/serialize/serialize.js\";\nexport * from \"./decorators/serialize/serialize_types.js\";\nexport * from \"./decorators/validation/validate.js\";\nexport * from \"./decorators/validation/validate_types.js\";\n\n// Cron\nexport * from \"./cron/base_cron.js\";\nexport * from \"./cron/cron.js\";\nexport * from \"./cron/cron.types.js\";\nexport * from \"./queue/decorator/queue_decorator.js\";\nexport * from \"./queue/queue_service.js\";\n\n// MQTT\nexport * from \"./mqtt/base_mqtt.js\";\nexport * from \"./mqtt/mqtt.js\";\nexport * from \"./mqtt/mqtt.types.js\";\n\n// Queue\nexport * from \"./queue/base_queue.js\";\nexport * from \"./queue/providers/bullmq/bullmq.js\";\nexport type {\n BullMQConfiguration,\n BullMQConfigurationOptions,\n} from \"./queue/providers/bullmq/bullmq_configuration.js\";\nexport type { CustomQueueConfiguration } from \"./queue/providers/custom/custom.js\";\nexport * from \"./queue/providers/pgboss/pgboss.js\";\nexport type {\n PGBossConfiguration,\n PGBossConfigurationOptions,\n} from \"./queue/providers/pgboss/pgboss_configuration.js\";\nexport * from \"./queue/providers/sqs/sqs.js\";\nexport type {\n SQSConfiguration,\n SQSConfigurationOptions,\n} from \"./queue/providers/sqs/sqs_configuration.js\";\nexport * from \"./queue/pub.js\";\nexport * from \"./queue/queue.js\";\nexport * from \"./queue/queue_config.js\";\nexport * from \"./queue/queue_service.js\";\nexport * from \"./queue/queue_types.js\";\n\n// Logger\nexport * from \"./logger/logger.js\";\nexport * from \"./logger/logger_types.js\";\n\n// Commands\nexport * from \"./commands/base_command.js\";\nexport * from \"./commands/command_registry.js\";\nexport * from \"./commands/command_types.js\";\n\n// Server\nexport type { MockServer } from \"./mock/mock_server.js\";\nexport * from \"./mock/mock_server_types.js\";\nexport * from \"./runtime/native_server/server_types.js\";\nexport * from \"./server/http/next.js\";\nexport * from \"./server/http/request.js\";\nexport * from \"./server/http/response.js\";\nexport * from \"./server/server.js\";\nexport * from \"./server/server_types.js\";\n\n// hash\nexport { hash } from \"./runtime/native_hash.js\";\n\n// GraphQL\nexport * from \"./graphql/graphql.js\";\nexport * from \"./graphql/graphql_types.js\";\n\n// async storage\nexport { asyncStorage } from \"./plugins/async_local_storage/async_local_storage.js\";\n\n// Storage\nexport * from \"./storage/providers/blob_storage.js\";\nexport * from \"./storage/providers/local.js\";\nexport * from \"./storage/providers/s3.js\";\nexport * from \"./storage/storage.js\";\nexport * from \"./storage/storage_types.js\";\nexport type { StorageInterface } from \"./storage/storage_types.js\";\n\n// Plugins\nexport { asyncLocalStorage } from \"./plugins/async_local_storage/async_local_storage.js\";\nexport * from \"./plugins/base_plugin.js\";\nexport * from \"./plugins/compression/compression.js\";\nexport * from \"./plugins/cookie/cookie.js\";\nexport * from \"./plugins/cors/cors.js\";\nexport * from \"./plugins/express/express.js\";\nexport * from \"./plugins/express/express_types.js\";\nexport * from \"./plugins/file/file.js\";\nexport * from \"./plugins/helmet/helmet.js\";\nexport * from \"./plugins/json/json.js\";\nexport * from \"./plugins/log/log.js\";\nexport * from \"./plugins/method_override/method_override.js\";\nexport * from \"./plugins/rate_limiter/rate_limiter.js\";\nexport * from \"./plugins/session/session.js\";\nexport * from \"./plugins/static/static.js\";\nexport * from \"./plugins/static/static_types.js\";\nexport * from \"./plugins/timeout/timeout.js\";\nexport * from \"./plugins/trust_proxy/trust_proxy.js\";\nexport * from \"./plugins/urlencoded/urlencoded.js\";\n\n// Policy\nexport * from \"./server/policy/policy_decorator.js\";\nexport * from \"./server/policy/policy_manager.js\";\nexport * from \"./server/policy/policy_types.js\";\n\n// Router\nimport { router as routerInstance } from \"./server/router/router.js\";\nimport type { ClientRouter } from \"./server/router/router_type.js\";\n/**\n * Singleton main router instance that handles all route registrations inside the balda server\n */\nexport const router = routerInstance as ClientRouter;\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime/runtime.ts","../src/errors/balda_error.ts","../src/logger/logger.ts","../src/runtime/native_cwd.ts","../src/cron/cron.ts","../src/cron/decorator/cron_decorator.ts","../src/runtime/native_args.ts","../src/utils.ts","../src/commands/arg_parser.ts","../src/metadata_store.ts","../src/decorators/command/arg.ts","../src/decorators/command/flag.ts","../src/runtime/native_path.ts","../src/server/router/router.ts","../src/decorators/controller/controller.ts","../src/decorators/handlers/del.ts","../src/decorators/handlers/get.ts","../src/decorators/handlers/patch.ts","../src/decorators/handlers/post.ts","../src/decorators/handlers/put.ts","../src/decorators/middleware/middleware.ts","../src/ajv/ajv.ts","../src/ajv/openapi_schema_map.ts","../src/validator/typebox_loader.ts","../src/validator/validator.ts","../src/validator/zod_loader.ts","../src/decorators/serialize/serialize.ts","../src/decorators/validation/validate.ts","../src/cron/base_cron.ts","../src/mqtt/base_mqtt.ts","../src/mqtt/mqtt.ts","../src/queue/base_queue.ts","../src/queue/providers/bullmq/bullmq_configuration.ts","../src/errors/client_not_found_error.ts","../src/runtime/native_crypto.ts","../src/queue/providers/bullmq/bullmq.ts","../src/queue/providers/pgboss/pgboss_configuration.ts","../src/queue/providers/pgboss/pgboss.ts","../src/queue/providers/sqs/sqs_configuration.ts","../src/queue/providers/sqs/sqs.ts","../src/queue/queue.ts","../src/queue/queue_config.ts","../src/queue/queue_service.ts","../src/queue/typed_queue.ts","../src/queue/factories.ts","../src/runtime/native_exit.ts","../src/commands/base_command.ts","../src/runtime/native_fs.ts","../src/package.ts","../src/commands/base_commands/build_command.ts","../src/commands/base_commands/generate_command.ts","../src/commands/base_commands/generate_controller.ts","../src/commands/base_commands/generate_cron.ts","../src/commands/base_commands/generate_middleware.ts","../src/commands/base_commands/generate_mqtt.ts","../src/commands/base_commands/generate_plugin.ts","../src/commands/base_commands/generate_queue.ts","../src/commands/base_commands/generate_sdk.ts","../src/commands/base_commands/init_command.ts","../src/commands/base_commands/init_queue_command.ts","../src/commands/base_commands/list_command.ts","../src/commands/base_commands/serve_command.ts","../src/commands/base_commands/setup_storage_command.ts","../src/commands/command_registry.ts","../src/runtime/native_request.ts","../src/server/http/request.ts","../src/runtime/native_env.ts","../src/errors/error_factory.ts","../src/errors/method_not_allowed.ts","../src/errors/route_not_found.ts","../src/runtime/native_file.ts","../src/plugins/static/static_constants.ts","../src/plugins/static/static.ts","../src/server/http/response.ts","../src/graphql/graphql.ts","../src/mock/mock_response.ts","../src/runtime/native_server/server_utils.ts","../src/mock/mock_server.ts","../src/plugins/async_local_storage/async_local_storage.ts","../src/plugins/body_parser/body_parser.ts","../src/plugins/compression/compression.ts","../src/plugins/cookie/cookie.ts","../src/plugins/cors/cors.ts","../src/plugins/express/express.ts","../src/errors/file_too_large.ts","../src/runtime/native_os.ts","../src/plugins/file/file.ts","../src/plugins/helmet/helmet.ts","../src/errors/json_not_valid.ts","../src/plugins/json/json.ts","../src/plugins/log/log.ts","../src/plugins/method_override/method_override.ts","../src/plugins/rate_limiter/in_memory_storage.ts","../src/plugins/rate_limiter/rate_limiter.ts","../src/plugins/session/session_store.ts","../src/plugins/session/session.ts","../src/plugins/swagger/swagger.ts","../src/plugins/timeout/timeout.ts","../src/plugins/trust_proxy/trust_proxy.ts","../src/plugins/urlencoded/urlencoded.ts","../src/runtime/native_hash.ts","../src/runtime/native_server/server_bun.ts","../src/runtime/native_server/server_deno.ts","../src/runtime/native_server/server_node.ts","../src/runtime/native_server/server_connector.ts","../src/server/server.ts","../src/server/server_constants.ts","../src/errors/file_not_found_error.ts","../src/storage/providers/blob_storage.ts","../src/storage/providers/local.ts","../src/storage/providers/s3.ts","../src/storage/storage.ts","../src/plugins/base_plugin.ts","../src/server/policy/policy_decorator.ts","../src/server/policy/policy_manager.ts","../src/index.ts"],"names":["runtime_exports","__export","runtime","RunTime","init_runtime","__esmMin","BaldaError","message","createBaseLogger","pino","label","logger","defineLoggerConfig","options","NativeCwd","nativeCwd","CronService","name","args","nodeCronModule","context","cronJobPatterns","allFiles","pattern","files","glob","file","error","setCronGlobalErrorHandler","globalErrorHandler","cron","schedule","target","propertyKey","descriptor","originalMethod","wrappedMethod","instance","NativeArgs","scriptIndex","i","arg","argBasename","j","nativeArgs","toLowerSnakeCase","str","toPascalCase","input","word","toDashCase","parseSizeLimit","sizeLimit","defaultValue","trimmed","kbMatch","mbMatch","value","parseFlag","equalIndex","parseFlagValue","numValue","parseCliArgsAndFlags","cliArgs","parsedArgs","parsedFlags","flag","nextArg","existingValue","getCalledCommandName","MetadataStore","VALIDATION_ERROR_SYMBOL","ARG_SYMBOL","currentCommandName","argName","argValue","errorChain","flagDecorator","primaryFlagName","flagAliases","allFlagVariants","resolvedFlagValue","flagVariant","possibleNames","flagName","rawValue","val","stringVal","NativePath","inputPath","path","paths","nativePath","Node","Router","_Router","basePath","middlewares","method","middleware","handler","swaggerOptions","root","segments","node","seg","idx","r","rawPath","params","middlewareOrHandler","maybeHandler","maybeSwagger","fullPath","isHandlerOnly","provided","middlewareOrCb","maybeCb","groupMiddlewares","cb","childBase","child","route","normalized","joined","v","router","createPolicyMiddleware","policies","req","res","next","policy","controller","classMeta","classMiddlewares","classPolicies","metaMap","meta","allPolicies","policyMiddleware","allMiddlewares","del","get","patch","post","put","AjvStateManager","Ajv","ajv","openapiSchemaMap","TypeBoxLoader","sym","validateSchema","inputSchema","data","safe","ValidationError","ZodLoader","isZod","SERIALIZE_WRAPPED","SERIALIZE_METADATA","serializeSchemaRefCache","serialize","schema","status","wrappedFunction","actualStatus","serializeMetadata","body","cacheKey","refKey","compiledSchema","jsonSchema","zod","validateDecorator","validatedBody","validatedQuery","validatedAll","newArgs","customError","validate","BaseCron","BaseMqtt","parseMessage","stringValue","parsed","MqttService","_MqttService","topic","connectionOptions","mqttModule","host","port","protocol","otherOptions","brokerUrl","matchingSubscriptions","sub","topicPattern","subscription","mqttHandlerPatterns","msgTopic","rawMessage","parsedMessage","payload","resolve","setMqttGlobalErrorHandler","mqtt","BaseQueue","BullMQConfiguration","defineBullMQConfiguration","ClientNotFoundError","libraries","NativeCrypto","nativeCrypto","BullMQPubSub","queue","jobId","errorHandler","rest","bullmqClient","worker","job","queueConfig","mergedOptions","workerKey","globalConfig","workerOptions","queueKey","mergedConfig","PGBossConfiguration","definePGBossConfiguration","PGBossPubSub","boss","sendOptions","id","jobs","mod","Ctor","connectionString","pgBoss","globalOptions","configKey","SQSConfiguration","defineSQSConfiguration","SQSPubSub","sqs","SendMessageCommand","queueUrl","command","consumerModule","consumerOptions","consumer","SQSClient","config","url","clientConfig","QueueManager","provider","pubsub","defineQueueConfiguration","firstClassIntegrations","key","QueueService","ctor","queueOptions","hasTyped","hasCustom","registration","queueHandlerPatterns","instanceCache","TypedQueue","wrappedHandler","CustomTypedQueue","sqsQueue","bullmqQueue","pgbossQueue","createQueue","NativeExit","code","nativeExit","Command","flags","helpFlags","commandName","description","helpText","helpOutput","info","commandClass","colors","lines","helpLines","line","allMeta","argsMeta","flagsMeta","required","aliases","flagKey","flagValue","valueDisplay","example","index","errorNumber","errorType","errorName","NativeFs","arrayBuffer","denoBuffer","stats","bunStats","denoStats","fs","Readable","nodeStream","entries","entry","nativeFs","getUninstalledPackages","packages","nodeModulesPath","uninstalled","pkg","pkgPath","getPackageManager","execWithPrompt","packageManager","dependencies","areDevDeps","rl","Ut","dependenciesList","prompt","answer","execSync","BuildCommand","esbuild","packageManagerCommand","devFlag","err","assetsDir","plugins","copy","outFile","result","__decorateClass","GenerateCommand","commandRegistry","commandType","commandTemplate","GenerateControllerCommand","controllerTemplate","fileName","className","GenerateCron","cronTemplate","GenerateMiddlewareCommand","middlewareTemplate","middlewareName","GenerateMqttCommand","isValidLiteral","mqttTemplate","GeneratePluginCommand","pluginTemplate","GenerateQueueCommand","queueTemplate","GenerateSdkCommand","sdkGenerator","hasNodeModules","generatorPath","packageCommand","absoluteServerPath","serverModule","possibleExports","serverInstance","exportName","currentModule","wasStarted","serverUrl","rej","swaggerPath","swaggerJsonUrl","openApiSpec","response","serverWithClose","tempSpecPath","outputDir","commandParts","InitCommand","devDependenciesCommand","uninstalledDevDeps","uninstalledMqtt","uninstalledCron","ext","serverTemplate","indexTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","imports","services","importsBlock","servicesBlock","InitQueueCommand","uninstalledDeps","configTemplate","ListCommand","builtInCommands","userCommands","categorizedCommands","maxNameLength","cmd","desc","deprecatedTag","commands","map","category","sortedCategories","color","ServeCommand","denoCommand","initCommand","SetupStorageCommand","validTypes","missingDeps","installCommand","storageType","packageJsonPath","missing","dep","depPath","outputPath","resolvedPath","configFile","template","baseCommands","CommandRegistry","_CommandRegistry","commandsPattern","commandFiles","register","commandFile","module","NativeRequest","schemaRefCache","Request","_Request","request","zodSchema","cached","typeboxSchema","plainSchema","fieldName","NativeEnv","_","nativeEnv","errorFactory","isDevelopment","MethodNotAllowedError","RouteNotFoundError","NativeFile","nativeFile","mimeTypesMap","serveStatic","source","urlPath","normalizedPath","staticFileHandler","_req","_res","wildcardPath","filePath","sourcePath","contentType","getContentType","fileContent","Response","htmlString","pathToFile","mimeType","chunk","GraphQL","createSchemaFn","typeDef","typeOrResolver","resolvers","yogaOptions","type","resolversObj","existingTypeResolver","resolver","typeDefs","def","MockResponse","header","subset","expected","assertion","currentPath","targetValue","subsetValue","targetKeys","expectedKeys","executeMiddlewareChain","currentIndex","firstMiddleware","canHaveBody","createGraphQLHandlerInitializer","graphql","handlerPromise","isInitializing","waitForInitialization","initializeHandler","createYoga","createSchema","MockServer","server","headers","query","cookies","ip","boundary","errorRes","formData","encoder","buffers","disposition","totalLength","sum","b","multipartBody","offset","buf","urlencoded","asyncStorage","AsyncLocalStorage","asyncLocalStorage","ctxSetters","store","setter","prop","currentStore","bodyParser","DEFAULT_THRESHOLD","DEFAULT_LEVEL","DEFAULT_FILTER","compression","threshold","level","filter","originalSend","originalJson","originalText","compressResponse","shouldCompress","buffer","getBodyBuffer","compressed","gzipSync","compressedBody","jsonString","cookie","opts","rawCookies","parseCookies","verified","verifySignedCookie","cookieOptions","setCookie","clearCookie","cookieString","pairs","pair","middlewareOptions","cookieValue","signCookie","existingCookies","newCookies","clearOptions","secret","keyData","valueData","signatureBuffer","signatureArray","signature","byte","parts","expectedSignatureBuffer","expectedSignatureArray","expectedSignature","cors","requestOrigin","handlePreflightRequest","handleRegularRequest","allowOrigin","determineOrigin","setCorsHeaders","matchedOrigin","origin","exposedHeaders","allowedHeaders","methodsStr","toBaldaToExpressRequest","baldaReq","headersObj","createExpressResponse","baldaRes","statusOrUrl","redirectUrl","field","prev","newValue","view","callback","obj","filename","fn","fname","links","link","rel","expressMiddleware","expressHandler","expressReq","expressRes","reject","expressNext","mountExpressRouter","expressRouter","normalizedBase","normalizePath","stack","layer","processExpressLayer","routePath","methods","m","handlers","s","registerExpressHandlers","layerPath","layerStack","subLayer","h","lastHandler","finalHandler","createExpressAdapter","pathOrMiddleware","maybeMiddleware","middlewareStack","FileTooLargeError","size","maxSize","NativeOs","nativeOs","DEFAULT_SIZE","fileParser","tmpPaths","boundaryMatch","bodyBuf","boundaryBuf","CRLFCRLF","indexOfSub","haystack","needle","from","outer","start","headerEnd","headersBuf","dataStart","nextBoundary","dataEnd","fields","maxFileSizeBytes","part","formNameMatch","formName","filenameMatch","originalName","contentTypeHeader","sanitizedName","sanitizeFilename","extension","tmpPath","cleanupTmpFiles","helmet","action","hstsRaw","maxAge","includeSubDomains","preload","hstsValue","JsonNotValidError","json","isJsonRequest","byteLength","customErrorMessage","encoding","decodedBody","parseMimeType","semicolonIndex","log","returnIfObjectOrString","startTime","duration","DEFAULT_METHODS","DEFAULT_HEADER","ALLOWED_OVERRIDE_METHODS","methodOverride","allowedMethods","headerName","currentMethod","overrideMethod","normalizedOverride","InMemoryStorage","windowMs","rateLimiter","keyOptions","storageOptions","baseKeyOptions","baseStorageOptions","storage","MemorySessionStore","sid","ttlSeconds","exp","session","ttl","cookieDefaults","sess","swagger","spec","generateOpenAPISpec","uiPath","jsonPath","uiContent","generateRapiDocUI","generateScalarUI","generateElementsUI","generateSwaggerUI","escapeHtml","safeToJSONSchema","routes","processedModels","acc","model","schemaName","components","operation","parameters","extractPathParams","routeBodyContentType","statusCode","securityArr","sec","schemeName","specUrl","paramSchema","regex","match","timeout","timer","trustProxy","useTrust","hop","parseUrlEncodedBody","bodyString","parseUrlEncodedString","searchParams","setNestedValue","dangerousKeys","keys","current","baseKey","bracketKey","lastKey","NativeHash","passwordBuffer","salt","keyMaterial","hashBuffer","saltBase64","hashBase64","hash","expectedHash","actualHash","mismatch","bytes","binary","len","base64","ServerBun","tapOptions","fetch","websocket","ServerDeno","graphqlHandler","socket","event","pipeReadableStreamToNodeResponse","stream","reader","done","ServerNode","httpResponse","preHandler","filteredHeaders","forwardedFor","search","responseResult","chunks","createServer","http2CreateServer","http2CreateSecureServer","httpsCreateServer","ServerConnector","serverOptions","PROTECTED_KEYS","Server","append","optionsOrHandler","notFoundHandler","customControllerPatterns","controllerPatterns","controllerPaths","blacklistedPath","controllerPath","pluginName","pluginOptions","pathname","allMethods","methodNotAllowedError","notFoundError","FileNotFoundError","AzureBlobStorageProvider","expiresInSeconds","blockBlobClient","startsOn","expiresOn","permissions","sasToken","prefix","listPrefix","blob","returnType","downloadResponse","credential","LocalStorageProvider","_key","_expiresInSeconds","searchPath","_contentType","dirPath","relativePath","S3StorageProvider","domainName","keyPairId","privateKey","dateLessThan","item","Storage","providerOptions","providerInstance","BasePlugin","createPolicyDecorator","manager","scope","policyMeta","PolicyManager","providers"],"mappings":"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","file":"index.cjs","sourcesContent":["export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","export class BaldaError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","import pino from \"pino\";\nimport type { LoggerOptions } from \"./logger_types.js\";\n\nconst createBaseLogger = () => {\n const baseOptions: LoggerOptions = {\n level: \"info\",\n formatters: {\n level: (label) => {\n return { level: label };\n },\n },\n };\n\n return pino(baseOptions);\n};\n\n/**\n * The logger instance, can be overridden by the `defineLoggerConfig` function\n */\nexport let logger = createBaseLogger();\n\n/**\n * Define the logger config, this will override the logger instance with the given options\n * @param options - The logger options\n */\nexport const defineLoggerConfig = (options?: LoggerOptions) => {\n logger = pino(options);\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeCwd {\n getCwd(): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n return process.cwd();\n case \"deno\":\n return Deno.cwd();\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeCwd = new NativeCwd();\n","import { glob } from \"glob\";\nimport type { TaskContext } from \"node-cron\";\nimport { BaldaError } from \"../errors/balda_error.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { CronSchedule, CronScheduleParams } from \"./cron.types.js\";\n\nexport class CronService {\n static scheduledJobs: CronSchedule[] = [];\n\n /**\n * @description Schedule a cron job.\n * @internal\n * @example\n * CronService.register('test', '0 0 * * *', () => {\n * console.log('test');\n * }, {\n * timezone: 'Europe/Istanbul',\n * });\n */\n static register(name: string, ...args: CronScheduleParams): void {\n args[2] = {\n name,\n ...args[2],\n };\n\n this.scheduledJobs.push({ name, args });\n }\n\n /**\n * @description Start the cron scheduler.\n */\n static async run() {\n const nodeCronModule = (\n await import(\"node-cron\").catch(() => {\n throw new BaldaError(\n \"node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator\",\n );\n })\n ).default;\n\n logger.info(\"Scheduling cron jobs\");\n if (!this.scheduledJobs.length) {\n logger.info(\"No cron jobs to schedule\");\n return;\n }\n\n for (const { name, args } of this.scheduledJobs) {\n logger.info(`Scheduling cron job: ${name}`);\n const scheduledJob = nodeCronModule.schedule(...args);\n scheduledJob.on(\"execution:failed\", (context) =>\n this.globalErrorHandler(context),\n );\n }\n\n logger.info(\"Cron jobs scheduled\");\n }\n\n /**\n * @description Main error handler for cron jobs. You can write your own error handler by overriding this static method for example with sentry.\n */\n static globalErrorHandler(context: TaskContext) {\n logger.error(context.execution?.error);\n }\n\n /**\n * @description Import all cron jobs from the app/cron/schedules directory\n */\n static async massiveImportCronJobs(cronJobPatterns: string[]) {\n const allFiles: string[] = [];\n\n for (const pattern of cronJobPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing cron job: ${file}`);\n logger.error(error);\n });\n }),\n );\n }\n}\n\nexport const setCronGlobalErrorHandler = (\n globalErrorHandler: (\n ...args: Parameters<(typeof CronService)[\"globalErrorHandler\"]>\n ) => void,\n) => {\n CronService.globalErrorHandler = globalErrorHandler.bind(CronService);\n};\n","import { CronService } from \"../cron.js\";\nimport type { CronScheduleParams } from \"../cron.types.js\";\n\n/**\n * Decorator to schedule a cron job. Must be applied to a class method. By default, the cron job will not overlap with other cron jobs of the same type.\n * ```ts\n * @cron('* * * * *', { timezone: 'Europe/Istanbul' })\n * async test() {\n * console.log('test');\n * }\n * ```\n */\nexport const cron = (\n schedule: CronScheduleParams[0],\n options?: CronScheduleParams[2],\n) => {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value;\n\n const wrappedMethod = async (...args: any[]) => {\n const instance = new target.constructor();\n return await originalMethod.apply(instance, args);\n };\n\n CronService.register(\n `${target.constructor.name}.${propertyKey}`,\n schedule,\n wrappedMethod,\n options,\n );\n\n return descriptor;\n };\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","/**\n * Cross-runtime metadata store used to store metadata for the decorators without using reflect-metadata\n */\nexport class MetadataStore {\n private static metadata = new WeakMap<any, Map<string | symbol, any>>();\n\n /**\n * Set the metadata for the given target and property key\n */\n static set(target: any, propertyKey: string, value: any): void {\n if (!this.metadata.has(target)) {\n this.metadata.set(target, new Map());\n }\n this.metadata.get(target)!.set(propertyKey, value);\n }\n\n /**\n * Get the metadata for the given target and property key\n */\n static get(target: any, propertyKey: string): any {\n return this.metadata.get(target)?.get(propertyKey);\n }\n\n /**\n * Get all the metadata for the given target\n */\n static getAll(target: any): Map<string | symbol, any> {\n return this.metadata.get(target) || new Map();\n }\n\n /**\n * Delete the metadata for the given target and property key\n */\n static delete(target: any, propertyKey: string | symbol): void {\n this.metadata.get(target)?.delete(propertyKey.toString());\n }\n\n /**\n * Clear all the metadata for the given target\n */\n static clear(target: any): void {\n this.metadata.delete(target);\n }\n}\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { ArgOptions } from \"./command_decorator_types.js\";\n\nexport const VALIDATION_ERROR_SYMBOL = \"VALIDATION_ERROR\";\nexport const ARG_SYMBOL = \"ARG\";\n\n/**\n * The arguments of the current command. Shifted to get the next argument each time for each argument decorator.\n */\nlet args = parseCliArgsAndFlags().args.slice(1);\n\n/**\n * Decorator to mark a field of a command class as an argument.\n * @param options - The options for the argument.\n * @warning Arguments are evaluated in the order they are defined in the Command class.\n */\nexport const arg = (options: ArgOptions) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const argName = propertyKey;\n MetadataStore.set(target, propertyKey, {\n type: \"arg\",\n name: argName,\n description: options.description,\n });\n\n let argValue = args.length ? args.shift() : options.defaultValue;\n if (options.required && !argValue) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"arg\",\n name: argName,\n message: \"Required argument not provided\",\n },\n ]);\n\n return;\n }\n\n if (options.parse && argValue) {\n argValue = options.parse(argValue);\n }\n\n Object.defineProperty(target, propertyKey, {\n value: argValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { VALIDATION_ERROR_SYMBOL } from \"./arg.js\";\nimport type {\n FlagOptions,\n FlagType,\n InferFlagType,\n} from \"./command_decorator_types.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\n\n/**\n * Decorator for defining command-line flags with type safety.\n *\n * Supports multiple flag types:\n * - `boolean`: true/false flags\n * - `string`: text values\n * - `number`: numeric values\n * - `list`: array of strings (can be specified multiple times)\n *\n * @example\n * ```typescript\n * class MyCommand extends Command {\n * @flag.string({ name: \"name\", description: \"User name\" })\n * name?: string;\n *\n * @flag.list({ name: \"tag\", aliases: [\"t\"], description: \"Tags\" })\n * tags!: string[];\n * }\n * ```\n *\n * Usage:\n * - Single flag: `--name=value` or `--name value`\n * - List flag: `--tag=one --tag=two --tag=three`\n * - Aliases: `-t one -t two`\n */\nconst flagDecorator = <T extends FlagType>(options: FlagOptions<T>) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const primaryFlagName = options.name || propertyKey;\n const parsedFlags = parseCliArgsAndFlags().flags;\n const flagAliases = options.aliases || [];\n const allFlagVariants = [primaryFlagName, ...flagAliases];\n\n // Find the actual flag value by checking all possible flag names\n let resolvedFlagValue = options.defaultValue;\n\n for (const flagVariant of allFlagVariants) {\n // Check both with and without prefixes\n const possibleNames = [\n flagVariant,\n `-${flagVariant}`,\n `--${flagVariant}`,\n ];\n\n for (const flagName of possibleNames) {\n if (flagName in parsedFlags) {\n const rawValue = parsedFlags[flagName];\n\n if (options.type === \"list\") {\n // For list type, ensure we have an array\n const arrayValue = Array.isArray(rawValue) ? rawValue : [rawValue];\n resolvedFlagValue = arrayValue.map((val) => {\n const stringVal = String(val);\n return options.parse ? options.parse(stringVal) : stringVal;\n }) as InferFlagType<T>;\n } else {\n resolvedFlagValue = rawValue as InferFlagType<T>;\n\n if (options.type === \"boolean\") {\n resolvedFlagValue = Boolean(\n resolvedFlagValue,\n ) as InferFlagType<T>;\n } else if (options.type === \"number\") {\n resolvedFlagValue = Number(resolvedFlagValue) as InferFlagType<T>;\n }\n\n if (options.parse) {\n resolvedFlagValue = options.parse(resolvedFlagValue);\n }\n }\n\n break;\n }\n }\n\n if (resolvedFlagValue !== options.defaultValue) {\n break;\n }\n }\n\n MetadataStore.set(target, propertyKey, {\n type: \"flag\",\n name: primaryFlagName,\n aliases: flagAliases || [],\n description: options.description,\n });\n\n if (options.required) {\n const isValueMissing =\n options.type === \"list\"\n ? !resolvedFlagValue ||\n (Array.isArray(resolvedFlagValue) && resolvedFlagValue.length === 0)\n : !resolvedFlagValue;\n\n if (isValueMissing) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"flag\",\n name: primaryFlagName,\n message: \"Required flag not provided\",\n },\n ]);\n return;\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n value: resolvedFlagValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n\n/** Shorthand decorator for boolean flags */\nflagDecorator.boolean = (options: Omit<FlagOptions<\"boolean\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"boolean\" });\n};\n\n/** Shorthand decorator for string flags */\nflagDecorator.string = (options: Omit<FlagOptions<\"string\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"string\" });\n};\n\n/** Shorthand decorator for number flags */\nflagDecorator.number = (options: Omit<FlagOptions<\"number\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"number\" });\n};\n\n/** Shorthand decorator for list flags (can be specified multiple times) */\nflagDecorator.list = (options: Omit<FlagOptions<\"list\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"list\" });\n};\n\nexport const flag = flagDecorator;\n","// Both Deno and Bun are compatible with path api\nimport path from \"node:path\";\nimport { runtime } from \"./runtime.js\";\n\nclass NativePath {\n basename(inputPath: string): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.basename(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n join(...paths: string[]): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.join(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n extName(inputPath: string): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.extname(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n resolve(...paths: string[]): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.resolve(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativePath = new NativePath();\n","import type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\nimport type { Params, Route } from \"./router_type.js\";\n\nclass Node {\n staticChildren: Map<string, Node>;\n paramChild: { node: Node; name: string } | null;\n wildcardChild: Node | null;\n middleware: ServerRouteMiddleware[] | null;\n handler: ((req: Request, res: Response) => void) | null;\n\n constructor() {\n this.staticChildren = new Map();\n this.paramChild = null;\n this.wildcardChild = null;\n this.middleware = null;\n this.handler = null;\n }\n}\n\n/**\n * Singleton that handles the routing of requests to the appropriate handler(s).\n */\nexport class Router {\n private trees: Map<string, Node>;\n private routes: Route[];\n private middlewares: ServerRouteMiddleware[];\n private basePath: string;\n\n /**\n * Create a new router with an optional base path and default middlewares.\n * Base path is normalized so it never produces duplicate slashes and never ends with a trailing slash (except root).\n */\n constructor(\n basePath: string = \"\",\n middlewares: ServerRouteMiddleware[] = [],\n ) {\n this.trees = new Map();\n this.routes = [];\n this.middlewares = middlewares;\n this.basePath = this.normalizeBasePath(basePath);\n }\n\n /** Returns a shallow copy of all registered routes. */\n getRoutes(): Route[] {\n return this.routes.slice();\n }\n\n /**\n * Add or update a route\n * @internal\n */\n addOrUpdate(\n method: HttpMethod,\n path: string,\n middleware: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void {\n method = method.toUpperCase() as HttpMethod;\n\n // ensure root exists\n let root = this.trees.get(method);\n if (!root) {\n root = new Node();\n this.trees.set(method, root);\n }\n\n // strip query string and split into segments (handling root path correctly)\n const clean = path.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n\n let node = root;\n for (const seg of segments) {\n if (seg === \"*\") {\n if (!node.wildcardChild) {\n node.wildcardChild = new Node();\n }\n node = node.wildcardChild;\n break;\n }\n\n if (seg.startsWith(\":\")) {\n const name = seg.slice(1);\n if (!node.paramChild) {\n node.paramChild = { node: new Node(), name };\n }\n node = node.paramChild.node;\n continue;\n }\n\n // static segment\n if (!node.staticChildren.has(seg)) {\n node.staticChildren.set(seg, new Node());\n }\n node = node.staticChildren.get(seg)!;\n }\n\n // assign middleware & handler\n node.middleware = middleware;\n node.handler = handler;\n\n // upsert in registry\n const idx = this.routes.findIndex(\n (r) => r.method === method && r.path === path,\n );\n if (idx !== -1) {\n this.routes[idx].middleware = middleware;\n this.routes[idx].handler = handler;\n return;\n }\n\n this.routes.push({ method, path, middleware, handler, swaggerOptions });\n }\n\n /**\n * Find the matching route for the given HTTP method and path.\n * Returns the resolved middleware chain, handler, and extracted params; or null if not found.\n */\n find(\n method: string,\n rawPath: string,\n ): {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n } | null {\n method = method.toUpperCase();\n const root = this.trees.get(method);\n if (!root) {\n return null;\n }\n\n const clean = rawPath.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n const params: Params = {};\n\n let node = root;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n\n if (node.staticChildren.has(seg)) {\n node = node.staticChildren.get(seg)!;\n continue;\n }\n\n if (node.paramChild) {\n params[node.paramChild.name] = seg;\n node = node.paramChild.node;\n continue;\n }\n\n if (node.wildcardChild) {\n params[\"*\"] = segments.slice(i).join(\"/\");\n node = node.wildcardChild;\n break;\n }\n\n return null;\n }\n\n if (!node.handler || !node.middleware) {\n return null;\n }\n\n return { middleware: node.middleware, handler: node.handler, params };\n }\n\n /**\n * Register a GET route under this router's base path.\n */\n get(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"GET\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a POST route under this router's base path.\n */\n post(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"POST\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PATCH route under this router's base path.\n */\n patch(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PATCH\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PUT route under this router's base path.\n */\n put(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PUT\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a DELETE route under this router's base path.\n */\n delete(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"DELETE\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an OPTIONS route under this router's base path.\n */\n options(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"OPTIONS\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an HEAD route under this router's base path.\n */\n head(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"HEAD\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Create a grouped router that shares a base path and middlewares.\n * The callback receives a child router where routes are defined; routes\n * are then merged back into the parent with the composed base path and middlewares.\n */\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: Router) => void,\n ): void;\n group(path: string, cb: (router: Router) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: Router) => void),\n maybeCb?: (router: Router) => void,\n ): void {\n const groupMiddlewares = Array.isArray(middlewareOrCb)\n ? middlewareOrCb\n : typeof middlewareOrCb === \"function\"\n ? []\n : middlewareOrCb\n ? [middlewareOrCb]\n : [];\n const cb = (\n Array.isArray(middlewareOrCb)\n ? maybeCb\n : typeof middlewareOrCb === \"function\"\n ? (middlewareOrCb as (router: Router) => void)\n : undefined\n ) as ((router: Router) => void) | undefined;\n\n const childBase = this.joinPath(path);\n const child = new Router(childBase, [\n ...this.middlewares,\n ...groupMiddlewares,\n ]);\n cb?.(child);\n for (const r of child.getRoutes()) {\n this.addOrUpdate(\n r.method as HttpMethod,\n r.path,\n r.middleware,\n r.handler,\n r.swaggerOptions,\n );\n }\n }\n\n /**\n * Apply global middlewares to all routes\n * @param middlewares - The middlewares to apply\n * @internal\n */\n applyGlobalMiddlewaresToAllRoutes(\n middlewares: ServerRouteMiddleware[],\n ): void {\n for (const route of this.routes) {\n this.addOrUpdate(\n route.method as HttpMethod,\n route.path,\n [...middlewares, ...(route.middleware || [])],\n route.handler,\n );\n }\n }\n\n private normalizeBasePath(path: string): string {\n if (!path) {\n return \"\";\n }\n\n let normalized = path.replace(/\\s+/g, \"\");\n normalized = normalized.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n\n if (normalized.length > 1) {\n normalized = normalized.replace(/\\/+$/g, \"\");\n }\n\n return normalized;\n }\n\n private joinPath(path: string): string {\n const parts = [this.basePath, path].filter(\n (v) => typeof v === \"string\" && v.length > 0,\n ) as string[];\n let joined = parts.join(\"/\");\n joined = joined.replace(/\\/+/g, \"/\");\n if (!joined.startsWith(\"/\")) {\n joined = \"/\" + joined;\n }\n if (joined.length > 1) {\n joined = joined.replace(/\\/+$/g, \"\");\n }\n return joined;\n }\n}\n\n/** Main singleton router instance */\nexport const router = new Router();\n","import { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type {\n HttpMethod,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { PolicyMetadata } from \"../../server/policy/policy_types.js\";\nimport { router } from \"../../server/router/router.js\";\n\n/**\n * Creates a middleware that enforces policies before allowing the request to proceed.\n * Returns 401 Unauthorized if any policy check fails.\n */\nconst createPolicyMiddleware = (\n policies: PolicyMetadata[],\n): ServerRouteMiddleware => {\n return async (req, res, next) => {\n for (const policy of policies) {\n const allowed = await policy.manager.canAccess(\n policy.scope,\n policy.handler,\n req,\n );\n if (!allowed) {\n return res.unauthorized({ error: \"Unauthorized\" });\n }\n }\n return next();\n };\n};\n\n/**\n * Decorator to mark a class as a controller, routes defined in the controller will be registered at import time when calling the `listen` method.\n * You can customize the path pattern for controller imports in the server options `controllerPatterns`\n * @param path - The path pattern for the controller.\n * @param swaggerOptions - The swagger options for the controller that will be applied to all routes defined in the controller. Controller options will override route options.\n * @swagger If swagger is enabled, the default service name for all routes defined in the controller will be the controller name.\n * @swagger For naming commodity, the default service name will remove the \"Controller\" suffix if it exists. e.g. \"UserController\" -> \"User\"\n */\nexport const controller = (\n path?: string,\n swaggerOptions?: SwaggerRouteOptions,\n) => {\n return (target: any) => {\n const classMeta = MetadataStore.get(target.prototype, \"__class__\");\n const classMiddlewares = classMeta?.middlewares || [];\n const classPolicies: PolicyMetadata[] = classMeta?.policies || [];\n const metaMap = MetadataStore.getAll(target.prototype);\n const instance = new target();\n\n for (const [propertyKey, meta] of metaMap.entries()) {\n if (!meta.route) {\n continue;\n }\n\n const handler = target.prototype[propertyKey].bind(instance);\n const fullPath = path\n ? nativePath.join(path, meta.route.path)\n : meta.route.path;\n\n // Combine class-level and method-level policies\n const allPolicies: PolicyMetadata[] = [\n ...classPolicies,\n ...(meta.policies || []),\n ];\n\n // Create policy middleware if there are policies to enforce\n const policyMiddleware =\n allPolicies.length > 0 ? [createPolicyMiddleware(allPolicies)] : [];\n\n // Prepend class-level middlewares, then policy middleware, then route-level middlewares\n const allMiddlewares = [\n ...classMiddlewares,\n ...policyMiddleware,\n ...(meta.middlewares || []),\n ];\n router.addOrUpdate(\n meta.route.method as HttpMethod,\n fullPath,\n allMiddlewares,\n handler,\n {\n // default service name\n service: target.name.replace(/Controller$/, \"\"),\n // controller options\n ...swaggerOptions,\n // route options\n ...meta.documentation,\n },\n );\n }\n\n MetadataStore.clear(target.prototype);\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype DelHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a DELETE request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { del, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @del(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const del = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends DelHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"DELETE\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"DELETE\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype GetHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a GET request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { get, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @get(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const get = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends GetHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"GET\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"GET\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype PatchHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a PATCH request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { patch, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @patch(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const patch = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends PatchHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"PATCH\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"PATCH\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype PostHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a POST request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { post, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @post(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n * }\n * ```\n */\nexport const post = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends PostHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"POST\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"POST\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\ntype PutHandler = (req: Request, res: Response, ...args: any[]) => any;\n\n/**\n * Decorator to mark an handler for a PUT request\n * @param path - The path of the route\n * @param options - The options for the route\n * @warning Must receive the request and response as the first two arguments or it might not work as expected.\n * @example\n * ```ts\n * import { put, controller, Request, Response } from \"balda\";\n *\n * @controller(\"/api\")\n * class MyController {\n * @put(\"/\")\n * async handler(req: Request, res: Response) {\n * // ...\n * }\n */\nexport const put = (path: string, options?: SwaggerRouteOptions) => {\n return <T extends PutHandler>(\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): TypedPropertyDescriptor<T> => {\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: { path, method: \"PUT\" } };\n }\n\n meta.documentation = {\n ...(meta.documentation || {}),\n name: propertyKey,\n ...options,\n };\n\n meta.route = { path, method: \"PUT\" };\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\n\n/**\n * Decorator to mark a middleware for a route or a controller class\n */\nexport const middleware = (\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n) => {\n return (\n target: any,\n propertyKey?: string,\n descriptor?: PropertyDescriptor,\n ) => {\n // Class decorator usage\n if (typeof propertyKey === \"undefined\") {\n let meta = MetadataStore.get(target.prototype, \"__class__\");\n if (!meta) {\n meta = { middlewares: [] };\n }\n\n if (!meta.middlewares) {\n meta.middlewares = [];\n }\n\n if (!middleware) {\n throw new Error(\n `Middleware ${String(\n middleware,\n )} not found, are you sure you defined it before using it?`,\n );\n }\n\n if (!Array.isArray(middleware)) {\n middleware = [middleware];\n }\n\n meta.middlewares.push(...middleware);\n MetadataStore.set(target.prototype, \"__class__\", meta);\n return target;\n }\n\n // Method decorator usage\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [] };\n }\n\n if (!meta.middlewares) {\n meta.middlewares = [];\n }\n\n if (!Array.isArray(middleware)) {\n middleware = [middleware];\n }\n\n meta.middlewares.push(...middleware);\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n};\n","import { Ajv } from \"ajv\";\n\n/**\n * Global state for the AJV instance used for JSON Schema validation.\n *\n * ## Custom AJV Instance\n *\n * You can provide your own AJV instance with custom configuration:\n *\n * ```typescript\n * import { Ajv } from 'ajv';\n * import { AjvStateManager } from 'balda';\n *\n * const customAjv = new Ajv({\n * validateSchema: false, // Required - must be false\n * strict: false, // Required - must be false\n * allErrors: true, // Optional - your custom config\n * // ... other custom options\n * });\n *\n * // Add custom formats, keywords, etc.\n * customAjv.addFormat('custom-format', /regex/);\n *\n * // Set as global instance\n * AjvStateManager.setGlobalInstance(customAjv);\n * ```\n *\n * **IMPORTANT:** The following options are required and must not be changed:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n *\n * Changing these values will cause validation errors and break Zod schema support.\n */\nexport class AjvStateManager {\n static ajv: Ajv = new Ajv({\n validateSchema: false, // Required - do not change\n strict: false, // Required - do not change\n });\n\n static {\n this.ajv.addFormat(\n \"email\",\n /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,\n );\n\n this.ajv.addFormat(\n \"url\",\n /^https?:\\/\\/(?:www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_\\+.~#?&\\/=]*)$/,\n );\n\n this.ajv.addFormat(\"date\", /^\\d{4}-\\d{2}-\\d{2}$/);\n\n this.ajv.addFormat(\n \"datetime\",\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d{3})?(?:Z|[+-]\\d{2}:\\d{2})$/,\n );\n\n this.ajv.addFormat(\"time\", /^\\d{2}:\\d{2}:\\d{2}$/);\n this.ajv.addFormat(\"binary\", /^(?:[0-9a-fA-F]{2})+$/);\n this.ajv.addFormat(\n \"base64\",\n /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,\n );\n this.ajv.addFormat(\n \"uuid\",\n /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i,\n );\n }\n\n /**\n * Sets the global AJV instance to use for JSON Schema validation.\n * @param ajv - The AJV instance to set as global.\n * @warning The AJV instance must be configured with the following options:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n * Changing these values will cause validation errors and break Zod schema support.\n */\n static setGlobalInstance(ajv: Ajv) {\n this.ajv = ajv;\n this.ajv.opts.strict = false;\n this.ajv.opts.validateSchema = false;\n }\n}\n","import type { AjvCompileReturnType } from \"./ajv_types.js\";\n\n/**\n * Maps globally the controller schemas to the compiled AJV schemas in order to cache them.\n * Uses Symbol (for object schema references) or string (for primitive schemas) as cache keys.\n *\n * Supports caching for:\n * - Zod schemas (compiled once from Zod to JSON Schema to AJV)\n * - TypeBox schemas (compiled once directly to AJV, as they're already JSON Schema)\n * - Plain JSON schemas (compiled once directly to AJV)\n *\n * Schema objects are tracked in a WeakMap to generate stable cache keys,\n * preventing redundant compilation across the application lifecycle.\n */\nexport const openapiSchemaMap = new Map<\n symbol | string,\n AjvCompileReturnType\n>();\n","/**\n * Manages lazy loading of the TypeBox library at runtime.\n * TypeBox is a peer dependency and only loaded if TypeBox schemas are used.\n */\nimport type { TSchema } from \"@sinclair/typebox\";\n\nexport class TypeBoxLoader {\n private static typeboxModule: typeof import(\"@sinclair/typebox\") | null =\n null;\n private static loadPromise: Promise<\n typeof import(\"@sinclair/typebox\")\n > | null = null;\n\n /**\n * Lazily loads the TypeBox library at runtime.\n * @throws Error if TypeBox is not installed\n */\n static async load(): Promise<typeof import(\"@sinclair/typebox\")> {\n if (this.typeboxModule) {\n return this.typeboxModule;\n }\n\n if (this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = (async () => {\n try {\n this.typeboxModule = await import(\"@sinclair/typebox\");\n return this.typeboxModule;\n } catch (error) {\n throw new Error(\n \"TypeBox is not installed. Install it with: npm install @sinclair/typebox\\n\" +\n \"TypeBox is a peer dependency required when using TypeBox schemas for validation.\",\n );\n }\n })();\n\n return this.loadPromise;\n }\n\n /**\n * Gets the loaded TypeBox module synchronously.\n * @throws Error if TypeBox has not been loaded yet\n */\n static get(): typeof import(\"@sinclair/typebox\") {\n if (!this.typeboxModule) {\n throw new Error(\n \"TypeBox has not been loaded yet. Call TypeBoxLoader.load() first.\",\n );\n }\n return this.typeboxModule;\n }\n\n /**\n * Checks if a value is a TypeBox schema\n * TypeBox schemas have a [Kind] symbol property\n */\n static isTypeBoxSchema(value: any): value is TSchema {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"type\" in value &&\n Object.getOwnPropertySymbols(value).some(\n (sym) => sym.toString() === \"Symbol(TypeBox.Kind)\",\n )\n );\n }\n}\n","import { ValidationError } from \"ajv\";\nimport { AjvCompileReturnType } from \"../ajv/ajv_types.js\";\n\n/**\n * Validates data against an AJV schema synchronously.\n *\n * @param inputSchema - The compiled AJV validator function\n * @param data - The data to validate\n * @param safe - If true, returns undefined instead of throwing on validation failure\n * @returns The validated data\n * @throws Error if validation fails and safe is false\n */\nexport const validateSchema = (\n inputSchema: AjvCompileReturnType,\n data: any,\n safe: boolean = false,\n): any => {\n const isValid = inputSchema(data);\n if (!isValid) {\n if (safe) {\n return data;\n }\n\n throw new ValidationError(inputSchema.errors || []);\n }\n\n return data;\n};\n","/**\n * Manages lazy loading of the Zod library at runtime.\n * Zod is a peer dependency and only loaded if Zod schemas are used.\n */\nimport type { ZodType } from \"zod\";\n\nexport class ZodLoader {\n private static zodModule: typeof import(\"zod\") | null = null;\n private static loadPromise: Promise<typeof import(\"zod\")> | null = null;\n\n /**\n * Lazily loads the Zod library at runtime.\n * @throws Error if Zod is not installed\n */\n static async load(): Promise<typeof import(\"zod\")> {\n if (this.zodModule) {\n return this.zodModule;\n }\n\n if (this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = (async () => {\n try {\n this.zodModule = await import(\"zod\");\n return this.zodModule;\n } catch (error) {\n throw new Error(\n \"Zod is not installed. Install it with: npm install zod\\n\" +\n \"Zod is a peer dependency required when using Zod schemas for validation.\",\n );\n }\n })();\n\n return this.loadPromise;\n }\n\n /**\n * Gets the loaded Zod module synchronously.\n * @throws Error if Zod has not been loaded yet\n */\n static get(): typeof import(\"zod\") {\n if (!this.zodModule) {\n throw new Error(\n \"Zod has not been loaded yet. Call ZodLoader.load() first.\",\n );\n }\n return this.zodModule;\n }\n\n /**\n * Checks if a value is a Zod schema\n */\n static isZodSchema(value: any): value is ZodType {\n const isZod =\n typeof value === \"object\" &&\n value !== null &&\n \"_def\" in value &&\n typeof value.parse === \"function\" &&\n typeof value.safeParse === \"function\";\n\n if (isZod && !(\"toJSONSchema\" in value)) {\n throw new Error(\n \"Zod4 is required with the toJSONSchema() method in order to work. Install it with: npm install zod with minimum version 4.0.0\",\n );\n }\n\n return isZod;\n }\n}\n","import type { TSchema } from \"@sinclair/typebox\";\nimport type { ZodType } from \"zod\";\nimport { AjvStateManager } from \"../../ajv/ajv.js\";\nimport type { AjvCompileParams } from \"../../ajv/ajv_types.js\";\nimport { openapiSchemaMap } from \"../../ajv/openapi_schema_map.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { TypeBoxLoader } from \"../../validator/typebox_loader.js\";\nimport { validateSchema } from \"../../validator/validator.js\";\nimport { ZodLoader } from \"../../validator/zod_loader.js\";\nimport type { SerializeOptions } from \"./serialize_types.js\";\n\nconst SERIALIZE_WRAPPED = Symbol(\"serializeWrapped\");\nconst SERIALIZE_METADATA = Symbol(\"serializeMetadata\");\n\n/**\n * WeakMap to cache schema objects by reference in serialize decorator.\n * Uses Symbol for unique cache keys to prevent any potential counter overflow in long-running servers.\n * This cache is used for Zod, TypeBox, and plain JSON schemas.\n */\nconst serializeSchemaRefCache = new WeakMap<object, symbol>();\n\nexport const serialize = <T extends ZodType | TSchema | AjvCompileParams[0]>(\n schema: T,\n options?: SerializeOptions,\n) => {\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n let meta = MetadataStore.get(target, propertyKey) || {\n middlewares: [],\n route: {},\n };\n if (!meta.documentation) {\n meta.documentation = {};\n }\n if (!meta.documentation.responses) {\n meta.documentation.responses = {};\n }\n if (!meta.serializeOptions) {\n meta.serializeOptions = {};\n }\n\n const status = Number(options?.status ?? 200);\n meta.documentation.responses[status] = schema;\n meta.serializeOptions[status] = options?.safe ?? true;\n MetadataStore.set(target, propertyKey, meta);\n\n if (!descriptor.value[SERIALIZE_METADATA]) {\n descriptor.value[SERIALIZE_METADATA] = {};\n }\n\n descriptor.value[SERIALIZE_METADATA][status] = {\n name: propertyKey,\n schema,\n safe: options?.safe ?? true,\n };\n\n if (!descriptor.value[SERIALIZE_WRAPPED]) {\n const originalMethod = descriptor.value;\n const wrappedFunction = async function (this: any, ...args: any[]) {\n const res = args[1] as Response;\n await originalMethod.apply(this, args);\n const actualStatus = res.responseStatus;\n\n const serializeMetadata = wrappedFunction[SERIALIZE_METADATA];\n const schema = serializeMetadata?.[actualStatus]?.schema;\n const safe = serializeMetadata?.[actualStatus]?.safe ?? true;\n\n if (schema && !safe) {\n const body = res.getBody();\n try {\n let cacheKey: string;\n\n // Use WeakMap cache for schema object references\n if (ZodLoader.isZodSchema(schema)) {\n let refKey = serializeSchemaRefCache.get(schema);\n if (!refKey) {\n refKey = Symbol(\"serialize_zod_schema\");\n serializeSchemaRefCache.set(schema, refKey);\n }\n\n let compiledSchema = openapiSchemaMap.get(refKey);\n if (!compiledSchema) {\n const jsonSchema = schema.toJSONSchema();\n compiledSchema = AjvStateManager.ajv.compile(jsonSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n } else if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n // TypeBox schema - already JSON Schema compliant\n let refKey = serializeSchemaRefCache.get(schema);\n if (!refKey) {\n refKey = Symbol(\"serialize_typebox_schema\");\n serializeSchemaRefCache.set(schema, refKey);\n }\n\n let compiledSchema = openapiSchemaMap.get(refKey);\n if (!compiledSchema) {\n compiledSchema = AjvStateManager.ajv.compile(schema);\n openapiSchemaMap.set(refKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n } else if (typeof schema === \"object\" && schema !== null) {\n // Plain JSON schema object\n let refKey = serializeSchemaRefCache.get(schema);\n if (!refKey) {\n refKey = Symbol(\"serialize_json_schema\");\n serializeSchemaRefCache.set(schema, refKey);\n }\n\n let compiledSchema = openapiSchemaMap.get(refKey);\n if (!compiledSchema) {\n compiledSchema = AjvStateManager.ajv.compile(\n schema as AjvCompileParams[0],\n );\n openapiSchemaMap.set(refKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n } else {\n // Fallback to JSON.stringify for primitives or edge cases\n cacheKey = JSON.stringify(schema);\n let compiledSchema = openapiSchemaMap.get(cacheKey);\n if (!compiledSchema) {\n compiledSchema = AjvStateManager.ajv.compile(\n schema as AjvCompileParams[0],\n );\n openapiSchemaMap.set(cacheKey, compiledSchema);\n }\n\n await validateSchema(compiledSchema, body, safe);\n res.send(body);\n }\n } catch (error) {\n const zod = await ZodLoader.load();\n if (error instanceof zod.ZodError) {\n res.internalServerError({\n received: body,\n schema,\n error,\n });\n return;\n }\n\n throw error;\n }\n }\n };\n\n wrappedFunction[SERIALIZE_WRAPPED] = true;\n wrappedFunction[SERIALIZE_METADATA] = originalMethod[SERIALIZE_METADATA];\n descriptor.value = wrappedFunction;\n }\n };\n};\n","import type { ZodType } from \"zod\";\nimport type { TSchema } from \"@sinclair/typebox\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { TypeBoxLoader } from \"../../validator/typebox_loader.js\";\nimport { ZodLoader } from \"../../validator/zod_loader.js\";\nimport type {\n CustomValidationError,\n ValidationOptions,\n} from \"./validate_types.js\";\nimport { AjvCompileParams } from \"../../ajv/ajv_types.js\";\n\n/**\n * Decorator to validate request data using Zod, TypeBox, or plain JSON schemas.\n * Each validate method injects a new parameter to the handler function with the validated data. Arguments are injected in the order of the validate methods.\n * Using this decorator will also update the Swagger documentation with the validated schema (except for the .all schema since there is no way to if using query strings or body).\n * @param options - Validation options including body, query, or all schemas\n * @warning If validation fails, a 400 error will be returned with the validation errors to the client.\n * @warning Only synchronous Zod schemas are supported. Async refinements or transforms will throw an error.\n * @example Zod Schema\n * ```ts\n * import { validate } from \"./validate.js\";\n * import { controller, post } from \"../handlers/post.js\";\n * import { Request } from \"../../server/http/request.js\";\n * import { Response } from \"../../server/http/response.js\";\n * import { z } from \"zod\";\n *\n * const PayloadSchema = z.object({\n * name: z.string(),\n * email: z.string().email(),\n * });\n *\n * @controller(\"/users\")\n * export class UserController {\n * @post(\"/\")\n * @validate.body(PayloadSchema)\n * async createUser(req: Request, res: Response, payload: z.infer<typeof PayloadSchema>) {\n * // payload is now validated and typed\n * const { name, email } = payload;\n * }\n * }\n * ```\n *\n * @example TypeBox Schema\n * ```ts\n * import { Type, Static } from \"@sinclair/typebox\";\n *\n * const PayloadSchema = Type.Object({\n * name: Type.String(),\n * email: Type.String({ format: \"email\" }),\n * });\n *\n * @post(\"/\")\n * @validate.body(PayloadSchema)\n * async createUser(req: Request, res: Response, payload: Static<typeof PayloadSchema>) {\n * const { name, email } = payload;\n * }\n * ```\n */\nconst validateDecorator = (\n options: ValidationOptions & { customError?: CustomValidationError },\n) => {\n // Schemas will be compiled lazily on first request via Request.compileAndValidate\n // This avoids compilation errors at decorator evaluation time\n\n return (target: any, propertyKey: string, descriptor: PropertyDescriptor) => {\n const originalMethod = descriptor.value;\n\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { middlewares: [], route: {} };\n }\n\n if (!meta.documentation) {\n meta.documentation = {};\n }\n\n if (options.body) {\n meta.documentation.requestBody = options.body;\n }\n\n if (options.query) {\n meta.documentation.query = options.query;\n }\n\n if (options.all) {\n meta.documentation.requestBody = options.body;\n meta.documentation.query = options.query;\n }\n\n MetadataStore.set(target, propertyKey, meta);\n\n descriptor.value = async function (...args: any[]) {\n const req = args[0] as Request;\n const res = args[1] as Response;\n\n try {\n let validatedBody: any = undefined;\n let validatedQuery: any = undefined;\n let validatedAll: any = undefined;\n\n if (options.body) {\n validatedBody = req.validate(options.body, options.safe);\n }\n\n if (options.query) {\n validatedQuery = req.validateQuery(options.query, options.safe);\n }\n\n if (options.all) {\n validatedAll = req.validateAll(options.all, options.safe);\n }\n\n const newArgs = [...args];\n if (validatedBody !== undefined) {\n newArgs.push(validatedBody);\n }\n if (validatedQuery !== undefined) {\n newArgs.push(validatedQuery);\n }\n if (validatedAll !== undefined) {\n newArgs.push(validatedAll);\n }\n\n return originalMethod.apply(this, newArgs);\n } catch (error) {\n const zod = await ZodLoader.load();\n const isZodError = error instanceof zod.ZodError;\n\n if (!isZodError) {\n throw error;\n }\n\n if (options.customError) {\n return res.status(options.customError.status || 400).json({\n received: req.body,\n schema: options.body,\n error,\n });\n }\n\n return res.badRequest(error);\n }\n };\n\n return descriptor;\n };\n};\n\n/**\n * Decorator to validate the query parameters against a Zod schema or OpenAPI schema\n * @param schema - The Zod schema or OpenAPI schema to validate the query parameters against\n * @returns The decorator function\n */\nvalidateDecorator.query = (\n schema: ZodType | AjvCompileParams[0],\n customError?: CustomValidationError,\n) => {\n return validateDecorator({ query: schema, customError });\n};\n\n/**\n * Decorator to validate the request body against a Zod schema\n * @param schema - The Zod schema to validate the request body against\n * @returns The decorator function\n */\nvalidateDecorator.body = (\n schema: ZodType | AjvCompileParams[0],\n customError?: CustomValidationError,\n) => {\n return validateDecorator({ body: schema, customError });\n};\n\n/**\n * Decorator to validate both the request body and query parameters against a Zod schema\n * @param schema - The Zod schema to validate both the request body and query parameters against\n * @returns The decorator function\n */\nvalidateDecorator.all = (\n schema: ZodType | AjvCompileParams[0],\n customError?: CustomValidationError,\n) => {\n return validateDecorator({ all: schema, customError });\n};\n\nexport const validate = validateDecorator;\n","import { logger } from \"../logger/logger.js\";\n\n/**\n * Base class for cron jobs with logger instance\n * @example\n * export default class MyCron extends BaseCron {\n * @cron(\"* * * * *\")\n * handle() {\n * this.logger.info(\"Running cron job\");\n * }\n * }\n */\nexport class BaseCron {\n protected readonly logger = logger.child({ scope: this.constructor.name });\n}\n","import { logger } from \"../logger/logger.js\";\n\n/**\n * Base class for MQTT handlers with logger instance\n * @example\n * declare module \"balda\" {\n * export interface BaseMqtt {\n * logger: Logger;\n * }\n * }\n *\n * export default class TemperatureHandler extends BaseMqtt {\n * @mqtt(\"home/temperature\")\n * handle(topic: string, message: Buffer) {\n * this.logger.info(\"Received temperature:\", message.toString());\n * }\n * }\n */\nexport class BaseMqtt {\n protected readonly logger = logger.child({ scope: this.constructor.name });\n}\n","import { glob } from \"glob\";\nimport type { IClientSubscribeOptions, MqttClient } from \"mqtt\";\nimport { BaldaError } from \"../errors/balda_error.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { SyncOrAsync } from \"../type_util.js\";\nimport type {\n MqttConnectionOptions,\n MqttHandler,\n MqttPublishOptions,\n MqttSubscription,\n MqttTopics,\n} from \"./mqtt.types.js\";\n\n/**\n * Parse MQTT message payload\n * @internal\n * Attempts to parse in order: JSON object -> string -> Buffer\n */\nconst parseMessage = (\n message: Buffer,\n): Buffer | Record<string, any> | string => {\n if (!Buffer.isBuffer(message)) {\n return message;\n }\n\n const stringValue = message.toString();\n\n if (!stringValue.length) {\n return stringValue;\n }\n\n try {\n const parsed = JSON.parse(stringValue);\n if (typeof parsed === \"object\" && parsed !== null) {\n return parsed;\n }\n return stringValue;\n } catch {\n return stringValue;\n }\n};\n\nexport class MqttService {\n static subscriptions: MqttSubscription<MqttTopics>[] = [];\n static client: MqttClient | null = null;\n static connectionOptions: MqttConnectionOptions = {};\n\n /**\n * @description Register an MQTT subscription handler.\n * @internal\n * @example\n * MqttService.register('test', 'home/temperature', (topic, message) => {\n * console.log('Received message:', message.toString());\n * }, { qos: 1 });\n */\n static register<T extends MqttTopics>(\n name: string,\n topic: keyof T,\n handler: MqttHandler<T>,\n options?: IClientSubscribeOptions,\n ): void {\n this.subscriptions.push({\n name,\n topic: topic as never,\n handler: handler as unknown as MqttHandler<MqttTopics>,\n options,\n });\n }\n\n /**\n * @description Connect to the MQTT broker and subscribe to all registered topics.\n */\n static async connect(\n connectionOptions: MqttConnectionOptions = {},\n ): Promise<void> {\n const mqttModule = await import(\"mqtt\").catch(() => {\n throw new BaldaError(\n \"mqtt not installed as a dependency, it is required in order to use MQTT subscriptions with the @mqtt decorator\",\n );\n });\n\n this.connectionOptions = connectionOptions;\n\n logger.info(\"Starting MQTT client\");\n if (!this.subscriptions.length) {\n logger.info(\"No MQTT subscriptions to register\");\n }\n\n const {\n host = \"localhost\",\n port = 1883,\n protocol = \"mqtt\",\n ...otherOptions\n } = connectionOptions;\n\n const brokerUrl = `${protocol}://${host}:${port}`;\n this.client = await mqttModule.connectAsync(brokerUrl, otherOptions);\n\n logger.info(\"MQTT client connected\");\n\n // Set up event handlers\n this.client.on(\"error\", async (error) => {\n await this.globalErrorHandler(error);\n });\n\n this.client.on(\"message\", (topic, message) => {\n this.handleMessage(topic, message);\n });\n\n this.client.on(\"disconnect\", () => {\n logger.info(\"MQTT client disconnected\");\n });\n\n this.client.on(\"reconnect\", async () => {\n await this.globalErrorHandler(new Error(\"MQTT client reconnecting\"));\n });\n\n // Subscribe to all registered topics (client is already connected)\n this.subscribeToTopics();\n }\n\n /**\n * @description Subscribe to all registered topics.\n * @internal\n */\n private static subscribeToTopics() {\n if (!this.client) {\n return;\n }\n\n for (const { name, topic, options } of this.subscriptions) {\n logger.info(`Subscribing to MQTT topic: ${topic} (${name})`);\n this.client.subscribe(topic, options || {}, (error) => {\n if (error) {\n logger.error(\n `Failed to subscribe to topic ${topic}: ${error.message}`,\n );\n return;\n }\n logger.info(`Successfully subscribed to topic: ${topic}`);\n });\n }\n }\n\n /**\n * @description Handle incoming MQTT messages.\n * @internal\n */\n private static async handleMessage(topic: string | never, message: Buffer) {\n const matchingSubscriptions = this.subscriptions.filter((sub) => {\n if (sub.topic === topic) {\n return true;\n }\n\n if (!topic || typeof topic !== \"string\") {\n return false;\n }\n\n const topicPattern = (sub.topic as string)\n .replace(/\\+/g, \"[^/]+\")\n .replace(/#$/, \".*\");\n const regex = new RegExp(`^${topicPattern}$`);\n return regex.test(topic);\n });\n\n for (const subscription of matchingSubscriptions) {\n try {\n await subscription.handler(\n topic as keyof MqttTopics,\n message as unknown as MqttTopics[keyof MqttTopics],\n );\n } catch (error) {\n logger.error(\n `Error handling MQTT message for topic ${topic} in ${subscription.name}`,\n );\n this.globalErrorHandler(error as Error);\n }\n }\n }\n\n /**\n * @description Main error handler for MQTT operations. You can write your own error handler by overriding this static method for example with sentry.\n */\n static globalErrorHandler(error: Error): SyncOrAsync<void> {\n logger.error(error);\n }\n\n static setOnDisconnectHandler(handler: () => void) {\n this.client?.on(\"disconnect\", handler);\n }\n\n static setOnReconnectHandler(handler: () => void) {\n this.client?.on(\"reconnect\", handler);\n }\n\n /**\n * @description Import all MQTT handlers from specified patterns\n */\n static async massiveImportMqttHandlers(mqttHandlerPatterns: string[]) {\n const allFiles: string[] = [];\n\n for (const pattern of mqttHandlerPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing MQTT handler: ${file}`);\n logger.error(error);\n });\n }),\n );\n }\n\n /**\n * Create a decorator to subscribe to an MQTT topic\n * Messages are automatically parsed: Buffer -> JSON object (if valid) -> string\n * Supports MQTT wildcards: + (single level) and # (multi level)\n *\n * Handler signature can be either:\n * - `handler(message: T)` - just the message (topic omitted)\n * - `handler(topic: string, message: T)` - include topic for wildcards or logging\n *\n * @example\n * @mqtt.handler('home/temperature', { qos: 1 })\n * handleTemperature(message: { value: number; unit: string }) {\n * console.log('Temperature:', message.value, message.unit);\n * }\n *\n * @example With topic parameter (useful for wildcards)\n * @mqtt.handler('home/+/temperature', { qos: 1 })\n * handleRoomTemperature(topic: string, message: string) {\n * const room = topic.split('/')[1];\n * console.log(`${room} temperature:`, message);\n * }\n */\n subscribe<T extends MqttTopics = MqttTopics>(\n topic: keyof T,\n options?: IClientSubscribeOptions,\n ) {\n return function (\n target: any,\n propertyKey: string,\n descriptor: PropertyDescriptor,\n ): PropertyDescriptor {\n const originalMethod = descriptor.value;\n\n if (!originalMethod) {\n return descriptor;\n }\n\n const wrappedMethod = async (\n msgTopic: string,\n rawMessage: Buffer,\n ): Promise<void> => {\n const instance = new target.constructor();\n const parsedMessage = parseMessage(rawMessage);\n\n if (originalMethod.length === 1) {\n await originalMethod.call(instance, parsedMessage);\n return;\n }\n\n await originalMethod.call(instance, msgTopic, parsedMessage);\n };\n\n MqttService.register(\n `${target.constructor.name}.${propertyKey}`,\n topic,\n wrappedMethod as unknown as MqttHandler<T>,\n options,\n );\n\n return descriptor;\n };\n }\n\n /**\n * @description Publish a message to an MQTT topic\n * @param topic - The topic to publish to\n * @param message - The message payload (string, Buffer, or object that will be JSON stringified)\n * @param options - Publish options (qos, retain, etc.)\n * @throws BaldaError if the MQTT client is not connected or is not installed as a dependency\n */\n async publish<T extends MqttTopics>(\n topic: keyof T,\n message: T[keyof T],\n options?: MqttPublishOptions,\n ): Promise<void> {\n if (!MqttService.client) {\n throw new BaldaError(\n \"MQTT client is not connected. Call MqttService.connect() first.\",\n );\n }\n\n if (!MqttService.client.connected) {\n throw new BaldaError(\n \"MQTT client is not connected. Call MqttService.connect() first.\",\n );\n }\n\n let payload: string | Buffer;\n\n if (Buffer.isBuffer(message)) {\n payload = message;\n } else if (typeof message === \"object\") {\n payload = JSON.stringify(message);\n } else {\n payload = String(message);\n }\n\n try {\n await MqttService.client.publishAsync(\n topic as string,\n payload,\n options || {},\n );\n logger.debug(`Published message to topic: ${String(topic)}`);\n } catch (error) {\n logger.error(\n `Failed to publish to topic ${String(topic)}: ${(error as Error).message}`,\n );\n throw error;\n }\n }\n\n /**\n * @description Disconnect the MQTT client gracefully\n */\n static async disconnect() {\n if (!this.client) {\n return;\n }\n\n return new Promise<void>((resolve) => {\n this.client?.end(false, {}, () => {\n logger.info(\"MQTT client disconnected gracefully\");\n this.client = null;\n resolve();\n });\n });\n }\n}\n\nexport const setMqttGlobalErrorHandler = (\n globalErrorHandler: (\n ...args: Parameters<(typeof MqttService)[\"globalErrorHandler\"]>\n ) => void,\n) => {\n MqttService.globalErrorHandler = globalErrorHandler.bind(MqttService);\n};\n\n/**\n * Singleton instance for publishing MQTT messages\n * @example\n * import { mqtt } from 'balda';\n *\n * await mqtt.publish('home/temperature', { value: 23.5, unit: 'C' }, { qos: 1 });\n */\nexport const mqtt = new MqttService();\n","import { logger } from \"../logger/logger.js\";\n\n/**\n * Base class for queue handlers with logger instance\n * @example\n * const myQueue = bullmqQueue<MyPayload>(\"my-topic\");\n *\n * export default class MyQueue extends BaseQueue {\n * @myQueue.subscribe()\n * async handle(payload: MyPayload) {\n * this.logger.info({ payload }, \"Processing queue message\");\n * }\n * }\n */\nexport class BaseQueue {\n protected readonly logger = logger.child({ scope: this.constructor.name });\n}\n","import type { Job, Queue } from \"bullmq\";\nimport { SyncOrAsync } from \"../../../type_util.js\";\n\n/**\n * Options for BullMQ configuration\n * @param options - The options for BullMQ\n * @param errorHandler - Custom error handler that will be triggered when a job fails, for logging or debug purposes\n */\nexport type BullMQConfigurationOptions = ConstructorParameters<\n typeof Queue\n>[1] & { errorHandler?: (job: Job, error: Error) => SyncOrAsync };\n\nexport class BullMQConfiguration {\n static options: BullMQConfigurationOptions = {\n connection: {},\n };\n}\n\n/**\n * Define globally custom BullMQ configuration\n * @param options - The BullMQ configuration options\n */\nexport const defineBullMQConfiguration = (\n options: BullMQConfigurationOptions,\n): void => {\n BullMQConfiguration.options = options ?? {\n connection: {},\n };\n};\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class ClientNotFoundError extends BaldaError {\n constructor(...libraries: string[]) {\n super(\n `Library not installed: ${libraries.join(\", \")}, try run npm install ${libraries.join(\" \")}`,\n );\n }\n}\n","class NativeCrypto {\n randomUUID(): string {\n return crypto.randomUUID();\n }\n}\n\nexport const nativeCrypto = new NativeCrypto();\n","import type { Job, Queue, Worker } from \"bullmq\";\nimport type {\n BullMQQueueOptions,\n GenericPubSub,\n PublishOptions,\n} from \"../../queue_types.js\";\nimport { BullMQConfiguration } from \"./bullmq_configuration.js\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { nativeCrypto } from \"../../../runtime/native_crypto.js\";\n\nexport class BullMQPubSub implements GenericPubSub {\n private queues: Map<string, Queue> = new Map();\n private workers: Map<string, Worker> = new Map();\n declare private bullmqClient: typeof import(\"bullmq\");\n\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"bullmq\">,\n ): Promise<{ id: string }> {\n const queue = await this.getQueue(topic);\n const jobId = nativeCrypto.randomUUID();\n await queue.add(topic, payload, {\n jobId: jobId,\n ...BullMQConfiguration.options?.defaultJobOptions,\n ...options,\n });\n\n return { id: jobId };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n if (this.workers.has(topic)) {\n throw new Error(`[BullMQ] Already subscribed to topic \"${topic}\"`);\n }\n\n const { errorHandler, ...rest } = BullMQConfiguration.options ?? {};\n const bullmqClient = await this.getBullMQClient();\n const worker = new bullmqClient.Worker(\n topic,\n async (job: Job) => {\n try {\n await handler(job.data);\n } catch (error) {\n (await errorHandler?.(job, error as Error)) ?? Promise.reject(error);\n }\n },\n {\n ...rest,\n },\n );\n\n this.workers.set(topic, worker);\n }\n\n private async getQueue(topic: string): Promise<Queue> {\n if (!this.queues.has(topic)) {\n const bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n\n const queue = new bullmqClient.Queue(topic, {\n ...(BullMQConfiguration.options || { connection: {} }),\n });\n\n this.queues.set(topic, queue);\n }\n\n return this.queues.get(topic)!;\n }\n\n private async getBullMQClient(): Promise<typeof import(\"bullmq\")> {\n if (!this.bullmqClient) {\n this.bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n }\n\n return this.bullmqClient;\n }\n\n // Methods for TypedQueue with per-queue config\n async publishWithConfig<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"bullmq\">,\n queueConfig?: BullMQQueueOptions,\n ): Promise<{ id: string }> {\n const queue = await this.getQueueWithConfig(topic, queueConfig);\n const jobId = nativeCrypto.randomUUID();\n\n // Merge global default job options with queue-specific and call-time options\n const mergedOptions = {\n jobId,\n ...BullMQConfiguration.options?.defaultJobOptions,\n ...queueConfig?.defaultJobOptions,\n ...options,\n };\n\n await queue.add(topic, payload, mergedOptions);\n return { id: jobId };\n }\n\n async subscribeWithConfig<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig?: BullMQQueueOptions,\n ): Promise<void> {\n const workerKey = this.getWorkerKey(topic, queueConfig);\n if (this.workers.has(workerKey)) {\n throw new Error(`[BullMQ] Already subscribed to topic \"${topic}\"`);\n }\n\n const globalConfig = BullMQConfiguration.options ?? {};\n const { errorHandler } = globalConfig;\n const bullmqClient = await this.getBullMQClient();\n\n // Merge global config with queue-specific config\n const workerOptions = {\n ...globalConfig,\n ...queueConfig,\n };\n\n // Remove non-worker options\n delete (workerOptions as Record<string, unknown>).errorHandler;\n delete (workerOptions as Record<string, unknown>).defaultJobOptions;\n\n const worker = new bullmqClient.Worker(\n topic,\n async (job: Job) => {\n try {\n await handler(job.data);\n } catch (error) {\n (await errorHandler?.(job, error as Error)) ?? Promise.reject(error);\n }\n },\n workerOptions,\n );\n\n this.workers.set(workerKey, worker);\n }\n\n private async getQueueWithConfig(\n topic: string,\n queueConfig?: BullMQQueueOptions,\n ): Promise<Queue> {\n const queueKey = this.getQueueKey(topic, queueConfig);\n\n if (!this.queues.has(queueKey)) {\n const bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n\n // Merge global config with queue-specific config\n const mergedConfig = {\n ...(BullMQConfiguration.options || { connection: {} }),\n ...queueConfig,\n };\n\n const queue = new bullmqClient.Queue(topic, mergedConfig);\n this.queues.set(queueKey, queue);\n }\n\n return this.queues.get(queueKey)!;\n }\n\n private getQueueKey(topic: string, queueConfig?: BullMQQueueOptions): string {\n // Create a unique key based on topic and connection config\n if (queueConfig?.connection) {\n return `${topic}:${JSON.stringify(queueConfig.connection)}`;\n }\n return topic;\n }\n\n private getWorkerKey(\n topic: string,\n queueConfig?: BullMQQueueOptions,\n ): string {\n return this.getQueueKey(topic, queueConfig);\n }\n}\n","import type { SyncOrAsync } from \"../../../type_util.js\";\n\nexport type PGBossConfigurationOptions = {\n connectionString?: string;\n boss?: unknown;\n errorHandler?: (error: Error) => SyncOrAsync;\n};\n\nexport class PGBossConfiguration {\n static options: PGBossConfigurationOptions = {};\n}\n\nexport const definePGBossConfiguration = (\n options: PGBossConfigurationOptions,\n): void => {\n PGBossConfiguration.options = options ?? {};\n};\n","import type { PgBoss } from \"pg-boss\";\nimport type { Job } from \"pg-boss\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { PGBossConfiguration } from \"./pgboss_configuration.js\";\nimport type {\n GenericPubSub,\n PGBossQueueOptions,\n PGBossSendOptions,\n PublishOptions,\n} from \"../../queue_types.js\";\n\nexport class PGBossPubSub implements GenericPubSub {\n declare private boss: PgBoss;\n private createdQueues: Set<string> = new Set();\n\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"pgboss\">,\n ): Promise<{ id: string }> {\n const boss = await this.getBoss();\n await this.ensureQueue(topic);\n const sendOptions = (options || {}) as PGBossSendOptions;\n const id = await boss.send(topic, payload as object, sendOptions);\n return { id: String(id ?? \"\") };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n const boss = await this.getBoss();\n await this.ensureQueue(topic);\n const options = PGBossConfiguration.options;\n if (options.errorHandler) {\n boss.on(\"error\", options.errorHandler);\n }\n\n await boss.work(topic, async (job: Job<unknown> | Job<unknown>[]) => {\n const jobs = Array.isArray(job) ? job : [job];\n for (const j of jobs) {\n await handler(j.data as TPayload);\n }\n });\n }\n\n private async getBoss(): Promise<PgBoss> {\n if (this.boss) {\n return this.boss;\n }\n\n const mod = await import(\"pg-boss\").catch(() => {\n throw new ClientNotFoundError(\"pg-boss\", \"pg\");\n });\n\n type PGBossCtor = new (config?: unknown) => PgBoss;\n const maybeDefault = (mod.PgBoss as { default?: PGBossCtor }).default;\n const Ctor: PGBossCtor =\n maybeDefault ?? (mod.PgBoss as unknown as PGBossCtor);\n\n const { connectionString, boss } = PGBossConfiguration.options;\n const arg = connectionString ?? boss;\n const instance = new Ctor(arg);\n\n if (PGBossConfiguration.options?.errorHandler) {\n instance.on(\"error\", PGBossConfiguration.options.errorHandler);\n }\n\n await instance.start();\n this.boss = instance;\n return this.boss;\n }\n\n private async ensureQueue(topic: string): Promise<void> {\n if (this.createdQueues.has(topic)) {\n return;\n }\n\n const pgBoss = await this.getBoss();\n if (typeof pgBoss.createQueue === \"function\") {\n await pgBoss.createQueue(topic);\n }\n\n this.createdQueues.add(topic);\n }\n\n // Methods for TypedQueue with per-queue config\n async publishWithConfig<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"pgboss\">,\n queueConfig?: PGBossQueueOptions,\n ): Promise<{ id: string }> {\n const boss = await this.getBossWithConfig(queueConfig);\n await this.ensureQueueWithBoss(topic, boss);\n const sendOptions = (options || {}) as PGBossSendOptions;\n const id = await boss.send(topic, payload as object, sendOptions);\n return { id: String(id ?? \"\") };\n }\n\n async subscribeWithConfig<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig?: PGBossQueueOptions,\n ): Promise<void> {\n const boss = await this.getBossWithConfig(queueConfig);\n await this.ensureQueueWithBoss(topic, boss);\n const globalOptions = PGBossConfiguration.options;\n if (globalOptions.errorHandler) {\n boss.on(\"error\", globalOptions.errorHandler);\n }\n\n await boss.work(topic, async (job: Job<unknown> | Job<unknown>[]) => {\n const jobs = Array.isArray(job) ? job : [job];\n for (const j of jobs) {\n await handler(j.data as TPayload);\n }\n });\n }\n\n private bossInstances: Map<string, PgBoss> = new Map();\n\n private async getBossWithConfig(\n queueConfig?: PGBossQueueOptions,\n ): Promise<PgBoss> {\n // If no custom config, use the default boss\n if (!queueConfig?.connectionString) {\n return this.getBoss();\n }\n\n const configKey = queueConfig.connectionString;\n if (this.bossInstances.has(configKey)) {\n return this.bossInstances.get(configKey)!;\n }\n\n const mod = await import(\"pg-boss\").catch(() => {\n throw new ClientNotFoundError(\"pg-boss\", \"pg\");\n });\n\n type PGBossCtor = new (config?: unknown) => PgBoss;\n const maybeDefault = (mod.PgBoss as { default?: PGBossCtor }).default;\n const Ctor: PGBossCtor =\n maybeDefault ?? (mod.PgBoss as unknown as PGBossCtor);\n\n const instance = new Ctor(queueConfig.connectionString);\n\n if (PGBossConfiguration.options?.errorHandler) {\n instance.on(\"error\", PGBossConfiguration.options.errorHandler);\n }\n\n await instance.start();\n this.bossInstances.set(configKey, instance);\n return instance;\n }\n\n private async ensureQueueWithBoss(\n topic: string,\n boss: PgBoss,\n ): Promise<void> {\n if (this.createdQueues.has(topic)) {\n return;\n }\n\n if (typeof boss.createQueue === \"function\") {\n await boss.createQueue(topic);\n }\n\n this.createdQueues.add(topic);\n }\n}\n","import type { SQSClientConfig } from \"@aws-sdk/client-sqs\";\nimport type { SyncOrAsync } from \"../../../type_util.js\";\n\nexport type SQSConfigurationOptions = {\n client?: SQSClientConfig;\n consumer?: {\n batchSize?: number;\n visibilityTimeout?: number;\n waitTimeSeconds?: number;\n queueUrlMap: Record<string, string>;\n };\n errorHandler?: (error: Error) => SyncOrAsync;\n};\n\nexport class SQSConfiguration {\n static options: SQSConfigurationOptions = {};\n}\n\nexport const defineSQSConfiguration = (\n options: SQSConfigurationOptions,\n): void => {\n SQSConfiguration.options = options ?? {};\n};\n","import type { Message, SQSClient, SQSClientConfig } from \"@aws-sdk/client-sqs\";\nimport type { Consumer, ConsumerOptions } from \"sqs-consumer\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { SQSConfiguration } from \"./sqs_configuration.js\";\nimport type {\n GenericPubSub,\n PublishOptions,\n SQSPublishOptions,\n SQSQueueOptions,\n} from \"../../queue_types.js\";\n\nexport class SQSPubSub implements GenericPubSub {\n private consumers: Map<string, Consumer> = new Map();\n private client?: SQSClient;\n declare private sqsLib: typeof import(\"@aws-sdk/client-sqs\");\n declare private sqsConsumerLib: typeof import(\"sqs-consumer\");\n\n // @ts-ignore\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"sqs\">,\n ): Promise<{ id: string }> {\n const { ...rest } = options ?? {};\n\n const sqs = await this.getClient();\n const { SendMessageCommand } = await this.getSqsLib();\n const queueUrl = await this.resolveQueueUrl(topic);\n if (!queueUrl) {\n throw new Error(`[SQS] Queue url not configured for topic \"${topic}\"`);\n }\n\n const command = new SendMessageCommand({\n MessageBody: JSON.stringify(payload),\n MessageAttributes: {\n topic: { DataType: \"String\", StringValue: topic },\n },\n ...(rest as SQSPublishOptions),\n QueueUrl: queueUrl,\n });\n\n const response = await sqs.send(command);\n return { id: response.MessageId ?? \"\" };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n if (this.consumers.has(topic)) {\n throw new Error(`[SQS] Already subscribed to topic \"${topic}\"`);\n }\n\n const options = SQSConfiguration.options;\n const consumerModule = await this.getSqsConsumerLib();\n const consumerOptions: ConsumerOptions & { queueUrl: string } = {\n ...(options.consumer || {}),\n sqs: await this.getClient(),\n queueUrl: await this.resolveQueueUrl(topic),\n handleMessage: async (message: Message) => {\n const payload = JSON.parse(message.Body || \"{}\");\n await handler(payload);\n },\n } as ConsumerOptions & { queueUrl: string };\n\n const consumer = consumerModule.Consumer.create(consumerOptions);\n const errorHandler = options.errorHandler;\n if (errorHandler) {\n consumer.on(\"error\", errorHandler);\n consumer.on(\"processing_error\", errorHandler);\n }\n\n consumer.start();\n this.consumers.set(topic, consumer);\n }\n\n private async getClient(): Promise<SQSClient> {\n if (this.client) {\n return this.client;\n }\n\n const { SQSClient } = await this.getSqsLib();\n const config: SQSClientConfig | undefined = SQSConfiguration.options.client;\n this.client = new SQSClient(config ?? {});\n return this.client;\n }\n\n private async getSqsLib(): Promise<typeof import(\"@aws-sdk/client-sqs\")> {\n if (!this.sqsLib) {\n this.sqsLib = await import(\"@aws-sdk/client-sqs\").catch(() => {\n throw new ClientNotFoundError(\"@aws-sdk/client-sqs\", \"sqs-consumer\");\n });\n }\n\n return this.sqsLib;\n }\n\n private async getSqsConsumerLib(): Promise<typeof import(\"sqs-consumer\")> {\n if (!this.sqsConsumerLib) {\n this.sqsConsumerLib = await import(\"sqs-consumer\").catch(() => {\n throw new ClientNotFoundError(\"sqs-consumer\");\n });\n }\n\n return this.sqsConsumerLib;\n }\n\n private async resolveQueueUrl(topic: string): Promise<string> {\n const attrs = SQSConfiguration.options.consumer;\n const url = (attrs as Record<string, unknown> | undefined)?.queueUrlMap as\n | Record<string, string>\n | undefined;\n if (!url?.[topic]) {\n throw new Error(`[SQS] Queue url not configured for topic \"${topic}\"`);\n }\n return url[topic];\n }\n\n // Methods for TypedQueue with per-queue config\n async publishWithConfig<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"sqs\">,\n queueConfig?: SQSQueueOptions,\n ): Promise<{ id: string }> {\n const { ...rest } = options ?? {};\n\n const sqs = await this.getClientWithConfig(queueConfig?.client);\n const { SendMessageCommand } = await this.getSqsLib();\n\n // Use queueConfig.queueUrl if provided, otherwise fall back to global config\n const queueUrl =\n queueConfig?.queueUrl ?? (await this.resolveQueueUrl(topic));\n\n const command = new SendMessageCommand({\n MessageBody: JSON.stringify(payload),\n MessageAttributes: {\n topic: { DataType: \"String\", StringValue: topic },\n },\n ...(rest as SQSPublishOptions),\n QueueUrl: queueUrl,\n });\n\n const response = await sqs.send(command);\n return { id: response.MessageId ?? \"\" };\n }\n\n async subscribeWithConfig<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig?: SQSQueueOptions,\n ): Promise<void> {\n if (this.consumers.has(topic)) {\n throw new Error(`[SQS] Already subscribed to topic \"${topic}\"`);\n }\n\n const globalOptions = SQSConfiguration.options;\n const consumerModule = await this.getSqsConsumerLib();\n\n // Use queueConfig.queueUrl if provided, otherwise fall back to global config\n const queueUrl =\n queueConfig?.queueUrl ?? (await this.resolveQueueUrl(topic));\n\n const consumerOptions: ConsumerOptions & { queueUrl: string } = {\n ...(globalOptions.consumer || {}),\n sqs: await this.getClientWithConfig(queueConfig?.client),\n queueUrl,\n handleMessage: async (message: Message) => {\n const payload = JSON.parse(message.Body || \"{}\");\n await handler(payload);\n },\n } as ConsumerOptions & { queueUrl: string };\n\n const consumer = consumerModule.Consumer.create(consumerOptions);\n const errorHandler = globalOptions.errorHandler;\n if (errorHandler) {\n consumer.on(\"error\", errorHandler);\n consumer.on(\"processing_error\", errorHandler);\n }\n\n consumer.start();\n this.consumers.set(topic, consumer);\n }\n\n private async getClientWithConfig(\n clientConfig?: SQSClientConfig,\n ): Promise<SQSClient> {\n // If custom client config is provided, create a new client\n if (clientConfig) {\n const { SQSClient } = await this.getSqsLib();\n return new SQSClient(clientConfig);\n }\n\n // Otherwise use the shared client\n return this.getClient();\n }\n}\n","import { BullMQPubSub } from \"./providers/bullmq/bullmq.js\";\nimport { PGBossPubSub } from \"./providers/pgboss/pgboss.js\";\nimport { SQSPubSub } from \"./providers/sqs/sqs.js\";\nimport type { GenericPubSub, QueueProviderKey } from \"./queue_types.js\";\n\nexport class QueueManager {\n static map: Map<QueueProviderKey, GenericPubSub> = new Map();\n\n static {\n this.map.set(\"bullmq\", new BullMQPubSub() as GenericPubSub<\"bullmq\">);\n this.map.set(\"sqs\", new SQSPubSub() as GenericPubSub<\"sqs\">);\n this.map.set(\"pgboss\", new PGBossPubSub() as GenericPubSub<\"pgboss\">);\n }\n\n static getProvider<P extends QueueProviderKey>(\n provider: P,\n ): GenericPubSub<P> {\n if (!this.map.has(provider)) {\n throw new Error(`[QueueSubscriber] Provider ${provider} not found`);\n }\n\n return this.map.get(provider)! as GenericPubSub<P>;\n }\n\n static setProvider(\n provider: QueueProviderKey,\n pubsub: GenericPubSub<QueueProviderKey>,\n ) {\n this.map.set(provider, pubsub);\n }\n}\n","import { defineBullMQConfiguration } from \"./providers/bullmq/bullmq_configuration.js\";\nimport type { CustomQueueConfiguration } from \"./providers/custom/custom.js\";\nimport { definePGBossConfiguration } from \"./providers/pgboss/pgboss_configuration.js\";\nimport { defineSQSConfiguration } from \"./providers/sqs/sqs_configuration.js\";\nimport { QueueManager } from \"./queue.js\";\nimport type { GenericPubSub, QueueProviderKey } from \"./queue_types.js\";\n\n/**\n * Main entry point to define the queue configuration, meant to be called only once in the application bootstrap\n * @bullmq - The BullMQ configuration options\n * @pgboss - The PGBoss configuration options\n * @sqs - The SQS configuration options\n * @string - The custom queue provider name with it's PubSub implementation\n * @example\n * defineQueueConfiguration({\n * bullmq: {\n * connection: {\n * host: \"127.0.0.1\",\n * password: \"root\",\n * username: \"default\",\n * db: 0,\n * },\n * },\n * pgboss: {\n * connectionString: \"postgres://root:root@localhost:5432/database\",\n * },\n * sqs: {\n * client: { region: \"us-east-1\" },\n * },\n * custom: new CustomPubSub(),\n * });\n * @example\n * defineQueueConfiguration({\n * custom: new CustomPubSub(),\n * });\n */\nexport const defineQueueConfiguration = (\n options: {\n bullmq?: Parameters<typeof defineBullMQConfiguration>[0];\n pgboss?: Parameters<typeof definePGBossConfiguration>[0];\n sqs?: Parameters<typeof defineSQSConfiguration>[0];\n } & {\n [key in Exclude<\n QueueProviderKey,\n \"bullmq\" | \"pgboss\" | \"sqs\"\n >]?: CustomQueueConfiguration;\n },\n): void => {\n const firstClassIntegrations = [\"bullmq\", \"pgboss\", \"sqs\"];\n if (options.bullmq) {\n defineBullMQConfiguration(options.bullmq);\n }\n if (options.pgboss) {\n definePGBossConfiguration(options.pgboss);\n }\n if (options.sqs) {\n defineSQSConfiguration(options.sqs);\n }\n\n for (const key of Object.keys(options)) {\n const provider = key as QueueProviderKey;\n if (!firstClassIntegrations.includes(provider)) {\n QueueManager.setProvider(\n provider,\n options[provider] as GenericPubSub<QueueProviderKey>,\n );\n }\n }\n};\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { QueueManager } from \"./queue.js\";\nimport type { BuiltInProviderKey, GenericPubSub } from \"./queue_types.js\";\n\ntype QueueHandler = (payload: unknown) => Promise<void>;\n\n// Built-in provider queue registration\ntype TypedQueueRegistration = {\n name: string;\n topic: string;\n handler: QueueHandler;\n provider: BuiltInProviderKey;\n queueOptions?: unknown;\n};\n\n// Custom provider queue registration\ntype CustomQueueRegistration = {\n name: string;\n topic: string;\n handler: QueueHandler;\n pubsub: GenericPubSub;\n};\n\nexport class QueueService {\n static typedQueueSubscribers: Map<string, TypedQueueRegistration> = new Map();\n static customQueueSubscribers: Map<string, CustomQueueRegistration> =\n new Map();\n\n /**\n * Factory function for creating handler instances.\n * Can be overridden to provide custom dependency injection.\n * @default Creates new instance using constructor\n */\n static instanceFactory: (ctor: Function) => object = (ctor) =>\n new (ctor as new () => object)();\n\n static registerTypedQueue(\n name: string,\n topic: string,\n handler: QueueHandler,\n provider: BuiltInProviderKey,\n queueOptions?: unknown,\n ): void {\n const key = `${provider}:${topic}:${name}`;\n if (this.typedQueueSubscribers.has(key)) {\n logger.warn(\n `Queue handler for ${key} already registered, overwriting previous handler`,\n );\n }\n\n this.typedQueueSubscribers.set(key, {\n name,\n topic,\n handler,\n provider,\n queueOptions,\n });\n }\n\n static registerCustomQueue(\n name: string,\n topic: string,\n handler: QueueHandler,\n pubsub: GenericPubSub,\n ): void {\n const key = `${pubsub.constructor.name}:${topic}:${name}`;\n if (this.customQueueSubscribers.has(key)) {\n logger.warn(\n `Custom queue handler for ${key} already registered, overwriting previous handler`,\n );\n }\n\n this.customQueueSubscribers.set(key, {\n name,\n topic,\n handler,\n pubsub,\n });\n }\n\n static async run() {\n logger.info(\"Subscribing queue handlers\");\n const hasTyped = this.typedQueueSubscribers.size > 0;\n const hasCustom = this.customQueueSubscribers.size > 0;\n\n if (!hasTyped && !hasCustom) {\n logger.info(\"No queue handlers to subscribe\");\n return;\n }\n\n // Subscribe typed queue handlers (built-in providers)\n for (const registration of this.typedQueueSubscribers.values()) {\n const { topic, handler, provider, queueOptions } = registration;\n logger.info(`Subscribing to queue: ${topic}`);\n\n const pubsub = QueueManager.getProvider(provider);\n\n // Use subscribeWithConfig if queueOptions are provided\n if (\n queueOptions &&\n \"subscribeWithConfig\" in pubsub &&\n typeof pubsub.subscribeWithConfig === \"function\"\n ) {\n await pubsub.subscribeWithConfig(topic, handler, queueOptions);\n } else {\n await (\n pubsub as typeof pubsub & {\n subscribe(\n topic: string,\n handler: (payload: unknown) => Promise<void>,\n ): Promise<void>;\n }\n ).subscribe(topic, handler);\n }\n }\n\n // Subscribe custom queue handlers\n for (const {\n topic,\n handler,\n pubsub,\n } of this.customQueueSubscribers.values()) {\n logger.info(`Subscribing to custom queue: ${topic}`);\n await pubsub.subscribe(topic, handler);\n }\n\n logger.info(\"Queue handlers subscribed\");\n }\n\n static async massiveImportQueues(\n queueHandlerPatterns: string[],\n options: { throwOnError?: boolean } = {},\n ) {\n const allFiles: string[] = [];\n\n for (const pattern of queueHandlerPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing queue handler: ${file}`);\n logger.error(error);\n if (options.throwOnError) {\n throw error;\n }\n });\n }),\n );\n }\n}\n","import type { BullMQPubSub } from \"./providers/bullmq/bullmq.js\";\nimport type { PGBossPubSub } from \"./providers/pgboss/pgboss.js\";\nimport type { SQSPubSub } from \"./providers/sqs/sqs.js\";\nimport { QueueManager } from \"./queue.js\";\nimport { QueueService } from \"./queue_service.js\";\nimport type {\n BuiltInProviderKey,\n BullMQQueueOptions,\n GenericPubSub,\n PGBossQueueOptions,\n PublishOptions,\n SQSQueueOptions,\n} from \"./queue_types.js\";\n\n// Queue options mapped to provider\ntype QueueOptionsForProvider<P extends BuiltInProviderKey> = P extends \"sqs\"\n ? SQSQueueOptions\n : P extends \"bullmq\"\n ? BullMQQueueOptions\n : P extends \"pgboss\"\n ? PGBossQueueOptions\n : never;\n\n// Provider instance mapped to key\ntype ProviderInstance<P extends BuiltInProviderKey> = P extends \"sqs\"\n ? SQSPubSub\n : P extends \"bullmq\"\n ? BullMQPubSub\n : P extends \"pgboss\"\n ? PGBossPubSub\n : never;\n\n// Type for PubSub with publishWithConfig method\ntype PubSubWithPublishConfig<\n TProvider extends BuiltInProviderKey,\n TPayload,\n> = ProviderInstance<TProvider> & {\n publishWithConfig: (\n topic: string,\n payload: TPayload,\n options: PublishOptions<TProvider> | undefined,\n queueConfig: QueueOptionsForProvider<TProvider>,\n ) => Promise<{ id: string }>;\n};\n\n// Type for PubSub with standard publish method\ntype PubSubWithPublish<\n TProvider extends BuiltInProviderKey,\n TPayload,\n> = ProviderInstance<TProvider> & {\n publish: (\n topic: string,\n payload: TPayload,\n options: PublishOptions<TProvider>,\n ) => Promise<{ id: string }>;\n};\n\n// Type for PubSub with subscribeWithConfig method\ntype PubSubWithSubscribeConfig<\n TProvider extends BuiltInProviderKey,\n TPayload,\n> = ProviderInstance<TProvider> & {\n subscribeWithConfig: (\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig: QueueOptionsForProvider<TProvider>,\n ) => Promise<void>;\n};\n\n// Type for PubSub with standard subscribe method\ntype PubSubWithSubscribe<\n TProvider extends BuiltInProviderKey,\n TPayload,\n> = ProviderInstance<TProvider> & {\n subscribe: (\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ) => Promise<void>;\n};\n\n// Instance cache for decorator handlers to avoid creating new instances on every message\nconst instanceCache = new WeakMap<Function, object>();\n\n/**\n * TypedQueue for built-in providers (sqs, bullmq, pgboss)\n */\nexport class TypedQueue<\n TPayload,\n TProvider extends BuiltInProviderKey = BuiltInProviderKey,\n> {\n constructor(\n public readonly topic: string,\n public readonly provider: TProvider,\n private readonly queueOptions?: QueueOptionsForProvider<TProvider>,\n ) {}\n\n async publish(\n payload: TPayload,\n options?: PublishOptions<TProvider>,\n ): Promise<{ id: string }> {\n const pubsub = QueueManager.getProvider(\n this.provider,\n ) as ProviderInstance<TProvider>;\n\n if (this.queueOptions) {\n // Use publishWithConfig when queue-specific options are provided\n return (\n pubsub as PubSubWithPublishConfig<TProvider, TPayload>\n ).publishWithConfig(this.topic, payload, options, this.queueOptions);\n }\n\n // Default: use standard publish\n return (pubsub as PubSubWithPublish<TProvider, TPayload>).publish(\n this.topic,\n payload,\n (options ?? {}) as PublishOptions<TProvider>,\n );\n }\n\n /**\n * Subscribe to the queue, to be used as a decorator on a class method\n * @example\n * ```ts\n * @queue.subscribe()\n * async handle(payload: TPayload) {\n * console.log(payload);\n * }\n * ```\n */\n subscribe(): MethodDecorator;\n /**\n * Subscribe to the queue with the given handler\n * @param handler - The handler function to subscribe to the queue\n * @returns A promise to subscribe to the queue\n * @example\n * ```ts\n * @queue.subscribe(async (payload: TPayload) => {\n * console.log(payload);\n * })\n * ```\n */\n subscribe(handler: (payload: TPayload) => Promise<void>): Promise<void>;\n subscribe(\n handler?: (payload: TPayload) => Promise<void>,\n ): MethodDecorator | Promise<void> {\n if (handler) {\n return this.subscribeWithCallback(handler);\n }\n return this.createSubscribeDecorator();\n }\n\n private createSubscribeDecorator(): MethodDecorator {\n const topic = this.topic;\n const provider = this.provider;\n const queueOptions = this.queueOptions;\n\n return function (\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value as (\n payload: TPayload,\n ) => Promise<void>;\n\n const wrappedHandler = async (payload: unknown) => {\n // Use instance cache to avoid creating new instances on every message\n let instance = instanceCache.get(target.constructor);\n if (!instance) {\n instance = QueueService.instanceFactory(target.constructor);\n instanceCache.set(target.constructor, instance);\n }\n return originalMethod.apply(instance, [payload as TPayload]);\n };\n\n QueueService.registerTypedQueue(\n `${target.constructor.name}.${String(propertyKey)}`,\n topic,\n wrappedHandler,\n provider,\n queueOptions,\n );\n\n return descriptor;\n };\n }\n\n private async subscribeWithCallback(\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n const pubsub = QueueManager.getProvider(\n this.provider,\n ) as ProviderInstance<TProvider>;\n\n if (this.queueOptions) {\n // Use subscribeWithConfig when queue-specific options are provided\n return (\n pubsub as PubSubWithSubscribeConfig<TProvider, TPayload>\n ).subscribeWithConfig(this.topic, handler, this.queueOptions);\n }\n\n // Default: use standard subscribe\n return (pubsub as PubSubWithSubscribe<TProvider, TPayload>).subscribe(\n this.topic,\n handler,\n );\n }\n}\n\n/**\n * CustomTypedQueue for user-defined custom providers\n */\nexport class CustomTypedQueue<TPayload, TOptions = Record<string, unknown>> {\n constructor(\n public readonly topic: string,\n private readonly pubsub: GenericPubSub<TPayload>,\n ) {}\n\n async publish(\n payload: TPayload,\n options?: TOptions,\n ): Promise<{ id: string }> {\n return this.pubsub.publish(\n this.topic,\n payload,\n options as Record<string, unknown>,\n );\n }\n\n // Overloaded subscribe signatures\n subscribe(): MethodDecorator;\n subscribe(handler: (payload: TPayload) => Promise<void>): Promise<void>;\n subscribe(\n handler?: (payload: TPayload) => Promise<void>,\n ): MethodDecorator | Promise<void> {\n if (handler) {\n return this.pubsub.subscribe(this.topic, handler);\n }\n return this.createSubscribeDecorator();\n }\n\n private createSubscribeDecorator(): MethodDecorator {\n const topic = this.topic;\n const pubsub = this.pubsub;\n\n return function (\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n ) {\n const originalMethod = descriptor.value as (\n payload: TPayload,\n ) => Promise<void>;\n\n const wrappedHandler = async (payload: unknown) => {\n // Use instance cache to avoid creating new instances on every message\n let instance = instanceCache.get(target.constructor);\n if (!instance) {\n instance = QueueService.instanceFactory(target.constructor);\n instanceCache.set(target.constructor, instance);\n }\n return originalMethod.apply(instance, [payload as TPayload]);\n };\n\n QueueService.registerCustomQueue(\n `${target.constructor.name}.${String(propertyKey)}`,\n topic,\n wrappedHandler,\n pubsub,\n );\n\n return descriptor;\n };\n }\n}\n","import { CustomTypedQueue, TypedQueue } from \"./typed_queue.js\";\nimport type {\n BullMQQueueOptions,\n GenericPubSub,\n PGBossQueueOptions,\n SQSQueueOptions,\n} from \"./queue_types.js\";\n\n/**\n * Create a typed SQS queue\n * @param topic - The queue topic name\n * @param options - SQS-specific options including queueUrl\n * @returns A TypedQueue instance for SQS\n *\n * @example\n * ```typescript\n * const userQueue = sqsQueue<{ userId: string }>('user-events', {\n * queueUrl: 'https://sqs.us-east-1.amazonaws.com/123456789/my-queue'\n * });\n *\n * // Publishing\n * await userQueue.publish({ userId: '123' });\n *\n * // Subscribing with decorator\n * class UserHandler {\n * @userQueue.subscribe()\n * async handle(payload: { userId: string }) {}\n * }\n *\n * // Subscribing with callback\n * await userQueue.subscribe(async (payload) => {\n * console.log(payload.userId);\n * });\n * ```\n */\nexport function sqsQueue<TPayload>(\n topic: string,\n options?: SQSQueueOptions,\n): TypedQueue<TPayload, \"sqs\"> {\n return new TypedQueue<TPayload, \"sqs\">(topic, \"sqs\", options);\n}\n\n/**\n * Create a typed BullMQ queue\n * @param topic - The queue topic name\n * @param options - BullMQ-specific options (connection, job options, etc.)\n * @returns A TypedQueue instance for BullMQ\n *\n * @example\n * ```typescript\n * const orderQueue = bullmqQueue<{ orderId: number }>('orders', {\n * connection: { host: 'localhost', port: 6379 }\n * });\n *\n * // Publishing\n * await orderQueue.publish({ orderId: 123 });\n *\n * // Subscribing with decorator\n * class OrderHandler {\n * @orderQueue.subscribe()\n * async handle(payload: { orderId: number }) {}\n * }\n * ```\n */\nexport function bullmqQueue<TPayload>(\n topic: string,\n options?: BullMQQueueOptions,\n): TypedQueue<TPayload, \"bullmq\"> {\n return new TypedQueue<TPayload, \"bullmq\">(topic, \"bullmq\", options);\n}\n\n/**\n * Create a typed PGBoss queue\n * @param topic - The queue topic name\n * @param options - PGBoss-specific options\n * @returns A TypedQueue instance for PGBoss\n *\n * @example\n * ```typescript\n * const notificationQueue = pgbossQueue<{ message: string }>('notifications');\n *\n * // Publishing\n * await notificationQueue.publish({ message: 'Hello!' });\n *\n * // Subscribing with decorator\n * class NotificationHandler {\n * @notificationQueue.subscribe()\n * async handle(payload: { message: string }) {}\n * }\n * ```\n */\nexport function pgbossQueue<TPayload>(\n topic: string,\n options?: PGBossQueueOptions,\n): TypedQueue<TPayload, \"pgboss\"> {\n return new TypedQueue<TPayload, \"pgboss\">(topic, \"pgboss\", options);\n}\n\n/**\n * Create a typed queue with a custom PubSub provider\n * @param topic - The queue topic name\n * @param pubsub - A custom PubSub implementation\n * @returns A CustomTypedQueue instance for the custom provider\n *\n * @example\n * ```typescript\n * const customProvider: GenericPubSub<MyPayload> = {\n * async publish(topic, payload, options) {\n * // Custom publish logic\n * return { id: 'custom-id' };\n * },\n * async subscribe(topic, handler) {\n * // Custom subscribe logic\n * }\n * };\n *\n * const customQueue = createQueue<{ data: string }>('custom-topic', customProvider);\n *\n * await customQueue.publish({ data: 'test' });\n * ```\n */\nexport function createQueue<TPayload, TOptions = Record<string, unknown>>(\n topic: string,\n pubsub: GenericPubSub<TPayload>,\n): CustomTypedQueue<TPayload, TOptions> {\n return new CustomTypedQueue<TPayload, TOptions>(topic, pubsub);\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeExit {\n exit(code: number): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.exit(code);\n case \"deno\":\n Deno.exit(code);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeExit = new NativeExit();\n","import { VALIDATION_ERROR_SYMBOL } from \"../decorators/command/arg.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { MetadataStore } from \"../metadata_store.js\";\nimport { nativeExit } from \"../runtime/native_exit.js\";\nimport {\n Argument,\n type FlagSchema,\n parseCliArgsAndFlags,\n} from \"./arg_parser.js\";\nimport type { CommandOptions } from \"./command_types.js\";\n\n/**\n * Base class for all cli commands.\n * @abstract\n */\nexport abstract class Command {\n /**\n * The name of the command.\n */\n static commandName: string = this.name;\n /**\n * package manager that called the command (e.g. npx, yarn, bun etc.)\n */\n static calledBy: string = this.name;\n /**\n * The description of the command.\n */\n static description: string = \"\";\n /**\n * The help text of the command.\n */\n static help: string[] | string = [];\n /**\n * The options of the command.\n */\n static options: CommandOptions = {\n keepAlive: false,\n };\n\n /**\n * Static arguments in order to be validated by decorators. Will be fetched in the command instance.\n */\n static args: Argument[] = parseCliArgsAndFlags().args.slice(1);\n\n /**\n * Static flags in order to be validated by decorators. Will be fetched in the command instance.\n */\n static flags: FlagSchema = parseCliArgsAndFlags().flags;\n\n static readonly logger = logger;\n\n /**\n * Main entry point for the command.\n */\n static handle(): Promise<void> {\n throw new Error(\n `Handle method not implemented in command class ${this.name}`,\n );\n }\n\n /**\n * Enhanced help flag handler with rich formatting and command information\n */\n static handleHelpFlag(flags: FlagSchema): void {\n const helpFlags = [\"-h\", \"--help\"];\n const hasHelpFlag = Object.keys(flags).some((flag) =>\n helpFlags.includes(flag),\n );\n\n if (!hasHelpFlag) {\n return;\n }\n\n const commandName = this.commandName;\n const description = this.description || \"No description available\";\n const helpText = this.help || [];\n const options = this.options;\n\n const helpOutput = this.generateHelpOutput(\n {\n name: commandName,\n description,\n helpText,\n options,\n args: this.args,\n flags: this.flags,\n },\n this,\n );\n\n console.log(helpOutput);\n nativeExit.exit(0);\n }\n\n private static readonly generateHelpOutput = (\n info: {\n name: string;\n description: string;\n helpText: string[] | string;\n options: CommandOptions;\n args: Argument[];\n flags: FlagSchema;\n },\n commandClass: any,\n ): string => {\n const { name, description, helpText, options, args, flags } = info;\n\n const colors = {\n title: \"\\x1b[1;36m\", // Bright cyan\n subtitle: \"\\x1b[1;33m\", // Bright yellow\n description: \"\\x1b[0;37m\", // White\n code: \"\\x1b[0;32m\", // Green\n flag: \"\\x1b[0;35m\", // Magenta\n reset: \"\\x1b[0m\", // Reset\n error: \"\\x1b[0;31m\", // Red\n success: \"\\x1b[0;32m\", // Green\n info: \"\\x1b[0;34m\", // Blue\n };\n\n const lines = [\n `${colors.title}${name}${colors.reset}`,\n `${colors.description}${description}${colors.reset}`,\n \"\",\n `${colors.subtitle}Usage:${colors.reset}`,\n ` ${colors.code}${name}${colors.reset} [options] [arguments]`,\n \"\",\n `${colors.subtitle}Options:${colors.reset}`,\n ` ${colors.flag}-h, --help${colors.reset} Show this help message`,\n \"\",\n `${colors.subtitle}Command Options:${colors.reset}`,\n ` ${colors.flag}keepAlive${colors.reset} ${(options?.keepAlive ?? false) ? colors.success + \"Enabled\" + colors.reset : colors.error + \"Disabled\" + colors.reset}`,\n \"\",\n ];\n\n if (helpText) {\n const helpLines = Array.isArray(helpText) ? helpText : [helpText];\n lines.push(`${colors.subtitle}Help:${colors.reset}`);\n helpLines.forEach((line) => {\n lines.push(` ${colors.description}${line}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n // Always show available arguments and flags from decorators\n const allMeta = MetadataStore.getAll(commandClass);\n const argsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"arg\",\n );\n const flagsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"flag\",\n );\n\n if (argsMeta.length) {\n lines.push(`${colors.subtitle}Available Arguments:${colors.reset}`);\n argsMeta.forEach((meta) => {\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.code}${meta.name}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n if (flagsMeta.length) {\n lines.push(`${colors.subtitle}Available Flags:${colors.reset}`);\n flagsMeta.forEach((meta) => {\n if (meta.aliases && !Array.isArray(meta.aliases)) {\n meta.aliases = [meta.aliases];\n }\n\n const aliases = meta.aliases.length\n ? ` ${colors.flag}(${meta.aliases.join(\", \")})${colors.reset}`\n : \"\";\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}--${meta.name}${aliases}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n // Show current context if arguments or flags were provided\n if ((args?.length ?? 0) > 0 || (flags && Object.keys(flags).length > 0)) {\n lines.push(`${colors.subtitle}Current Context:${colors.reset}`);\n\n if (args?.length) {\n lines.push(\n ` ${colors.info}Provided Arguments:${colors.reset} ${colors.code}${args.join(\" \")}${colors.reset}`,\n );\n }\n\n if (flags && Object.keys(flags).length > 0) {\n lines.push(` ${colors.info}Provided Flags:${colors.reset}`);\n Object.keys(flags).forEach((flagKey) => {\n const flagValue = flags[flagKey];\n const valueDisplay =\n flagValue !== undefined && flagValue !== null\n ? ` = ${colors.code}${flagValue}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}${flagKey}${colors.reset}${valueDisplay}`,\n );\n });\n }\n lines.push(\"\");\n }\n\n if (\n helpText &&\n (Array.isArray(helpText)\n ? helpText.some((line) => line.includes(\"example\"))\n : helpText.includes(\"example\"))\n ) {\n lines.push(`${colors.subtitle}Examples:${colors.reset}`);\n const examples = Array.isArray(helpText)\n ? helpText.filter((line) => line.includes(\"example\"))\n : [helpText.split(\"example\")[1].trim()];\n examples.forEach((example) => {\n lines.push(` ${colors.code}${example}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n };\n\n static readonly validateContext = (target: any): void => {\n const errorChain = Array.from(\n MetadataStore.get(target, VALIDATION_ERROR_SYMBOL) || [],\n ) as Array<{ type: string; name: string; message: string }>;\n\n if (errorChain.length) {\n const colors = {\n error: \"\\x1b[0;31m\", // Red\n title: \"\\x1b[1;31m\", // Bright red\n reset: \"\\x1b[0m\", // Reset\n info: \"\\x1b[0;34m\", // Blue\n code: \"\\x1b[0;32m\", // Green\n };\n\n console.error(`${colors.title}❌ Validation Errors:${colors.reset}`);\n console.error(\"\");\n\n errorChain.forEach((error, index) => {\n const errorNumber = `${colors.info}${index + 1}.${colors.reset}`;\n const errorType = `${colors.error}${error.type.toUpperCase()}${colors.reset}`;\n const errorName = `${colors.code}${error.name}${colors.reset}`;\n\n console.error(\n ` ${errorNumber} ${errorType} ${errorName}: ${colors.error}${error.message}${colors.reset}`,\n );\n });\n\n console.error(\"\");\n console.error(\n `${colors.info}💡 Tip: Use --help for usage information${colors.reset}`,\n );\n nativeExit.exit(1);\n }\n };\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeFs {\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n const bunFs = await import(\"fs\");\n return bunFs.existsSync(path);\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(\n path: string,\n options?: { encoding?: \"utf8\" },\n ): Promise<Uint8Array | string> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const data = await fs.readFile(path, {\n encoding: options?.encoding ?? null,\n });\n\n if (options?.encoding === \"utf8\") {\n return data as string;\n }\n\n return new Uint8Array(data as Buffer);\n case \"bun\":\n const arrayBuffer = Bun.file(path);\n if (options?.encoding === \"utf8\") {\n return arrayBuffer.text();\n }\n\n return new Uint8Array(await arrayBuffer.arrayBuffer());\n case \"deno\":\n const denoBuffer = await Deno.readFile(path);\n if (options?.encoding === \"utf8\") {\n return new TextDecoder().decode(denoBuffer);\n }\n\n return new Uint8Array(denoBuffer);\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunFs = await import(\"fs/promises\");\n const bunStats = await bunFs.stat(path);\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async streamFile(path: string): Promise<ReadableStream> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n const { Readable } = await import(\"stream\");\n const nodeStream = fs.createReadStream(path);\n return Readable.toWeb(nodeStream) as unknown as ReadableStream;\n\n case \"bun\":\n return Bun.file(path).stream();\n case \"deno\":\n const denoFile = await Deno.open(path);\n return denoFile.readable;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readdir(path: string): Promise<string[]> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"fs/promises\");\n return fs.readdir(path);\n case \"deno\":\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n\n return entries;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","import { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\n/**\n * Check if packages are already installed in node_modules\n */\nexport const getUninstalledPackages = async (\n packages: string[],\n): Promise<string[]> => {\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n\n if (!hasNodeModules) {\n return packages;\n }\n\n const uninstalled: string[] = [];\n\n for (const pkg of packages) {\n const pkgPath = nativePath.join(nodeModulesPath, pkg);\n const isInstalled = await nativeFs.exists(pkgPath);\n\n if (!isInstalled) {\n uninstalled.push(pkg);\n }\n }\n\n return uninstalled;\n};\n\nexport const getPackageManager = async (): Promise<\n [string, string, string]\n> => {\n const hasYarnLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"yarn.lock\"),\n );\n\n if (hasYarnLock) {\n return [\"yarn\", \"add\", \"-D\"];\n }\n\n const hasPnpmLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"pnpm-lock.yaml\"),\n );\n\n if (hasPnpmLock) {\n return [\"pnpm\", \"add\", \"-D\"];\n }\n\n const hasPackageLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"package-lock.json\"),\n );\n\n if (hasPackageLock) {\n return [\"npm\", \"install\", \"-D\"];\n }\n\n const hasBunLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"bun.lockb\"),\n );\n\n if (hasBunLock) {\n return [\"bun\", \"add\", \"-D\"];\n }\n\n const hasDenoLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"deno.lock\"),\n );\n\n if (hasDenoLock) {\n return [\"deno\", \"add\", \"-D\"];\n }\n\n return [\"npm\", \"install\", \"-D\"];\n};\n\n/**\n * Prompts user for confirmation and executes a command if approved\n * @param command - The command to execute\n * @param packageManager - The package manager name (e.g., \"npm\", \"yarn\")\n * @param dependencies - Array of dependencies to display\n * @param options - execSync options\n * @returns Promise that resolves to true if executed, false if skipped\n */\nexport const execWithPrompt = async (\n command: string,\n packageManager: string,\n dependencies: string[],\n options?: Parameters<typeof execSync>[1],\n areDevDeps: boolean = true,\n): Promise<boolean> => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const dependenciesList = dependencies.join(\", \");\n const prompt = `Do you want to install the following ${areDevDeps ? \"dev\" : \"\"} dependencies using ${packageManager}?\\n${dependenciesList}\\n(y/n): `;\n\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n\n if (answer.toLowerCase() === \"y\" || answer.toLowerCase() === \"yes\") {\n execSync(command, options);\n resolve(true);\n return;\n }\n\n resolve(false);\n });\n });\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\n\nexport default class BuildCommand extends Command {\n static commandName = \"build\";\n static description = \"Build the project for production, node.js only\";\n static help = [\n \"Build the project for production, node.js only\",\n \"It will create a production build of the project in the dist directory\",\n \"Must have a tsconfig.json file in the root of the project\",\n \"Must have esbuild installed as a dependency while running the command\",\n \"Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory\",\n \"Example: npx balda build -t ./tsconfig.json -a ./assets\",\n ];\n\n @flag({\n type: \"boolean\",\n aliases: [\"c\"],\n name: \"clear-dist\",\n required: false,\n defaultValue: false,\n description:\n \"Whether to clear the dist directory before building the project\",\n })\n static clearDist: boolean;\n\n @flag({\n type: \"string\",\n aliases: [\"e\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"./dist\",\n description: \"The path to the output directory, default is ./dist\",\n })\n static output: string;\n\n @flag({\n type: \"string\",\n aliases: [\"t\"],\n name: \"tsconfig\",\n required: false,\n defaultValue: \"./tsconfig.json\",\n description:\n \"The path to the tsconfig.json file, default is ./tsconfig.json\",\n })\n static tsconfig: string;\n\n @flag({\n type: \"string\",\n aliases: [\"a\"],\n name: \"assets\",\n required: false,\n description:\n \"The path to the assets directory that will be loaded in the production build\",\n })\n static assets: string;\n\n @flag({\n type: \"string\",\n aliases: [\"f\"],\n name: \"format\",\n required: false,\n defaultValue: \"esm\",\n description:\n \"The format to build the project, default is esm, can be 'esm' or 'cjs'\",\n })\n static format: \"esm\" | \"cjs\";\n\n @flag({\n type: \"string\",\n aliases: [\"p\"],\n name: \"packages\",\n required: false,\n defaultValue: \"external\",\n description:\n \"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'\",\n })\n static packages: \"external\" | \"bundle\";\n\n @flag({\n type: \"boolean\",\n aliases: [\"s\"],\n name: \"sourcemap\",\n required: false,\n defaultValue: true,\n description: \"Whether to generate sourcemaps or not, default is true\",\n })\n static sourcemap: boolean;\n\n static async handle(): Promise<void> {\n if (typeof process === undefined) {\n this.logger.error(\"Build command is only supported in node.js\");\n process.exit(1);\n }\n\n if (![\"esm\", \"cjs\"].includes(this.format)) {\n this.logger.error(\"Invalid format, must be 'esm' or 'cjs'\");\n process.exit(1);\n }\n\n if (![\"bundle\", \"external\"].includes(this.packages)) {\n this.logger.error(\"Invalid packages, must be 'bundle' or 'external'\");\n process.exit(1);\n }\n\n const isEsBuildInstalled = await import(\"esbuild\")\n .then((esbuild) => true)\n .catch(() => false);\n\n if (!isEsBuildInstalled) {\n const [packageManager, packageManagerCommand, devFlag] =\n await getPackageManager();\n\n const didInstall = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} esbuild ${devFlag}`,\n packageManager,\n [\"esbuild\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!didInstall) {\n this.logger.warn(\n `User chose to not continue with the installation of esbuild, exiting...`,\n );\n process.exit(0);\n }\n }\n\n const esbuild = await import(\"esbuild\").catch((err) => {\n this.logger.error(\n \"esbuild is not installed, please install it with `npm install -D esbuild` to use the build command\",\n );\n throw new Error(\"esbuild is not installed\");\n });\n\n const assetsDir = path.join(this.output, \"assets\");\n const plugins = [];\n if (this.assets) {\n const { copy } = await import(\"esbuild-plugin-copy\").catch((err) => {\n this.logger.error(\n \"esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command\",\n );\n throw new Error(\"esbuild-plugin-copy is not installed\");\n });\n\n if (!fs.existsSync(assetsDir)) {\n fs.mkdirSync(assetsDir, { recursive: true });\n }\n\n plugins.push(\n copy({\n assets: {\n from: this.assets,\n to: assetsDir,\n },\n }),\n );\n }\n\n if (this.clearDist && fs.existsSync(this.output)) {\n this.logger.info(`Clearing dist directory...`);\n fs.rmSync(this.output, { recursive: true });\n }\n\n this.logger.info(`Building project...`);\n const outFile = path.join(this.output, \"server.js\");\n const result = await esbuild.build({\n tsconfig: this.tsconfig,\n entryPoints: [this.entry],\n bundle: true,\n platform: \"node\",\n outfile: outFile,\n minify: true,\n sourcemap: this.sourcemap,\n plugins,\n format: this.format,\n packages: this.packages,\n });\n\n if (result.errors.length) {\n this.logger.error(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n errors: result.errors,\n },\n null,\n 2,\n ),\n );\n\n process.exit(1);\n }\n\n if (result.warnings.length) {\n this.logger.warn(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n warnings: result.warnings,\n },\n null,\n 2,\n ),\n );\n }\n\n this.logger.info(\n JSON.stringify(\n {\n message: `Project built successfully in ${outFile}`,\n output: outFile,\n assets: this.assets ? true : false,\n },\n null,\n 2,\n ),\n );\n process.exit(0);\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class GenerateCommand extends Command {\n static commandName = \"generate-command\";\n static description = \"Generate a new command in the specified path\";\n static help = [\n \"Generate a new cli command in the specified path\",\n \"Example: npx balda generate-command my-command -p src/commands\",\n ];\n\n /**\n * The path where the command will be generated\n */\n static path = \"src/commands\";\n\n @arg({\n description: \"The name of the command to generate\",\n required: true,\n })\n static name: string;\n\n static async handle(): Promise<void> {\n // Check if command already exists to prevent overriding built-in commands\n const existingCommand = commandRegistry.getCommand(this.name);\n if (existingCommand) {\n const isBuiltIn = commandRegistry.isBuiltInCommand(this.name);\n const commandType = isBuiltIn ? \"built-in\" : \"user-defined\";\n this.logger.error(\n { commandName: this.name, type: commandType },\n `Command \"${this.name}\" already exists as a ${commandType} command. Cannot override existing commands.`,\n );\n return;\n }\n\n const commandTemplate = this.getCommandTemplate();\n this.path = nativePath.join(this.path, `${this.name}.ts`);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(commandTemplate),\n );\n\n this.logger.info(\n `Command ${this.name} created successfully at ${this.path}`,\n );\n }\n\n static getCommandTemplate() {\n return `import { Command, CommandOptions } from \"balda\";\n\nexport default class extends Command {\n static commandName = \"${this.name}\";\n static description = \"Command description\";\n\n static options: CommandOptions = {\n // Define your command options here\n keepAlive: false,\n };\n\n static async handle(): Promise<void> {\n // Implement your command logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toDashCase, toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateControllerCommand extends Command {\n static commandName = \"generate-controller\";\n static description = \"Generate a new controller in the specified path\";\n static help = [\n \"Generate a new controller in the specified path\",\n \"Example: npx balda generate-controller user -p src/controllers\",\n ];\n\n @arg({\n description: \"The name of the controller to generate\",\n required: true,\n })\n static controllerName: string;\n\n @flag({\n description:\n \"The path to the controller to generate, default is src/controllers\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/controllers\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const controllerTemplate = this.getControllerTemplate();\n const fileName = `${this.controllerName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(controllerTemplate),\n );\n\n this.logger.info(\n `Controller ${this.controllerName} created successfully at ${this.path}`,\n );\n }\n\n static getControllerTemplate() {\n const className = toPascalCase(this.controllerName);\n return `import { controller, get, post, put, del, Request, Response } from \"balda\";\n\n@controller(\"/${toDashCase(this.controllerName)}\")\nexport default class ${className}Controller {\n @get(\"/\")\n async index(req: Request, res: Response) {\n return { message: \"List all ${this.controllerName.toLowerCase()}s\" };\n }\n\n @get(\"/:id\")\n async show(req: Request, res: Response) {\n return { message: \\`Get ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n\n @post(\"/\")\n async create(req: Request, res: Response) {\n return { message: \\`Create ${this.controllerName.toLowerCase()}\\`, data: req.body };\n }\n\n @put(\"/:id\")\n async update(req: Request, res: Response) {\n return { message: \\`Update ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\`, data: req.body };\n }\n\n @del(\"/:id\")\n async destroy(req: Request, res: Response) {\n return { message: \\`Delete ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateCron extends Command {\n static commandName = \"generate-cron\";\n static description = \"Generate a new cron job in the specified path\";\n static help = [\n \"Generate a new cron job in the specified path\",\n \"Example: npx balda generate-cron my-cron -p src/cron\",\n ];\n\n @arg({\n description: \"The name of the cron job file to generate\",\n required: true,\n })\n static fileName: string;\n\n @flag({\n description: \"The path to the cron job to generate, default is src/cron\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/cron\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const cronTemplate = this.getCronTemplate();\n this.path = nativePath.join(this.path, `${this.fileName}.ts`);\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(cronTemplate));\n\n this.logger.info(\n `Cron job ${this.fileName} created successfully at ${this.path}`,\n );\n }\n\n static getCronTemplate() {\n return `import { BaseCron, cron } from \"balda\";\n\nexport default class extends BaseCron {\n @cron(\"* * * * *\")\n handle() {\n this.logger.info(\"Running cron job\");\n // Implement your cron job logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMiddlewareCommand extends Command {\n static commandName = \"generate-middleware\";\n static description = \"Generate a new middleware in the specified path\";\n static help = [\n \"Generate a new middleware in the specified path\",\n \"Example: npx balda generate-middleware auth -p src/middlewares\",\n ];\n\n @arg({\n description: \"The name of the middleware to generate\",\n required: true,\n })\n static middlewareName: string;\n\n @flag({\n description:\n \"The path to the middleware to generate, default is src/middlewares\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/middlewares\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const middlewareTemplate = this.getMiddlewareTemplate();\n const fileName = `${this.middlewareName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(middlewareTemplate),\n );\n\n this.logger.info(\n `Middleware ${this.middlewareName} created successfully at ${this.path}`,\n );\n }\n\n static getMiddlewareTemplate() {\n const middlewareName = toPascalCase(this.middlewareName);\n return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\n/**\n * ${middlewareName} middleware\n * @description Add your middleware logic here\n */\nexport const ${middlewareName}: ServerRouteMiddleware = async () => {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Add your middleware logic here\n return next();\n };\n};`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMqttCommand extends Command {\n static commandName = \"generate-mqtt\";\n static description = \"Generate a new MQTT handler in the specified path\";\n static help = [\n \"Generate a new MQTT handler in the specified path\",\n \"Example: npx balda generate-mqtt temperature-handler -p src/mqtt\",\n ];\n\n @flag({\n description:\n \"The path to the MQTT handler to generate, default is src/mqtt\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/mqtt\",\n })\n static path: string;\n\n @arg({\n description: \"The MQTT topic to subscribe to\",\n required: true,\n })\n static topic: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.topic.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const mqttTemplate = this.getMqttTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.topic.replace(/\\//g, \"_\"))}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(mqttTemplate));\n\n this.logger.info(\n `MQTT handler for topic ${this.topic} created successfully at ${this.path}`,\n );\n }\n\n static getMqttTemplate(isValidLiteral: boolean) {\n return `import { BaseMqtt, mqtt } from \"balda\";\n\n/**\n * Define your MQTT topics interface for type safety\n */\ndeclare module \"balda\" {\n interface MqttTopics {\n ${isValidLiteral ? `${this.topic}: string;` : `'${this.topic}': string;`}\n }\n}\n\nexport default class extends BaseMqtt {\n @mqtt.subscribe(\"${this.topic}\")\n async handle(message: string) {\n this.logger.info({ message }, \"Message received\");\n // Implement your MQTT handler logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GeneratePluginCommand extends Command {\n static commandName = \"generate-plugin\";\n static description = \"Generate a new plugin in the specified path\";\n static help = [\n \"Generate a new plugin in the specified path\",\n \"Example: npx balda generate-plugin my-plugin -p src/plugins\",\n ];\n\n @arg({\n description: \"The name of the plugin to generate\",\n required: true,\n })\n static pluginName: string;\n\n @flag({\n description: \"The path to the plugin to generate, default is src/plugins\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/plugins\",\n })\n static pluginPath: string;\n\n static async handle(): Promise<void> {\n const pluginTemplate = this.getPluginTemplate();\n this.pluginPath = nativePath.join(this.pluginPath, `${this.pluginName}.ts`);\n\n if (\n !(await nativeFs.exists(nativePath.join(process.cwd(), this.pluginPath)))\n ) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.pluginPath.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.pluginPath,\n new TextEncoder().encode(pluginTemplate),\n );\n\n this.logger.info(\n `Plugin ${this.name} created successfully at ${this.pluginPath}`,\n );\n }\n\n static getPluginTemplate() {\n return `import { BasePlugin, Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\nexport default class extends BasePlugin {\n async handle(): Promise<ServerRouteMiddleware> {\n return async (req: Request, res: Response, next: NextFunction) => {\n console.log(\"${this.pluginName} plugin is running\");\n await next();\n };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateQueueCommand extends Command {\n static commandName = \"generate-queue\";\n static description = \"Generate a new queue in the specified path\";\n static help = [\n \"Generate a new queue in the specified path\",\n \"Example: npx balda generate-queue my-queue -p src/queues --provider bullmq\",\n ];\n\n @arg({\n description: \"The name of the queue to generate\",\n required: true,\n })\n static queueName: string;\n\n @flag({\n description: \"The path to the queue to generate, default is src/queues\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/queues\",\n })\n static path: string;\n\n @flag({\n description: \"The provider of the queue to generate, default is bullmq\",\n type: \"string\",\n aliases: [\"pr\"],\n name: \"provider\",\n required: false,\n defaultValue: \"bullmq\",\n })\n static provider: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.queueName.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const queueTemplate = this.getQueueTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.queueName)}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(queueTemplate),\n );\n\n this.logger.info(\n `Queue ${this.queueName} created successfully at ${this.path}`,\n );\n }\n\n static getQueueTemplate(isValidLiteral: boolean) {\n return `import { BaseQueue, queue } from \"balda\";\n\nexport type Payload = {\n // Add your payload here\n};\n\ndeclare module \"balda\" {\n export interface QueueTopic {\n ${isValidLiteral ? this.queueName : `'${this.queueName}'`}: Payload;\n }\n}\n\nexport default class extends BaseQueue {\n @queue('${this.provider}', '${this.queueName}')\n async handle(payload: Payload) {\n // Implement your queue logic here\n this.logger.info({ payload }, 'Payload received');\n return Promise.resolve();\n }\n}`;\n }\n}\n","import { execSync } from \"node:child_process\";\nimport { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Server } from \"../../server/server.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateSdkCommand extends Command {\n static commandName = \"generate-sdk\";\n static description =\n \"Generate a TypeScript SDK from your server's OpenAPI specification\";\n static help = [\n \"Generate a TypeScript SDK from your server's OpenAPI specification\",\n \"This command imports your server instance, starts it if needed, downloads the OpenAPI spec, and generates an SDK\",\n \"\",\n \"Arguments:\",\n \" serverPath Path to the server instance file (default: test/server/instance.ts)\",\n \"\",\n \"Flags:\",\n \" -o, --output <path> Output directory for generated SDK (default: sdk)\",\n \" -s, --swagger-path <path> Swagger UI path on your server (default: /docs)\",\n \" -c, --client <type> HTTP client to use: axios or fetch (default: fetch)\",\n \" --unwrap-response-data Automatically unwrap response data property\",\n \" --single-http-client Generate single HTTP client instance\",\n \" --type-prefix <prefix> Add prefix to all generated types\",\n \" --type-suffix <suffix> Add suffix to all generated types\",\n \" --enum-names-as-values Use enum names as values\",\n \" --sort-types Sort types alphabetically\",\n \"\",\n \"Examples:\",\n \" npx balda generate-sdk\",\n \" npx balda generate-sdk src/server/index.ts -o ./client-sdk\",\n \" npx balda generate-sdk src/server.ts --client axios\",\n \" npx balda generate-sdk --unwrap-response-data --single-http-client\",\n \" npx balda generate-sdk --type-prefix Api --sort-types\",\n ];\n\n @arg({\n description:\n \"Path to the server instance file (should export a Server instance)\",\n required: false,\n defaultValue: \"test/server/instance.ts\",\n })\n static serverPath: string;\n\n @flag({\n description: \"Output directory for generated SDK\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"sdk\",\n })\n static outputPath: string;\n\n @flag({\n description: \"Swagger UI path on your server\",\n type: \"string\",\n aliases: [\"s\"],\n name: \"swagger-path\",\n required: false,\n })\n static swaggerPath?: string;\n\n @flag({\n description: \"HTTP client to use (axios or fetch)\",\n type: \"string\",\n aliases: [\"c\"],\n name: \"client\",\n required: false,\n defaultValue: \"fetch\",\n })\n static httpClient: string;\n\n @flag({\n description: \"Unwrap response data automatically\",\n type: \"boolean\",\n name: \"unwrap-response-data\",\n required: false,\n defaultValue: false,\n })\n static unwrapResponseData: boolean;\n\n @flag({\n description: \"Generate single HTTP client instance\",\n type: \"boolean\",\n name: \"single-http-client\",\n required: false,\n defaultValue: false,\n })\n static singleHttpClient: boolean;\n\n @flag({\n description: \"Add prefix to all generated types\",\n type: \"string\",\n name: \"type-prefix\",\n required: false,\n })\n static typePrefix?: string;\n\n @flag({\n description: \"Add suffix to all generated types\",\n type: \"string\",\n name: \"type-suffix\",\n required: false,\n })\n static typeSuffix?: string;\n\n @flag({\n description: \"Use enum names as values\",\n type: \"boolean\",\n name: \"enum-names-as-values\",\n required: false,\n defaultValue: false,\n })\n static enumNamesAsValues: boolean;\n\n @flag({\n description: \"Sort types alphabetically\",\n type: \"boolean\",\n name: \"sort-types\",\n required: false,\n defaultValue: false,\n })\n static sortTypes: boolean;\n\n static async handle(): Promise<void> {\n console.log(\"\\n🚀 Starting SDK generation...\\n\");\n\n // Step 1: Check if swagger-typescript-api is installed\n const sdkGenerator = \"swagger-typescript-api\";\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n const generatorPath = nativePath.join(nodeModulesPath, sdkGenerator);\n const hasGenerator = hasNodeModules\n ? await nativeFs.exists(generatorPath)\n : false;\n\n if (!hasGenerator) {\n console.log(\n `📦 ${sdkGenerator} not found. Installing as dev dependency...\\n`,\n );\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} ${sdkGenerator} ${devFlag}`,\n packageManager,\n [sdkGenerator],\n { stdio: \"inherit\" },\n true,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ SDK generation cancelled: swagger-typescript-api installation was skipped.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ ${sdkGenerator} installed successfully!\\x1b[0m\\n`,\n );\n }\n\n // Step 2: Import and start the server\n const absoluteServerPath = nativePath.resolve(\n process.cwd(),\n this.serverPath,\n );\n const serverPathExists = await nativeFs.exists(absoluteServerPath);\n\n if (!serverPathExists) {\n console.error(\n `\\x1b[31m❌ Error: Server file not found at ${absoluteServerPath}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(`📂 Loading server from: ${this.serverPath}`);\n\n let serverModule: Record<string, unknown>;\n try {\n // Import the server module\n const fileUrl = `file://${absoluteServerPath}`;\n serverModule = (await import(fileUrl)) as Record<string, unknown>;\n } catch (error) {\n console.error(`\\x1b[31m❌ Error importing server module:\\x1b[0m`, error);\n return;\n }\n\n const possibleExports = Object.keys(serverModule);\n\n // Find the Server instance in the module exports\n let serverInstance: Server | null = null;\n for (const exportName of possibleExports) {\n let currentModule = serverModule[exportName] as {\n default?: any;\n [key: string]: any;\n };\n\n if (\"default\" in currentModule && currentModule.default) {\n currentModule = currentModule.default;\n }\n\n if (\n currentModule &&\n \"_brand\" in currentModule &&\n currentModule._brand === \"BaldaServer\"\n ) {\n if (typeof currentModule === \"object\" && \"listen\" in currentModule) {\n serverInstance = currentModule as unknown as Server;\n console.log(`✅ Found server instance in export: \"${exportName}\"\\n`);\n break;\n }\n }\n }\n\n if (!serverInstance) {\n console.error(\n `\\x1b[31m❌ Error: No Server instance found in ${this.serverPath}\\x1b[0m`,\n );\n console.log(\n `\\x1b[90mExpected exports: ${possibleExports.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n // Step 3: Start the server\n let wasStarted = false;\n let serverUrl = \"\";\n let serverPort = 80;\n let serverHost = \"localhost\";\n\n serverUrl = `http://${serverHost}:${serverPort}`;\n try {\n // Start the server\n console.log(`🌐 Starting server on ${serverUrl}...`);\n if (\n typeof serverInstance.listen === \"function\" &&\n !serverInstance.isListening\n ) {\n await new Promise<void>((res, rej) => {\n try {\n serverInstance.listen(() => {\n wasStarted = true;\n console.log(`✅ Server started successfully!\\n`);\n res();\n });\n } catch (error) {\n rej(error);\n }\n }).catch((error) => {\n console.error(`Failed to start the server, continuing...`);\n });\n } else {\n throw new Error(\"Server instance does not have a listen() method\");\n }\n } catch (error) {\n console.error(`\\x1b[31m❌ Error starting server:\\x1b[0m`, error);\n return;\n }\n\n // Step 4: Download OpenAPI spec\n const swaggerPath =\n this.swaggerPath ??\n (typeof serverInstance.serverOptions.swagger !== \"boolean\"\n ? serverInstance.serverOptions.swagger?.path\n : \"/docs\");\n const swaggerJsonUrl = nativePath.join(\n serverUrl,\n swaggerPath ?? \"/docs\",\n \"/json\",\n );\n\n console.log(`📥 Downloading OpenAPI spec from: ${swaggerJsonUrl}`);\n\n let openApiSpec: Record<string, unknown>;\n try {\n const response = await globalThis.fetch(swaggerJsonUrl);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch OpenAPI spec: ${response.status} ${response.statusText}`,\n );\n }\n openApiSpec = (await response.json()) as Record<string, unknown>;\n console.log(`✅ OpenAPI spec downloaded successfully!\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error downloading OpenAPI spec:\\x1b[0m`, error);\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 5: Save OpenAPI spec to temp file\n const tempSpecPath = nativePath.join(process.cwd(), \".openapi-spec.json\");\n try {\n await nativeFs.writeFile(\n tempSpecPath,\n new TextEncoder().encode(JSON.stringify(openApiSpec, null, 2)),\n );\n } catch (error) {\n console.error(\n `\\x1b[31m❌ Error saving OpenAPI spec to file:\\x1b[0m`,\n error,\n );\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 6: Generate SDK using swagger-typescript-api\n const outputDir = nativePath.resolve(process.cwd(), this.outputPath);\n console.log(`🔨 Generating SDK...\\n`);\n\n try {\n // Create output directory if it doesn't exist\n if (!(await nativeFs.exists(outputDir))) {\n await nativeFs.mkdir(outputDir, { recursive: true });\n }\n\n // Build command with options\n const commandParts = [\n \"npx swagger-typescript-api generate\",\n `--path=\"${tempSpecPath}\"`,\n `--output=\"${this.outputPath}\"`,\n `--http-client ${this.httpClient}`,\n \"--modular\",\n \"--extract-request-params\",\n \"--extract-request-body\",\n \"--extract-response-body\",\n \"--extract-response-error\",\n ];\n\n // Add optional flags\n if (this.unwrapResponseData) {\n commandParts.push(\"--unwrap-response-data\");\n }\n\n if (this.singleHttpClient) {\n commandParts.push(\"--single-http-client\");\n }\n\n if (this.typePrefix) {\n commandParts.push(`--type-prefix \"${this.typePrefix}\"`);\n }\n\n if (this.typeSuffix) {\n commandParts.push(`--type-suffix \"${this.typeSuffix}\"`);\n }\n\n if (this.enumNamesAsValues) {\n commandParts.push(\"--enum-names-as-values\");\n }\n\n if (this.sortTypes) {\n commandParts.push(\"--sort-types\");\n }\n\n const command = commandParts.join(\" \");\n\n execSync(command, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n\n console.log(`\\n\\x1b[32m✅ SDK generated successfully!\\x1b[0m`);\n console.log(`\\x1b[32m📁 SDK location: ${outputDir}\\x1b[0m\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error generating SDK:\\x1b[0m`, error);\n } finally {\n // Cleanup: Remove temp spec file\n try {\n await nativeFs.unlink(tempSpecPath);\n } catch {\n // Ignore cleanup errors\n }\n\n // Cleanup: Stop server if we started it\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n console.log(\"🛑 Stopping server...\");\n await serverWithClose.close?.();\n console.log(\"✅ Server stopped.\\n\");\n } catch {\n console.log(\"\\x1b[33m⚠️ Could not stop server gracefully.\\x1b[0m\\n\");\n }\n }\n }\n\n console.log(\"\\x1b[32m✨ SDK generation complete!\\x1b[0m\\n\");\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitCommand extends Command {\n static commandName = \"init\";\n static description =\n \"Initialize a new balda project in the current directory\";\n static help = [\n \"Initialize a new balda project, it is given for granted that balda is installed in the project as a dependency\",\n \"All the files are created in the /src directory (created if not exists)\",\n \"It adds a server.ts for the file instance and a index.ts for the entry point with a dummy hello world route\",\n \"Example: npx balda init -p ./src -t true\",\n ];\n\n @flag.string({\n description:\n \"The path to the project, default is the current directory /src\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"./src\",\n })\n static srcPath: string;\n\n @flag.boolean({\n description: \"Whether to use typescript, default is true\",\n aliases: \"t\",\n name: \"typescript\",\n required: false,\n defaultValue: true,\n })\n static typescript: boolean;\n\n @flag.boolean({\n description: \"Initialize MQTT service connection\",\n aliases: \"m\",\n name: \"mqtt\",\n required: false,\n defaultValue: false,\n })\n static mqtt: boolean;\n\n @flag.boolean({\n description: \"Initialize Cron service\",\n aliases: \"c\",\n name: \"cron\",\n required: false,\n defaultValue: false,\n })\n static cron: boolean;\n\n static devDependencies: string[] = [\n \"esbuild\",\n \"esbuild-plugin-copy\",\n \"tsx\",\n \"typescript\",\n ];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing project...\");\n const [packageManager, packageManagerCommand, devDependenciesCommand] =\n await getPackageManager();\n\n // if the package manager is npm, yarn or pnpm, install the dev dependencies since we're on node.js\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledDevDeps = await getUninstalledPackages(\n this.devDependencies,\n );\n\n if (uninstalledDevDeps.length) {\n this.logger.info(\n `Found ${uninstalledDevDeps.length} missing dev dependencies`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDevDeps.join(\" \")} -${devDependenciesCommand}`,\n packageManager,\n uninstalledDevDeps,\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Project initialization aborted.\",\n );\n return;\n }\n }\n\n if (!uninstalledDevDeps.length) {\n this.logger.info(\"All dev dependencies are already installed\");\n }\n }\n\n // Handle optional service dependencies\n if (this.mqtt && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledMqtt = await getUninstalledPackages([\"mqtt\"]);\n\n if (uninstalledMqtt.length) {\n const mqttInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} mqtt`,\n packageManager,\n [\"mqtt\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!mqttInstalled) {\n this.logger.info(\n \"MQTT installation cancelled by user. Skipping MQTT scaffolding.\",\n );\n this.mqtt = false;\n }\n }\n\n if (!uninstalledMqtt.length) {\n this.logger.info(\"MQTT package is already installed\");\n }\n }\n\n if (this.cron && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledCron = await getUninstalledPackages([\"node-cron\"]);\n\n if (uninstalledCron.length > 0) {\n const cronInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} node-cron`,\n packageManager,\n [\"node-cron\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!cronInstalled) {\n this.logger.info(\n \"node-cron installation cancelled by user. Skipping Cron scaffolding.\",\n );\n this.cron = false;\n }\n }\n\n if (!uninstalledCron.length) {\n this.logger.info(\"node-cron package is already installed\");\n }\n }\n\n const ext = this.typescript ? \"ts\" : \"js\";\n const serverTemplate = this.getServerTemplate();\n const indexTemplate = this.getIndexTemplate();\n\n if (!nativeFs.exists(this.srcPath)) {\n await nativeFs.mkdir(this.srcPath, { recursive: true });\n }\n\n this.logger.info(`Creating server.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/server.${ext}`,\n new TextEncoder().encode(serverTemplate),\n );\n\n this.logger.info(`Creating index.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/index.${ext}`,\n new TextEncoder().encode(indexTemplate),\n );\n\n // Create MQTT configuration if requested\n if (this.mqtt) {\n const mqttDir = nativePath.join(this.srcPath, \"mqtt\");\n if (!(await nativeFs.exists(mqttDir))) {\n await nativeFs.mkdir(mqttDir, { recursive: true });\n }\n\n const mqttConfigTemplate = this.getMqttConfigTemplate();\n this.logger.info(`Creating mqtt/mqtt.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(mqttDir, `mqtt.config.${ext}`),\n new TextEncoder().encode(mqttConfigTemplate),\n );\n }\n\n // Create Cron configuration if requested\n if (this.cron) {\n const cronDir = nativePath.join(this.srcPath, \"cron\");\n if (!(await nativeFs.exists(cronDir))) {\n await nativeFs.mkdir(cronDir, { recursive: true });\n }\n\n const cronConfigTemplate = this.getCronConfigTemplate();\n this.logger.info(`Creating cron/cron.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(cronDir, `cron.config.${ext}`),\n new TextEncoder().encode(cronConfigTemplate),\n );\n }\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n return `import { Server } from \"balda\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n plugins: {\n json: {\n sizeLimit: \"100kb\",\n },\n },\n});\n\nexport { serverInstance as server };\n`;\n }\n\n static getIndexTemplate() {\n const imports: string[] = ['import { server } from \"./server.js\";'];\n const services: string[] = [];\n\n if (this.mqtt) {\n imports.push('import \"./mqtt/mqtt.config.js\";');\n imports.push('import { MqttService } from \"balda\";');\n services.push(`\n // Initialize MQTT service\n await MqttService.connect({\n host: \"localhost\",\n port: 1883,\n protocol: \"mqtt\",\n });\n console.log(\"MQTT service connected\");`);\n }\n\n if (this.cron) {\n imports.push('import \"./cron/cron.config.js\";');\n imports.push('import { CronService } from \"balda\";');\n services.push(`\n // Initialize Cron service\n await CronService.run();\n console.log(\"Cron service started\");`);\n }\n\n const importsBlock = imports.join(\"\\n\");\n const servicesBlock = services.length > 0 ? services.join(\"\\n\") : \"\";\n\n return `${importsBlock}\n${servicesBlock ? `\\n${servicesBlock}\\n` : \"\"}\nserver.listen(({ url }) => {\n console.log(\\`Server is running on \\${url}\\`);\n});\n`;\n }\n\n static getMqttConfigTemplate() {\n return `// MQTT Configuration\n// This file is imported to set up MQTT connection options\n// Add your MQTT handlers in separate files within this directory\n// Use: npx balda generate-mqtt <handler-name> to create new handlers\n`;\n }\n\n static getCronConfigTemplate() {\n return `// Cron Configuration\n// This file is imported to set up Cron jobs\n// Add your cron jobs in separate files within this directory\n// Use: npx balda generate-cron <job-name> to create new cron jobs\n`;\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitQueueCommand extends Command {\n static commandName = \"init-queue\";\n static description =\n \"Initialize queue provider configuration with required dependencies\";\n static help = [\n \"Initialize a queue provider configuration file with basic credentials\",\n \"Automatically installs required packages for the selected provider\",\n \"Only scaffolds the connection, handlers should be created with generate-queue command\",\n \"Example: npx balda init-queue -t bullmq -o src/queue\",\n ];\n\n @flag.string({\n description: \"Queue provider type (bullmq, sqs, pgboss) - required\",\n aliases: \"t\",\n name: \"type\",\n required: true,\n })\n static queueType: \"bullmq\" | \"sqs\" | \"pgboss\";\n\n @flag.string({\n description:\n \"Output directory for queue configuration, default is src/queue\",\n aliases: \"o\",\n name: \"output\",\n required: false,\n defaultValue: \"src/queue\",\n })\n static outputPath: string;\n\n static queueDependencies: Record<string, string[]> = {\n bullmq: [\"bullmq\", \"ioredis\"],\n sqs: [\"@aws-sdk/client-sqs\", \"sqs-consumer\"],\n pgboss: [\"pg-boss\", \"pg\"],\n };\n\n static async handle(): Promise<void> {\n this.logger.info(`Initializing ${this.queueType} queue provider...`);\n\n if (![\"bullmq\", \"sqs\", \"pgboss\"].includes(this.queueType)) {\n this.logger.error(\n `Invalid queue type: ${this.queueType}. Must be one of: bullmq, sqs, pgboss`,\n );\n return;\n }\n\n const [packageManager, packageManagerCommand] = await getPackageManager();\n\n // Install dependencies if on npm, yarn, or pnpm\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const dependencies = this.queueDependencies[this.queueType];\n const uninstalledDeps = await getUninstalledPackages(dependencies);\n\n if (uninstalledDeps.length > 0) {\n this.logger.info(\n `Found ${uninstalledDeps.length} missing dependencies for ${this.queueType}`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDeps.join(\" \")}`,\n packageManager,\n uninstalledDeps,\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Queue initialization aborted.\",\n );\n return;\n }\n }\n\n if (uninstalledDeps.length === 0) {\n this.logger.info(\n `All ${this.queueType} dependencies are already installed`,\n );\n }\n }\n\n const configTemplate = this.getConfigTemplate();\n const fileName = `${this.queueType}.config.ts`;\n const fullPath = nativePath.join(this.outputPath, fileName);\n\n if (!(await nativeFs.exists(this.outputPath))) {\n await nativeFs.mkdir(this.outputPath, { recursive: true });\n }\n\n this.logger.info(`Creating ${fileName} file at ${this.outputPath}...`);\n await nativeFs.writeFile(\n fullPath,\n new TextEncoder().encode(configTemplate),\n );\n\n this.logger.info(\n `Queue configuration initialized successfully at ${fullPath}`,\n );\n this.logger.info(\n `Remember to update the configuration with your actual credentials`,\n );\n this.logger.info(`Use 'npx balda generate-queue' to create queue handlers`);\n }\n\n static getConfigTemplate(): string {\n if (this.queueType === \"bullmq\") {\n return this.getBullMQTemplate();\n }\n\n if (this.queueType === \"sqs\") {\n return this.getSQSTemplate();\n }\n\n if (this.queueType === \"pgboss\") {\n return this.getPGBossTemplate();\n }\n\n return \"\";\n }\n\n static getBullMQTemplate(): string {\n return `import { defineBullMQConfiguration } from \"balda\";\n\n// Configure BullMQ connection and default options\ndefineBullMQConfiguration({\n connection: {\n host: process.env.REDIS_HOST || \"localhost\",\n port: parseInt(process.env.REDIS_PORT || \"6379\", 10),\n password: process.env.REDIS_PASSWORD,\n },\n defaultJobOptions: {\n attempts: 3,\n backoff: {\n type: \"exponential\",\n delay: 1000,\n },\n },\n errorHandler: async (job, error) => {\n console.error(\\`Job \\${job.id} failed:\\`, error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { bullmqQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: bullmqQueue<{ email: string; subject: string }>(\"email-notifications\"),\n * orderProcessing: bullmqQueue<{ orderId: string; userId: string }>(\"order-processing\"),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n\n static getSQSTemplate(): string {\n return `import { defineSQSConfiguration } from \"balda\";\n\n// Configure SQS connection and consumer options\ndefineSQSConfiguration({\n client: {\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n consumer: {\n batchSize: 10,\n visibilityTimeout: 30,\n waitTimeSeconds: 20,\n queueUrlMap: {\n // Map your queue topics to SQS queue URLs\n // Example: \"user-notifications\": process.env.USER_NOTIFICATIONS_QUEUE_URL || \"\",\n },\n },\n errorHandler: (error) => {\n console.error(\"SQS error:\", error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { sqsQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: sqsQueue<{ email: string; subject: string }>(\n * \"email-notifications\",\n * { queueUrl: process.env.EMAIL_QUEUE_URL || \"\" }\n * ),\n * orderProcessing: sqsQueue<{ orderId: string; userId: string }>(\n * \"order-processing\",\n * { queueUrl: process.env.ORDER_QUEUE_URL || \"\" }\n * ),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n\n static getPGBossTemplate(): string {\n return `import { definePGBossConfiguration } from \"balda\";\n\n// Configure PGBoss connection\ndefinePGBossConfiguration({\n connectionString:\n process.env.DATABASE_URL ||\n \"postgresql://user:password@localhost:5432/database\",\n errorHandler: (error) => {\n console.error(\"PG-Boss error:\", error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { pgbossQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: pgbossQueue<{ email: string; subject: string }>(\"email-notifications\"),\n * orderProcessing: pgbossQueue<{ orderId: string; userId: string }>(\"order-processing\"),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n}\n","import { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class ListCommand extends Command {\n static commandName = \"list\";\n static description = \"List all available commands\";\n static help = [\n \"Display all registered Balda CLI commands with their descriptions\",\n \"Example: npx balda list\",\n ];\n\n static async handle(): Promise<void> {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Group user commands by category\n if (userCommands.length > 0) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n\n const categorizedCommands = this.groupByCategory(userCommands);\n this.displayCategorizedCommands(categorizedCommands);\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length > 0) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n }\n\n private static groupByCategory(\n commands: (typeof Command)[],\n ): Map<string, (typeof Command)[]> {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n }\n\n private static displayCategorizedCommands(\n categorizedCommands: Map<string, (typeof Command)[]>,\n ): void {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (commands.length === 0) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n }\n}\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager, execWithPrompt } from \"../../package.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { runtime } from \"../../runtime/runtime.js\";\nimport { Command } from \"../base_command.js\";\nimport { CommandOptions } from \"../command_types.js\";\nimport { arg } from \"../../decorators/command/arg.js\";\n\nexport default class ServeCommand extends Command {\n static commandName = \"serve\";\n static description = \"Run the server in dev mode with hot reload\";\n static help = [\n \"This command is intended to be run from the root of the project\",\n \"Bun and Deno have native dev hot reload\",\n \"Runtime is automatically inferred\",\n \"Node.js requires tsx to be installed for both typescript and javascript files\",\n \"Node.js dev dependencies (tsx) are installed automatically if not detected\",\n ];\n\n static runtime = runtime.type;\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @arg({\n required: false,\n defaultValue: \"src/index.ts\",\n description: \"The entry point of the project, default is src/index.ts\",\n })\n static entry: string;\n\n @flag.string({\n aliases: [\"d\"],\n name: \"deno-import-map\",\n required: false,\n description: \"Path to deno import map\",\n })\n static denoImportMap?: string;\n\n static async handle(): Promise<void> {\n if (this.runtime === \"bun\") {\n execSync(`bun run --watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n if (this.runtime === \"deno\") {\n let denoCommand = `deno run --watch --unstable-sloppy-imports --allow-all`;\n if (this.denoImportMap) {\n denoCommand = `${denoCommand} --import-map ${this.denoImportMap}`;\n }\n\n execSync(`${denoCommand} ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n this.handleNodeHotReload();\n }\n\n private static async handleNodeHotReload() {\n const hasTsx = fs.existsSync(\"node_modules/.bin/tsx\");\n if (!hasTsx) {\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} tsx ${devFlag}`,\n packageManager,\n [\"tsx\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Cannot start dev server without tsx.\",\n );\n return;\n }\n }\n\n const initCommand = this.calledBy !== \"node\" ? this.calledBy : \"npx\";\n execSync(`${initCommand} tsx watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class SetupStorageCommand extends Command {\n static commandName = \"setup-storage\";\n static description = \"Setup storage provider with required dependencies\";\n static help = [\n \"Install dependencies and create storage configuration for a specific provider\",\n \"Flags:\",\n \" -t, --type <provider> Storage provider type (s3, azure, local)\",\n \" -o, --output <path> Output directory for storage setup (default: src/storage/)\",\n \"\",\n \"Examples:\",\n \" npx balda setup:storage -t s3\",\n \" npx balda setup:storage --type azure --output src/config/\",\n ];\n\n @flag({\n description: \"Storage provider type (s3, azure, local)\",\n type: \"string\",\n aliases: [\"t\"],\n name: \"type\",\n required: true,\n })\n static storageType: string;\n\n @flag({\n description: \"Output directory for storage setup\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"src/storage/\",\n })\n static outputPath: string;\n\n static async handle(): Promise<void> {\n if (!this.storageType) {\n console.error(\n \"\\x1b[31m❌ Error: Storage type is required. Use -t or --type flag.\\x1b[0m\",\n );\n console.log(\"\\x1b[90mExample: npx balda setup:storage -t s3\\x1b[0m\\n\");\n return;\n }\n\n if (!this.outputPath) {\n await nativeFs.mkdir(nativePath.join(process.cwd(), this.outputPath), {\n recursive: true,\n });\n }\n\n const validTypes = [\"s3\", \"azure\", \"local\"];\n if (!validTypes.includes(this.storageType)) {\n console.error(\n `\\x1b[31m❌ Error: Invalid storage type '${this.storageType}'. Valid types: ${validTypes.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(\n `\\n🚀 Setting up ${this.storageType.toUpperCase()} storage provider...\\n`,\n );\n\n const dependencies = this.getDependencies(this.storageType);\n\n if (dependencies.length === 0) {\n console.log(\n `\\x1b[32m✅ ${this.storageType.toUpperCase()} storage doesn't require additional dependencies.\\x1b[0m\\n`,\n );\n }\n\n if (dependencies.length) {\n const missingDeps = await this.checkMissingDependencies(dependencies);\n\n if (missingDeps.length === 0) {\n console.log(\n `\\x1b[32m✅ All required dependencies are already installed.\\x1b[0m\\n`,\n );\n }\n\n if (missingDeps.length) {\n const [packageManager, installCommand] = await getPackageManager();\n const command = `${packageManager} ${installCommand} ${missingDeps.join(\" \")}`;\n\n const installed = await execWithPrompt(\n command,\n packageManager,\n missingDeps,\n { stdio: \"inherit\" },\n false,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ Dependency installation skipped by user.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ Dependencies installed successfully!\\x1b[0m\\n`,\n );\n }\n }\n\n await this.createStorageSetup(this.storageType, this.outputPath);\n\n console.log(\n `\\x1b[32m✨ ${this.storageType.toUpperCase()} storage setup complete!\\x1b[0m\\n`,\n );\n }\n\n private static getDependencies(storageType: string): string[] {\n const dependencyMap: Record<string, string[]> = {\n s3: [\n \"@aws-sdk/client-s3\",\n \"@aws-sdk/s3-request-presigner\",\n \"@aws-sdk/cloudfront-signer\",\n ],\n azure: [\"@azure/storage-blob\"],\n local: [],\n };\n\n return dependencyMap[storageType] || [];\n }\n\n private static async checkMissingDependencies(\n dependencies: string[],\n ): Promise<string[]> {\n const packageJsonPath = nativePath.join(process.cwd(), \"package.json\");\n const exists = await nativeFs.exists(packageJsonPath);\n if (!exists) {\n return dependencies;\n }\n\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const nodeModulesExists = await nativeFs.exists(nodeModulesPath);\n if (!nodeModulesExists) {\n return dependencies;\n }\n\n const missing: string[] = [];\n for (const dep of dependencies) {\n const depPath = nativePath.join(nodeModulesPath, dep);\n const depExists = await nativeFs.exists(depPath);\n if (!depExists) {\n missing.push(dep);\n }\n }\n\n return missing;\n }\n\n private static async createStorageSetup(\n storageType: string,\n outputPath: string,\n ): Promise<void> {\n const resolvedPath = nativePath.join(process.cwd(), outputPath);\n const exists = await nativeFs.exists(resolvedPath);\n\n if (!exists) {\n await nativeFs.mkdir(resolvedPath, { recursive: true });\n }\n\n const configFile = nativePath.join(resolvedPath, `storage.ts`);\n const configExists = await nativeFs.exists(configFile);\n if (configExists) {\n console.log(\n `\\x1b[33m⚠️ Configuration file already exists: ${configFile}\\x1b[0m`,\n );\n return;\n }\n\n const template = this.getConfigTemplate(storageType);\n await nativeFs.writeFile(configFile, new TextEncoder().encode(template));\n\n console.log(`\\x1b[32m✅ Created configuration file: ${configFile}\\x1b[0m`);\n }\n\n private static getConfigTemplate(storageType: string): string {\n const templates: Record<string, string> = {\n s3: `import { Storage, S3StorageProvider } from \"balda\";\n\n/**\n * S3 Storage Configuration\n *\n * Environment variables required:\n * - AWS_ACCESS_KEY_ID\n * - AWS_SECRET_ACCESS_KEY\n * - AWS_REGION\n * - S3_BUCKET\n *\n * Optional for CloudFront:\n * - CLOUDFRONT_DOMAIN\n * - CLOUDFRONT_KEY_PAIR_ID\n * - CLOUDFRONT_PRIVATE_KEY\n */\n\nexport const storage = new Storage(\n {\n s3: new S3StorageProvider({\n s3ClientConfig: {\n bucketName: process.env.S3_BUCKET || \"your-bucket-name\",\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n // Uncomment to enable CloudFront signed URLs\n // cloudfrontOptions: {\n // domainName: process.env.CLOUDFRONT_DOMAIN || \"\",\n // keyPairId: process.env.CLOUDFRONT_KEY_PAIR_ID || \"\",\n // privateKey: process.env.CLOUDFRONT_PRIVATE_KEY || \"\",\n // },\n }),\n },\n {\n defaultProvider: \"s3\",\n },\n);\n`,\n azure: `import { Storage, AzureBlobStorageProvider } from \"balda\";\n\n/**\n * Azure Blob Storage Configuration\n *\n * Environment variables required:\n * - AZURE_STORAGE_CONNECTION_STRING\n * - AZURE_CONTAINER_NAME\n * - AZURE_STORAGE_ACCOUNT\n * - AZURE_STORAGE_KEY\n */\n\nexport const storage = new Storage(\n {\n azure: new AzureBlobStorageProvider({\n containerName: process.env.AZURE_CONTAINER_NAME || \"your-container-name\",\n connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || \"\",\n storageAccountName: process.env.AZURE_STORAGE_ACCOUNT || \"\",\n storageAccountKey: process.env.AZURE_STORAGE_KEY || \"\",\n }),\n },\n {\n defaultProvider: \"azure\",\n },\n);\n`,\n local: `import { Storage, LocalStorageProvider } from \"balda\";\n\n/**\n * Local Storage Configuration\n */\nexport const storage = new Storage(\n {\n local: new LocalStorageProvider({\n directory: \"./uploads\",\n }),\n },\n {\n defaultProvider: \"local\",\n },\n);\n`,\n };\n\n return templates[storageType] || \"\";\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport type { Command } from \"./base_command.js\";\nimport BuildCommand from \"./base_commands/build_command.js\";\nimport GenerateCommand from \"./base_commands/generate_command.js\";\nimport GenerateControllerCommand from \"./base_commands/generate_controller.js\";\nimport GenerateCronCommand from \"./base_commands/generate_cron.js\";\nimport GenerateMiddlewareCommand from \"./base_commands/generate_middleware.js\";\nimport GenerateMqttCommand from \"./base_commands/generate_mqtt.js\";\nimport GeneratePluginCommand from \"./base_commands/generate_plugin.js\";\nimport GenerateQueueCommand from \"./base_commands/generate_queue.js\";\nimport GenerateSdkCommand from \"./base_commands/generate_sdk.js\";\nimport InitCommand from \"./base_commands/init_command.js\";\nimport InitQueueCommand from \"./base_commands/init_queue_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport ServeCommand from \"./base_commands/serve_command.js\";\nimport SetupStorageCommand from \"./base_commands/setup_storage_command.js\";\n\n// Base commands are always loaded\nexport const baseCommands = [\n GeneratePluginCommand,\n GenerateCommand,\n GenerateCronCommand,\n GenerateMqttCommand,\n GenerateQueueCommand,\n GenerateControllerCommand,\n GenerateMiddlewareCommand,\n GenerateSdkCommand,\n InitCommand,\n InitQueueCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n SetupStorageCommand,\n];\n\n/**\n * Singleton that registers all commands and provides a way to execute them.\n * Commands are loaded from the commands directory, and are expected to have a default export with the command class that extends the base command class.\n * Commands can be run both as `.js` or `.ts` files. If the file is a ts file `typescript` npm package must be installed.\n * You can use the `CommandRegistry.setCommandsPattern` method to change the pattern of the commands to load.\n * @example\n * // commands/test.ts\n * export default class TestCommand extends Command {\n * static name = \"test\";\n * async handle() {\n * console.log(\"Test command\");\n * }\n * }\n */\nexport class CommandRegistry {\n private commands: Map<string, typeof Command>;\n private builtInCommands: Set<string>;\n static commandsPattern = \"src/commands/**/*.{ts,js}\";\n static logger = logger;\n\n /**\n * Private constructor to prevent direct instantiation\n * @internal Not meant to be used outside by the user\n */\n private constructor() {\n this.commands = new Map();\n this.builtInCommands = new Set();\n }\n\n static getInstance() {\n return new CommandRegistry();\n }\n\n static setCommandsPattern(pattern: string) {\n this.commandsPattern = pattern;\n }\n\n getCommand(name: string): typeof Command | null {\n return this.commands.get(name) ?? null;\n }\n\n getCommands(): (typeof Command)[] {\n return Array.from(this.commands.values());\n }\n\n getBuiltInCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter((cmd) =>\n this.builtInCommands.has(cmd.commandName),\n );\n }\n\n getUserDefinedCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter(\n (cmd) => !this.builtInCommands.has(cmd.commandName),\n );\n }\n\n isBuiltInCommand(commandName: string): boolean {\n return this.builtInCommands.has(commandName);\n }\n\n async loadCommands(commandsPattern: string) {\n CommandRegistry.logger.info(`Loading commands from ${commandsPattern}`);\n\n const commandFiles = await glob(commandsPattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n // if even one file is ts check if ts-node is installed\n if (commandFiles.some((file) => file.endsWith(\".ts\"))) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n } catch {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n }\n\n for (const commandFile of commandFiles) {\n const command = await import(commandFile)\n .then((module) => {\n if (module.default) {\n return module.default;\n }\n\n return module;\n })\n .catch((error) => {\n CommandRegistry.logger.error(\n `Error loading command ${commandFile}: ${error}`,\n );\n return null;\n });\n\n if (command) {\n this.commands.set(command.commandName, command);\n }\n }\n\n for (const command of baseCommands) {\n this.commands.set(command.commandName, command);\n this.builtInCommands.add(command.commandName);\n }\n }\n}\n\nexport const commandRegistry = CommandRegistry.getInstance();\n","declare global {\n interface Request {\n params: Record<string, string>;\n query: Record<string, string>;\n }\n}\n\nexport class NativeRequest extends Request {}\n","import type { TSchema } from \"@sinclair/typebox\";\nimport type { ZodAny } from \"zod\";\nimport { AjvStateManager } from \"../../ajv/ajv.js\";\nimport { AjvCompileParams } from \"../../ajv/ajv_types.js\";\nimport { openapiSchemaMap } from \"../../ajv/openapi_schema_map.js\";\nimport type { AsyncLocalStorageContext } from \"../../plugins/async_local_storage/async_local_storage_types.js\";\nimport type { FormFile } from \"../../plugins/file/file_types.js\";\nimport { nativeCrypto } from \"../../runtime/native_crypto.js\";\nimport { NativeRequest } from \"../../runtime/native_request.js\";\nimport { TypeBoxLoader } from \"../../validator/typebox_loader.js\";\nimport { validateSchema } from \"../../validator/validator.js\";\nimport { ZodLoader } from \"../../validator/zod_loader.js\";\n\n/**\n * WeakMap to cache schema objects by reference, avoiding expensive JSON.stringify calls.\n * Uses Symbol for unique cache keys to prevent any potential counter overflow in long-running servers.\n * This cache is used for Zod, TypeBox, and plain JSON schemas.\n */\nconst schemaRefCache = new WeakMap<object, symbol>();\n\n/**\n * The request object.\n * This is the main object that is passed to the handler function.\n * It contains the request body, query parameters, files, cookies, etc.\n * It also contains the validation methods.\n */\nexport class Request<\n Params extends Record<string, string> = any,\n> extends NativeRequest {\n static fromRequest(request: Request | NativeRequest): Request {\n return new Request(request.url, {\n method: request.method,\n body: request.body,\n headers: request.headers,\n });\n }\n\n private static compileAndValidate(\n inputSchema: ZodAny | TSchema | AjvCompileParams[0],\n data: any,\n safe: boolean,\n ): any {\n let jsonSchema: any;\n let cacheKey: string;\n\n // Handle Zod schemas (need conversion to JSON Schema)\n if (ZodLoader.isZodSchema(inputSchema)) {\n const zodSchema = inputSchema as ZodAny;\n\n // Try to get cache key from WeakMap first\n let refKey = schemaRefCache.get(zodSchema);\n if (!refKey) {\n refKey = Symbol(\"zod_schema\");\n schemaRefCache.set(zodSchema, refKey);\n }\n\n // Check if we already have a compiled schema\n let cached = openapiSchemaMap.get(refKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n // Convert to JSON schema and compile\n jsonSchema = zodSchema.toJSONSchema();\n const compiledSchema = AjvStateManager.ajv.compile(jsonSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n // Handle TypeBox schemas (already JSON Schema compliant)\n if (TypeBoxLoader.isTypeBoxSchema(inputSchema)) {\n const typeboxSchema = inputSchema as TSchema;\n\n // Try to get cache key from WeakMap first\n let refKey = schemaRefCache.get(typeboxSchema);\n if (!refKey) {\n refKey = Symbol(\"typebox_schema\");\n schemaRefCache.set(typeboxSchema, refKey);\n }\n\n // Check if we already have a compiled schema\n let cached = openapiSchemaMap.get(refKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n // TypeBox schemas are already JSON Schema, compile directly\n const compiledSchema = AjvStateManager.ajv.compile(typeboxSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n // Handle plain JSON schemas\n const plainSchema = inputSchema as AjvCompileParams[0];\n\n // Try to use WeakMap cache for object references\n if (typeof plainSchema === \"object\" && plainSchema !== null) {\n let refKey = schemaRefCache.get(plainSchema);\n if (!refKey) {\n refKey = Symbol(\"json_schema\");\n schemaRefCache.set(plainSchema, refKey);\n }\n\n const cached = openapiSchemaMap.get(refKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n const compiledSchema = AjvStateManager.ajv.compile(plainSchema);\n openapiSchemaMap.set(refKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n // Fallback to JSON.stringify for primitives or edge cases\n cacheKey = JSON.stringify(plainSchema);\n const cached = openapiSchemaMap.get(cacheKey);\n if (cached) {\n return validateSchema(cached, data, safe);\n }\n\n const compiledSchema = AjvStateManager.ajv.compile(plainSchema);\n openapiSchemaMap.set(cacheKey, compiledSchema);\n return validateSchema(compiledSchema, data, safe);\n }\n\n /**\n * Enrich native request with validation methods.\n */\n static enrichRequest(request: Request): Request {\n request.validate = (\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any => {\n return Request.compileAndValidate(inputSchema, request.body || {}, safe);\n };\n\n request.validateQuery = (\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any => {\n return Request.compileAndValidate(inputSchema, request.query || {}, safe);\n };\n\n request.validateAll = (\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any => {\n return Request.compileAndValidate(\n inputSchema,\n {\n ...(request.body ? { body: request.body } : {}),\n ...(request.query ? { query: request.query } : {}),\n },\n safe,\n );\n };\n\n request.file = (fieldName: string) => {\n return request.files.find((file) => file.formName === fieldName) ?? null;\n };\n\n request.files = [];\n request.saveSession = async () => {};\n request.destroySession = async () => {};\n request.session = {};\n request.cookies = {};\n request.cookie = (name: string) => {\n return request.cookies[name];\n };\n\n return request;\n }\n\n /**\n * The context of the request. Can be augmented extending AsyncLocalStorageContext interface\n * @asyncLocalStorage middleware is required\n * @example\n * ```ts\n * declare module \"balda\" {\n * interface AsyncLocalStorageContext {\n * userId: string;\n * }\n * }\n * ```\n */\n ctx: AsyncLocalStorageContext = {} as AsyncLocalStorageContext;\n\n /**\n * The file of the request.\n * @fileParser middleware is required\n */\n file: (fieldName: string) => FormFile | null = (fieldName: string) => {\n return this.files.find((file) => file.formName === fieldName) ?? null;\n };\n\n /**\n * The cookies of the request.\n * @cookie middleware is required\n */\n cookies: Record<string, string> = {};\n\n /**\n * The cookie of the request.\n * @cookie middleware is required\n */\n cookie: (name: string) => string | undefined = (name: string) => {\n return this.cookies[name];\n };\n\n /**\n * tells if the request has timed out.\n * @timeout middleware is required\n */\n timeout?: boolean;\n\n /**\n * The session of the request. Uses cookies to send the session id\n * @cookie middleware is required\n * @session middleware is required\n */\n session?: Record<string, any> = undefined;\n\n /**\n * The session of the request. Uses cookies to send the session id\n * @cookie middleware is required\n * @session middleware is required\n */\n saveSession: () => Promise<void> = async () => {};\n\n /**\n * The session of the request.\n * @cookie middleware is required\n * @session middleware is required\n */\n destroySession: () => Promise<void> = async () => {};\n\n /**\n * The ip address of the request.\n * Tries to get the ip address from the `x-forwarded-for` header. If not available, it will use the remote address from the request.\n */\n ip?: string;\n\n /**\n * The files of the request. Only available for multipart/form-data requests and if the file parser middleware is used.\n */\n files: FormFile[] = [];\n\n /**\n * The parameters of the request. Can be typed with a generic in the Request object\n * @example\n * ```ts\n * Request<{ id: string }>\n */\n params: Params = {} as Params;\n\n /**\n * The query parameters of the request.\n */\n query: Record<string, string> = {};\n\n /**\n * The raw body of the request. Only available for POST, PUT, PATCH and DELETE requests.\n */\n declare rawBody?: ArrayBuffer;\n\n declare private _id: string;\n\n /**\n * The id of the request.\n */\n get id(): string {\n if (!this._id) {\n this._id = nativeCrypto.randomUUID();\n }\n\n return this._id;\n }\n\n set id(value: string) {\n this._id = value;\n }\n\n /**\n * The parsed body of the request\n */\n override body: any;\n\n /**\n * The validated body of the request.\n * @param inputSchema - The schema to validate the body against (Zod schema or JSON Schema).\n * @param safe - If true, the function will return the original body if the validation fails instead of throwing an error.\n */\n validate(\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any {\n return Request.compileAndValidate(inputSchema, this.body || {}, safe);\n }\n\n /**\n * Validates the query string of the request.\n * @param inputSchema - The schema to validate the query against (Zod schema or JSON Schema).\n * @param safe - If true, the function will return undefined if the validation fails instead of throwing an error.\n */\n validateQuery(\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any {\n return Request.compileAndValidate(inputSchema, this.query || {}, safe);\n }\n\n /**\n * Validates the body and query string of the request.\n * @param inputSchema - The schema to validate against (Zod schema or JSON Schema).\n * @param safe - If true, the function will return undefined if the validation fails instead of throwing an error.\n */\n validateAll(\n inputSchema: ZodAny | AjvCompileParams[0],\n safe: boolean = false,\n ): any {\n return Request.compileAndValidate(\n inputSchema,\n {\n ...(this.body ?? {}),\n ...(this.query ?? {}),\n },\n safe,\n );\n }\n}\n","import { runtime } from \"./runtime.js\";\n\nexport class NativeEnv {\n get(key: string): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return process.env[key] ?? \"\";\n default:\n throw new Error(`Unsupported runtime: ${runtime.type}`);\n }\n }\n\n getEnvironment(): Record<string, string> {\n switch (runtime.type) {\n case \"node\":\n case \"deno\":\n case \"bun\":\n return Object.fromEntries(\n Object.entries(process.env).filter(\n ([_, value]) => value !== undefined,\n ),\n ) as Record<string, string>;\n }\n }\n}\n","import type { BaldaError } from \"./balda_error.js\";\nimport { NativeEnv } from \"../runtime/native_env.js\";\n\nconst nativeEnv = new NativeEnv();\n\nexport const errorFactory = (error: BaldaError) => {\n const isDevelopment = nativeEnv.get(\"NODE_ENV\") !== \"production\";\n\n return {\n code: error.name || \"INTERNAL_ERROR\",\n message: error.message,\n ...(isDevelopment && { stack: error.stack, cause: error.cause }),\n };\n};\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class MethodNotAllowedError extends BaldaError {\n constructor(path: string, method: string) {\n super(`METHOD_NOT_ALLOWED: Cannot ${method} ${path}`);\n }\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class RouteNotFoundError extends BaldaError {\n constructor(path: string, method: string) {\n super(`ROUTE_NOT_FOUND: Cannot ${method} ${path}`);\n }\n}\n","import fs from \"node:fs\";\nimport { runtime } from \"./runtime.js\";\n\nexport type ReadFileOptions = {\n encoding?: string;\n flag?: string;\n};\n\nclass NativeFile {\n file(\n path: string,\n options?: ReadFileOptions,\n ): Buffer | Uint8Array | ArrayBuffer {\n switch (runtime.type) {\n // We do not use Bun api since we need this operation to be sync\n case \"bun\":\n case \"node\":\n return fs.readFileSync(path, options as any);\n case \"deno\":\n return Deno.readFileSync(path);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFile = new NativeFile();\n","export const mimeTypesMap = new Map<string, string>([\n // text/web\n [\".html\", \"text/html\"],\n [\".htm\", \"text/html\"],\n [\".css\", \"text/css\"],\n [\".js\", \"application/javascript\"],\n [\".mjs\", \"application/javascript\"],\n [\".cjs\", \"application/javascript\"],\n [\".ts\", \"application/typescript\"],\n [\".jsx\", \"text/jsx\"],\n [\".tsx\", \"text/tsx\"],\n [\".json\", \"application/json\"],\n [\".xml\", \"application/xml\"],\n [\".yaml\", \"application/yaml\"],\n [\".yml\", \"application/yaml\"],\n [\".csv\", \"text/csv\"],\n [\".txt\", \"text/plain\"],\n [\".md\", \"text/markdown\"],\n [\".markdown\", \"text/markdown\"],\n\n // image\n [\".png\", \"image/png\"],\n [\".jpg\", \"image/jpeg\"],\n [\".jpeg\", \"image/jpeg\"],\n [\".gif\", \"image/gif\"],\n [\".svg\", \"image/svg+xml\"],\n [\".ico\", \"image/x-icon\"],\n [\".webp\", \"image/webp\"],\n [\".avif\", \"image/avif\"],\n [\".bmp\", \"image/bmp\"],\n [\".tiff\", \"image/tiff\"],\n [\".tif\", \"image/tiff\"],\n [\".heic\", \"image/heic\"],\n [\".heif\", \"image/heif\"],\n\n // video\n [\".mp4\", \"video/mp4\"],\n [\".webm\", \"video/webm\"],\n [\".avi\", \"video/x-msvideo\"],\n [\".mov\", \"video/quicktime\"],\n [\".mkv\", \"video/x-matroska\"],\n [\".wmv\", \"video/x-ms-wmv\"],\n [\".flv\", \"video/x-flv\"],\n [\".m4v\", \"video/x-m4v\"],\n [\".mpeg\", \"video/mpeg\"],\n [\".mpg\", \"video/mpeg\"],\n [\".3gp\", \"video/3gpp\"],\n\n // audio\n [\".mp3\", \"audio/mpeg\"],\n [\".wav\", \"audio/wav\"],\n [\".ogg\", \"audio/ogg\"],\n [\".flac\", \"audio/flac\"],\n [\".aac\", \"audio/aac\"],\n [\".m4a\", \"audio/mp4\"],\n [\".wma\", \"audio/x-ms-wma\"],\n [\".opus\", \"audio/opus\"],\n [\".mid\", \"audio/midi\"],\n [\".midi\", \"audio/midi\"],\n\n // font\n [\".woff\", \"font/woff\"],\n [\".woff2\", \"font/woff2\"],\n [\".ttf\", \"font/ttf\"],\n [\".otf\", \"font/otf\"],\n [\".eot\", \"application/vnd.ms-fontobject\"],\n\n // document\n [\".pdf\", \"application/pdf\"],\n [\".doc\", \"application/msword\"],\n [\n \".docx\",\n \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n ],\n [\".xls\", \"application/vnd.ms-excel\"],\n [\n \".xlsx\",\n \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n ],\n [\".ppt\", \"application/vnd.ms-powerpoint\"],\n [\n \".pptx\",\n \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n ],\n [\".odt\", \"application/vnd.oasis.opendocument.text\"],\n [\".ods\", \"application/vnd.oasis.opendocument.spreadsheet\"],\n [\".odp\", \"application/vnd.oasis.opendocument.presentation\"],\n [\".rtf\", \"application/rtf\"],\n [\".epub\", \"application/epub+zip\"],\n\n // archives\n [\".zip\", \"application/zip\"],\n [\".tar\", \"application/x-tar\"],\n [\".gz\", \"application/gzip\"],\n [\".gzip\", \"application/gzip\"],\n [\".bz2\", \"application/x-bzip2\"],\n [\".xz\", \"application/x-xz\"],\n [\".rar\", \"application/vnd.rar\"],\n [\".7z\", \"application/x-7z-compressed\"],\n\n // other\n [\".wasm\", \"application/wasm\"],\n [\".map\", \"application/json\"],\n [\".webmanifest\", \"application/manifest+json\"],\n [\".ics\", \"text/calendar\"],\n [\".vcf\", \"text/vcard\"],\n [\".sql\", \"application/sql\"],\n [\".sh\", \"application/x-sh\"],\n [\".bat\", \"application/x-msdos-program\"],\n [\".exe\", \"application/x-msdownload\"],\n [\".dll\", \"application/x-msdownload\"],\n [\".bin\", \"application/octet-stream\"],\n [\".iso\", \"application/x-iso9660-image\"],\n [\".dmg\", \"application/x-apple-diskimage\"],\n [\".apk\", \"application/vnd.android.package-archive\"],\n [\".jar\", \"application/java-archive\"],\n [\".swf\", \"application/x-shockwave-flash\"],\n]);\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { MethodNotAllowedError } from \"../../errors/method_not_allowed.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { SwaggerRouteOptions } from \"../swagger/swagger_types.js\";\nimport { nativeFile } from \"../../runtime/native_file.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { mimeTypesMap } from \"../../plugins/static/static_constants.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { StaticPluginOptions } from \"./static_types.js\";\n\n/**\n * Creates a static file serving middleware and registers all routes for the given path\n * @param options - The options for serving static files\n * @param options.source - The file system directory path where the assets are located\n * @param options.path - The URL path where the assets will be served\n * @param swaggerOptions - Optional swagger documentation options\n * @example\n * serveStatic({ source: 'tmp/assets', path: '/assets' }) // Serves from ./tmp/assets at /assets/*\n *\n * @example\n * serveStatic({ source: 'public', path: '/public' }) // Serves from ./public at /public/*\n */\nexport const serveStatic = (\n options: StaticPluginOptions,\n swaggerOptions?: SwaggerRouteOptions,\n): ServerRouteMiddleware => {\n const { source, path: urlPath } = options;\n\n // Normalize URL path\n let normalizedPath = urlPath;\n\n // Ensure path starts with /\n if (!normalizedPath.startsWith(\"/\")) {\n normalizedPath = \"/\" + normalizedPath;\n }\n\n // Remove trailing slash if present\n if (normalizedPath !== \"/\" && normalizedPath.endsWith(\"/\")) {\n normalizedPath = normalizedPath.slice(0, -1);\n }\n\n // Static files handler\n router.addOrUpdate(\n \"GET\",\n `${normalizedPath}/*`,\n [],\n async (req, res) => {\n return staticFileHandler(req, res, source);\n },\n {\n service: \"StaticFiles\",\n ...swaggerOptions,\n },\n );\n\n return async (_req: Request, _res: Response, next: NextFunction) => {\n return next();\n };\n};\n\nasync function staticFileHandler(req: Request, res: Response, path: string) {\n if (req.method !== \"GET\" && req.method !== \"HEAD\") {\n return res.status(405).json({\n ...errorFactory(new MethodNotAllowedError(req.url, req.method)),\n });\n }\n\n const wildcardPath = req.params[\"*\"] || \"\";\n const filePath = nativePath.join(path, wildcardPath);\n const resolvedPath = nativePath.resolve(nativeCwd.getCwd(), filePath);\n const sourcePath = nativePath.resolve(nativeCwd.getCwd(), path);\n if (!resolvedPath.startsWith(sourcePath)) {\n return res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }\n\n try {\n const stats = await nativeFs.stat(resolvedPath);\n if (!stats.isFile) {\n return res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }\n } catch (error: any) {\n if (error.code === \"ENOENT\") {\n return res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }\n throw error;\n }\n\n const contentType = getContentType(nativePath.extName(resolvedPath));\n res.setHeader(\"Content-Type\", contentType);\n const fileContent = nativeFile.file(resolvedPath);\n res.raw(fileContent);\n}\n\nexport function getContentType(ext: string) {\n return mimeTypesMap.get(ext) || \"application/octet-stream\";\n}\n","import { type ServerResponse } from \"node:http\";\nimport { type CookieOptions } from \"../../plugins/cookie/cookie_types.js\";\nimport { getContentType } from \"../../plugins/static/static.js\";\nimport { nativeFile } from \"../../runtime/native_file.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\n\n/**\n * The response object.\n * This is the main object that is passed to the handler function.\n * It contains the response body, status, headers, etc.\n * It also contains the methods to send the response.\n */\nexport class Response {\n /**\n * The node http response object available only on the node runtime, useful for direct response manipulation\n * @warning undefined on other runtimes since they already use Web API Response object\n */\n declare nodeResponse: ServerResponse;\n\n /**\n * The status of the response\n */\n responseStatus: number;\n\n /**\n * The headers of the response\n */\n headers: Record<string, string>;\n\n /**\n * The body of the response\n */\n private body: any | Promise<any>;\n\n constructor(status: number = 200) {\n this.responseStatus = status;\n this.headers = {};\n }\n\n /**\n * Set a header for the response\n */\n setHeader(key: string, value: string): this {\n this.headers[key] = value;\n return this;\n }\n\n /**\n * Set the status of the response, status defaults to 200\n */\n status(status: number): this {\n this.responseStatus = status;\n return this;\n }\n\n /**\n * Send a response with the given body, tries to determine the content type based on the body type, status defaults to 200\n * @warning If cannot determine the content type, it will be sent as is\n */\n send(body: any): void {\n if (body === null || body === undefined) {\n return this.text(\"\");\n }\n\n if (typeof body === \"string\") {\n return this.text(body);\n }\n\n if (\n typeof body === \"number\" ||\n typeof body === \"boolean\" ||\n typeof body === \"bigint\"\n ) {\n return this.raw(body);\n }\n\n if (typeof Buffer !== \"undefined\" && body instanceof Buffer) {\n return this.download(new Uint8Array(body));\n }\n\n if (body instanceof ArrayBuffer || body instanceof Uint8Array) {\n return this.download(new Uint8Array(body));\n }\n\n if (typeof body === \"object\" && body !== null) {\n try {\n return this.json(body);\n } catch (error) {\n return this.text(String(body));\n }\n }\n\n if (typeof body === \"symbol\") {\n return this.text(body.toString());\n }\n\n this.body = body;\n }\n\n /**\n * Send a response with the given body without any content type or encoding (as is), status defaults to 200\n */\n raw(body: any): void {\n this.body = body;\n }\n\n /**\n * Send a response with the given text, status defaults to 200\n */\n text(body: string): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"text/plain\",\n };\n }\n\n /**\n * Send a response with the given JSON, status defaults to 200\n */\n json<T extends Record<string, unknown> | Array<unknown>>(body: T): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"application/json\",\n };\n }\n\n /**\n * Send a response with the given HTML, status defaults to 200\n */\n html(htmlString: string): void {\n this.body = htmlString;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"text/html\",\n };\n }\n\n /**\n * Send a response with the given XML, status defaults to 200\n */\n xml(body: string): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"application/xml\",\n };\n }\n\n /**\n * Send a response with the given binary with Content-Type of application/octet-stream header, status defaults to 200\n */\n download(body: Uint8Array | Buffer): void {\n this.body = body;\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"application/octet-stream\",\n };\n }\n\n /**\n * Send a response with the given file content, status defaults to 200\n * @param options only affects node and bun environment\n */\n file(\n pathToFile: string,\n options?: {\n encoding?: string;\n flag?: string;\n },\n ): void {\n const ext = nativePath.extName(pathToFile);\n const mimeType = getContentType(ext);\n this.body = nativeFile.file(pathToFile, options);\n this.headers = {\n ...this.headers,\n \"Content-Type\": mimeType,\n };\n }\n\n /**\n * 2XX Success\n */\n\n /**\n * 200 OK\n */\n ok(body?: any): void {\n this.status(200).send(body);\n }\n\n /**\n * 201 Created\n */\n created(body?: any): void {\n this.status(201).send(body);\n }\n\n /**\n * 202 Accepted\n */\n accepted(body?: any): void {\n this.status(202).send(body);\n }\n\n /**\n * 204 No Content\n */\n noContent(): void {\n this.status(204).send(\"\");\n }\n\n /**\n * 206 Partial Content\n */\n partialContent(body?: any): void {\n this.status(206).send(body);\n }\n\n /**\n * 3XX Redirection\n */\n\n /**\n * 300 Multiple Choices\n */\n multipleChoices(url: string): void {\n this.status(300).setHeader(\"Location\", url);\n }\n\n redirect(url: string): void {\n this.status(302).setHeader(\"Location\", url);\n }\n\n /**\n * 301 Moved Permanently\n */\n movedPermanently(url: string): void {\n this.status(301).setHeader(\"Location\", url);\n }\n\n /**\n * 302 Found (Temporary Redirect)\n */\n found(url: string): void {\n this.status(302).setHeader(\"Location\", url);\n }\n\n /**\n * 303 See Other\n */\n seeOther(url: string): void {\n this.status(303).setHeader(\"Location\", url);\n }\n\n /**\n * 304 Not Modified\n */\n notModified(): void {\n this.status(304).send(\"\");\n }\n\n /**\n * 307 Temporary Redirect\n */\n temporaryRedirect(url: string): void {\n this.status(307).setHeader(\"Location\", url);\n }\n\n /**\n * 308 Permanent Redirect\n */\n permanentRedirect(url: string): void {\n this.status(308).setHeader(\"Location\", url);\n }\n\n /**\n * 4XX Client Errors\n */\n\n /**\n * 400 Bad Request\n */\n badRequest(body?: any): void {\n this.status(400).send(body);\n }\n\n /**\n * 401 Unauthorized\n */\n unauthorized(body?: any): void {\n this.status(401).send(body);\n }\n\n /**\n * 403 Forbidden\n */\n forbidden(body?: any): void {\n this.status(403).send(body);\n }\n\n /**\n * 404 Not Found\n */\n notFound(body?: any): void {\n this.status(404).send(body);\n }\n\n /**\n * 405 Method Not Allowed\n */\n methodNotAllowed(body?: any): void {\n this.status(405).send(body);\n }\n\n /**\n * 406 Not Acceptable\n */\n notAcceptable(body?: any): void {\n this.status(406).send(body);\n }\n\n /**\n * 409 Conflict\n */\n conflict(body?: any): void {\n this.status(409).send(body);\n }\n\n /**\n * 410 Gone\n */\n gone(body?: any): void {\n this.status(410).send(body);\n }\n\n /**\n * 413 Payload Too Large\n */\n payloadTooLarge(body?: any): void {\n this.status(413).send(body);\n }\n\n /**\n * 415 Unsupported Media Type\n */\n unsupportedMediaType(body?: any): void {\n this.status(415).send(body);\n }\n\n /**\n * 422 Unprocessable Entity\n */\n unprocessableEntity(body?: any): void {\n this.status(422).send(body);\n }\n\n /**\n * 429 Too Many Requests\n */\n tooManyRequests(body?: any): void {\n this.status(429).send(body);\n }\n\n /**\n * 5XX Server Errors\n */\n internalServerError(body?: any): void {\n this.status(500).send(body);\n }\n\n /**\n * 501 Not Implemented\n */\n notImplemented(body?: any): void {\n this.status(501).send(body);\n }\n\n /**\n * 502 Bad Gateway\n */\n badGateway(body?: any): void {\n this.status(502).send(body);\n }\n\n /**\n * 503 Service Unavailable\n */\n serviceUnavailable(body?: any): void {\n this.status(503).send(body);\n }\n\n /**\n * 504 Gateway Timeout\n */\n gatewayTimeout(body?: any): void {\n this.status(504).send(body);\n }\n\n /**\n * 505 HTTP Version Not Supported\n */\n httpVersionNotSupported(body?: any): void {\n this.status(505).send(body);\n }\n\n /**\n * Set a cookie for the response, cookie middleware must be registered in order to use this function\n */\n cookie?(_name: string, _value: string, _options?: CookieOptions): void;\n\n /**\n * Clear a cookie for the response, cookie middleware must be registered in order to use this function\n */\n clearCookie?(_name: string, _options?: CookieOptions): void;\n\n /**\n * Stream a response using an async generator or ReadableStream\n * Sets appropriate headers for Server-Sent Events by default\n */\n stream(\n source: AsyncGenerator<any> | Generator<any> | ReadableStream,\n options?: { customHeaders?: Record<string, string> },\n ): void {\n this.headers = {\n ...this.headers,\n \"Content-Type\": \"text/event-stream\",\n \"Cache-Control\": \"no-cache\",\n Connection: \"keep-alive\",\n ...options?.customHeaders,\n };\n\n if (source instanceof ReadableStream) {\n this.body = source;\n return;\n }\n\n this.body = new ReadableStream({\n async start(controller) {\n for await (const chunk of source) {\n controller.enqueue(new TextEncoder().encode(chunk));\n }\n\n controller.close();\n },\n });\n }\n\n /**\n * Get the body of the response\n */\n getBody(): any {\n return this.body;\n }\n}\n","import type { GraphQLSchema } from \"graphql\";\nimport type { createSchema, createYoga } from \"graphql-yoga\";\nimport type {\n GraphQLContext,\n GraphQLOptions,\n GraphQLResolverMap,\n GraphQLResolvers,\n GraphQLResolverType,\n GraphQLTypeDef,\n} from \"./graphql_types.js\";\n\nexport type { GraphQLContext };\n\nexport class GraphQL {\n private schemaOptions: Parameters<typeof createSchema>[0];\n private yogaOptions: Parameters<typeof createYoga>[0];\n isEnabled: boolean;\n\n constructor(options?: GraphQLOptions) {\n const config = this.initializeConfiguration(options);\n this.schemaOptions = config.schemaOptions;\n this.yogaOptions = config.yogaOptions;\n this.isEnabled = config.isEnabled;\n }\n\n getSchema(createSchemaFn: typeof createSchema): GraphQLSchema {\n return createSchemaFn(this.schemaOptions);\n }\n\n getYogaOptions(): Parameters<typeof createYoga>[0] {\n return this.yogaOptions;\n }\n\n /**\n * Add a type definition to the schema\n */\n addTypeDef(typeDef: GraphQLTypeDef): void {\n const isFunction = typeof typeDef === \"function\";\n if (isFunction) {\n this.addTypeDef(typeDef());\n return;\n }\n\n const isArray = Array.isArray(typeDef);\n if (isArray) {\n this.addTypeDefArray(typeDef);\n return;\n }\n\n this.ensureTypeDefsArray();\n (this.schemaOptions.typeDefs as unknown[]).push(typeDef);\n }\n\n /**\n * Add a resolver to the schema\n * @param type - The resolver type (Query, Mutation, Subscription, or a custom type name)\n * @param resolvers - An object mapping field names to resolver functions, or a full resolver object\n */\n addResolver(type: GraphQLResolverType, resolvers: GraphQLResolverMap): void;\n addResolver(resolver: GraphQLResolvers): void;\n addResolver(type: string, resolvers: GraphQLResolverMap): void;\n addResolver(\n typeOrResolver: GraphQLResolverType | GraphQLResolvers | string,\n resolvers?: GraphQLResolverMap,\n ): void {\n const isStringType = typeof typeOrResolver === \"string\" && resolvers;\n if (isStringType) {\n this.addResolverByType(typeOrResolver, resolvers);\n return;\n }\n\n this.addFullResolver(typeOrResolver as GraphQLResolvers);\n }\n\n private initializeConfiguration(options?: GraphQLOptions) {\n const hasNoOptions = !options;\n if (hasNoOptions) {\n return this.createDisabledConfiguration();\n }\n return this.createEnabledConfiguration(options);\n }\n\n private createDisabledConfiguration() {\n return {\n schemaOptions: {\n typeDefs: ``,\n resolvers: {},\n },\n yogaOptions: {},\n isEnabled: false,\n };\n }\n\n private createEnabledConfiguration(options: GraphQLOptions) {\n return {\n schemaOptions: this.resolveSchemaOptions(options.schema),\n yogaOptions: this.resolveYogaOptions(options.yogaOptions),\n isEnabled: true,\n };\n }\n\n private resolveSchemaOptions(\n schema: GraphQLOptions[\"schema\"],\n ): Parameters<typeof createSchema>[0] {\n const hasSchema = schema !== undefined;\n if (hasSchema) {\n return schema;\n }\n return {\n typeDefs: ``,\n resolvers: {},\n };\n }\n\n private resolveYogaOptions(\n yogaOptions: GraphQLOptions[\"yogaOptions\"],\n ): Parameters<typeof createYoga>[0] {\n const hasYogaOptions = yogaOptions !== undefined;\n if (hasYogaOptions) {\n return yogaOptions;\n }\n return {};\n }\n\n private addResolverByType(type: string, resolvers: GraphQLResolverMap): void {\n this.ensureResolversInitialized();\n\n const isArrayResolvers = Array.isArray(this.schemaOptions.resolvers);\n if (isArrayResolvers) {\n (this.schemaOptions.resolvers as unknown[]).push({ [type]: resolvers });\n return;\n }\n\n this.mergeResolverIntoObject(type, resolvers);\n }\n\n private ensureResolversInitialized(): void {\n const hasNoResolvers = !this.schemaOptions.resolvers;\n if (hasNoResolvers) {\n this.schemaOptions.resolvers = {};\n }\n }\n\n private mergeResolverIntoObject(\n type: string,\n resolvers: GraphQLResolverMap,\n ): void {\n const resolversObj = this.schemaOptions.resolvers as Record<\n string,\n unknown\n >;\n const existingTypeResolver = resolversObj[type];\n const isObjectResolver =\n existingTypeResolver && typeof existingTypeResolver === \"object\";\n\n if (isObjectResolver) {\n resolversObj[type] = {\n ...(existingTypeResolver as Record<string, unknown>),\n ...resolvers,\n };\n return;\n }\n\n resolversObj[type] = resolvers;\n }\n\n private addFullResolver(resolver: GraphQLResolvers): void {\n this.ensureResolversInitialized();\n\n const isArray = Array.isArray(resolver);\n if (isArray) {\n this.addResolverArray(resolver);\n return;\n }\n\n const isObject = typeof resolver === \"object\" && resolver !== null;\n if (isObject) {\n this.addResolverObject(resolver);\n return;\n }\n\n this.schemaOptions.resolvers = resolver;\n }\n\n private addResolverArray(resolver: GraphQLResolvers[]): void {\n const currentIsArray = Array.isArray(this.schemaOptions.resolvers);\n if (currentIsArray) {\n this.schemaOptions.resolvers = [\n ...(this.schemaOptions.resolvers as unknown[]),\n ...resolver,\n ] as GraphQLResolvers;\n return;\n }\n\n this.schemaOptions.resolvers = [\n this.schemaOptions.resolvers,\n ...resolver,\n ] as GraphQLResolvers;\n }\n\n private addResolverObject(resolver: GraphQLResolvers): void {\n const currentIsArray = Array.isArray(this.schemaOptions.resolvers);\n if (currentIsArray) {\n this.schemaOptions.resolvers = [\n ...(this.schemaOptions.resolvers as unknown[]),\n resolver,\n ] as GraphQLResolvers;\n return;\n }\n\n this.schemaOptions.resolvers = {\n ...(this.schemaOptions.resolvers as Record<string, unknown>),\n ...(resolver as Record<string, unknown>),\n } as GraphQLResolvers;\n }\n\n private addTypeDefArray(typeDefs: GraphQLTypeDef[]): void {\n for (const def of typeDefs) {\n this.addTypeDef(def);\n }\n }\n\n private ensureTypeDefsArray(): void {\n const isAlreadyArray = Array.isArray(this.schemaOptions.typeDefs);\n if (isAlreadyArray) {\n return;\n }\n\n const hasExistingTypeDefs = this.schemaOptions.typeDefs !== undefined;\n if (hasExistingTypeDefs) {\n this.schemaOptions.typeDefs = [\n this.schemaOptions.typeDefs,\n ] as GraphQLTypeDef;\n return;\n }\n\n this.schemaOptions.typeDefs = [] as unknown as GraphQLTypeDef;\n }\n}\n","import { Response } from \"../server/http/response.js\";\n\nexport class MockResponse<T = any> {\n constructor(private readonly response: Response) {}\n\n // base getters\n body(): T {\n return this.response.getBody();\n }\n\n statusCode(): number {\n return this.response.responseStatus;\n }\n\n headers(): Record<string, string> {\n return this.response.headers;\n }\n\n // assertions\n assertStatus(status: number): this {\n if (this.response.responseStatus !== status) {\n throw new Error(\n `Expected status ${status}, but got ${this.response.responseStatus}`,\n );\n }\n return this;\n }\n\n assertHeader(header: string, value: string): this {\n if (this.response.headers[header] !== value) {\n throw new Error(\n `Expected header ${header} to be ${value}, but got ${this.response.headers[header]}`,\n );\n }\n return this;\n }\n\n assertHeaderExists(header: string): this {\n if (!(header in this.response.headers)) {\n throw new Error(\n `Expected header ${header} to exist, but it was not found`,\n );\n }\n return this;\n }\n\n assertHeaderNotExists(header: string): this {\n if (header in this.response.headers) {\n throw new Error(\n `Expected header ${header} to not exist, but it was found with value: ${this.response.headers[header]}`,\n );\n }\n return this;\n }\n\n // TODO: body assertions\n\n assertBodySubset(subset: Partial<T>): this {\n this.assertSubset(this.body(), subset, \"body\");\n return this;\n }\n\n assertBodyDeepEqual(expected: T): this {\n this.assertDeepEqual(this.body(), expected, \"body\");\n return this;\n }\n\n assertBodyNotSubset(subset: Partial<T>): this {\n this.assertNotSubset(this.body(), subset, \"body\");\n return this;\n }\n\n assertBodyNotDeepEqual(expected: T): this {\n this.assertNotDeepEqual(this.body(), expected, \"body\");\n return this;\n }\n\n assertCustom(assertion: (response: Response) => void): this {\n assertion(this.response);\n return this;\n }\n\n private assertSubset(target: any, subset: any, path: string): void {\n for (const key in subset) {\n const currentPath = path === \"\" ? key : `${path}.${key}`;\n const targetValue = target[key];\n const subsetValue = subset[key];\n\n if (!(key in target)) {\n throw new Error(\n `Expected ${path} to have key ${key}, but it was not found`,\n );\n }\n\n if (this.isObject(subsetValue) && this.isObject(targetValue)) {\n this.assertSubset(targetValue, subsetValue, currentPath);\n } else if (Array.isArray(subsetValue) && Array.isArray(targetValue)) {\n this.assertArraySubset(targetValue, subsetValue, currentPath);\n } else if (targetValue !== subsetValue) {\n throw new Error(\n `Expected ${currentPath} to be ${subsetValue}, but got ${targetValue}`,\n );\n }\n }\n }\n\n private assertDeepEqual(target: any, expected: any, path: string): void {\n if (this.isObject(target) && this.isObject(expected)) {\n const targetKeys = Object.keys(target);\n const expectedKeys = Object.keys(expected);\n\n if (targetKeys.length !== expectedKeys.length) {\n throw new Error(\n `Expected ${path} to have ${expectedKeys.length} keys, but got ${targetKeys.length}`,\n );\n }\n\n for (const key of expectedKeys) {\n const currentPath = path === \"body\" ? key : `${path}.${key}`;\n this.assertDeepEqual(target[key], expected[key], currentPath);\n }\n } else if (Array.isArray(target) && Array.isArray(expected)) {\n this.assertArrayDeepEqual(target, expected, path);\n } else if (target !== expected) {\n throw new Error(`Expected ${path} to be ${expected}, but got ${target}`);\n }\n }\n\n private assertNotSubset(target: any, subset: any, path: string): void {\n try {\n this.assertSubset(target, subset, path);\n throw new Error(\n `Expected ${path} to NOT contain the subset, but it does`,\n );\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Expected\")) {\n // Original assertion failed, which means it's NOT a subset - this is what we want\n return;\n }\n throw error;\n }\n }\n\n private assertNotDeepEqual(target: any, expected: any, path: string): void {\n try {\n this.assertDeepEqual(target, expected, path);\n throw new Error(`Expected ${path} to NOT be deeply equal, but it is`);\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"Expected\")) {\n // Original assertion failed, which means they're NOT equal - this is what we want\n return;\n }\n throw error;\n }\n }\n\n private assertArraySubset(target: any[], subset: any[], path: string): void {\n if (subset.length > target.length) {\n throw new Error(\n `Expected ${path} to have at least ${subset.length} elements, but got ${target.length}`,\n );\n }\n\n for (let i = 0; i < subset.length; i++) {\n const currentPath = `${path}[${i}]`;\n const targetValue = target[i];\n const subsetValue = subset[i];\n\n if (this.isObject(subsetValue) && this.isObject(targetValue)) {\n this.assertSubset(targetValue, subsetValue, currentPath);\n } else if (Array.isArray(subsetValue) && Array.isArray(targetValue)) {\n this.assertArraySubset(targetValue, subsetValue, currentPath);\n } else if (targetValue !== subsetValue) {\n throw new Error(\n `Expected ${currentPath} to be ${subsetValue}, but got ${targetValue}`,\n );\n }\n }\n }\n\n private assertArrayDeepEqual(\n target: any[],\n expected: any[],\n path: string,\n ): void {\n if (target.length !== expected.length) {\n throw new Error(\n `Expected ${path} to have ${expected.length} elements, but got ${target.length}`,\n );\n }\n\n for (let i = 0; i < expected.length; i++) {\n const currentPath = `${path}[${i}]`;\n this.assertDeepEqual(target[i], expected[i], currentPath);\n }\n }\n\n private isObject(value: any): boolean {\n return value !== null && typeof value === \"object\" && !Array.isArray(value);\n }\n}\n","import type { GraphQL } from \"../../graphql/graphql.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport { Response } from \"../../server/http/response.js\";\nimport type {\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"./server_types.js\";\n\n/**\n * Execute a middleware chain\n */\nexport const executeMiddlewareChain = async (\n middlewares: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n req: Request,\n res: Response = new Response(),\n): Promise<Response> => {\n let currentIndex = 0;\n if (!middlewares.length) {\n await handler(req, res);\n return res;\n }\n\n const next = async (): Promise<void> => {\n currentIndex++;\n\n if (currentIndex >= middlewares.length) {\n await handler(req, res);\n return;\n }\n\n const middleware = middlewares[currentIndex];\n await middleware(req, res, next);\n };\n\n const firstMiddleware = middlewares[0];\n await firstMiddleware(req, res, next);\n\n return res;\n};\n\nexport const canHaveBody = (method?: string) => {\n if (!method) {\n return true;\n }\n\n return [\"post\", \"put\", \"patch\", \"delete\"].includes(method.toLowerCase());\n};\n\n/**\n * Create a GraphQL handler initializer with caching\n * Returns a function that lazily loads and initializes the GraphQL handler\n */\nexport const createGraphQLHandlerInitializer = (graphql: GraphQL) => {\n let handlerPromise: Promise<\n ReturnType<typeof import(\"graphql-yoga\").createYoga>\n > | null = null;\n let isInitializing = false;\n\n const waitForInitialization = async (): Promise<void> => {\n while (isInitializing) {\n await new Promise((resolve) => setTimeout(resolve, 10));\n }\n };\n\n const initializeHandler = async (): Promise<\n ReturnType<typeof import(\"graphql-yoga\").createYoga>\n > => {\n try {\n const { createYoga, createSchema } = await import(\"graphql-yoga\");\n const schema = graphql.getSchema(createSchema);\n const yogaOptions = graphql.getYogaOptions();\n return createYoga({\n graphqlEndpoint: \"/graphql\",\n ...yogaOptions,\n schema,\n });\n } catch (error) {\n const isModuleNotFound =\n error instanceof Error &&\n (error.message.includes(\"Cannot find module\") ||\n error.message.includes(\"Cannot find package\"));\n if (isModuleNotFound) {\n throw new Error(\n \"GraphQL is enabled but 'graphql-yoga' is not installed. \" +\n \"Install it with: npm install graphql graphql-yoga\",\n );\n }\n throw error;\n }\n };\n\n return async (): Promise<ReturnType<\n typeof import(\"graphql-yoga\").createYoga\n > | null> => {\n const isDisabled = !graphql.isEnabled;\n if (isDisabled) {\n return null;\n }\n\n const alreadyInitialized = handlerPromise !== null;\n if (alreadyInitialized) {\n return handlerPromise;\n }\n\n const currentlyInitializing = isInitializing;\n if (currentlyInitializing) {\n await waitForInitialization();\n return handlerPromise;\n }\n\n isInitializing = true;\n\n try {\n handlerPromise = initializeHandler();\n const handler = await handlerPromise;\n return handler;\n } catch (error) {\n handlerPromise = null;\n throw error;\n } finally {\n isInitializing = false;\n }\n };\n};\n","import { logger } from \"../logger/logger.js\";\nimport { MockResponse } from \"./mock_response.js\";\nimport { MockServerOptions } from \"./mock_server_types.js\";\nimport { HttpMethod } from \"../runtime/native_server/server_types.js\";\nimport {\n canHaveBody,\n executeMiddlewareChain,\n} from \"../runtime/native_server/server_utils.js\";\nimport { Request } from \"../server/http/request.js\";\nimport { Response } from \"../server/http/response.js\";\nimport { router } from \"../server/router/router.js\";\nimport type { Server } from \"../server/server.js\";\nimport { NodeHttpClient } from \"../server/server_types.js\";\n\n/**\n * Allows to mock server requests without needing to start the server, useful for testing purposes\n */\nexport class MockServer {\n readonly server: Server<NodeHttpClient>;\n\n constructor(server: Server<NodeHttpClient>) {\n this.server = server;\n }\n\n /**\n * Simulates an HTTP request without making an actual network call, useful for testing purposes\n * Executes the middleware chain and handler of the route\n * @param method - The HTTP method (GET, POST, PUT, DELETE, PATCH)\n * @param path - The request path\n * @param options - Request options including body, headers, query params, etc.\n * @throws {Error} - If more than one of body, formData, urlencoded is provided\n */\n async request<T = any>(\n method: HttpMethod,\n path: string,\n options: MockServerOptions = {},\n ): Promise<MockResponse<T>> {\n const { headers = {}, query = {}, cookies = {}, ip } = options;\n this.validateOptions(options);\n\n const route = router.find(method.toUpperCase(), path);\n if (!route) {\n const res = new Response(404);\n res.json({\n caller: \"MockServer\",\n error: \"Route not found\",\n path,\n method,\n });\n return new MockResponse(res);\n }\n\n let body = options.body;\n let contentType = \"application/json\";\n\n if (\n body &&\n typeof body === \"object\" &&\n !(body instanceof Uint8Array) &&\n !(body instanceof ArrayBuffer)\n ) {\n body = JSON.stringify(body);\n }\n\n if (options.formData) {\n const boundary = `----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;\n contentType = `multipart/form-data; boundary=${boundary}`;\n\n const multipartBody = await this.formDataToMultipart(\n options.formData,\n boundary,\n );\n body = multipartBody;\n }\n\n if (options.urlencoded) {\n contentType = \"application/x-www-form-urlencoded\";\n body = new URLSearchParams(options.urlencoded).toString();\n }\n\n const url = new URL(\n `http://${this.server.host}:${this.server.port}${path}`,\n );\n url.search = new URLSearchParams(query).toString();\n\n const req = new Request(url.toString(), {\n method: method.toUpperCase(),\n body: canHaveBody(method) ? body : undefined,\n headers: {\n \"content-type\": contentType,\n ...headers,\n },\n });\n\n req.query = { ...Object.fromEntries(url.searchParams.entries()), ...query };\n req.params = route.params;\n req.cookies = cookies;\n req.ip = ip;\n\n try {\n const res = await executeMiddlewareChain(\n route.middleware,\n route.handler,\n req,\n );\n return new MockResponse(res);\n } catch (error) {\n logger.error(\n { error },\n `Error processing mock request ${method} ${path}:`,\n );\n const errorRes = new Response(500);\n errorRes.json({\n error: \"Internal server error\",\n message: error instanceof Error ? error.message : String(error),\n });\n return new MockResponse(errorRes);\n }\n }\n\n async get<T = any>(\n path: string,\n options?: Omit<MockServerOptions, \"body\" | \"formData\" | \"urlencoded\">,\n ): Promise<MockResponse<T>> {\n return this.request(\"GET\", path, options);\n }\n\n async post<T = any>(\n path: string,\n options?: MockServerOptions,\n ): Promise<MockResponse<T>> {\n return this.request(\"POST\", path, options);\n }\n\n async put<T = any>(\n path: string,\n options?: MockServerOptions,\n ): Promise<MockResponse<T>> {\n return this.request(\"PUT\", path, options);\n }\n\n async patch<T = any>(\n path: string,\n options?: MockServerOptions,\n ): Promise<MockResponse<T>> {\n return this.request(\"PATCH\", path, options);\n }\n\n async delete<T = any>(\n path: string,\n options?: Omit<MockServerOptions, \"body\" | \"formData\">,\n ): Promise<MockResponse<T>> {\n return this.request(\"DELETE\", path, options);\n }\n\n /**\n * Converts FormData to a proper multipart/form-data body with boundaries\n */\n private async formDataToMultipart(\n formData: FormData,\n boundary: string,\n ): Promise<Uint8Array> {\n const encoder = new TextEncoder();\n const buffers: Uint8Array[] = [];\n\n for (const [name, value] of formData.entries()) {\n buffers.push(encoder.encode(`--${boundary}\\r\\n`));\n\n let disposition = `Content-Disposition: form-data; name=\"${name}\"`;\n let contentType = \"\";\n\n if ((value as any) instanceof File) {\n disposition += `; filename=\"${(value as any).name}\"`;\n contentType = `Content-Type: ${(value as any).type || \"application/octet-stream\"}\\r\\n`;\n }\n\n buffers.push(encoder.encode(`${disposition}\\r\\n${contentType}\\r\\n`));\n\n if ((value as any) instanceof File) {\n const arrayBuffer = await (value as any).arrayBuffer();\n buffers.push(new Uint8Array(arrayBuffer));\n buffers.push(encoder.encode(\"\\r\\n\"));\n } else {\n buffers.push(encoder.encode(`${String(value)}\\r\\n`));\n }\n }\n\n buffers.push(encoder.encode(`--${boundary}--\\r\\n`));\n\n const totalLength = buffers.reduce((sum, b) => sum + b.byteLength, 0);\n const multipartBody = new Uint8Array(totalLength);\n let offset = 0;\n for (const buf of buffers) {\n multipartBody.set(buf, offset);\n offset += buf.byteLength;\n }\n\n return multipartBody;\n }\n\n private validateOptions(options: MockServerOptions) {\n const { body, formData, urlencoded } = options;\n if (body && (formData || urlencoded)) {\n throw new Error(\"Only one of body, formData, urlencoded can be provided\");\n }\n\n if (formData && (urlencoded || body)) {\n throw new Error(\"Only one of formData, urlencoded can be provided\");\n }\n\n if (urlencoded && (body || formData)) {\n throw new Error(\"Only one of urlencoded, body can be provided\");\n }\n }\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type {\n AsyncLocalStorageContext,\n AsyncLocalStorageContextSetters,\n} from \"./async_local_storage_types.js\";\nimport { AsyncLocalStorage } from \"node:async_hooks\";\n\nexport const asyncStorage = new AsyncLocalStorage<Record<string, any>>();\n\n/**\n * Async local storage plugin middleware, used to store data in the request context\n */\nexport const asyncLocalStorage = (\n ctxSetters: AsyncLocalStorageContextSetters,\n): ServerRouteMiddleware => {\n return async (req: Request, _res: Response, next: NextFunction) => {\n const store: Record<string, any> = {};\n\n for (const [key, setter] of Object.entries(ctxSetters)) {\n store[key] = (setter as (req: Request) => {})(req);\n }\n\n asyncStorage.run(store, () => {\n req.ctx = new Proxy({} as AsyncLocalStorageContext, {\n get(_, prop) {\n const currentStore = asyncStorage.getStore();\n return currentStore?.[prop as string];\n },\n set(_, prop, value) {\n const currentStore = asyncStorage.getStore();\n if (currentStore) {\n currentStore[prop as string] = value;\n return true;\n }\n\n return false;\n },\n ownKeys() {\n const currentStore = asyncStorage.getStore();\n return currentStore ? Object.keys(currentStore) : [];\n },\n has(_, prop) {\n const currentStore = asyncStorage.getStore();\n return currentStore ? prop in currentStore : false;\n },\n });\n\n next();\n });\n };\n};\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport { canHaveBody } from \"../../runtime/native_server/server_utils.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\n/**\n * Middleware to parse the body of the request. GET, DELETE and OPTIONS requests are not parsed. Used internally by the server.\n * @internal\n */\nexport const bodyParser = (): ServerRouteMiddleware => {\n return async (req: Request, _res: Response, next: NextFunction) => {\n if (!canHaveBody(req.method)) {\n return next();\n }\n\n req.rawBody = await req.arrayBuffer();\n Object.defineProperty(req, \"body\", {\n value: undefined,\n writable: true,\n configurable: true,\n enumerable: true,\n });\n\n return next();\n };\n};\n","import { gzipSync } from \"node:zlib\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { CompressionOptions } from \"./compression_types.js\";\n\nconst DEFAULT_THRESHOLD = 1024; // 1KB\nconst DEFAULT_LEVEL = 6;\n\n// Default compressible content types\nconst DEFAULT_FILTER = [\n /text\\/.+/,\n /application\\/json/,\n /application\\/javascript/,\n /application\\/xml/,\n /application\\/.*\\+json/,\n /application\\/.*\\+xml/,\n];\n\n/**\n * Compression middleware for gzip compression of response bodies\n *\n * @param options Compression middleware options\n */\nexport const compression = (\n options?: CompressionOptions,\n): ServerRouteMiddleware => {\n const threshold = options?.threshold ?? DEFAULT_THRESHOLD;\n const level = Math.max(0, Math.min(9, options?.level ?? DEFAULT_LEVEL));\n const filter = options?.filter ?? DEFAULT_FILTER;\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const acceptEncoding = req.headers.get(\"accept-encoding\") || \"\";\n const supportsGzip = acceptEncoding.includes(\"gzip\");\n if (!supportsGzip) {\n return next();\n }\n\n const originalSend = res.send.bind(res);\n const originalJson = res.json.bind(res);\n const originalText = res.text.bind(res);\n\n const compressResponse = (body: any, contentType?: string): any => {\n if (!shouldCompress(body, contentType, threshold, filter)) {\n return body;\n }\n\n const buffer = getBodyBuffer(body);\n if (!buffer || buffer.length < threshold) {\n return body;\n }\n\n const compressed = gzipSync(buffer, { level });\n res.setHeader(\"Content-Encoding\", \"gzip\");\n res.setHeader(\"Content-Length\", compressed.length.toString());\n\n return compressed;\n };\n\n res.send = function (body: any): void {\n const contentType = res.headers[\"content-type\"];\n const compressedBody = compressResponse(body, contentType);\n return originalSend(compressedBody);\n };\n\n res.json = function (body: any): void {\n const jsonString = JSON.stringify(body);\n const compressedBody = compressResponse(jsonString, \"application/json\");\n if (compressedBody !== jsonString) {\n res.setHeader(\"Content-Type\", \"application/json\");\n return originalSend(compressedBody);\n }\n return originalJson(body);\n };\n\n res.text = function (body: string): void {\n const compressedBody = compressResponse(body, \"text/plain\");\n if (compressedBody !== body) {\n res.setHeader(\"Content-Type\", \"text/plain\");\n return originalSend(compressedBody);\n }\n return originalText(body);\n };\n\n await next();\n };\n};\n\nconst shouldCompress = (\n body: any,\n contentType: string | undefined,\n threshold: number,\n filter: RegExp[],\n): boolean => {\n if (!body || !contentType) {\n return false;\n }\n\n const buffer = getBodyBuffer(body);\n if (!buffer || buffer.length < threshold) {\n return false;\n }\n\n return filter.some((pattern) => pattern.test(contentType));\n};\n\nconst getBodyBuffer = (body: any): Buffer | null => {\n if (typeof body === \"string\") {\n return Buffer.from(body, \"utf-8\");\n }\n\n if (Buffer.isBuffer(body)) {\n return body;\n }\n\n if (body instanceof Uint8Array) {\n return Buffer.from(body);\n }\n\n if (typeof body === \"object\") {\n return Buffer.from(JSON.stringify(body), \"utf-8\");\n }\n\n return null;\n};\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { CookieMiddlewareOptions, CookieOptions } from \"./cookie_types.js\";\n\n/**\n * Cookie middleware for parsing and setting cookies, must be used in order to use the cookie methods on the request and response objects\n *\n * @param options Cookie middleware options\n */\nexport const cookie = (\n options?: CookieMiddlewareOptions,\n): ServerRouteMiddleware => {\n const opts: Required<CookieMiddlewareOptions> = {\n secret: options?.secret ?? \"\",\n defaults: {\n path: \"/\",\n httpOnly: true,\n secure: true,\n sameSite: \"Lax\",\n ...options?.defaults,\n },\n parse: options?.parse ?? true,\n sign: options?.sign ?? false,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n if (opts.parse) {\n const rawCookies = parseCookies(req.headers.get(\"cookie\") || \"\");\n req.cookies = {};\n\n for (const [name, value] of Object.entries(rawCookies)) {\n if (opts.sign && opts.secret) {\n const verified = await verifySignedCookie(value, opts.secret);\n if (verified !== false) {\n req.cookies[name] = verified;\n }\n continue;\n }\n\n req.cookies[name] = value;\n }\n }\n\n // Add cookie methods to response\n res.cookie = (\n name: string,\n value: string,\n cookieOptions?: CookieOptions,\n ) => {\n setCookie(res, name, value, { ...opts.defaults, ...cookieOptions }, opts);\n };\n\n res.clearCookie = (name: string, cookieOptions?: CookieOptions) => {\n clearCookie(res, name, { ...opts.defaults, ...cookieOptions });\n };\n\n await next();\n };\n};\n\n/**\n * Parse cookie string into an object\n */\nfunction parseCookies(cookieString: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n\n if (!cookieString) {\n return cookies;\n }\n\n const pairs = cookieString.split(\";\");\n\n for (const pair of pairs) {\n const [name, value] = pair.trim().split(\"=\");\n if (name && value) {\n cookies[decodeURIComponent(name)] = decodeURIComponent(value);\n }\n }\n\n return cookies;\n}\n\n/**\n * Set a cookie on the response\n */\nasync function setCookie(\n res: Response,\n name: string,\n value: string,\n options: CookieOptions,\n middlewareOptions: Required<CookieMiddlewareOptions>,\n): Promise<void> {\n let cookieValue = `${encodeURIComponent(name)}=${encodeURIComponent(value)}`;\n\n // Add domain\n if (options.domain) {\n cookieValue += `; Domain=${options.domain}`;\n }\n\n // Add path\n if (options.path) {\n cookieValue += `; Path=${options.path}`;\n }\n\n // Add expires\n if (options.expires) {\n cookieValue += `; Expires=${options.expires.toUTCString()}`;\n }\n\n // Add maxAge\n if (options.maxAge) {\n cookieValue += `; Max-Age=${options.maxAge}`;\n }\n\n // Add secure\n if (options.secure) {\n cookieValue += \"; Secure\";\n }\n\n // Add httpOnly\n if (options.httpOnly) {\n cookieValue += \"; HttpOnly\";\n }\n\n // Add sameSite\n if (options.sameSite) {\n cookieValue += `; SameSite=${options.sameSite}`;\n }\n\n // Add priority\n if (options.priority) {\n cookieValue += `; Priority=${options.priority}`;\n }\n\n if (middlewareOptions.sign && middlewareOptions.secret) {\n cookieValue = await signCookie(cookieValue, middlewareOptions.secret);\n }\n\n // Set the Set-Cookie header\n const existingCookies = res.headers[\"set-cookie\"] || \"\";\n const newCookies = existingCookies\n ? `${existingCookies}, ${cookieValue}`\n : cookieValue;\n res.setHeader(\"Set-Cookie\", newCookies);\n}\n\n/**\n * Clear a cookie by setting it to expire in the past\n */\nfunction clearCookie(\n res: Response,\n name: string,\n options: CookieOptions,\n): void {\n const clearOptions: CookieOptions = {\n ...options,\n expires: new Date(0),\n maxAge: 0,\n };\n\n setCookie(res, name, \"\", clearOptions, {\n secret: \"\",\n defaults: {},\n parse: true,\n sign: false,\n });\n}\n\n/**\n * Sign a cookie value with HMAC-SHA256 using the secret\n */\nasync function signCookie(value: string, secret: string): Promise<string> {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(secret);\n const valueData = encoder.encode(value);\n\n const key = await crypto.subtle.importKey(\n \"raw\",\n keyData,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n\n const signatureBuffer = await crypto.subtle.sign(\"HMAC\", key, valueData);\n\n const signatureArray = new Uint8Array(signatureBuffer);\n const signature = Array.from(signatureArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return `${value}.${signature}`;\n}\n\n/**\n * Verify a signed cookie\n */\nasync function verifySignedCookie(\n value: string,\n secret: string,\n): Promise<string | false> {\n const parts = value.split(\".\");\n if (parts.length !== 2) {\n return false;\n }\n\n const [cookieValue, signature] = parts;\n\n const encoder = new TextEncoder();\n const keyData = encoder.encode(secret);\n const valueData = encoder.encode(cookieValue);\n\n const key = await crypto.subtle.importKey(\n \"raw\",\n keyData,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\"],\n );\n\n const expectedSignatureBuffer = await crypto.subtle.sign(\n \"HMAC\",\n key,\n valueData,\n );\n\n const expectedSignatureArray = new Uint8Array(expectedSignatureBuffer);\n const expectedSignature = Array.from(expectedSignatureArray)\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n\n return signature === expectedSignature ? cookieValue : false;\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { CorsOptions } from \"./cors_types.js\";\n\n/**\n * CORS plugin\n *\n * ⚠️ SECURITY WARNING: By default, this plugin allows ALL origins ('*').\n * For production environments, explicitly configure allowed origins.\n *\n * @param options CORS options (all optional)\n *\n * @example\n * // Development (permissive)\n * cors()\n *\n * @example\n * // Production (secure)\n * cors({\n * origin: ['https://example.com', 'https://app.example.com'],\n * credentials: true\n * })\n */\nexport const cors = (options?: CorsOptions): ServerRouteMiddleware => {\n const opts: CorsOptions = {\n origin: \"*\",\n methods: [\"GET\", \"HEAD\", \"PUT\", \"PATCH\", \"POST\", \"DELETE\"],\n allowedHeaders: \"\",\n exposedHeaders: \"\",\n credentials: false,\n maxAge: undefined,\n preflightContinue: false,\n optionsSuccessStatus: 204,\n ...options,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const requestOrigin = req.headers.get(\"origin\") || \"\";\n\n if (req.method === \"OPTIONS\") {\n return handlePreflightRequest(req, res, opts, requestOrigin, next);\n }\n\n handleRegularRequest(req, res, opts, requestOrigin);\n await next();\n };\n};\n\n/**\n * Handle CORS preflight OPTIONS requests\n */\nfunction handlePreflightRequest(\n _req: Request,\n res: Response,\n opts: CorsOptions,\n requestOrigin: string,\n next: NextFunction,\n): void {\n const allowOrigin = determineOrigin(opts, requestOrigin);\n if (!allowOrigin) {\n res.forbidden(\"CORS origin not allowed\");\n return;\n }\n\n // Set CORS headers for preflight\n setCorsHeaders(res, opts, allowOrigin);\n\n // Handle preflight continue option\n if (opts.preflightContinue) {\n next();\n return;\n }\n\n // End preflight request\n res.status(opts.optionsSuccessStatus || 204);\n res.send(\"\");\n}\n\n/**\n * Handle regular CORS requests (non-OPTIONS)\n */\nfunction handleRegularRequest(\n _req: Request,\n res: Response,\n opts: CorsOptions,\n requestOrigin: string,\n): void {\n const allowOrigin = determineOrigin(opts, requestOrigin);\n if (!allowOrigin) {\n return;\n }\n\n setCorsHeaders(res, opts, allowOrigin);\n}\n\n/**\n * Determine if origin is allowed and return the appropriate origin value\n */\nfunction determineOrigin(\n opts: CorsOptions,\n requestOrigin: string,\n): string | false {\n // String origin\n if (typeof opts.origin === \"string\") {\n return opts.origin;\n }\n\n // Array of origins\n if (Array.isArray(opts.origin)) {\n const matchedOrigin = opts.origin.find((origin) =>\n typeof origin === \"string\"\n ? origin === requestOrigin\n : origin instanceof RegExp && origin.test(requestOrigin),\n );\n\n return typeof matchedOrigin === \"string\" ? matchedOrigin : false;\n }\n\n return \"*\";\n}\n\n/**\n * Set all CORS headers on the response\n */\nfunction setCorsHeaders(\n res: Response,\n opts: CorsOptions,\n allowOrigin: string,\n): void {\n res.setHeader(\"Access-Control-Allow-Origin\", allowOrigin);\n\n if (opts.credentials) {\n res.setHeader(\"Access-Control-Allow-Credentials\", \"true\");\n }\n\n if (opts.exposedHeaders && opts.exposedHeaders !== \"\") {\n const exposedHeaders = Array.isArray(opts.exposedHeaders)\n ? opts.exposedHeaders.join(\",\")\n : opts.exposedHeaders;\n res.setHeader(\"Access-Control-Expose-Headers\", exposedHeaders);\n }\n\n if (opts.allowedHeaders && opts.allowedHeaders !== \"\") {\n const allowedHeaders = Array.isArray(opts.allowedHeaders)\n ? opts.allowedHeaders.join(\",\")\n : opts.allowedHeaders;\n res.setHeader(\"Access-Control-Allow-Headers\", allowedHeaders);\n }\n\n const methodsStr = Array.isArray(opts.methods)\n ? opts.methods.join(\",\")\n : opts.methods;\n res.setHeader(\"Access-Control-Allow-Methods\", String(methodsStr || \"\"));\n\n if (typeof opts.maxAge === \"number\") {\n res.setHeader(\"Access-Control-Max-Age\", opts.maxAge.toString());\n }\n}\n","import type {\n NextFunction as ExpressNextFunction,\n Request as ExpressRequest,\n Response as ExpressResponse,\n Router as ExpressRouter,\n RequestHandler,\n} from \"express\";\nimport type {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request as BaldaRequest } from \"../../server/http/request.js\";\nimport type { Response as BaldaResponse } from \"../../server/http/response.js\";\nimport { router } from \"../../server/router/router.js\";\n\n/**\n * Converts a Balda Request to an Express-compatible request object\n */\nfunction toBaldaToExpressRequest(\n baldaReq: BaldaRequest,\n basePath: string = \"\",\n): ExpressRequest {\n const url = new URL(baldaReq.url);\n const headersObj = Object.fromEntries(baldaReq.headers.entries());\n\n const expressReq = {\n body: baldaReq.body,\n query: baldaReq.query as any,\n params: baldaReq.params,\n cookies: baldaReq.cookies,\n session: baldaReq.session,\n originalUrl: url.pathname + url.search,\n baseUrl: basePath,\n path: url.pathname.replace(basePath, \"\") || \"/\",\n method: baldaReq.method,\n ip: baldaReq.ip,\n headers: headersObj,\n url: url.pathname,\n get(name: string) {\n return baldaReq.headers.get(name.toLowerCase()) ?? undefined;\n },\n header(name: string) {\n return baldaReq.headers.get(name.toLowerCase()) ?? undefined;\n },\n app: {},\n res: null,\n route: null,\n protocol: url.protocol.replace(\":\", \"\"),\n secure: url.protocol === \"https:\",\n hostname: url.hostname,\n host: url.host,\n fresh: false,\n stale: true,\n xhr: headersObj[\"x-requested-with\"]?.toLowerCase() === \"xmlhttprequest\",\n accepts: () => undefined,\n acceptsCharsets: () => undefined,\n acceptsEncodings: () => undefined,\n acceptsLanguages: () => undefined,\n is: () => null,\n range: () => undefined,\n param: (name: string) => baldaReq.params[name] ?? baldaReq.query[name],\n files: baldaReq.files,\n file: baldaReq.file,\n rawBody: baldaReq.rawBody,\n } as unknown as ExpressRequest;\n\n return expressReq;\n}\n\ninterface ExpressResponseWrapper {\n locals: Record<string, any>;\n headersSent: boolean;\n statusCode: number;\n status(code: number): this;\n sendStatus(code: number): this;\n send(body?: any): this;\n json(body?: any): this;\n redirect(statusOrUrl: number | string, url?: string): this;\n setHeader(name: string, value: string | number | readonly string[]): this;\n set(field: string | Record<string, string>, value?: string): this;\n header(field: string | Record<string, string>, value?: string): this;\n type(contentType: string): this;\n contentType(type: string): this;\n end(data?: any): this;\n write(chunk: any): boolean;\n get(name: string): string | undefined;\n getHeader(name: string): string | undefined;\n removeHeader(name: string): this;\n append(field: string, value: string | string[]): this;\n cookie(name: string, value: string, options?: any): this;\n clearCookie(name: string, options?: any): this;\n render(view: string, options?: any, callback?: any): void;\n format(obj: any): this;\n attachment(filename?: string): this;\n sendFile(path: string, options?: any, fn?: any): void;\n download(\n path: string,\n filename?: string | any,\n options?: any,\n fn?: any,\n ): void;\n links(links: Record<string, string>): this;\n location(url: string): this;\n vary(field: string): this;\n app: Record<string, any>;\n req: null;\n}\n\n/**\n * Creates an Express-compatible response wrapper around Balda Response\n */\nfunction createExpressResponse(baldaRes: BaldaResponse): ExpressResponse {\n const expressRes: ExpressResponseWrapper = {\n locals: {},\n headersSent: false,\n statusCode: baldaRes.responseStatus,\n\n status(code: number) {\n baldaRes.status(code);\n this.statusCode = code;\n return this;\n },\n\n sendStatus(code: number) {\n this.status(code).send(String(code));\n return this;\n },\n\n send(body?: any) {\n this.headersSent = true;\n const hasContentType = !!baldaRes.headers[\"Content-Type\"];\n\n if (!hasContentType && typeof body === \"string\") {\n const trimmed = body.trim();\n if (\n trimmed.startsWith(\"<!DOCTYPE\") ||\n trimmed.startsWith(\"<html\") ||\n trimmed.startsWith(\"<HTML\")\n ) {\n baldaRes.html(body);\n return this;\n }\n }\n\n baldaRes.send(body);\n return this;\n },\n\n json(body?: any) {\n this.headersSent = true;\n baldaRes.json(body);\n return this;\n },\n\n redirect(statusOrUrl: number | string, url?: string) {\n this.headersSent = true;\n const redirectUrl = typeof statusOrUrl === \"string\" ? statusOrUrl : url!;\n const status = typeof statusOrUrl === \"number\" ? statusOrUrl : 302;\n baldaRes.status(status).setHeader(\"Location\", redirectUrl);\n baldaRes.send(\"\");\n return this;\n },\n\n setHeader(name: string, value: string | number | readonly string[]) {\n const stringValue = Array.isArray(value)\n ? value.join(\", \")\n : String(value);\n baldaRes.setHeader(name, stringValue);\n return this;\n },\n\n set(field: string | Record<string, string>, value?: string) {\n if (typeof field === \"object\") {\n for (const [key, val] of Object.entries(field)) {\n baldaRes.setHeader(key, val);\n }\n } else if (value !== undefined) {\n baldaRes.setHeader(field, value);\n }\n return this;\n },\n\n header(field: string | Record<string, string>, value?: string) {\n return this.set(field, value);\n },\n\n type(contentType: string) {\n baldaRes.setHeader(\"Content-Type\", contentType);\n return this;\n },\n\n contentType(type: string) {\n return this.type(type);\n },\n\n end(data?: any) {\n this.headersSent = true;\n baldaRes.send(data ?? \"\");\n return this;\n },\n\n write(chunk: any) {\n return true;\n },\n\n get(name: string) {\n return baldaRes.headers[name];\n },\n\n getHeader(name: string) {\n return baldaRes.headers[name];\n },\n\n removeHeader(name: string) {\n delete baldaRes.headers[name];\n return this;\n },\n\n append(field: string, value: string | string[]) {\n const prev = baldaRes.headers[field];\n const newValue = Array.isArray(value) ? value.join(\", \") : value;\n baldaRes.setHeader(field, prev ? `${prev}, ${newValue}` : newValue);\n return this;\n },\n\n cookie(name: string, value: string, options?: any) {\n baldaRes.cookie?.(name, value, options);\n return this;\n },\n\n clearCookie(name: string, options?: any) {\n baldaRes.clearCookie?.(name, options);\n return this;\n },\n\n render(view: string, options?: any, callback?: any) {\n throw new Error(\n \"render() is not supported in Express compatibility layer\",\n );\n },\n\n format(obj: any) {\n return this;\n },\n\n attachment(filename?: string) {\n if (filename) {\n baldaRes.setHeader(\n \"Content-Disposition\",\n `attachment; filename=\"${filename}\"`,\n );\n } else {\n baldaRes.setHeader(\"Content-Disposition\", \"attachment\");\n }\n return this;\n },\n\n sendFile(path: string, options?: any, fn?: any) {\n baldaRes.file(path);\n },\n\n download(path: string, filename?: string | any, options?: any, fn?: any) {\n const fname =\n typeof filename === \"string\" ? filename : path.split(\"/\").pop();\n this.attachment(fname);\n baldaRes.file(path);\n },\n\n links(links: Record<string, string>) {\n const link = Object.entries(links)\n .map(([rel, url]) => `<${url}>; rel=\"${rel}\"`)\n .join(\", \");\n baldaRes.setHeader(\"Link\", link);\n return this;\n },\n\n location(url: string) {\n baldaRes.setHeader(\"Location\", url);\n return this;\n },\n\n vary(field: string) {\n baldaRes.setHeader(\"Vary\", field);\n return this;\n },\n\n app: {},\n req: null,\n };\n\n return expressRes as unknown as ExpressResponse;\n}\n\n/**\n * Converts an Express middleware to a Balda middleware\n */\nexport function expressMiddleware(\n expressHandler: RequestHandler,\n basePath: string = \"\",\n): ServerRouteMiddleware {\n return async (\n baldaReq: BaldaRequest,\n baldaRes: BaldaResponse,\n next: NextFunction,\n ) => {\n const expressReq = toBaldaToExpressRequest(baldaReq, basePath);\n const expressRes = createExpressResponse(baldaRes);\n\n await new Promise<void>((resolve, reject) => {\n const expressNext: ExpressNextFunction = (err?: any) => {\n if (err) {\n reject(err);\n return;\n }\n resolve();\n };\n\n try {\n const result = expressHandler(expressReq, expressRes, expressNext);\n if (result instanceof Promise) {\n result.catch(reject);\n }\n } catch (error) {\n reject(error);\n }\n });\n\n await next();\n };\n}\n\n/**\n * Converts an Express handler to a Balda handler\n */\nexport function expressHandler(\n handler: RequestHandler,\n basePath: string = \"\",\n): ServerRouteHandler {\n return async (baldaReq: BaldaRequest, baldaRes: BaldaResponse) => {\n const expressReq = toBaldaToExpressRequest(baldaReq, basePath);\n const expressRes = createExpressResponse(baldaRes);\n\n const next: ExpressNextFunction = () => {};\n await handler(expressReq, expressRes, next);\n };\n}\n\ninterface RouterLayer {\n route?: {\n path: string;\n methods: Record<string, boolean>;\n stack: Array<{\n handle: RequestHandler;\n method?: string;\n }>;\n };\n handle?: RequestHandler | ExpressRouter;\n regexp?: RegExp;\n path?: string;\n name?: string;\n}\n\n/**\n * Mounts an Express router at a specific base path\n * This extracts all routes from the Express router and registers them with Balda\n */\nexport function mountExpressRouter(\n basePath: string,\n expressRouter: ExpressRouter,\n): void {\n const normalizedBase = normalizePath(basePath);\n const stack = (expressRouter as any).stack as RouterLayer[] | undefined;\n\n if (!stack) {\n console.warn(\"Express router has no stack - routes may not be registered\");\n return;\n }\n\n for (const layer of stack) {\n processExpressLayer(layer, normalizedBase);\n }\n}\n\nfunction processExpressLayer(layer: RouterLayer, basePath: string): void {\n if (layer.route) {\n const routePath = normalizePath(basePath + layer.route.path);\n const methods = Object.keys(layer.route.methods).filter(\n (m) => layer.route!.methods[m],\n );\n\n for (const method of methods) {\n const handlers = layer.route.stack.map((s) => s.handle);\n registerExpressHandlers(\n method.toUpperCase() as HttpMethod,\n routePath,\n handlers,\n basePath,\n );\n }\n return;\n }\n\n if (layer.handle && typeof layer.handle === \"function\") {\n const layerPath = layer.path || \"\";\n const fullPath = normalizePath(basePath + layerPath);\n const layerStack = (layer.handle as any).stack as RouterLayer[] | undefined;\n\n if (layerStack && Array.isArray(layerStack)) {\n for (const subLayer of layerStack) {\n processExpressLayer(subLayer, fullPath);\n }\n return;\n }\n\n const wildcardPath = fullPath === \"/\" ? \"/*\" : `${fullPath}/*`;\n const middleware = expressMiddleware(\n layer.handle as RequestHandler,\n basePath,\n );\n\n const methods: HttpMethod[] = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ];\n for (const method of methods) {\n router.addOrUpdate(method, wildcardPath, [middleware], async () => {}, {\n excludeFromSwagger: true,\n });\n }\n }\n}\n\nfunction registerExpressHandlers(\n method: HttpMethod,\n path: string,\n handlers: RequestHandler[],\n basePath: string,\n): void {\n const middlewares: ServerRouteMiddleware[] = handlers\n .slice(0, -1)\n .map((h) => expressMiddleware(h, basePath));\n\n const lastHandler = handlers[handlers.length - 1];\n const finalHandler = expressHandler(lastHandler, basePath);\n\n router.addOrUpdate(method, path, middlewares, finalHandler, {\n excludeFromSwagger: true,\n });\n}\n\nfunction normalizePath(path: string): string {\n let normalized = path.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n if (normalized.length > 1 && normalized.endsWith(\"/\")) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\n\n/**\n * Creates an Express adapter that provides a use method for mounting Express middleware/routers\n *\n * @example\n * ```ts\n * import AdminJS from 'adminjs'\n * import AdminJSExpress from '@adminjs/express'\n * import { createExpressAdapter } from 'balda'\n *\n * const admin = new AdminJS({...})\n * const adminRouter = AdminJSExpress.buildRouter(admin)\n *\n * const server = new Server()\n * const express = createExpressAdapter(server)\n * express.use('/admin', adminRouter)\n * ```\n */\nexport function createExpressAdapter(server: {\n use: (...middlewares: ServerRouteMiddleware[]) => void;\n}) {\n return {\n use(\n pathOrMiddleware: string | RequestHandler | ExpressRouter,\n maybeMiddleware?: RequestHandler | ExpressRouter,\n ) {\n if (typeof pathOrMiddleware === \"string\") {\n const path = pathOrMiddleware;\n const middleware = maybeMiddleware!;\n const middlewareStack = (middleware as any).stack;\n\n if (middlewareStack && Array.isArray(middlewareStack)) {\n mountExpressRouter(path, middleware as ExpressRouter);\n return;\n }\n\n server.use(expressMiddleware(middleware as RequestHandler, path));\n return;\n }\n\n const middleware = pathOrMiddleware;\n const middlewareStack = (middleware as any).stack;\n\n if (middlewareStack && Array.isArray(middlewareStack)) {\n mountExpressRouter(\"/\", middleware as ExpressRouter);\n return;\n }\n\n server.use(expressMiddleware(middleware as RequestHandler));\n },\n };\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class FileTooLargeError extends BaldaError {\n constructor(filename: string, size: number, maxSize: number) {\n super(\n `FILE_TOO_LARGE: \"${filename}\" is too large. Max size is ${maxSize} bytes, but got ${size} bytes`,\n );\n }\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeOs {\n async tmpdir(): Promise<string> {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n const os = await import(\"node:os\");\n return os.tmpdir();\n case \"deno\":\n return Deno.makeTempDir();\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeOs = new NativeOs();\n","import { BaldaError } from \"../../errors/balda_error.js\";\nimport { errorFactory } from \"../../errors/error_factory.js\";\nimport { FileTooLargeError } from \"../../errors/file_too_large.js\";\nimport { nativeCrypto } from \"../../runtime/native_crypto.js\";\nimport { nativeOs } from \"../../runtime/native_os.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport type {\n FilePluginOptions,\n FormFile,\n} from \"../../plugins/file/file_types.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { parseSizeLimit } from \"../../utils.js\";\n\n// 1MB in bytes\nconst DEFAULT_SIZE = 1024 * 1024;\n\n/**\n * Middleware to handle multipart/form-data file uploads with security validations.\n * - Validates files against `FilePluginOptions`: size limits, file count, MIME types.\n * - Sanitizes filenames to prevent path traversal attacks.\n * - Uses cryptographically secure random filenames (UUID) in temporary storage.\n * - Stores uploaded files in a runtime-agnostic temporary directory and exposes them via `req.files`.\n * - Automatically cleans up temporary files after request completion or on error.\n * - Can be used as global middleware or route-specific middleware.\n */\nexport const fileParser = (\n options?: FilePluginOptions,\n): ServerRouteMiddleware => {\n return async (req: Request, res: Response, next: NextFunction) => {\n const tmpPaths: string[] = [];\n try {\n const contentType =\n req.headers.get(\"content-type\") ?? req.headers.get(\"Content-Type\");\n\n if (!contentType || !contentType.startsWith(\"multipart/form-data\")) {\n return next();\n }\n\n if (!req.rawBody) {\n return next();\n }\n\n const boundaryMatch = contentType.match(/boundary=(.*)(;|$)/i);\n if (!boundaryMatch) {\n return next();\n }\n\n const boundary = boundaryMatch[1].replace(/(^\\s*\"?|\"?\\s*$)/g, \"\");\n\n const bodyBuf = new Uint8Array(req.rawBody);\n const boundaryBuf = new TextEncoder().encode(`--${boundary}`);\n const CRLFCRLF = new Uint8Array([13, 10, 13, 10]);\n\n const parts: Array<{ headers: string; data: Uint8Array }> = [];\n\n const indexOfSub = (\n haystack: Uint8Array,\n needle: Uint8Array,\n from: number = 0,\n ): number => {\n outer: for (let i = from; i <= haystack.length - needle.length; i++) {\n for (let j = 0; j < needle.length; j++) {\n if (haystack[i + j] !== needle[j]) {\n continue outer;\n }\n }\n return i;\n }\n\n return -1;\n };\n\n let start = indexOfSub(bodyBuf, boundaryBuf);\n while (start !== -1) {\n start += boundaryBuf.length;\n\n if (bodyBuf[start] === 45 && bodyBuf[start + 1] === 45) {\n break;\n }\n\n if (bodyBuf[start] === 13 && bodyBuf[start + 1] === 10) {\n start += 2;\n }\n\n const headerEnd = indexOfSub(bodyBuf, CRLFCRLF, start);\n if (headerEnd === -1) {\n break;\n }\n\n const headersBuf = bodyBuf.subarray(start, headerEnd);\n const headers = new TextDecoder().decode(headersBuf);\n\n const dataStart = headerEnd + CRLFCRLF.length;\n const nextBoundary = indexOfSub(bodyBuf, boundaryBuf, dataStart);\n if (nextBoundary === -1) {\n break;\n }\n\n let dataEnd = nextBoundary - 1;\n if (bodyBuf[dataEnd] === 10) {\n dataEnd--;\n }\n\n if (bodyBuf[dataEnd] === 13) {\n dataEnd--;\n }\n\n const data = bodyBuf.subarray(dataStart, dataEnd + 1);\n parts.push({ headers, data });\n start = nextBoundary;\n }\n\n const files: FormFile[] = [];\n const fields: Record<string, string> = {};\n const maxFileSizeBytes =\n parseSizeLimit(options?.maxFileSize, DEFAULT_SIZE) ?? DEFAULT_SIZE;\n\n for (const part of parts) {\n const disposition = part.headers\n .split(\"\\r\\n\")\n .find((h) => h.toLowerCase().startsWith(\"content-disposition:\"));\n\n if (!disposition) {\n continue;\n }\n\n const formNameMatch = disposition.match(/name=\"([^\"]+)\"/);\n if (!formNameMatch) {\n continue;\n }\n const formName = formNameMatch[1];\n\n const filenameMatch = disposition.match(/filename=\"([^\"]*)\"/);\n const originalName = filenameMatch ? filenameMatch[1] : \"\";\n const isFile = Boolean(originalName);\n\n if (isFile) {\n if (options?.maxFiles && files.length >= options.maxFiles) {\n return res.badRequest({\n ...errorFactory(\n new BaldaError(\n `Too many files: Maximum ${options.maxFiles} files allowed`,\n ),\n ),\n });\n }\n\n if (maxFileSizeBytes && part.data.length > maxFileSizeBytes) {\n return res.badRequest({\n ...errorFactory(\n new FileTooLargeError(\n originalName,\n part.data.length,\n maxFileSizeBytes,\n ),\n ),\n });\n }\n\n const contentTypeHeader = part.headers\n .split(\"\\r\\n\")\n .find((h) => h.toLowerCase().startsWith(\"content-type:\"));\n\n const mimeType = contentTypeHeader\n ? contentTypeHeader.split(\":\")[1].trim()\n : \"application/octet-stream\";\n\n if (\n options?.allowedMimeTypes &&\n !options.allowedMimeTypes.includes(mimeType)\n ) {\n return res.badRequest({\n ...errorFactory(\n new BaldaError(\n `Invalid file type: \"${mimeType}\" is not allowed. Allowed types: ${options.allowedMimeTypes.join(\", \")}`,\n ),\n ),\n });\n }\n\n const sanitizedName = sanitizeFilename(originalName);\n const extension = nativePath.extName(sanitizedName);\n const tmpPath = nativePath.join(\n await nativeOs.tmpdir(),\n `${nativeCrypto.randomUUID()}${extension}`,\n );\n await nativeFs.writeFile(tmpPath, part.data);\n tmpPaths.push(tmpPath);\n\n files.push({\n formName,\n mimeType,\n size: part.data.length,\n tmpPath,\n originalName,\n });\n } else {\n fields[formName] = new TextDecoder().decode(part.data);\n }\n }\n\n req.files = files;\n req.body = fields;\n\n await next();\n\n await cleanupTmpFiles(tmpPaths);\n } catch (error) {\n await cleanupTmpFiles(tmpPaths);\n throw error;\n }\n };\n};\n\nconst cleanupTmpFiles = async (paths: string[]) => {\n await Promise.allSettled(paths.map((path) => nativeFs.unlink(path)));\n};\n\nconst sanitizeFilename = (filename: string): string => {\n return filename\n .replace(/\\.\\./g, \"\")\n .replace(/[\\/\\\\]/g, \"\")\n .replace(/\\0/g, \"\")\n .replace(/[\\x00-\\x1f\\x80-\\x9f]/g, \"\")\n .trim();\n};\n","import { HelmetOptions } from \"./helmet_types.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\n/**\n * Sets common HTTP security headers\n * @param options Helmet options (all optional)\n */\nexport const helmet = (options?: HelmetOptions): ServerRouteMiddleware => {\n const opts: Required<HelmetOptions> = {\n dnsPrefetchControl: true,\n frameguard: { action: \"SAMEORIGIN\" },\n hsts: { maxAge: 15552000, includeSubDomains: true, preload: false },\n contentTypeOptions: true,\n ieNoOpen: true,\n xssFilter: true,\n referrerPolicy: \"no-referrer\",\n crossOriginResourcePolicy: \"same-origin\",\n crossOriginOpenerPolicy: \"same-origin\",\n crossOriginEmbedderPolicy: \"require-corp\",\n contentSecurityPolicy: false,\n ...options,\n };\n\n return async (_req: Request, res: Response, next: NextFunction) => {\n // X-DNS-Prefetch-Control\n if (opts.dnsPrefetchControl) {\n res.setHeader(\"X-DNS-Prefetch-Control\", \"off\");\n }\n // X-Frame-Options\n if (opts.frameguard) {\n let action = \"SAMEORIGIN\";\n if (typeof opts.frameguard === \"object\") {\n action = opts.frameguard.action;\n }\n res.setHeader(\"X-Frame-Options\", action);\n }\n // Strict-Transport-Security\n if (opts.hsts) {\n let hstsRaw: Partial<{\n maxAge: number;\n includeSubDomains: boolean;\n preload: boolean;\n }> = {};\n if (typeof opts.hsts === \"object\") {\n hstsRaw = opts.hsts;\n }\n const maxAge = hstsRaw.maxAge !== undefined ? hstsRaw.maxAge : 15552000;\n const includeSubDomains =\n hstsRaw.includeSubDomains !== undefined\n ? hstsRaw.includeSubDomains\n : true;\n const preload = hstsRaw.preload !== undefined ? hstsRaw.preload : false;\n let hstsValue = `max-age=${maxAge}`;\n if (includeSubDomains !== false) {\n hstsValue += \"; includeSubDomains\";\n }\n if (preload) {\n hstsValue += \"; preload\";\n }\n res.setHeader(\"Strict-Transport-Security\", hstsValue);\n }\n // X-Content-Type-Options\n if (opts.contentTypeOptions) {\n res.setHeader(\"X-Content-Type-Options\", \"nosniff\");\n }\n // X-Download-Options\n if (opts.ieNoOpen) {\n res.setHeader(\"X-Download-Options\", \"noopen\");\n }\n // X-XSS-Protection\n if (opts.xssFilter) {\n res.setHeader(\"X-XSS-Protection\", \"0\");\n }\n // Referrer-Policy\n if (opts.referrerPolicy) {\n res.setHeader(\"Referrer-Policy\", opts.referrerPolicy);\n }\n // Cross-Origin-Resource-Policy\n if (opts.crossOriginResourcePolicy) {\n res.setHeader(\n \"Cross-Origin-Resource-Policy\",\n opts.crossOriginResourcePolicy,\n );\n }\n // Cross-Origin-Opener-Policy\n if (opts.crossOriginOpenerPolicy) {\n res.setHeader(\"Cross-Origin-Opener-Policy\", opts.crossOriginOpenerPolicy);\n }\n // Cross-Origin-Embedder-Policy\n if (opts.crossOriginEmbedderPolicy) {\n res.setHeader(\n \"Cross-Origin-Embedder-Policy\",\n opts.crossOriginEmbedderPolicy,\n );\n }\n // Content-Security-Policy\n if (opts.contentSecurityPolicy) {\n res.setHeader(\"Content-Security-Policy\", opts.contentSecurityPolicy);\n }\n\n await next();\n };\n};\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class JsonNotValidError extends BaldaError {\n constructor(json: any) {\n super(`JSON_NOT_VALID: \"${JSON.stringify(json)}\" is not a valid JSON`);\n }\n}\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { JsonNotValidError } from \"../../errors/json_not_valid.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport { canHaveBody } from \"../../runtime/native_server/server_utils.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { parseSizeLimit } from \"../../utils.js\";\nimport type { JsonOptions } from \"./json_options.js\";\n\n// 100kb in bytes\nconst DEFAULT_SIZE = 100 * 1024;\n\n/**\n * Middleware to parse the JSON body of the request. GET, DELETE and OPTIONS requests are not parsed.\n * @param options - The options for the JSON middleware.\n * @param options.sizeLimit - The maximum size of the JSON body. Default: 100kb\n */\nexport const json = (options?: JsonOptions): ServerRouteMiddleware => {\n return async (req: Request, res: Response, next: NextFunction) => {\n if (!isJsonRequest(req) || !canHaveBody(req.method)) {\n return next();\n }\n\n const sizeLimit =\n parseSizeLimit(options?.sizeLimit, DEFAULT_SIZE) ?? DEFAULT_SIZE;\n const arrayBuffer = req.rawBody;\n\n if (!arrayBuffer) {\n if (options?.parseEmptyBodyAsObject) {\n req.body = {};\n }\n\n return next();\n }\n\n const byteLength = arrayBuffer.byteLength;\n if (!byteLength) {\n if (options?.parseEmptyBodyAsObject) {\n req.body = {};\n }\n\n return next();\n }\n\n if (byteLength > sizeLimit) {\n const customErrorMessage = {\n status: 413,\n message: \"ERR_REQUEST_BODY_TOO_LARGE\",\n ...options?.customErrorMessage,\n };\n\n return res.status(customErrorMessage.status).json({\n error: customErrorMessage.message,\n });\n }\n\n try {\n const encoding = options?.encoding ?? \"utf-8\";\n const decodedBody = new TextDecoder(encoding).decode(arrayBuffer);\n req.body = JSON.parse(decodedBody);\n } catch (error) {\n if (error instanceof SyntaxError) {\n return res.badRequest({\n ...errorFactory(new JsonNotValidError(\"Invalid JSON syntax\")),\n });\n }\n\n return res.badRequest({\n ...errorFactory(new JsonNotValidError(\"Invalid request body encoding\")),\n });\n }\n\n await next();\n };\n};\n\nfunction isJsonRequest(req: Request): boolean {\n const contentType = getContentType(req);\n if (!contentType) {\n return false;\n }\n\n const mimeType = parseMimeType(contentType);\n return mimeType === \"application/json\";\n}\n\nfunction getContentType(req: Request): string | null {\n const contentType =\n req.headers.get(\"content-type\") ?? req.headers.get(\"Content-Type\");\n if (!contentType) {\n return null;\n }\n\n if (Array.isArray(contentType)) {\n return contentType[0] || null;\n }\n\n return contentType;\n}\n\nfunction parseMimeType(contentType: string): string {\n const trimmed = contentType.trim();\n const semicolonIndex = trimmed.indexOf(\";\");\n\n if (semicolonIndex === -1) {\n return trimmed.toLowerCase();\n }\n\n return trimmed.substring(0, semicolonIndex).trim().toLowerCase();\n}\n","import { logger } from \"../../logger/logger.js\";\nimport type { LogOptions } from \"./log_types.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\n\n/**\n * Logs the request and response of the handler, can be set both on a specific route or on a global middleware.\n * @warning Only json objects and strings are logged from the request and response.\n */\nexport const log = (options?: LogOptions): ServerRouteMiddleware => {\n return async (req: Request, res: Response, next: NextFunction) => {\n try {\n const body = req.body;\n if (options?.logRequest ?? true) {\n logger.info({\n type: \"request\",\n requestId: req.id,\n method:\n (options?.requestPayload?.method ?? true) ? req.method : undefined,\n url: (options?.requestPayload?.url ?? true) ? req.url : undefined,\n ip: (options?.requestPayload?.ip ?? true) ? req.ip : undefined,\n headers:\n (options?.requestPayload?.headers ?? true)\n ? req.headers\n : undefined,\n body:\n (options?.requestPayload?.body ?? false)\n ? returnIfObjectOrString(body)\n : undefined,\n });\n }\n\n const startTime = performance.now();\n await next();\n const endTime = performance.now();\n const duration = endTime - startTime;\n\n if (options?.logResponse ?? true) {\n logger.info({\n type: \"response\",\n requestId: req.id,\n status: options?.responsePayload?.status ?? res.responseStatus,\n duration: `${duration.toFixed(2)}ms`,\n body:\n (options?.responsePayload?.body ?? false)\n ? returnIfObjectOrString(res.getBody())\n : undefined,\n headers:\n (options?.responsePayload?.headers ?? false)\n ? res.headers\n : undefined,\n });\n }\n } catch (error) {\n logger.error(error);\n throw error;\n }\n };\n};\n\nfunction returnIfObjectOrString(value: any): any {\n if (typeof value === \"string\") {\n return value;\n }\n\n // must be Record<string, any> in order to be logged as json\n if (value && typeof value === \"object\" && value.constructor === Object) {\n return value;\n }\n\n return;\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { MethodOverrideOptions } from \"./method_override_types.js\";\n\nconst DEFAULT_METHODS = [\"POST\"];\nconst DEFAULT_HEADER = \"X-HTTP-Method-Override\";\nconst ALLOWED_OVERRIDE_METHODS = [\"GET\", \"POST\", \"PUT\", \"PATCH\", \"DELETE\"];\n\n/**\n * Method override middleware for supporting HTTP verbs like PUT/DELETE in clients that don't support them\n *\n * @param options Method override middleware options\n */\nexport const methodOverride = (\n options?: MethodOverrideOptions,\n): ServerRouteMiddleware => {\n const allowedMethods = (options?.methods ?? DEFAULT_METHODS).map((m) =>\n m.toUpperCase(),\n );\n const headerName = options?.header ?? DEFAULT_HEADER;\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const currentMethod = req.method.toUpperCase();\n\n if (!allowedMethods.includes(currentMethod)) {\n return next();\n }\n\n const overrideMethod = req.headers.get(headerName);\n\n if (!overrideMethod) {\n return next();\n }\n\n const normalizedOverride = overrideMethod.toUpperCase();\n if (!ALLOWED_OVERRIDE_METHODS.includes(normalizedOverride)) {\n return next();\n }\n\n (req as any).method = normalizedOverride;\n\n await next();\n };\n};\n","export interface InMemoryStorageInterface {\n get: (key: string) => Promise<number>;\n set: (key: string, value: number) => Promise<void>;\n}\n\nexport class InMemoryStorage implements InMemoryStorageInterface {\n private storage: Map<string, number> = new Map();\n private windowMs: number;\n\n constructor(windowMs: number) {\n this.windowMs = windowMs;\n }\n\n async set(key: string, value: number): Promise<void> {\n this.storage.set(key, value);\n setTimeout(() => {\n this.storage.delete(key);\n }, this.windowMs);\n }\n\n async get(key: string): Promise<number> {\n const entry = this.storage.get(key);\n if (!entry) {\n return 0;\n }\n\n return entry;\n }\n\n protected async delete(key: string): Promise<void> {\n this.storage.delete(key);\n }\n}\n","import {\n InMemoryStorage,\n InMemoryStorageInterface,\n} from \"./in_memory_storage.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type {\n RateLimiterKeyOptions,\n StorageOptions,\n} from \"./rate_limiter_types.js\";\n\n/**\n * Rate limiter plugin\n * Rate limiter is a plugin that limits the number of requests to a resource.\n * It can be used to protect a resource from abuse.\n * @param keyOptions Rate limiter key options, tells the middleware how to retrieve the key from the request in to discriminate what to rate limit (all optional, defaults to ip)\n * @param storageOptions Rate limiter storage options, tells the middleware how to store the rate limit data (all optional, defaults to memory)\n */\nexport const rateLimiter = (\n keyOptions?: RateLimiterKeyOptions,\n storageOptions?: StorageOptions,\n): ServerRouteMiddleware => {\n const baseKeyOptions: RateLimiterKeyOptions = {\n type: \"ip\",\n limit: 100,\n message: \"ERR_RATE_LIMIT_EXCEEDED\",\n statusCode: 429,\n ...keyOptions,\n };\n\n const baseStorageOptions: StorageOptions = {\n type: \"memory\",\n ...storageOptions,\n };\n\n if (baseStorageOptions.type === \"memory\" && !baseStorageOptions.windowMs) {\n baseStorageOptions.windowMs = 60000;\n }\n\n const storage: InMemoryStorageInterface =\n baseStorageOptions.type === \"memory\"\n ? new InMemoryStorage(baseStorageOptions.windowMs!)\n : {\n get: baseStorageOptions.get,\n set: baseStorageOptions.set,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const key = baseKeyOptions.type === \"ip\" ? req.ip : baseKeyOptions.key(req);\n const value = await storage.get(key!);\n if (value >= baseKeyOptions.limit!) {\n return res.status(baseKeyOptions.statusCode!).json({\n message: baseKeyOptions.message,\n });\n }\n\n await storage.set(key!, value + 1);\n return next();\n };\n};\n","import type { SessionStore } from \"./session_types.js\";\n\nexport class MemorySessionStore implements SessionStore {\n private store = new Map<\n string,\n { value: Record<string, any>; exp?: number }\n >();\n\n async get(sid: string): Promise<Record<string, any> | undefined> {\n const entry = this.store.get(sid);\n if (!entry) {\n return;\n }\n\n if (entry.exp && Date.now() > entry.exp) {\n this.store.delete(sid);\n return;\n }\n\n return entry.value;\n }\n\n async set(\n sid: string,\n value: Record<string, any>,\n ttlSeconds?: number,\n ): Promise<void> {\n const exp = ttlSeconds ? Date.now() + ttlSeconds * 1000 : undefined;\n this.store.set(sid, { value, exp });\n }\n\n async destroy(sid: string): Promise<void> {\n this.store.delete(sid);\n }\n}\n","import { MemorySessionStore } from \"./session_store.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { SessionOptions, SessionStore } from \"./session_types.js\";\nimport { nativeCrypto } from \"../../runtime/native_crypto.js\";\n\n/**\n * Session plugin middleware, used to store the session in the request and response objects\n * Uses cookies to send the session id\n * @warning Must be used after the cookie middleware\n * @param options Session options\n * @param options.name The name of the session cookie\n * @param options.ttl The TTL of the session in seconds\n * @param options.store The store to use for the session\n * @param options.cookie The cookie options\n */\nexport const session = (options?: SessionOptions): ServerRouteMiddleware => {\n const name = options?.name ?? \"sid\";\n const ttl = options?.ttl ?? 60 * 60 * 24; // 1 day\n const store: SessionStore = options?.store ?? new MemorySessionStore();\n const cookieDefaults = {\n path: \"/\",\n httpOnly: true,\n secure: false,\n sameSite: \"Lax\" as const,\n ...(options?.cookie ?? {}),\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const sidFromCookie = req.cookies && req.cookies[name];\n let sid = sidFromCookie;\n let sess = sid ? await store.get(sid) : undefined;\n\n if (!sid || !sess) {\n sid ||= nativeCrypto.randomUUID();\n sess ||= {};\n await store.set(sid, sess, ttl);\n res.cookie?.(name, sid, cookieDefaults);\n }\n\n req.session = sess;\n req.saveSession = async () => store.set(sid, sess, ttl);\n req.destroySession = async () => {\n await store.destroy(sid!);\n res.clearCookie?.(name, cookieDefaults);\n };\n\n await next();\n await store.set(sid, sess, ttl);\n };\n};\n","import type { ZodObject, ZodType } from \"zod\";\nimport { AjvCompileReturnType } from \"../../ajv/ajv_types.js\";\nimport type {\n SwaggerGlobalOptions,\n SwaggerRouteOptions,\n} from \"../../plugins/swagger/swagger_types.js\";\nimport { router } from \"../../server/router/router.js\";\n\n/**\n * Swagger plugin that serves the swagger UI and JSON specification, by default the UI will be available at /docs and the JSON specification at /docs/json\n * @warning The json specification is always available at /${globalOptions.path}/json\n * @internal\n */\nexport const swagger = (\n globalOptions?: SwaggerGlobalOptions | boolean,\n): void => {\n let swaggerOptions: SwaggerGlobalOptions = {\n type: \"standard\",\n path: \"/docs\",\n title: \"Balda API Documentation\",\n description: \"API Documentation from the Balda Framework\",\n version: \"1.0.0\",\n servers: [\"http://localhost\"],\n security: [],\n tags: [],\n components: {},\n securitySchemes: {},\n models: {},\n };\n\n if (globalOptions && typeof globalOptions !== \"boolean\") {\n swaggerOptions = {\n ...swaggerOptions,\n ...globalOptions,\n };\n }\n\n const spec = generateOpenAPISpec(swaggerOptions);\n const uiPath = `${swaggerOptions.path}`;\n const jsonPath = `${uiPath}/json`;\n\n let uiContent: string;\n if (swaggerOptions.type === \"rapidoc\") {\n uiContent = generateRapiDocUI(jsonPath, swaggerOptions);\n } else if (swaggerOptions.type === \"scalar\") {\n uiContent = generateScalarUI(jsonPath, swaggerOptions);\n } else if (swaggerOptions.type === \"elements\") {\n uiContent = generateElementsUI(jsonPath, swaggerOptions);\n } else if (swaggerOptions.type === \"custom\") {\n uiContent = swaggerOptions.customUIGenerator(jsonPath, swaggerOptions);\n } else {\n uiContent = generateSwaggerUI(jsonPath, swaggerOptions);\n }\n\n router.addOrUpdate(\"GET\", uiPath, [], (_req, res) => {\n res.html(uiContent);\n });\n\n router.addOrUpdate(\"GET\", jsonPath, [], (_req, res) => {\n res.json(spec);\n });\n};\n\n/**\n * Escape HTML to prevent XSS attacks\n */\nconst escapeHtml = (str?: string): string => {\n if (!str) {\n return \"\";\n }\n\n return str\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n};\n\nfunction safeToJSONSchema(\n schema: ZodType | AjvCompileReturnType | Record<string, unknown>,\n): Record<string, any> {\n if (!schema || typeof schema !== \"object\") {\n return { type: \"string\" };\n }\n\n return schema as Record<string, unknown>;\n}\n\nfunction generateOpenAPISpec(globalOptions: SwaggerGlobalOptions) {\n const routes = router.getRoutes();\n const paths: Record<string, any> = {};\n\n // Process models - normalize to Record\n let processedModels: Record<string, Record<string, unknown>> | undefined;\n if (globalOptions.models) {\n if (Array.isArray(globalOptions.models)) {\n // Array of models: extract name from $id/title or use index\n processedModels = globalOptions.models.reduce(\n (acc, model, index) => {\n const jsonSchema = safeToJSONSchema(model);\n const schemaName =\n (jsonSchema as Record<string, string>).$id ||\n (jsonSchema as Record<string, string>).title ||\n `Model${index}`;\n acc[schemaName] = jsonSchema;\n return acc;\n },\n {} as Record<string, Record<string, unknown>>,\n );\n } else {\n // Record of models: use the key as name\n processedModels = {};\n for (const [name, model] of Object.entries(globalOptions.models)) {\n processedModels[name] = safeToJSONSchema(model);\n }\n }\n }\n\n const components = {\n ...globalOptions.components,\n securitySchemes: globalOptions.securitySchemes || {},\n schemas: processedModels\n ? {\n ...(globalOptions.components?.schemas || {}),\n ...processedModels,\n }\n : globalOptions.components?.schemas\n ? { ...globalOptions.components.schemas }\n : undefined,\n };\n\n for (const route of routes) {\n const swaggerOptions: SwaggerRouteOptions | undefined =\n route.swaggerOptions;\n if (swaggerOptions?.excludeFromSwagger) continue;\n\n if (!paths[route.path]) paths[route.path] = {};\n const method = route.method.toLowerCase();\n const operation: Record<string, any> = {\n summary: swaggerOptions?.name || `${method.toUpperCase()} ${route.path}`,\n description: swaggerOptions?.description || \"\",\n tags: swaggerOptions?.service ? [swaggerOptions.service] : [],\n deprecated: swaggerOptions?.deprecated || false,\n };\n\n let parameters: any[] = [];\n if (swaggerOptions?.query) {\n if (\n swaggerOptions.query.type === \"object\" &&\n (swaggerOptions.query as ZodObject).shape\n ) {\n for (const [name, schema] of Object.entries(\n (swaggerOptions.query as ZodObject).shape,\n )) {\n // Skip if schema is invalid\n if (!schema || typeof schema !== \"object\") {\n continue;\n }\n\n parameters.push({\n name,\n in: \"query\",\n required: Array.isArray(\n (swaggerOptions.query as ZodObject).shape[name].required,\n )\n ? (swaggerOptions.query as ZodObject).shape[\n name\n ].required.includes(name)\n : false,\n schema: safeToJSONSchema(schema as ZodType),\n });\n }\n }\n }\n if (swaggerOptions && (swaggerOptions as Record<string, unknown>).params) {\n parameters = parameters.concat(\n extractPathParams(route.path, (swaggerOptions as any).params),\n );\n } else {\n parameters = parameters.concat(extractPathParams(route.path));\n }\n\n if (parameters.length > 0) {\n operation.parameters = parameters;\n }\n\n if (swaggerOptions?.requestBody) {\n let routeBodyContentType = \"application/json\";\n if (swaggerOptions.bodyType === \"form-data\") {\n routeBodyContentType = \"multipart/form-data\";\n } else if (swaggerOptions.bodyType === \"urlencoded\") {\n routeBodyContentType = \"application/x-www-form-urlencoded\";\n }\n operation.requestBody = {\n content: {\n [routeBodyContentType]: {\n schema: safeToJSONSchema(swaggerOptions.requestBody as ZodType),\n },\n },\n required: true,\n };\n } else if (\n swaggerOptions?.bodyType &&\n (swaggerOptions.bodyType.includes(\"form-data\") ||\n swaggerOptions.bodyType.includes(\"urlencoded\"))\n ) {\n operation.requestBody = {\n content: {\n [swaggerOptions.bodyType]: {\n schema: { type: \"object\" },\n },\n },\n required: true,\n };\n }\n\n operation.responses = {};\n if (swaggerOptions?.responses) {\n for (const [statusCode, schema] of Object.entries(\n swaggerOptions.responses,\n )) {\n operation.responses[statusCode] = {\n description: `Response for ${statusCode}`,\n content: {\n \"application/json\": {\n schema: safeToJSONSchema(schema),\n },\n },\n };\n }\n }\n if (swaggerOptions?.errors) {\n for (const [statusCode, schema] of Object.entries(\n swaggerOptions.errors,\n )) {\n operation.responses[statusCode] = {\n description: `Error response for ${statusCode}`,\n content: {\n \"application/json\": {\n schema: safeToJSONSchema(schema),\n },\n },\n };\n }\n }\n\n if (Object.keys(operation.responses).length === 0) {\n operation.responses[\"200\"] = {\n description: \"Successful response\",\n content: {\n \"application/json\": {\n schema: { type: \"object\" },\n },\n },\n };\n }\n\n // First we try route specific security\n if (swaggerOptions?.security) {\n const securityArr: any[] = [];\n if (!Array.isArray(swaggerOptions.security)) {\n swaggerOptions.security = [swaggerOptions.security];\n }\n\n for (const sec of swaggerOptions.security) {\n if (sec.type === \"bearer\") {\n if (!components.securitySchemes.bearer) {\n components.securitySchemes.bearer = {\n type: \"http\",\n scheme: \"bearer\",\n bearerFormat: sec.bearerFormat || \"JWT\",\n description: sec.description,\n } as any;\n }\n securityArr.push({ bearer: [] });\n } else if (sec.type === \"apiKey\") {\n // Use sec.name as the scheme name\n if (!components.securitySchemes[sec.name]) {\n components.securitySchemes[sec.name] = {\n type: \"apiKey\",\n name: sec.name,\n in: sec.in,\n description: sec.description,\n };\n }\n securityArr.push({ [sec.name]: [] });\n } else if (sec.type === \"oauth2\") {\n const schemeName = sec.name || \"oauth2\";\n if (!components.securitySchemes[schemeName]) {\n components.securitySchemes[schemeName] = {\n type: \"oauth2\",\n flows: sec.flows,\n description: sec.description,\n };\n }\n securityArr.push({ [schemeName]: [] });\n } else if (sec.type === \"openIdConnect\") {\n const schemeName = sec.name || \"openIdConnect\";\n if (!components.securitySchemes[schemeName]) {\n components.securitySchemes[schemeName] = {\n type: \"openIdConnect\",\n openIdConnectUrl: sec.openIdConnectUrl,\n description: sec.description,\n };\n }\n securityArr.push({ [schemeName]: [] });\n }\n }\n if (securityArr.length) operation.security = securityArr;\n } else if (globalOptions.security) {\n // If no route specific security, we use the global security\n operation.security = globalOptions.security;\n }\n\n paths[route.path][method] = operation;\n }\n\n return {\n openapi: \"3.0.0\",\n info: {\n title: globalOptions.title,\n description: globalOptions.description,\n version: globalOptions.version,\n ...globalOptions.info,\n },\n servers: globalOptions.servers?.map((url) => ({ url })) || [{ url: \"/\" }],\n paths,\n components,\n security: globalOptions.security || [],\n tags: globalOptions.tags\n ? Object.entries(globalOptions.tags).map(([name, config]) => ({\n name,\n ...config,\n }))\n : [],\n };\n}\n\nfunction generateSwaggerUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <title>${escapeHtml(globalOptions.title)}</title>\n <link rel=\"stylesheet\" type=\"text/css\" href=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui.css\" />\n <style>\n html {\n box-sizing: border-box;\n overflow: -moz-scrollbars-vertical;\n overflow-y: scroll;\n }\n *, *:before, *:after {\n box-sizing: inherit;\n }\n body {\n margin:0;\n background: #fafafa;\n }\n </style>\n</head>\n<body>\n <div id=\"swagger-ui\"></div>\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-bundle.js\"></script>\n <script src=\"https://unpkg.com/swagger-ui-dist@5.9.0/swagger-ui-standalone-preset.js\"></script>\n <script>\n window.onload = function() {\n const ui = SwaggerUIBundle({\n url: '${specUrl}',\n dom_id: '#swagger-ui',\n deepLinking: true,\n presets: [\n SwaggerUIBundle.presets.apis,\n SwaggerUIStandalonePreset\n ],\n plugins: [\n SwaggerUIBundle.plugins.DownloadUrl\n ],\n layout: \"StandaloneLayout\",\n validatorUrl: null,\n oauth2RedirectUrl: window.location.origin + '/swagger-ui/oauth2-redirect.html'\n });\n };\n </script>\n</body>\n</html>`;\n}\n\nfunction generateRapiDocUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html>\n <head>\n <title>${escapeHtml(globalOptions.title)}</title>\n <meta charset=\"utf-8\"/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <link rel=\"icon\" type=\"image/png\" href=\"https://mrin9.github.io/RapiDoc/images/favicon.png\">\n <style>\n body { margin: 0; padding: 0; }\n </style>\n </head>\n <body>\n <rapi-doc\n spec-url=\"${specUrl}\"\n render-style=\"read\"\n layout=\"column\"\n show-header=\"true\"\n allow-server-selection=\"true\"\n allow-authentication=\"true\"\n allow-server-variables=\"true\"\n theme=\"light\"\n primary-color=\"#009688\"\n regular-font=\"Open Sans, sans-serif\"\n mono-font=\"Fira Mono, monospace\"\n >\n </rapi-doc>\n <script type=\"module\" src=\"https://unpkg.com/rapidoc/dist/rapidoc-min.js\"></script>\n </body>\n</html>\n `;\n}\n\nfunction generateScalarUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <title>${escapeHtml(globalOptions.title)}</title>\n <style>\n body {\n margin: 0;\n padding: 0;\n }\n </style>\n </head>\n <body>\n <script\n id=\"api-reference\"\n type=\"application/json\"\n data-configuration='{\"spec\":{\"url\":\"${specUrl}\"},\"theme\":\"default\"}'\n ></script>\n <script src=\"https://unpkg.com/@scalar/api-reference@latest/dist/browser/standalone.js\"></script>\n </body>\n</html>\n `;\n}\n\nfunction generateElementsUI(\n specUrl: string,\n globalOptions: SwaggerGlobalOptions,\n) {\n return `\n<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <meta name=\"description\" content=\"${escapeHtml(globalOptions.description)}\" />\n <title>${escapeHtml(globalOptions.title)}</title>\n <link rel=\"stylesheet\" href=\"https://unpkg.com/@stoplight/elements@7.7.9/styles.min.css\">\n <style>\n body {\n margin: 0;\n padding: 0;\n height: 100vh;\n overflow: hidden;\n }\n </style>\n </head>\n <body>\n <elements-api\n apiDescriptionUrl=\"${specUrl}\"\n router=\"hash\"\n layout=\"sidebar\"\n />\n <script src=\"https://unpkg.com/@stoplight/elements@7.7.9/web-components.min.js\"></script>\n </body>\n</html>\n `;\n}\n\n/**\n * Extract path parameters from a route path (e.g., /users/:id -> [{ name: \"id\", in: \"path\", required: true }])\n */\nfunction extractPathParams(path: string, paramSchema?: ZodType): any[] {\n const params: any[] = [];\n const regex = /:([a-zA-Z0-9_]+)/g;\n let match;\n while ((match = regex.exec(path)) !== null) {\n const name = match[1];\n let schema: Record<string, unknown> = { type: \"string\" };\n if (\n paramSchema &&\n (paramSchema as ZodObject).shape &&\n (paramSchema as ZodObject).shape[name]\n ) {\n schema = safeToJSONSchema(\n (paramSchema as ZodObject).shape[name] as ZodType,\n ) || {\n type: \"string\",\n };\n }\n params.push({\n name,\n in: \"path\",\n required: true,\n schema,\n });\n }\n return params;\n}\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { TimeoutOptions } from \"./timeout_types.js\";\n\n/**\n * Timeout plugin middleware, used to timeout the request if it takes too long\n * It fills the req.timeout property with true if the request times out\n * @param options Timeout options\n * @param options.ms The timeout in milliseconds\n * @param options.status The status code to return if the request times out\n * @param options.message The message to return if the request times out\n */\nexport const timeout = (options: TimeoutOptions): ServerRouteMiddleware => {\n return async (req: Request, _res: Response, next: NextFunction) => {\n req.timeout = false;\n const timer = setTimeout(() => {\n req.timeout = true;\n }, options.ms);\n\n try {\n await next();\n } finally {\n clearTimeout(timer);\n }\n };\n};\n","import type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport type { TrustProxyOptions } from \"./trust_proxy_types.js\";\n\n/**\n * Trust proxy plugin middleware, used to trust the proxy headers to get the client ip\n * @param options Trust proxy options (all optional)\n * @param options.trust Whether to trust the proxy headers\n * @param options.header The header name to read the client IP chain from\n * @param options.hop The hop to use to get the client IP\n */\n\nexport const trustProxy = (\n options?: TrustProxyOptions,\n): ServerRouteMiddleware => {\n const headerName = options?.header ?? \"x-forwarded-for\";\n const useTrust = options?.trust ?? true;\n const hop = options?.hop ?? \"first\";\n\n return async (req: Request, _res: Response, next: NextFunction) => {\n if (!useTrust) {\n return next();\n }\n\n const header = req.headers.get(headerName);\n if (header && typeof header === \"string\") {\n const parts = header\n .split(\",\")\n .map((s) => s.trim())\n .filter(Boolean);\n\n if (parts.length) {\n req.ip = hop === \"first\" ? parts[0] : parts[parts.length - 1];\n }\n }\n\n return next();\n };\n};\n","import type { UrlEncodedOptions } from \"./urlencoded_types.js\";\nimport type { ServerRouteMiddleware } from \"../../runtime/native_server/server_types.js\";\nimport type { NextFunction } from \"../../server/http/next.js\";\nimport type { Request } from \"../../server/http/request.js\";\nimport type { Response } from \"../../server/http/response.js\";\nimport { parseSizeLimit } from \"../../utils.js\";\n\n// 1MB in bytes\nconst DEFAULT_SIZE = 1024 * 1024;\n\n/**\n * URL-encoded form data parser middleware\n * Parses application/x-www-form-urlencoded bodies and populates req.body\n * @param options URL-encoded parsing options\n * @param options.limit The maximum size of the URL-encoded body. Supports \"5mb\", \"100kb\" format. Defaults to \"1mb\".\n * @param options.extended Whether to parse extended syntax (objects and arrays). Defaults to false.\n * @param options.charset The character encoding to use when parsing. Defaults to 'utf8'.\n * @param options.allowEmpty Whether to allow empty values. Defaults to true.\n * @param options.parameterLimit Maximum number of parameters to parse. Defaults to 1000.\n */\nexport const urlencoded = (\n options?: UrlEncodedOptions,\n): ServerRouteMiddleware => {\n const limit = parseSizeLimit(options?.limit, DEFAULT_SIZE) ?? DEFAULT_SIZE;\n const opts = {\n limit,\n extended: options?.extended ?? false,\n charset: options?.charset ?? \"utf8\",\n allowEmpty: options?.allowEmpty ?? true,\n parameterLimit: options?.parameterLimit ?? 1000,\n };\n\n return async (req: Request, res: Response, next: NextFunction) => {\n const contentType = req.headers.get(\"content-type\") || \"\";\n if (!contentType.includes(\"application/x-www-form-urlencoded\")) {\n return next();\n }\n\n try {\n await parseUrlEncodedBody(req, opts);\n await next();\n } catch (error) {\n if (error instanceof Error && error.message.includes(\"limit\")) {\n res.status(413).json({\n error: \"Payload too large\",\n message: \"Request body exceeds the size limit\",\n });\n return;\n }\n\n throw error;\n }\n };\n};\n\n/**\n * Parse URL-encoded body and populate req.body\n */\nasync function parseUrlEncodedBody(\n req: Request,\n opts: {\n limit: number;\n extended: boolean;\n charset: string;\n allowEmpty: boolean;\n parameterLimit: number;\n },\n): Promise<void> {\n const arrayBuffer = req.rawBody!;\n\n if (arrayBuffer.byteLength > opts.limit) {\n throw new Error(\n `Body size ${arrayBuffer.byteLength} exceeds limit ${opts.limit}`,\n );\n }\n\n const decoder = new TextDecoder(opts.charset);\n const bodyString = decoder.decode(arrayBuffer);\n const parsed = parseUrlEncodedString(bodyString, opts);\n req.body = parsed;\n}\n\n/**\n * Parse URL-encoded string into an object\n */\nfunction parseUrlEncodedString(\n str: string,\n opts: {\n extended: boolean;\n allowEmpty: boolean;\n parameterLimit: number;\n },\n): Record<string, any> {\n const result: Record<string, any> = {};\n const searchParams = new URLSearchParams(str);\n if (searchParams.size > opts.parameterLimit) {\n throw new Error(\n `Too many parameters: ${searchParams.size} exceeds limit ${opts.parameterLimit}`,\n );\n }\n\n for (const [key, value] of searchParams.entries()) {\n if (!opts.allowEmpty && value === \"\") {\n continue;\n }\n\n if (opts.extended) {\n setNestedValue(result, key, value);\n } else {\n result[key] = value;\n }\n }\n\n return result;\n}\n\n/**\n * Set nested value for extended mode (e.g., user[name]=john -> { user: { name: 'john' } })\n */\nfunction setNestedValue(\n obj: Record<string, any>,\n key: string,\n value: string,\n): void {\n const dangerousKeys = [\"__proto__\", \"constructor\", \"prototype\"];\n if (dangerousKeys.includes(key)) {\n return;\n }\n\n const keys = key.match(/\\[([^\\]]*)\\]/g);\n if (!keys) {\n if (!dangerousKeys.includes(key)) {\n obj[key] = value;\n }\n return;\n }\n\n let current = obj;\n const baseKey = key.split(\"[\")[0];\n\n // Security: Check base key\n if (dangerousKeys.includes(baseKey)) {\n return;\n }\n\n for (let i = 0; i < keys.length - 1; i++) {\n const bracketKey = keys[i].slice(1, -1);\n\n // Security: Check each nested key\n if (dangerousKeys.includes(bracketKey)) {\n return;\n }\n\n if (!current[baseKey]) {\n current[baseKey] = {};\n }\n\n if (bracketKey === \"\") {\n if (!Array.isArray(current[baseKey])) {\n current[baseKey] = [];\n }\n current = current[baseKey];\n continue;\n }\n\n if (!current[baseKey][bracketKey]) {\n current[baseKey][bracketKey] = {};\n }\n\n current = current[baseKey][bracketKey];\n }\n\n const lastKey = keys[keys.length - 1].slice(1, -1);\n\n // Security: Check last key\n if (dangerousKeys.includes(lastKey)) {\n return;\n }\n\n if (lastKey === \"\") {\n if (!Array.isArray(current)) {\n current = [];\n }\n\n current.push(value);\n return;\n }\n\n current[lastKey] = value;\n}\n","class NativeHash {\n private readonly ITERATIONS = 600_000;\n private readonly SALT_LENGTH = 16;\n private readonly KEY_LENGTH = 256;\n\n async hash(data: string): Promise<string> {\n if (!data) {\n throw new Error(\"Data to hash cannot be empty\");\n }\n\n const encoder = new TextEncoder();\n const passwordBuffer = encoder.encode(data);\n\n const salt = crypto.getRandomValues(new Uint8Array(this.SALT_LENGTH));\n\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n passwordBuffer,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\"],\n );\n\n const hashBuffer = await crypto.subtle.deriveBits(\n {\n name: \"PBKDF2\",\n salt: salt,\n iterations: this.ITERATIONS,\n hash: \"SHA-256\",\n },\n keyMaterial,\n this.KEY_LENGTH,\n );\n\n const saltBase64 = this.encodeBase64(salt);\n const hashBase64 = this.encodeBase64(new Uint8Array(hashBuffer));\n\n return `${saltBase64}:${hashBase64}`;\n }\n\n async compare(hash: string, data: string): Promise<boolean> {\n if (!hash || !data) {\n return false;\n }\n\n try {\n const encoder = new TextEncoder();\n const passwordBuffer = encoder.encode(data);\n\n const parts = hash.split(\":\");\n if (parts.length !== 2) {\n throw new Error(\"Invalid hash format\");\n }\n\n const [saltBase64, hashBase64] = parts;\n\n const salt = this.decodeBase64(saltBase64);\n const expectedHash = this.decodeBase64(hashBase64);\n\n const keyMaterial = await crypto.subtle.importKey(\n \"raw\",\n passwordBuffer,\n { name: \"PBKDF2\" },\n false,\n [\"deriveBits\"],\n );\n\n const hashBuffer = await crypto.subtle.deriveBits(\n {\n name: \"PBKDF2\",\n salt: salt as BufferSource,\n iterations: this.ITERATIONS,\n hash: \"SHA-256\",\n },\n keyMaterial,\n this.KEY_LENGTH,\n );\n\n const actualHash = new Uint8Array(hashBuffer);\n\n if (actualHash.length !== expectedHash.length) {\n return false;\n }\n\n let mismatch = 0;\n for (let i = 0; i < actualHash.length; i++) {\n mismatch |= actualHash[i] ^ expectedHash[i];\n }\n\n return mismatch === 0;\n } catch (error) {\n return false;\n }\n }\n\n private encodeBase64(bytes: Uint8Array): string {\n let binary = \"\";\n const len = bytes.byteLength;\n for (let i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return btoa(binary);\n }\n\n private decodeBase64(base64: string): Uint8Array {\n const binary = atob(base64);\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n\nexport const hash = new NativeHash();\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { GraphQL } from \"../../graphql/graphql.js\";\nimport { Request } from \"../../server/http/request.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport type {\n HttpMethod,\n ServerConnectInput,\n ServerRoute,\n ServerTapOptions,\n} from \"./server_types.js\";\nimport {\n createGraphQLHandlerInitializer,\n executeMiddlewareChain,\n} from \"./server_utils.js\";\n\nexport class ServerBun implements ServerInterface {\n port: number;\n hostname: string;\n host: string;\n routes: ServerRoute[];\n tapOptions?: ServerTapOptions;\n graphql: GraphQL;\n declare url: string;\n declare runtimeServer: ReturnType<typeof Bun.serve>;\n private ensureGraphQLHandler: ReturnType<\n typeof createGraphQLHandlerInitializer\n >;\n\n constructor(input?: ServerConnectInput) {\n this.routes = input?.routes ?? [];\n this.port = input?.port ?? 80;\n this.hostname = input?.host ?? \"0.0.0.0\";\n this.host = input?.host ?? \"0.0.0.0\";\n this.url = `http://${this.host}:${this.port}`;\n this.tapOptions = input?.tapOptions;\n this.graphql = input?.graphql ?? new GraphQL();\n this.ensureGraphQLHandler = createGraphQLHandlerInitializer(this.graphql);\n }\n\n listen(): void {\n const tapOptions = this.tapOptions?.bun;\n const { fetch, websocket, ...rest } = tapOptions ?? {};\n\n this.runtimeServer = Bun.serve({\n port: this.port,\n hostname: this.hostname,\n fetch: async (req, server) => {\n const url = new URL(req.url);\n const match = router.find(req.method as HttpMethod, url.pathname);\n\n Request.enrichRequest(req as Request);\n req.params = match?.params ?? {};\n req.query = Object.fromEntries(url.searchParams.entries());\n (req as any).ip =\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0] ??\n server.requestIP(req)?.address;\n\n // User input handler\n await fetch?.call(this, req as unknown as Request, server);\n\n // GraphQL handler\n if (\n this.graphql.isEnabled &&\n url.pathname.startsWith(\n this.graphql.getYogaOptions().graphqlEndpoint ?? \"/graphql\",\n )\n ) {\n const handler = await this.ensureGraphQLHandler();\n if (handler) {\n return handler.fetch(req, { server });\n }\n }\n\n // ws upgrade handler - only attempt if websocket config exists and request is upgrade\n if (websocket && req.headers.get(\"upgrade\") === \"websocket\") {\n const success = server.upgrade(req, { data: {} });\n if (success) {\n return;\n }\n }\n\n const response = await executeMiddlewareChain(\n match?.middleware ?? [],\n match?.handler ??\n ((req, res) => {\n res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }),\n req as Request,\n );\n\n const responseHeaders = response.headers;\n if (responseHeaders[\"Content-Type\"] === \"application/json\") {\n return Response.json(response.getBody(), {\n status: response.responseStatus,\n headers: response.headers,\n });\n }\n\n return new Response(response.getBody(), {\n status: response.responseStatus,\n headers: response.headers,\n });\n },\n // Pass websocket config to Bun.serve if provided\n ...(websocket ? { websocket } : {}),\n ...(rest as any),\n });\n\n this.url = this.runtimeServer.url.toString();\n }\n\n async close(): Promise<void> {\n if (!this.runtimeServer) {\n throw new Error(\"Server is not listening or not initialized\");\n }\n\n await this.runtimeServer.stop();\n }\n}\n","import { errorFactory } from \"../../errors/error_factory.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { GraphQL } from \"../../graphql/graphql.js\";\nimport { Request } from \"../../server/http/request.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport type {\n HttpMethod,\n ServerConnectInput,\n ServerRoute,\n ServerTapOptions,\n} from \"./server_types.js\";\nimport {\n createGraphQLHandlerInitializer,\n executeMiddlewareChain,\n} from \"./server_utils.js\";\n\nexport class ServerDeno implements ServerInterface {\n declare port: number;\n declare hostname: string;\n declare host: string;\n declare url: string;\n declare routes: ServerRoute[];\n declare runtimeServer: ReturnType<typeof Deno.serve>;\n declare tapOptions?: ServerTapOptions;\n graphql: GraphQL;\n private ensureGraphQLHandler: ReturnType<\n typeof createGraphQLHandlerInitializer\n >;\n\n constructor(input?: ServerConnectInput) {\n this.routes = input?.routes ?? [];\n this.port = input?.port ?? 80;\n this.hostname = input?.host ?? \"0.0.0.0\";\n this.host = input?.host ?? \"0.0.0.0\";\n this.url = `http://${this.host}:${this.port}`;\n this.tapOptions = input?.tapOptions;\n this.graphql = input?.graphql ?? new GraphQL();\n this.ensureGraphQLHandler = createGraphQLHandlerInitializer(this.graphql);\n }\n\n listen(): void {\n const tapOptions = this.tapOptions?.deno;\n const { handler, ...rest } = tapOptions ?? {};\n\n this.runtimeServer = Deno.serve({\n port: this.port,\n hostname: this.hostname,\n handler: async (req, info) => {\n const url = new URL(req.url);\n const match = router.find(req.method as HttpMethod, url.pathname);\n\n Request.enrichRequest(req as Request);\n req.params = match?.params ?? {};\n req.query = Object.fromEntries(url.searchParams.entries());\n (req as any).ip =\n req.headers.get(\"x-forwarded-for\")?.split(\",\")[0] ??\n info.remoteAddr?.hostname;\n\n // User input handler\n const handlerResponse = await handler?.(req, info);\n if (handlerResponse) {\n return new Response(null, { status: 426 });\n }\n\n // GraphQL handler\n if (\n this.graphql.isEnabled &&\n url.pathname.startsWith(\n this.graphql.getYogaOptions().graphqlEndpoint ?? \"/graphql\",\n )\n ) {\n const graphqlHandler = await this.ensureGraphQLHandler();\n if (graphqlHandler) {\n return graphqlHandler.fetch(req, { info });\n }\n }\n\n // ws upgrade handler\n if (\n req.headers.get(\"upgrade\") === \"websocket\" &&\n this.tapOptions?.deno?.websocket\n ) {\n const { socket, response } = Deno.upgradeWebSocket(req);\n\n // Set event handlers instead of calling them immediately\n if (this.tapOptions?.deno?.websocket?.open) {\n socket.onopen = () =>\n this.tapOptions?.deno?.websocket?.open?.(socket);\n }\n\n if (this.tapOptions?.deno?.websocket?.message) {\n socket.onmessage = (event) => {\n this.tapOptions?.deno?.websocket?.message?.(socket, event.data);\n };\n }\n\n if (this.tapOptions?.deno?.websocket?.close) {\n socket.onclose = () =>\n this.tapOptions?.deno?.websocket?.close?.(socket);\n }\n\n return response;\n }\n\n const res = await executeMiddlewareChain(\n match?.middleware ?? [],\n match?.handler ??\n ((req, res) => {\n res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }),\n req as Request,\n );\n\n const responseHeaders = res.headers;\n if (responseHeaders[\"Content-Type\"] === \"application/json\") {\n return Response.json(res.getBody(), {\n status: res.responseStatus,\n headers: res.headers,\n });\n }\n\n return new Response(res.getBody(), {\n status: res.responseStatus,\n headers: res.headers,\n });\n },\n ...rest,\n });\n\n this.url = `http://${this.host}:${this.port}`;\n }\n\n async close(): Promise<void> {\n if (!this.runtimeServer) {\n throw new Error(\"Server is not listening or not initialized\");\n }\n\n await this.runtimeServer.shutdown();\n }\n}\n","import {\n createServer,\n type IncomingMessage,\n type ServerResponse,\n} from \"node:http\";\nimport {\n createSecureServer as http2CreateSecureServer,\n createServer as http2CreateServer,\n type Http2ServerRequest,\n type Http2ServerResponse,\n} from \"node:http2\";\nimport { createServer as httpsCreateServer } from \"node:https\";\nimport { errorFactory } from \"../../errors/error_factory.js\";\nimport { RouteNotFoundError } from \"../../errors/route_not_found.js\";\nimport { GraphQL } from \"../../graphql/graphql.js\";\nimport { NodeHttpClient } from \"../../server/server_types.js\";\nimport { Request } from \"../../server/http/request.js\";\nimport { Response } from \"../../server/http/response.js\";\nimport { router } from \"../../server/router/router.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport type {\n HttpMethod,\n HttpsServerOptions,\n NodeServer,\n NodeTapOptions,\n ServerConnectInput,\n ServerRoute,\n ServerTapOptions,\n} from \"./server_types.js\";\nimport {\n canHaveBody,\n createGraphQLHandlerInitializer,\n executeMiddlewareChain,\n} from \"./server_utils.js\";\n\nasync function pipeReadableStreamToNodeResponse(\n stream: ReadableStream,\n res: ServerResponse,\n) {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n res.end();\n break;\n }\n res.write(value);\n }\n } catch (error) {\n res.destroy(error as Error);\n }\n}\n\nexport class ServerNode<H extends NodeHttpClient> implements ServerInterface {\n port: number;\n host: string;\n url: string;\n routes: ServerRoute[];\n tapOptions?: ServerTapOptions;\n runtimeServer: NodeServer;\n nodeHttpClient: H;\n httpsOptions?: HttpsServerOptions;\n graphql: GraphQL;\n private ensureGraphQLHandler: ReturnType<\n typeof createGraphQLHandlerInitializer\n >;\n\n constructor(input?: ServerConnectInput<H>) {\n this.routes = input?.routes ?? [];\n this.port = input?.port ?? 80;\n this.host = input?.host ?? \"0.0.0.0\";\n this.tapOptions = input?.tapOptions;\n this.nodeHttpClient = input?.nodeHttpClient ?? (\"http\" as H);\n this.httpsOptions =\n input?.nodeHttpClient === \"https\" ||\n input?.nodeHttpClient === \"http2-secure\"\n ? (input as unknown as ServerConnectInput<\"https\">)?.httpsOptions\n : undefined;\n\n this.graphql = input?.graphql ?? new GraphQL();\n this.ensureGraphQLHandler = createGraphQLHandlerInitializer(this.graphql);\n const protocol =\n this.nodeHttpClient === \"https\" || this.nodeHttpClient === \"http2-secure\"\n ? \"https\"\n : \"http\";\n this.url = `${protocol}://${this.host}:${this.port}`;\n\n this.runtimeServer = this.createServer(\n async (\n req: IncomingMessage,\n httpResponse: ServerResponse,\n ): Promise<void> => {\n if (this.tapOptions && this.tapOptions.node) {\n const preHandler = this.tapOptions.node as NodeTapOptions;\n await preHandler?.(req);\n }\n\n if (\n this.graphql.isEnabled &&\n req.url?.startsWith(\n this.graphql.getYogaOptions().graphqlEndpoint ?? \"/graphql\",\n )\n ) {\n const handler = await this.ensureGraphQLHandler();\n if (handler) {\n handler(req, httpResponse);\n return;\n }\n }\n\n const match = router.find(req.method as HttpMethod, req.url!);\n const filteredHeaders: Record<string, string> = {};\n for (const key of Object.keys(req.headers)) {\n if (key.startsWith(\":\")) {\n continue;\n }\n const value = req.headers[key];\n if (value !== undefined) {\n filteredHeaders[key] = Array.isArray(value)\n ? value.join(\", \")\n : value;\n }\n }\n\n const request = new Request(`${this.url}${req.url}`, {\n method: req.method,\n body: canHaveBody(req.method)\n ? await this.readRequestBody(req)\n : undefined,\n headers: filteredHeaders,\n });\n\n let forwardedFor = req.headers[\"x-forwarded-for\"];\n if (Array.isArray(forwardedFor)) {\n forwardedFor = forwardedFor[0];\n }\n\n request.ip = forwardedFor ?? req.socket.remoteAddress;\n\n const [_, search = \"\"] = req.url?.split(\"?\", 2) ?? [];\n request.query = Object.fromEntries(new URLSearchParams(search));\n request.params = match?.params ?? {};\n\n const response = new Response();\n response.nodeResponse = httpResponse;\n\n const responseResult = await executeMiddlewareChain(\n match?.middleware ?? [],\n match?.handler ??\n ((req, res) => {\n res.notFound({\n ...errorFactory(new RouteNotFoundError(req.url, req.method)),\n });\n }),\n request,\n response,\n );\n\n if (httpResponse.headersSent || httpResponse.writableEnded) {\n return;\n }\n\n let body = responseResult.getBody();\n if (body instanceof ReadableStream) {\n pipeReadableStreamToNodeResponse(body, httpResponse);\n return;\n }\n\n if (body instanceof Buffer || body instanceof Uint8Array) {\n body = body;\n } else if (typeof body === \"string\") {\n body = body;\n } else if (\n responseResult.headers[\"Content-Type\"] === \"application/json\" &&\n typeof body !== \"string\"\n ) {\n body = JSON.stringify(body);\n } else {\n body = String(body);\n }\n\n httpResponse.writeHead(\n responseResult.responseStatus,\n responseResult.headers,\n );\n httpResponse.end(body);\n },\n );\n }\n\n listen(): void {\n this.runtimeServer.listen(this.port, this.host);\n }\n\n async close(): Promise<void> {\n return new Promise((resolve, reject) => {\n this.runtimeServer.close((err) => {\n if (err && \"code\" in err && err.code !== \"ERR_SERVER_NOT_RUNNING\") {\n reject(err);\n } else {\n resolve();\n }\n });\n });\n }\n\n private async readRequestBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on(\"data\", (chunk) => chunks.push(Buffer.from(chunk)));\n req.on(\"error\", reject);\n req.on(\"end\", () => resolve(Buffer.concat(chunks).toString()));\n });\n }\n\n private createServer(\n handler: (req: IncomingMessage, res: ServerResponse) => Promise<void>,\n ): NodeServer {\n if (this.nodeHttpClient === \"http\") {\n return createServer(handler);\n }\n\n if (this.nodeHttpClient === \"http2\") {\n return http2CreateServer(\n handler as unknown as (\n req: Http2ServerRequest,\n res: Http2ServerResponse,\n ) => Promise<void>,\n );\n }\n\n if (this.nodeHttpClient === \"http2-secure\") {\n if (!this.httpsOptions) {\n throw new Error(\n \"httpsOptions (key, cert) are required when using http2-secure client\",\n );\n }\n return http2CreateSecureServer(\n this.httpsOptions,\n handler as unknown as (\n req: Http2ServerRequest,\n res: Http2ServerResponse,\n ) => Promise<void>,\n );\n }\n\n if (!this.httpsOptions) {\n throw new Error(\n \"httpsOptions (key, cert) are required when using https client\",\n );\n }\n return httpsCreateServer(this.httpsOptions, handler);\n }\n}\n","import { type RunTimeType } from \"../runtime.js\";\nimport { ServerBun } from \"./server_bun.js\";\nimport { ServerDeno } from \"./server_deno.js\";\nimport type { ServerInterface } from \"./server_interface.js\";\nimport { ServerNode } from \"./server_node.js\";\nimport type {\n RuntimeServerMap,\n ServerConnectInput,\n ServerRoute,\n} from \"./server_types.js\";\n\nexport class ServerConnector {\n routes: ServerRoute[];\n\n private server: ServerInterface;\n\n constructor(serverOptions?: ServerConnectInput) {\n this.server = this.getRuntimeServer(serverOptions);\n this.routes = this.server.routes;\n }\n\n get url(): string {\n return this.server.url;\n }\n\n get port(): number {\n return this.server.port;\n }\n\n get host(): string {\n return this.server.host;\n }\n\n /**\n * Get the server for the given runtime\n * @example \"node\" returns HttpServer\n * @example \"bun\" returns ReturnType<typeof Bun.serve>\n * @example \"deno\" returns ReturnType<typeof Deno.serve>\n * @param _ - The runtime to get the server for\n * @returns The server for the given runtime\n */\n getServer<T extends RunTimeType>(_: T): RuntimeServerMap<T> {\n return this.server.runtimeServer as RuntimeServerMap<T>;\n }\n\n listen(): void {\n return this.server.listen();\n }\n\n async close(): Promise<void> {\n return this.server.close();\n }\n\n private getRuntimeServer(\n serverOptions?: ServerConnectInput,\n ): ServerInterface {\n if (serverOptions?.runtime === \"bun\") {\n return new ServerBun(serverOptions);\n } else if (serverOptions?.runtime === \"node\") {\n return new ServerNode(serverOptions);\n } else if (serverOptions?.runtime === \"deno\") {\n return new ServerDeno(serverOptions);\n }\n\n throw new Error(\n \"No server implementation found for runtime: \" + serverOptions?.runtime,\n );\n }\n}\n","import type { Router as ExpressRouter, RequestHandler } from \"express\";\nimport { glob } from \"glob\";\nimport { AjvStateManager } from \"../ajv/ajv.js\";\nimport { errorFactory } from \"../errors/error_factory.js\";\nimport { MethodNotAllowedError } from \"../errors/method_not_allowed.js\";\nimport { RouteNotFoundError } from \"../errors/route_not_found.js\";\nimport { GraphQL } from \"../graphql/graphql.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { MockServer } from \"../mock/mock_server.js\";\nimport { asyncLocalStorage } from \"../plugins/async_local_storage/async_local_storage.js\";\nimport type { AsyncLocalStorageContextSetters } from \"../plugins/async_local_storage/async_local_storage_types.js\";\nimport { bodyParser } from \"../plugins/body_parser/body_parser.js\";\nimport { compression } from \"../plugins/compression/compression.js\";\nimport type { CompressionOptions } from \"../plugins/compression/compression_types.js\";\nimport { cookie } from \"../plugins/cookie/cookie.js\";\nimport type { CookieMiddlewareOptions } from \"../plugins/cookie/cookie_types.js\";\nimport { cors } from \"../plugins/cors/cors.js\";\nimport type { CorsOptions } from \"../plugins/cors/cors_types.js\";\nimport {\n createExpressAdapter,\n expressMiddleware,\n mountExpressRouter,\n} from \"../plugins/express/express.js\";\nimport { fileParser } from \"../plugins/file/file.js\";\nimport type { FilePluginOptions } from \"../plugins/file/file_types.js\";\nimport { helmet } from \"../plugins/helmet/helmet.js\";\nimport type { HelmetOptions } from \"../plugins/helmet/helmet_types.js\";\nimport { json } from \"../plugins/json/json.js\";\nimport type { JsonOptions } from \"../plugins/json/json_options.js\";\nimport { log } from \"../plugins/log/log.js\";\nimport type { LogOptions } from \"../plugins/log/log_types.js\";\nimport { methodOverride } from \"../plugins/method_override/method_override.js\";\nimport type { MethodOverrideOptions } from \"../plugins/method_override/method_override_types.js\";\nimport { rateLimiter } from \"../plugins/rate_limiter/rate_limiter.js\";\nimport type {\n RateLimiterKeyOptions,\n StorageOptions,\n} from \"../plugins/rate_limiter/rate_limiter_types.js\";\nimport { session } from \"../plugins/session/session.js\";\nimport type { SessionOptions } from \"../plugins/session/session_types.js\";\nimport { serveStatic } from \"../plugins/static/static.js\";\nimport type { StaticPluginOptions } from \"../plugins/static/static_types.js\";\nimport { swagger } from \"../plugins/swagger/swagger.js\";\nimport type { SwaggerRouteOptions } from \"../plugins/swagger/swagger_types.js\";\nimport { timeout as timeoutMw } from \"../plugins/timeout/timeout.js\";\nimport type { TimeoutOptions } from \"../plugins/timeout/timeout_types.js\";\nimport { trustProxy } from \"../plugins/trust_proxy/trust_proxy.js\";\nimport type { TrustProxyOptions } from \"../plugins/trust_proxy/trust_proxy_types.js\";\nimport { urlencoded } from \"../plugins/urlencoded/urlencoded.js\";\nimport type { UrlEncodedOptions } from \"../plugins/urlencoded/urlencoded_types.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { NativeEnv } from \"../runtime/native_env.js\";\nimport { nativeFs } from \"../runtime/native_fs.js\";\nimport { hash as nativeHash } from \"../runtime/native_hash.js\";\nimport { nativePath } from \"../runtime/native_path.js\";\nimport { ServerConnector } from \"../runtime/native_server/server_connector.js\";\nimport type {\n HttpsServerOptions,\n RuntimeServerMap,\n ServerListenCallback,\n ServerRouteHandler,\n ServerRouteMiddleware,\n ServerTapOptions,\n} from \"../runtime/native_server/server_types.js\";\nimport { runtime } from \"../runtime/runtime.js\";\nimport type { SyncOrAsync } from \"../type_util.js\";\nimport { router } from \"./router/router.js\";\nimport type { ClientRouter, Route } from \"./router/router_type.js\";\nimport { PROTECTED_KEYS } from \"./server_constants.js\";\nimport type {\n NodeHttpClient,\n ResolvedServerOptions,\n ServerErrorHandler,\n ServerInterface,\n ServerOptions,\n ServerPlugin,\n SignalEvent,\n StandardMethodOptions,\n} from \"./server_types.js\";\n\n/**\n * The server class that is used to create and manage the server\n */\nexport class Server<\n H extends NodeHttpClient = NodeHttpClient,\n> implements ServerInterface {\n readonly _brand = \"BaldaServer\" as const;\n isListening: boolean;\n isProduction: boolean;\n graphql: GraphQL;\n readonly serverOptions: ResolvedServerOptions;\n\n readonly router: ClientRouter = router;\n\n private wasInitialized: boolean;\n private serverConnector: ServerConnector;\n private globalMiddlewares: ServerRouteMiddleware[] = [];\n private controllerImportBlacklistedPaths: string[] = [\"node_modules\"];\n private notFoundHandler?: ServerRouteHandler;\n private readonly nativeEnv: NativeEnv = new NativeEnv();\n private httpsOptions?: HttpsServerOptions;\n\n /**\n * The constructor for the server\n * @warning Routes will only be defined after calling the `listen` method so you're free to define middlewares before calling it\n * @param options - The options for the server\n * @param options.port - The port to listen on, if not provided, it will use the PORT environment variable, if not provided, it will default to 80\n * @param options.host - The hostname to listen on, if not provided, it will use the HOST environment variable, if not provided, it will default to 0.0.0.0\n * @param options.controllerPatterns - The patterns to match for controllers, defaults to an empty array\n * @param options.plugins - The plugins to apply to the server, by default no plugins are applied, plugins are applied in the order they are defined in the options\n * @param options.logger - The logger to use for the server, by default a default logger is used\n * @param options.tapOptions - Options fetch to the runtime server before the server is up and running\n */\n constructor(options?: ServerOptions<H>) {\n this.wasInitialized = false;\n this.serverOptions = {\n nodeHttpClient: options?.nodeHttpClient ?? (\"http\" as H),\n port: options?.port ?? Number(this.nativeEnv.get(\"PORT\")) ?? 80,\n host: options?.host ?? this.nativeEnv.get(\"HOST\") ?? \"0.0.0.0\",\n controllerPatterns: options?.controllerPatterns ?? [],\n plugins: options?.plugins ?? {},\n tapOptions: options?.tapOptions ?? ({} as ServerTapOptions),\n swagger: options?.swagger ?? true,\n useBodyParser: options?.useBodyParser ?? true,\n graphql: options?.graphql ?? undefined,\n };\n\n if (options?.ajvInstance) {\n AjvStateManager.setGlobalInstance(options.ajvInstance);\n }\n\n this.httpsOptions =\n options?.nodeHttpClient === \"https\" ||\n options?.nodeHttpClient === \"http2-secure\"\n ? (options as ServerOptions<\"https\">).httpsOptions\n : undefined;\n\n this.isListening = false;\n this.isProduction = this.nativeEnv.get(\"NODE_ENV\") === \"production\";\n this.graphql = new GraphQL(this.serverOptions.graphql);\n\n this.serverConnector = new ServerConnector({\n routes: [],\n port: this.serverOptions.port,\n host: this.serverOptions.host,\n tapOptions: this.serverOptions.tapOptions,\n runtime: runtime.type,\n nodeHttpClient: this.serverOptions.nodeHttpClient,\n httpsOptions: this.httpsOptions,\n graphql: this.graphql,\n });\n\n if (this.serverOptions.useBodyParser) {\n this.use(bodyParser());\n }\n }\n\n get url(): string {\n return this.serverConnector.url;\n }\n\n get port(): number {\n return this.serverConnector.port;\n }\n\n get host(): string {\n return this.serverConnector.host;\n }\n\n get routes(): Route[] {\n return router.getRoutes() || [];\n }\n\n async hash(data: string): Promise<string> {\n return nativeHash.hash(data);\n }\n\n async compareHash(hash: string, data: string): Promise<boolean> {\n return nativeHash.compare(hash, data);\n }\n\n getEnvironment(): Record<string, string> {\n return this.nativeEnv.getEnvironment();\n }\n\n tmpDir(...append: string[]): string {\n const baseTmpDir = \"tmp\";\n return nativePath.join(baseTmpDir, ...append);\n }\n\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n await nativeFs.mkdir(path, options);\n }\n\n get(path: string, handler: ServerRouteHandler): void;\n get(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n get(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"GET\", path, middlewares, handler, swaggerOptions);\n }\n\n post(path: string, handler: ServerRouteHandler): void;\n post(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n post(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"POST\", path, middlewares, handler, swaggerOptions);\n }\n\n patch(path: string, handler: ServerRouteHandler): void;\n patch(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n patch(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"PATCH\", path, middlewares, handler, swaggerOptions);\n }\n\n put(path: string, handler: ServerRouteHandler): void;\n put(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n put(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"PUT\", path, middlewares, handler, swaggerOptions);\n }\n\n delete(path: string, handler: ServerRouteHandler): void;\n delete(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n delete(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"DELETE\", path, middlewares, handler, swaggerOptions);\n }\n\n options(path: string, handler: ServerRouteHandler): void;\n options(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n options(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"OPTIONS\", path, middlewares, handler, swaggerOptions);\n }\n\n head(path: string, handler: ServerRouteHandler): void;\n head(\n path: string,\n options: StandardMethodOptions,\n handler: ServerRouteHandler,\n ): void;\n head(\n path: string,\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): void {\n const { middlewares, handler, swaggerOptions } =\n this.extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler,\n maybeHandler,\n );\n\n router.addOrUpdate(\"HEAD\", path, middlewares, handler, swaggerOptions);\n }\n\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: ClientRouter) => void,\n ): void;\n group(path: string, cb: (router: ClientRouter) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: ClientRouter) => void),\n maybeCb?: (router: ClientRouter) => void,\n ): void {\n this.router.group(\n path,\n middlewareOrCb as ServerRouteMiddleware[] | ServerRouteMiddleware,\n maybeCb as (router: ClientRouter) => void,\n );\n }\n\n getNodeServer(): RuntimeServerMap<\"node\", H> {\n if (runtime.type !== \"node\") {\n throw new Error(\n \"Server is not using node runtime, you can't call `.getNodeServer()`\",\n );\n }\n\n return this.serverConnector.getServer(\"node\") as RuntimeServerMap<\n \"node\",\n H\n >;\n }\n\n getBunServer(): RuntimeServerMap<\"bun\"> {\n if (runtime.type !== \"bun\") {\n throw new Error(\n \"Server is not using bun runtime, you can't call `.getBunServer()`\",\n );\n }\n\n return this.serverConnector.getServer(\"bun\");\n }\n\n getDenoServer(): RuntimeServerMap<\"deno\"> {\n if (runtime.type !== \"deno\") {\n throw new Error(\n \"Server is not using deno runtime, you can't call `.getDenoServer()`\",\n );\n }\n\n return this.serverConnector.getServer(\"deno\");\n }\n\n embed(key: string, value: any): void {\n if (typeof key !== \"string\" || key.trim() === \"\") {\n throw new Error(\n `Invalid key provided to embed: ${key}. Key must be a non-empty string.`,\n );\n }\n\n if (PROTECTED_KEYS.includes(key)) {\n throw new Error(\n `Cannot embed value with key '${key}' as it conflicts with a protected server property.`,\n );\n }\n\n Object.defineProperty(this, key, {\n value,\n writable: false,\n configurable: true,\n enumerable: true,\n });\n }\n\n exit(code: number = 0): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.exit(code);\n case \"deno\":\n Deno.exit(code);\n default:\n throw new Error(`Unsupported runtime: ${runtime.type}`);\n }\n }\n\n on(event: SignalEvent, cb: () => SyncOrAsync): void;\n on(event: string, cb: () => SyncOrAsync): void;\n on(event: SignalEvent | string, cb: () => SyncOrAsync): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.on(event, cb);\n break;\n case \"deno\":\n Deno.addSignalListener(event as Deno.Signal, cb);\n break;\n default:\n throw new Error(\n `Unsupported runtime: ${runtime.type}, only node, bun and deno are supported`,\n );\n }\n }\n\n once(event: SignalEvent, cb: () => SyncOrAsync): void;\n once(event: string, cb: () => SyncOrAsync): void;\n once(event: SignalEvent | string, cb: () => SyncOrAsync): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.once(event, cb);\n break;\n case \"deno\":\n Deno.addSignalListener(event as Deno.Signal, cb);\n break;\n default:\n throw new Error(\n `Unsupported runtime: ${runtime.type}, only node, bun and deno are supported`,\n );\n }\n }\n\n use(...middlewares: ServerRouteMiddleware[]): void {\n this.globalMiddlewares.push(...middlewares);\n }\n\n useExpress(\n pathOrMiddleware: string | RequestHandler | ExpressRouter,\n maybeMiddleware?: RequestHandler | ExpressRouter,\n ): void {\n const adapter = createExpressAdapter(this);\n adapter.use(pathOrMiddleware, maybeMiddleware);\n }\n\n expressMiddleware(middleware: RequestHandler): ServerRouteMiddleware {\n return expressMiddleware(middleware);\n }\n\n mountExpressRouter(basePath: string, expressRouter: ExpressRouter): void {\n mountExpressRouter(basePath, expressRouter);\n }\n\n setErrorHandler(errorHandler?: ServerErrorHandler): void {\n this.globalMiddlewares.unshift(async (req, res, next) => {\n try {\n await next();\n } catch (error) {\n await errorHandler?.(req, res, next, error as Error);\n }\n });\n }\n\n /**\n * Sets a custom handler for 404 Not Found responses.\n * If not set, the default RouteNotFoundError will be used.\n *\n * @param notFoundHandler - Optional handler to customize 404 responses\n * @example\n * server.setNotFoundHandler((req, res) => {\n * res.status(404).json({ error: \"Custom not found message\" });\n * });\n */\n setNotFoundHandler(notFoundHandler?: ServerRouteHandler): void {\n this.notFoundHandler = notFoundHandler?.bind(this);\n }\n\n listen(cb?: ServerListenCallback): void {\n if (this.isListening) {\n throw new Error(\n \"Server is already listening, you can't call `.listen()` multiple times\",\n );\n }\n\n this.bootstrap().then(() => {\n this.serverConnector.listen();\n this.isListening = true;\n if (this.serverOptions.swagger) {\n swagger(this.serverOptions.swagger);\n }\n\n cb?.({\n port: this.port,\n host: this.host,\n url: this.url,\n });\n });\n }\n\n async close(): Promise<void> {\n await this.serverConnector.close();\n this.isListening = false;\n }\n\n /**\n * Returns a mock server instance that can be used to test the server without starting it\n * It will import the controllers and apply the plugins to the mock server\n * @param options - The options for the mock server\n * @param options.controllerPatterns - Custom controller patterns to import if the mock server must not be initialized with the same controller patterns as the server\n */\n async getMockServer(\n options?: Pick<ServerOptions, \"controllerPatterns\">,\n ): Promise<MockServer> {\n await this.bootstrap(options);\n return new MockServer(this);\n }\n\n private async importControllers(\n customControllerPatterns?: string[],\n ): Promise<void> {\n const controllerPatterns =\n customControllerPatterns ?? this.serverOptions.controllerPatterns;\n let controllerPaths = await Promise.all(\n controllerPatterns.map(async (pattern) => {\n return glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n }),\n ).then((paths) => paths.flat());\n\n controllerPaths = controllerPaths.flat();\n controllerPaths = controllerPaths.filter(\n (path) =>\n !this.controllerImportBlacklistedPaths.some((blacklistedPath) =>\n path.includes(blacklistedPath),\n ),\n );\n\n logger.debug(`Found ${controllerPaths.length} controllers to import`);\n await Promise.all(\n controllerPaths.map(async (controllerPath) => {\n logger.debug(`Importing controller ${controllerPath}`);\n await import(controllerPath).catch((err) => {\n logger.error(`Error importing controller ${controllerPath}: ${err}`);\n });\n }),\n );\n }\n\n private extractOptionsAndHandlerFromRouteRegistration(\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): {\n middlewares: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n swaggerOptions?: SwaggerRouteOptions;\n } {\n if (typeof optionsOrHandler === \"function\") {\n // Handler only\n return {\n middlewares: [],\n handler: optionsOrHandler as ServerRouteHandler,\n swaggerOptions: undefined,\n };\n }\n\n // StandardMethodOptions\n const options = optionsOrHandler as StandardMethodOptions;\n const middlewares = Array.isArray(options.middlewares)\n ? options.middlewares\n : options.middlewares\n ? [options.middlewares]\n : [];\n\n return {\n middlewares,\n handler: maybeHandler!,\n swaggerOptions: options.swagger,\n };\n }\n\n private applyPlugins(plugins: ServerPlugin): void {\n Object.entries(plugins).forEach(([pluginName, pluginOptions]) => {\n switch (pluginName as keyof ServerPlugin) {\n case \"cors\":\n this.use(cors(pluginOptions as CorsOptions));\n break;\n case \"json\":\n this.use(json(pluginOptions as JsonOptions));\n break;\n case \"static\":\n this.use(serveStatic(pluginOptions as StaticPluginOptions));\n break;\n case \"fileParser\":\n this.use(fileParser(pluginOptions as FilePluginOptions));\n break;\n case \"helmet\":\n this.use(helmet(pluginOptions as HelmetOptions));\n break;\n case \"cookie\":\n this.use(cookie(pluginOptions as CookieMiddlewareOptions));\n break;\n case \"methodOverride\":\n this.use(methodOverride(pluginOptions as MethodOverrideOptions));\n break;\n case \"compression\":\n this.use(compression(pluginOptions as CompressionOptions));\n break;\n case \"log\":\n this.use(log(pluginOptions as LogOptions));\n break;\n case \"rateLimiter\":\n const { keyOptions, storageOptions } = pluginOptions as {\n keyOptions?: RateLimiterKeyOptions;\n storageOptions?: StorageOptions;\n };\n\n this.use(rateLimiter(keyOptions, storageOptions));\n break;\n case \"urlencoded\":\n this.use(urlencoded(pluginOptions as UrlEncodedOptions));\n break;\n case \"trustProxy\":\n this.use(trustProxy(pluginOptions as TrustProxyOptions));\n break;\n case \"timeout\":\n this.use(timeoutMw(pluginOptions as TimeoutOptions));\n break;\n case \"session\":\n this.use(session(pluginOptions as SessionOptions));\n break;\n case \"asyncLocalStorage\":\n this.use(\n asyncLocalStorage(pluginOptions as AsyncLocalStorageContextSetters),\n );\n break;\n default:\n logger.warn(`Unknown plugin ${pluginName}`);\n break;\n }\n });\n }\n\n /**\n * Initializes the server by importing the controllers and applying the plugins, it's idempotent, it will not re-import the controllers or apply the plugins if the server was already initialized (e.g. mockServer init)\n * @internal\n */\n private async bootstrap(\n options?: Pick<ServerOptions, \"controllerPatterns\">,\n ): Promise<void> {\n if (this.wasInitialized) {\n return;\n }\n\n await this.importControllers(options?.controllerPatterns);\n this.applyPlugins(this.serverOptions.plugins);\n this.registerNotFoundRoutes();\n if (this.globalMiddlewares.length) {\n router.applyGlobalMiddlewaresToAllRoutes(this.globalMiddlewares);\n }\n\n this.wasInitialized = true;\n }\n\n /**\n * Handles not found routes by delegating to custom handler or default error response\n * Checks if the path exists for other methods and returns 405 if so\n * @internal\n */\n private handleNotFound: ServerRouteHandler = (req, res) => {\n if (this.notFoundHandler) {\n this.notFoundHandler(req, res);\n return;\n }\n\n const pathname = new URL(req.url).pathname;\n const allMethods = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ] as const;\n const allowedMethods: string[] = [];\n\n for (const method of allMethods) {\n if (method === req.method.toUpperCase()) {\n continue;\n }\n\n const match = router.find(method, pathname);\n if (match && match.handler !== this.handleNotFound) {\n allowedMethods.push(method);\n }\n }\n\n if (allowedMethods.length) {\n res.setHeader(\"Allow\", allowedMethods.join(\", \"));\n const methodNotAllowedError = new MethodNotAllowedError(\n pathname,\n req.method,\n );\n\n res.methodNotAllowed({\n ...errorFactory(methodNotAllowedError),\n });\n\n return;\n }\n\n const notFoundError = new RouteNotFoundError(pathname, req.method);\n res.notFound({\n ...errorFactory(notFoundError),\n });\n };\n\n /**\n * Registers a not found route for all routes that are not defined\n * @internal\n */\n private registerNotFoundRoutes(): void {\n const methods = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ] as const;\n for (const method of methods) {\n router.addOrUpdate(method, \"*\", [], this.handleNotFound, {\n excludeFromSwagger: true,\n });\n }\n }\n}\n","export const PROTECTED_KEYS = [\n \"isListening\",\n \"url\",\n \"port\",\n \"host\",\n \"routes\",\n \"embed\",\n \"constructor\",\n \"get\",\n \"post\",\n \"put\",\n \"patch\",\n \"delete\",\n \"getNodeServer\",\n \"getBunServer\",\n \"getDenoServer\",\n \"use\",\n \"setErrorHandler\",\n \"listen\",\n \"close\",\n \"tapOptions\",\n \"startUpOptions\",\n \"tmpDir\",\n \"logger\",\n \"getMockServer\",\n \"useExpress\",\n \"expressMiddleware\",\n \"mountExpressRouter\",\n \"setNotFoundHandler\",\n \"setGlobalCronErrorHandler\",\n \"startRegisteredCrons\",\n \"bootstrap\",\n \"handleNotFound\",\n \"registerNotFoundRoutes\",\n \"importControllers\",\n \"applyPlugins\",\n];\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class FileNotFoundError extends BaldaError {\n constructor(key: string) {\n super(`File not found: ${key}`);\n }\n}\n","import type {\n BlobServiceClient,\n ContainerClient,\n StorageSharedKeyCredential,\n} from \"@azure/storage-blob\";\nimport { Readable } from \"node:stream\";\nimport { BaldaError } from \"../../errors/balda_error.js\";\nimport { FileNotFoundError } from \"../../errors/file_not_found_error.js\";\nimport type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n} from \"../storage_types.js\";\n\nexport type BlobStorageProviderOptions = {\n /**\n * The container name\n */\n containerName: string;\n /**\n * The connection string to the storage account\n */\n connectionString: string;\n /**\n * The storage account name\n */\n storageAccountName: string;\n /**\n * The storage account key\n */\n storageAccountKey: string;\n};\n\nexport class AzureBlobStorageProvider implements StorageInterface {\n declare private azureBlobLib: typeof import(\"@azure/storage-blob\");\n declare private blobServiceClient: BlobServiceClient;\n declare private containerClient: ContainerClient;\n declare private sharedKeyCredential: StorageSharedKeyCredential;\n\n constructor(private readonly options: BlobStorageProviderOptions) {}\n\n async getDownloadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const startsOn = new Date(Date.now() - 5 * 60 * 1000);\n const expiresOn = new Date(Date.now() + expiresInSeconds * 1000);\n\n const permissions = this.azureBlobLib.BlobSASPermissions.parse(\"r\");\n\n const sasToken = this.azureBlobLib\n .generateBlobSASQueryParameters(\n {\n containerName: this.options.containerName,\n blobName: key,\n permissions,\n startsOn,\n expiresOn,\n },\n this.sharedKeyCredential,\n )\n .toString();\n\n return `${blockBlobClient.url}?${sasToken}`;\n }\n\n async getUploadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const startsOn = new Date(Date.now() - 5 * 60 * 1000);\n const expiresOn = new Date(Date.now() + expiresInSeconds * 1000);\n\n const permissions = this.azureBlobLib.BlobSASPermissions.parse(\"w\");\n\n const sasToken = this.azureBlobLib\n .generateBlobSASQueryParameters(\n {\n containerName: this.options.containerName,\n blobName: key,\n permissions,\n startsOn,\n expiresOn,\n },\n this.sharedKeyCredential,\n )\n .toString();\n\n return `${blockBlobClient.url}?${sasToken}`;\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n await this.ensureClient();\n\n const files: string[] = [];\n const listPrefix = prefix\n ? prefix.endsWith(\"/\")\n ? prefix\n : `${prefix}/`\n : undefined;\n\n for await (const blob of this.containerClient.listBlobsFlat({\n prefix: listPrefix,\n })) {\n files.push(blob.name);\n }\n\n return files;\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n await this.ensureClient();\n\n try {\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const downloadResponse = await blockBlobClient.download();\n\n if (!downloadResponse.readableStreamBody) {\n throw new FileNotFoundError(key);\n }\n\n const type = returnType as ReturnType;\n if (type === \"stream\") {\n return Readable.toWeb(\n downloadResponse.readableStreamBody as Readable,\n ) as unknown as ReturnTypeMap<R>;\n }\n\n const chunks: Buffer[] = [];\n for await (const chunk of downloadResponse.readableStreamBody) {\n chunks.push(\n Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk as string),\n );\n }\n\n const buffer = Buffer.concat(chunks);\n switch (type) {\n case \"raw\": {\n return new Uint8Array(buffer) as ReturnTypeMap<R>;\n }\n case \"text\": {\n return buffer.toString() as ReturnTypeMap<R>;\n }\n default: {\n throw new BaldaError(\"Invalid return type\");\n }\n }\n } catch (error) {\n if ((error as any).statusCode === 404) {\n throw new FileNotFoundError(key);\n }\n throw error;\n }\n }\n\n async putObject<T = Uint8Array>(\n key: string,\n value: T,\n contentType?: string,\n ): Promise<void> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n const data = value as Uint8Array;\n\n await blockBlobClient.upload(data, data.length, {\n blobHTTPHeaders: {\n blobContentType: contentType || \"application/octet-stream\",\n },\n });\n }\n\n async deleteObject(key: string): Promise<void> {\n await this.ensureClient();\n\n const blockBlobClient = this.containerClient.getBlockBlobClient(key);\n try {\n await blockBlobClient.delete();\n } catch (error: unknown) {\n if (\n error &&\n typeof error === \"object\" &&\n \"statusCode\" in error &&\n error.statusCode === 404\n ) {\n return;\n }\n throw error;\n }\n }\n\n private async ensureClient(): Promise<void> {\n if (this.azureBlobLib) {\n return;\n }\n\n this.azureBlobLib = await import(\"@azure/storage-blob\").catch(() => {\n throw new BaldaError(\n \"Library not installed: @azure/storage-blob, try run npm install @azure/storage-blob\",\n );\n });\n\n this.blobServiceClient =\n this.azureBlobLib.BlobServiceClient.fromConnectionString(\n this.options.connectionString,\n );\n\n this.containerClient = this.blobServiceClient.getContainerClient(\n this.options.containerName,\n );\n\n const credential = this.blobServiceClient.credential;\n if (!(credential instanceof this.azureBlobLib.StorageSharedKeyCredential)) {\n throw new BaldaError(\n \"BlobStorage requires a shared key credential to generate SAS URLs\",\n );\n }\n\n this.sharedKeyCredential = credential;\n }\n}\n","import { BaldaError } from \"../../errors/balda_error.js\";\nimport { FileNotFoundError } from \"../../errors/file_not_found_error.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n} from \"../storage_types.js\";\n\nexport type LocalStorageProviderOptions = {\n /**\n * The directory to store the files\n */\n directory: string;\n};\n\n/**\n * Local storage provider, stores files in the local filesystem\n * Note: This provider does not support signed URLs (getDownloadUrl/getUploadUrl)\n */\nexport class LocalStorageProvider implements StorageInterface {\n private wasDirectoryEnsured: boolean = false;\n constructor(private readonly options: LocalStorageProviderOptions) {}\n\n async getDownloadUrl(\n _key: string,\n _expiresInSeconds = 3600,\n ): Promise<string> {\n throw new BaldaError(\n \"LocalStorageProvider does not support getDownloadUrl. Use S3 or Azure Blob storage for signed URLs.\",\n );\n }\n\n async getUploadUrl(_key: string, _expiresInSeconds = 3600): Promise<string> {\n throw new BaldaError(\n \"LocalStorageProvider does not support getUploadUrl. Use S3 or Azure Blob storage for signed URLs.\",\n );\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const basePath = nativePath.resolve(this.options.directory);\n const searchPath = prefix ? nativePath.join(basePath, prefix) : basePath;\n\n const exists = await nativeFs.exists(searchPath);\n if (!exists) {\n return [];\n }\n\n const files: string[] = [];\n await this.listFilesRecursively(searchPath, basePath, files);\n return files;\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const filePath = nativePath.join(this.options.directory, key);\n const exists = await nativeFs.exists(filePath);\n if (!exists) {\n throw new FileNotFoundError(key);\n }\n\n const type = returnType as ReturnType;\n switch (type) {\n case \"raw\": {\n return (await nativeFs.readFile(filePath)) as ReturnTypeMap<R>;\n }\n case \"text\": {\n return (await nativeFs.readFile(filePath, {\n encoding: \"utf8\",\n })) as ReturnTypeMap<R>;\n }\n case \"stream\": {\n return (await nativeFs.streamFile(filePath)) as ReturnTypeMap<R>;\n }\n default: {\n throw new BaldaError(\"Invalid return type\");\n }\n }\n }\n\n async putObject<T = Uint8Array>(\n key: string,\n value: T,\n _contentType?: string,\n ): Promise<void> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const filePath = nativePath.join(this.options.directory, key);\n const dirPath = nativePath.join(filePath, \"..\");\n\n await nativeFs.mkdir(dirPath, { recursive: true });\n await nativeFs.writeFile(filePath, value as Uint8Array);\n }\n\n async deleteObject(key: string): Promise<void> {\n if (!this.wasDirectoryEnsured) {\n await this.ensureDirectoryExists();\n }\n\n const filePath = nativePath.join(this.options.directory, key);\n const exists = await nativeFs.exists(filePath);\n\n if (exists) {\n await nativeFs.unlink(filePath);\n }\n }\n\n private async listFilesRecursively(\n currentPath: string,\n basePath: string,\n files: string[],\n ): Promise<void> {\n const stats = await nativeFs.stat(currentPath);\n\n if (stats.isFile) {\n const relativePath = currentPath.replace(basePath, \"\").replace(/^\\//, \"\");\n files.push(relativePath);\n return;\n }\n\n if (!stats.isDirectory) {\n return;\n }\n\n const entries = await this.readDirectory(currentPath);\n for (const entry of entries) {\n const fullPath = nativePath.join(currentPath, entry);\n await this.listFilesRecursively(fullPath, basePath, files);\n }\n }\n\n private async readDirectory(path: string): Promise<string[]> {\n const { runtime } = await import(\"../../runtime/runtime.js\");\n\n switch (runtime.type) {\n case \"node\": {\n const fs = await import(\"fs/promises\");\n return await fs.readdir(path);\n }\n case \"bun\": {\n const fs = await import(\"fs/promises\");\n return await fs.readdir(path);\n }\n case \"deno\": {\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n return entries;\n }\n default:\n throw new BaldaError(\"Unsupported runtime\");\n }\n }\n\n private async ensureDirectoryExists() {\n if (await nativeFs.exists(this.options.directory)) {\n return;\n }\n\n await nativeFs.mkdir(this.options.directory, { recursive: true });\n this.wasDirectoryEnsured = true;\n }\n}\n","import type { S3Client } from \"@aws-sdk/client-s3\";\nimport { BaldaError } from \"../../errors/balda_error.js\";\nimport { FileNotFoundError } from \"../../errors/file_not_found_error.js\";\nimport type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n} from \"../storage_types.js\";\n\ntype S3ClientConfig = ConstructorParameters<typeof S3Client>[0];\n\nexport type S3StorageProviderOptions = {\n s3ClientConfig: S3ClientConfig & { bucketName: string };\n /**\n * The cloudfront options (optional), allows to get the cloudfront signed url for an object, enables the `getDownloadUrl` method that throws an error if not configured\n */\n cloudfrontOptions?: {\n /**\n * The CloudFront distribution domain name (e.g., 'd1234567890.cloudfront.net')\n */\n domainName: string;\n /**\n * The CloudFront key pair ID\n */\n keyPairId: string;\n /**\n * The private key in PEM format for signing URLs\n */\n privateKey: string;\n };\n};\n\nexport class S3StorageProvider implements StorageInterface {\n declare private s3Lib: typeof import(\"@aws-sdk/client-s3\");\n declare private s3PresignerLib: typeof import(\"@aws-sdk/s3-request-presigner\");\n declare private cloudfrontSignerLib: typeof import(\"@aws-sdk/cloudfront-signer\");\n declare private s3Client: S3Client;\n readonly options: S3StorageProviderOptions;\n\n constructor(options: S3StorageProviderOptions) {\n this.options = options;\n }\n\n async getDownloadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n\n if (!this.options.cloudfrontOptions) {\n throw new BaldaError(\"getDownloadUrl requires CloudFront configuration\");\n }\n\n const { domainName, keyPairId, privateKey } =\n this.options.cloudfrontOptions;\n const url = `https://${domainName}/${key}`;\n const dateLessThan = new Date(\n Date.now() + expiresInSeconds * 1000,\n ).toISOString();\n\n return this.cloudfrontSignerLib.getSignedUrl({\n url,\n keyPairId,\n privateKey,\n dateLessThan,\n });\n }\n\n async getUploadUrl(key: string, expiresInSeconds = 3600): Promise<string> {\n await this.ensureClient();\n const command = new this.s3Lib.PutObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n });\n\n return this.s3PresignerLib.getSignedUrl(\n this.s3Client as any,\n command as any,\n {\n expiresIn: expiresInSeconds,\n },\n );\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n await this.ensureClient();\n const command = new this.s3Lib.ListObjectsV2Command({\n Bucket: this.options.s3ClientConfig.bucketName,\n Prefix: prefix,\n });\n const response = await this.s3Client.send(command);\n return response.Contents?.map((item) => item.Key!).filter(Boolean) ?? [];\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n await this.ensureClient();\n const command = new this.s3Lib.GetObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n });\n\n try {\n const response = await this.s3Client.send(command);\n if (!response.Body) {\n throw new FileNotFoundError(key);\n }\n\n const type = returnType as ReturnType;\n switch (type) {\n case \"raw\": {\n return (await response.Body.transformToByteArray()) as ReturnTypeMap<R>;\n }\n case \"text\": {\n return (await response.Body.transformToString()) as ReturnTypeMap<R>;\n }\n case \"stream\": {\n return response.Body.transformToWebStream() as ReturnTypeMap<R>;\n }\n default: {\n throw new BaldaError(\"Invalid return type\");\n }\n }\n } catch (error) {\n if ((error as any).name === \"NoSuchKey\") {\n throw new FileNotFoundError(key);\n }\n throw error;\n }\n }\n\n async putObject<T = Uint8Array>(\n key: string,\n value: T,\n contentType?: string,\n ): Promise<void> {\n await this.ensureClient();\n const command = new this.s3Lib.PutObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n Body: value as any,\n ContentType: contentType,\n });\n await this.s3Client.send(command);\n }\n\n async deleteObject(key: string): Promise<void> {\n await this.ensureClient();\n const command = new this.s3Lib.DeleteObjectCommand({\n Bucket: this.options.s3ClientConfig.bucketName,\n Key: key,\n });\n await this.s3Client.send(command);\n }\n\n private async ensureClient(): Promise<void> {\n if (this.s3Lib) {\n return;\n }\n\n this.s3Lib = await import(\"@aws-sdk/client-s3\")\n .then((mod) => mod.default)\n .catch(() => {\n throw new BaldaError(\n \"Library not installed: @aws-sdk/client-s3, try run npm install @aws-sdk/client-s3\",\n );\n });\n\n this.s3PresignerLib = await import(\"@aws-sdk/s3-request-presigner\")\n .then((mod) => mod.default)\n .catch(() => {\n throw new BaldaError(\n \"Library not installed: @aws-sdk/s3-request-presigner, try run npm install @aws-sdk/s3-request-presigner\",\n );\n });\n\n if (this.options.cloudfrontOptions) {\n this.cloudfrontSignerLib = await import(\"@aws-sdk/cloudfront-signer\")\n .then((mod) => mod.default)\n .catch(() => {\n throw new BaldaError(\n \"Library not installed: @aws-sdk/cloudfront-signer, try run npm install @aws-sdk/cloudfront-signer\",\n );\n });\n }\n\n this.s3Client = new this.s3Lib.S3Client(this.options.s3ClientConfig ?? {});\n }\n}\n","import type {\n ReturnType,\n ReturnTypeMap,\n StorageInterface,\n StorageOptions,\n StorageProviderOptions,\n} from \"./storage_types.js\";\n\nexport class Storage<\n T extends StorageProviderOptions,\n> implements StorageInterface {\n private readonly providerOptions: T;\n private readonly defaultProvider: keyof T;\n private readonly providerMap: Map<keyof T, StorageInterface>;\n\n constructor(providerOptions: T, storageOptions: StorageOptions<T>) {\n this.providerOptions = providerOptions;\n this.defaultProvider = storageOptions.defaultProvider;\n this.providerMap = new Map(\n Object.entries(providerOptions).map(([key, value]) => [key, value]),\n );\n }\n\n /**\n * Use a specific provider\n * @param provider - The provider to use\n * @returns The storage instance\n */\n use(provider: keyof T): StorageInterface {\n const providerInstance = this.providerMap.get(provider);\n if (!providerInstance) {\n throw new Error(`[Storage] Provider ${String(provider)} not found`);\n }\n\n return providerInstance as StorageInterface;\n }\n\n async getDownloadUrl(\n key: string,\n expiresInSeconds?: number,\n ): Promise<string> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.getDownloadUrl(key, expiresInSeconds);\n }\n\n async getUploadUrl(key: string, expiresInSeconds?: number): Promise<string> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.getUploadUrl(key, expiresInSeconds);\n }\n\n async listObjects(prefix?: string): Promise<string[]> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.listObjects(prefix);\n }\n\n async getObject<R extends ReturnType = \"raw\">(\n key: string,\n returnType: R = \"raw\" as R,\n ): Promise<ReturnTypeMap<R>> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n\n return provider.getObject(key, returnType);\n }\n\n async putObject<T = Buffer<ArrayBufferLike>>(\n key: string,\n value: T,\n contentType?: string,\n ): Promise<void> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.putObject(key, value, contentType);\n }\n\n async deleteObject(key: string): Promise<void> {\n const provider = this.providerOptions[\n this.defaultProvider\n ] as StorageInterface;\n return provider.deleteObject(key);\n }\n}\n","import type { ServerRouteMiddleware } from \"../runtime/native_server/server_types.js\";\n\n/**\n * Base class for all plugins.\n *\n * Plugins are used to extend the functionality of the server.\n *\n * @example\n * ```ts\n * import { Server, BasePlugin } from \"balda\";\n *\n * export class MyPlugin extends BasePlugin {\n * async handle(): Promise<ServerRouteMiddleware> {\n * return async (req, res, next) => {\n * console.log(\"My plugin is running\");\n * await next();\n * };\n * }\n * }\n *\n * const server = new Server();\n * server.use(new MyPlugin().handle());\n * ```\n *\n * @abstract\n */\nexport abstract class BasePlugin {\n abstract handle(...args: any[]): Promise<ServerRouteMiddleware>;\n}\n","import { MetadataStore } from \"../../metadata_store.js\";\nimport type { PolicyManager } from \"./policy_manager.js\";\nimport type {\n PolicyDecorator,\n PolicyMetadata,\n PolicyProvider,\n} from \"./policy_types.js\";\n\nexport const createPolicyDecorator = <T extends Record<string, PolicyProvider>>(\n manager: PolicyManager<T>,\n): PolicyDecorator<T> => {\n return <S extends keyof T & string, H extends keyof T[S] & string>(\n scope: S,\n handler: H,\n ) => {\n return (\n target: any,\n propertyKey?: string,\n descriptor?: PropertyDescriptor,\n ) => {\n const policyMeta: PolicyMetadata = { scope, handler, manager };\n\n if (typeof propertyKey === \"undefined\") {\n let meta = MetadataStore.get(target.prototype, \"__class__\");\n if (!meta) {\n meta = { policies: [] };\n }\n\n if (!meta.policies) {\n meta.policies = [];\n }\n\n meta.policies.push(policyMeta);\n MetadataStore.set(target.prototype, \"__class__\", meta);\n return target;\n }\n\n let meta = MetadataStore.get(target, propertyKey);\n if (!meta) {\n meta = { policies: [] };\n }\n\n if (!meta.policies) {\n meta.policies = [];\n }\n\n meta.policies.push(policyMeta);\n MetadataStore.set(target, propertyKey, meta);\n return descriptor;\n };\n };\n};\n","import { BaldaError } from \"../../errors/balda_error.js\";\nimport { createPolicyDecorator } from \"./policy_decorator.js\";\nimport type { PolicyDecorator, PolicyProvider } from \"./policy_types.js\";\n\nexport class PolicyManager<T extends Record<string, PolicyProvider>> {\n private readonly providers: T;\n\n constructor(providers: T) {\n this.providers = providers;\n }\n\n /**\n * Creates a decorator for the policy manager with typed parameters\n */\n createDecorator(): PolicyDecorator<T> {\n return createPolicyDecorator(this);\n }\n\n /**\n * Checks if the user has access to the given scope and handler\n * @param scope - The scope to check access for\n * @param handler - The handler to check access for\n * @param args - The arguments to pass to the handler\n */\n canAccess<K extends keyof T, L extends T[K]>(\n scope: K,\n handler: keyof L,\n ...args: Parameters<T[K][keyof T[K]]>\n ): ReturnType<T[K][keyof T[K]]> {\n const provider = this.providers[scope];\n if (!provider) {\n throw new BaldaError(`Policy provider for ${String(scope)} not found`);\n }\n\n return provider[handler as keyof T[K]](...args) as ReturnType<\n T[K][keyof T[K]]\n >;\n }\n}\n","// Decorators\nexport * from \"./cron/decorator/cron_decorator.js\";\nexport * from \"./decorators/command/arg.js\";\nexport * from \"./decorators/command/flag.js\";\nexport * from \"./decorators/controller/controller.js\";\nexport * from \"./decorators/handlers/del.js\";\nexport * from \"./decorators/handlers/get.js\";\nexport * from \"./decorators/handlers/patch.js\";\nexport * from \"./decorators/handlers/post.js\";\nexport * from \"./decorators/handlers/put.js\";\nexport * from \"./decorators/middleware/middleware.js\";\nexport * from \"./decorators/serialize/serialize.js\";\nexport * from \"./decorators/serialize/serialize_types.js\";\nexport * from \"./decorators/validation/validate.js\";\nexport * from \"./decorators/validation/validate_types.js\";\n\n// Cron\nexport * from \"./cron/base_cron.js\";\nexport * from \"./cron/cron.js\";\nexport * from \"./cron/cron.types.js\";\n\n// MQTT\nexport * from \"./mqtt/base_mqtt.js\";\nexport * from \"./mqtt/mqtt.js\";\nexport * from \"./mqtt/mqtt.types.js\";\n\n// Queue\nexport * from \"./queue/base_queue.js\";\nexport * from \"./queue/providers/bullmq/bullmq.js\";\nexport type {\n BullMQConfiguration,\n BullMQConfigurationOptions,\n} from \"./queue/providers/bullmq/bullmq_configuration.js\";\nexport type { CustomQueueConfiguration } from \"./queue/providers/custom/custom.js\";\nexport * from \"./queue/providers/pgboss/pgboss.js\";\nexport type {\n PGBossConfiguration,\n PGBossConfigurationOptions,\n} from \"./queue/providers/pgboss/pgboss_configuration.js\";\nexport * from \"./queue/providers/sqs/sqs.js\";\nexport type {\n SQSConfiguration,\n SQSConfigurationOptions,\n} from \"./queue/providers/sqs/sqs_configuration.js\";\nexport * from \"./queue/queue.js\";\nexport * from \"./queue/queue_config.js\";\nexport * from \"./queue/queue_service.js\";\nexport {\n sqsQueue,\n bullmqQueue,\n pgbossQueue,\n createQueue,\n} from \"./queue/factories.js\";\nexport { TypedQueue, CustomTypedQueue } from \"./queue/typed_queue.js\";\n\n// Logger\nexport * from \"./logger/logger.js\";\nexport * from \"./logger/logger_types.js\";\n\n// Commands\nexport * from \"./commands/base_command.js\";\nexport * from \"./commands/command_registry.js\";\nexport * from \"./commands/command_types.js\";\n\n// Server\nexport type { MockServer } from \"./mock/mock_server.js\";\nexport * from \"./mock/mock_server_types.js\";\nexport * from \"./runtime/native_server/server_types.js\";\nexport * from \"./server/http/next.js\";\nexport * from \"./server/http/request.js\";\nexport * from \"./server/http/response.js\";\nexport * from \"./server/server.js\";\nexport * from \"./server/server_types.js\";\n\n// hash\nexport { hash } from \"./runtime/native_hash.js\";\n\n// GraphQL\nexport * from \"./graphql/graphql.js\";\nexport * from \"./graphql/graphql_types.js\";\n\n// async storage\nexport { asyncStorage } from \"./plugins/async_local_storage/async_local_storage.js\";\n\n// Storage\nexport * from \"./storage/providers/blob_storage.js\";\nexport * from \"./storage/providers/local.js\";\nexport * from \"./storage/providers/s3.js\";\nexport * from \"./storage/storage.js\";\nexport * from \"./storage/storage_types.js\";\nexport type { StorageInterface } from \"./storage/storage_types.js\";\n\n// Plugins\nexport { asyncLocalStorage } from \"./plugins/async_local_storage/async_local_storage.js\";\nexport * from \"./plugins/base_plugin.js\";\nexport * from \"./plugins/compression/compression.js\";\nexport * from \"./plugins/cookie/cookie.js\";\nexport * from \"./plugins/cors/cors.js\";\nexport * from \"./plugins/express/express.js\";\nexport * from \"./plugins/express/express_types.js\";\nexport * from \"./plugins/file/file.js\";\nexport * from \"./plugins/helmet/helmet.js\";\nexport * from \"./plugins/json/json.js\";\nexport * from \"./plugins/log/log.js\";\nexport * from \"./plugins/method_override/method_override.js\";\nexport * from \"./plugins/rate_limiter/rate_limiter.js\";\nexport * from \"./plugins/session/session.js\";\nexport * from \"./plugins/static/static.js\";\nexport * from \"./plugins/static/static_types.js\";\nexport * from \"./plugins/timeout/timeout.js\";\nexport * from \"./plugins/trust_proxy/trust_proxy.js\";\nexport * from \"./plugins/urlencoded/urlencoded.js\";\n\n// Policy\nexport * from \"./server/policy/policy_decorator.js\";\nexport * from \"./server/policy/policy_manager.js\";\nexport * from \"./server/policy/policy_types.js\";\n\n// Router\nimport { router as routerInstance } from \"./server/router/router.js\";\nimport type { ClientRouter } from \"./server/router/router_type.js\";\n/**\n * Singleton main router instance that handles all route registrations inside the balda server\n */\nexport const router = routerInstance as ClientRouter;\n"]}
|