azurajs 2.5.2-2 → 2.5.2-3

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.
@@ -19,6 +19,7 @@ declare class AzuraClient {
19
19
  private setupDefaultRoutes;
20
20
  getConfig(): ConfigTypes;
21
21
  private init;
22
+ use(prefix: string, mw: RequestHandler): void;
22
23
  use(mw: RequestHandler): void;
23
24
  use(prefix: string, router: Router): void;
24
25
  addRoute(method: string, path: string, ...handlers: RequestHandler[]): void;
@@ -19,6 +19,7 @@ declare class AzuraClient {
19
19
  private setupDefaultRoutes;
20
20
  getConfig(): ConfigTypes;
21
21
  private init;
22
+ use(prefix: string, mw: RequestHandler): void;
22
23
  use(mw: RequestHandler): void;
23
24
  use(prefix: string, router: Router): void;
24
25
  addRoute(method: string, path: string, ...handlers: RequestHandler[]): void;
@@ -1,4 +1,4 @@
1
- import { A as AzuraClient } from './Server-CVyJAYne.cjs';
1
+ import { A as AzuraClient } from './Server-jD16Crmt.cjs';
2
2
  import { R as RouteDefinition, P as ParamDefinition } from './swagger.type-BWq5nhCX.cjs';
3
3
  export { a as ParamSource } from './swagger.type-BWq5nhCX.cjs';
4
4
  export { c as ApiBody, e as ApiDeprecated, A as ApiDoc, b as ApiParameter, a as ApiResponse, f as ApiSecurity, d as ApiTags, g as getSwaggerMetadata } from './Swagger-BWCRS_VR.cjs';
@@ -1,4 +1,4 @@
1
- import { A as AzuraClient } from './Server-CbcNkm0I.js';
1
+ import { A as AzuraClient } from './Server-CIwP6CuF.js';
2
2
  import { R as RouteDefinition, P as ParamDefinition } from './swagger.type-BWq5nhCX.js';
3
3
  export { a as ParamSource } from './swagger.type-BWq5nhCX.js';
4
4
  export { c as ApiBody, e as ApiDeprecated, A as ApiDoc, b as ApiParameter, a as ApiResponse, f as ApiSecurity, d as ApiTags, g as getSwaggerMetadata } from './Swagger-BuMxfyha.js';
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/shared/config/ConfigModule.ts","../src/infra/utils/HttpError.ts","../src/types/utils/colors.type.ts","../src/types/utils/icons.type.ts","../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/cookies/ParserCookie.ts","../src/infra/utils/RequestHandler.ts","../src/infra/utils/route/Node.ts","../src/infra/Router.ts","../src/infra/utils/GetIp.ts","../src/infra/utils/IpResolver.ts","../src/shared/plugins/CORSPlugin.ts","../src/shared/plugins/RateLimitPlugin.ts","../src/shared/plugins/ProxyPlugin.ts","../src/middleware/LoggingMiddleware.ts","../src/infra/Server.ts"],"names":["path","existsSync","readFileSync","os","cluster","https","http","chain","idx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Config Files Extensions Supported\n * ex: azura.config.*extension\n */\n\ntype SupportedConfigFile = \".js\" | \".ts\" | \".json\" | \".yaml\" | \".yml\";\n\nexport type ConfigTypes = {\n name?: string;\n environment?: \"development\" | \"production\";\n debug?: boolean;\n server?: {\n port?: number;\n cluster?: boolean;\n ipHost?: boolean;\n https?: boolean;\n /**\n * Configure trust proxy behavior for IP resolution\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n };\n plugins?: {\n rateLimit?: {\n enabled: boolean;\n limit: number;\n timeframe: number;\n };\n cors?: {\n enabled: boolean;\n origins: string | string[];\n methods: string | string[];\n allowedHeaders: string | string[];\n };\n };\n logging?: {\n enabled?: boolean;\n showDetails?: boolean;\n };\n};\n\nexport class ConfigModule {\n private config: ConfigTypes = {};\n\n /**\n * Load config files first (azura.config.*)\n * Recivied error if config file not found or invalid format\n * @param configFiles\n */\n\n initSync(): void {\n const cdw = process.cwd();\n const configFiles = [\n \"azura.config.ts\",\n \"azura.config.json\",\n \"azura.config.yaml\",\n \"azura.config.yml\",\n ];\n\n let loaded = false;\n for (const fileName of configFiles) {\n const filePath = path.join(cdw, fileName);\n if (!existsSync(filePath)) continue;\n\n const extension = path.extname(fileName) as SupportedConfigFile;\n const raw = readFileSync(filePath, \"utf8\");\n\n try {\n let parsed: ConfigTypes;\n switch (extension) {\n case \".ts\":\n case \".js\":\n const mod = require(filePath);\n parsed = mod.default || mod;\n break;\n case \".json\":\n parsed = JSON.parse(raw);\n break;\n case \".yaml\":\n case \".yml\":\n parsed = require(\"js-yaml\").load(raw);\n break;\n default:\n throw new Error(`Invalid config file extension: ${extension}`);\n }\n\n this.config = { ...this.config, ...parsed };\n loaded = true;\n break;\n } catch (error: Error | any) {\n throw new Error(`Error loading config file: ${filePath}\\n${error.message}`);\n }\n }\n\n if (!loaded) {\n throw new Error(\"Nothing config file found in the current directory.\");\n }\n }\n\n /**\n * Get all configs from loaded config file\n * @returns ConfigTypes\n */\n\n getAll(): ConfigTypes {\n return this.config;\n }\n\n /**\n * Return a specific config from loaded config file\n *\n * @template T\n * @param {T} key - key of the config to retrieve\n * @returns {ConfigTypes[T]}\n */\n\n get<T extends keyof ConfigTypes>(key: T): ConfigTypes[T] {\n return this.config[key];\n }\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","/**\n * ANSI escape codes for text styling\n * These codes control text formatting in terminal output\n */\nexport const RESET = \"\\x1b[0m\"; // Reset all styles\nexport const BOLD = \"\\x1b[1m\"; // Bold/bright text\nexport const DIM = \"\\x1b[2m\"; // Dim/faded text\n\n/**\n * Predefined ANSI foreground colors\n * Includes standard and bright color variants\n */\nexport const ANSI_COLORS = {\n black: \"\\x1b[30m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n gray: \"\\x1b[90m\",\n brightRed: \"\\x1b[91m\",\n brightGreen: \"\\x1b[92m\",\n brightYellow: \"\\x1b[93m\",\n brightBlue: \"\\x1b[94m\",\n brightMagenta: \"\\x1b[95m\",\n brightCyan: \"\\x1b[96m\",\n brightWhite: \"\\x1b[97m\",\n};\n\n/**\n * ANSI background color codes\n * Used for highlighting text with colored backgrounds\n */\nexport const BG_COLORS = {\n bgBlack: \"\\x1b[40m\",\n bgRed: \"\\x1b[41m\",\n bgGreen: \"\\x1b[42m\",\n bgYellow: \"\\x1b[43m\",\n bgBlue: \"\\x1b[44m\",\n bgMagenta: \"\\x1b[45m\",\n bgCyan: \"\\x1b[46m\",\n bgWhite: \"\\x1b[47m\",\n};\n\n/**\n * Default color mapping for each log level\n * Provides semantic color coding for different message types\n */\nexport const DEFAULT_COLORS = {\n debug: ANSI_COLORS.gray,\n info: ANSI_COLORS.cyan,\n success: ANSI_COLORS.brightGreen,\n warn: ANSI_COLORS.yellow,\n error: ANSI_COLORS.red,\n fatal: ANSI_COLORS.brightRed,\n trace: ANSI_COLORS.magenta,\n log: ANSI_COLORS.white,\n};\n","/**\n * Default emoji icons for each log level\n * Provides visual indicators to quickly identify message severity\n */\nexport const DEFAULT_ICONS = {\n debug: \"🐛\",\n info: \"ℹ️\",\n success: \"✅\",\n warn: \"⚠️\",\n error: \"❌\",\n fatal: \"💀\",\n trace: \"🔍\",\n log: \"📝\",\n arrow: \"➡️\",\n};\n","import type { LoggerConfig } from \"../types/logger.types\";\nimport {\n ANSI_COLORS,\n BG_COLORS,\n BOLD,\n DEFAULT_COLORS,\n DIM,\n RESET,\n} from \"../types/utils/colors.type\";\nimport { DEFAULT_ICONS } from \"../types/utils/icons.type\";\n\n/**\n * Global logger configuration\n * These settings apply to all logger calls unless overridden by instance-specific options\n */\nlet globalConfig: LoggerConfig = {\n showTimestamp: false,\n showIcon: true,\n timestampFormat: \"time\",\n prefix: \"Azura\",\n uppercase: true,\n bold: false,\n dim: false,\n};\n\n/**\n * Configure the logger globally\n * Updates default settings that apply to all subsequent log calls\n * @param config - Logger configuration options\n * @example\n * configureLogger({\n * showTimestamp: true,\n * timestampFormat: 'datetime',\n * bold: true,\n * prefix: 'MyApp'\n * });\n */\nexport function configureLogger(config: LoggerConfig): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * Convert hexadecimal color code to ANSI escape sequence\n * @param hex - Hexadecimal color string (e.g., '#ff5733')\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example hexToAnsi('#00ff00') // Returns ANSI code for green\n */\nfunction hexToAnsi(hex: string): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Convert RGB color values to ANSI escape sequence\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example rgbToAnsi(255, 0, 128) // Returns ANSI code for custom pink\n */\nfunction rgbToAnsi(r: number, g: number, b: number): string {\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Resolve color string to ANSI escape sequence\n * Supports hex (#rrggbb), rgb (rgb(r,g,b)), and predefined color names\n * @param color - Color specification string\n * @returns ANSI escape sequence for the specified color\n * @example\n * getColorCode('#ff0000') // Hex color\n * getColorCode('rgb(255,0,0)') // RGB color\n * getColorCode('brightRed') // Predefined color\n */\nfunction getColorCode(color: string): string {\n if (color.startsWith(\"#\")) {\n return hexToAnsi(color);\n }\n if (color.startsWith(\"rgb(\")) {\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n return rgbToAnsi(Number(match[1]), Number(match[2]), Number(match[3]));\n }\n }\n return (ANSI_COLORS as any)[color] || color;\n}\n\n/**\n * Format current timestamp according to specified format\n * @param format - Timestamp format: 'time' (HH:MM:SS), 'datetime' (locale string), or 'iso' (ISO 8601)\n * @returns Formatted timestamp string\n * @example\n * formatTimestamp('time') // '14:23:45'\n * formatTimestamp('datetime') // '1/11/2026, 2:23:45 PM'\n * formatTimestamp('iso') // '2026-01-11T14:23:45.123Z'\n */\nfunction formatTimestamp(format: \"time\" | \"datetime\" | \"iso\"): string {\n const now = new Date();\n switch (format) {\n case \"time\":\n return now.toLocaleTimeString();\n case \"datetime\":\n return now.toLocaleString();\n case \"iso\":\n return now.toISOString();\n default:\n return now.toLocaleTimeString();\n }\n}\n\n/**\n * Main logger function - outputs formatted log messages to console\n * Supports multiple log levels, custom colors, icons, timestamps, and styling options\n * @param level - Log level (debug, info, success, warn, error, fatal, trace, log)\n * @param msg - Message to log\n * @param options - Optional configuration to override global settings for this log call\n * @example\n * logger('info', 'Server started on port 3000');\n * logger('error', 'Connection failed', { showTimestamp: true });\n * logger('success', 'Task completed', { colors: { success: '#00ff00' } });\n */\nexport function logger(\n level: keyof typeof DEFAULT_COLORS,\n msg: string,\n options?: LoggerConfig\n): void {\n const config = { ...globalConfig, ...options };\n\n const colors = { ...DEFAULT_COLORS, ...config.colors };\n const icons = { ...DEFAULT_ICONS, ...config.icons };\n\n const color = getColorCode(colors[level] || ANSI_COLORS.white);\n const icon = config.showIcon !== false ? icons[level] || \"\" : \"\";\n const levelLabel = config.uppercase ? level.toUpperCase() : level;\n\n let style = color;\n if (config.bold) style += BOLD;\n if (config.dim) style += DIM;\n if (config.backgroundColor) {\n style += getColorCode(config.backgroundColor);\n }\n\n const parts: string[] = [];\n\n // Add timestamp if enabled\n if (config.showTimestamp) {\n const timestamp = formatTimestamp(config.timestampFormat || \"time\");\n parts.push(`${DIM}${timestamp}${RESET}`);\n }\n\n // Add icon\n if (icon) {\n parts.push(icon);\n }\n\n // Add prefix and level\n const prefix = config.prefix\n ? `${style}[${config.prefix}:${levelLabel}]${RESET}`\n : `${style}[${levelLabel}]${RESET}`;\n parts.push(prefix);\n\n // Add message\n parts.push(msg);\n\n const output = parts.join(\" \");\n\n // Use appropriate console method\n const consoleMethod =\n level === \"error\" || level === \"fatal\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : level === \"debug\" || level === \"trace\"\n ? console.debug\n : console.log;\n\n consoleMethod(output);\n}\n\n/**\n * Convenience methods for each log level\n * Provides a cleaner API for common logging operations\n * @example\n * log.info('Server started');\n * log.error('Connection failed');\n * log.success('Task completed successfully');\n */\nexport const log = {\n debug: (msg: string, options?: LoggerConfig) => logger(\"debug\", msg, options),\n info: (msg: string, options?: LoggerConfig) => logger(\"info\", msg, options),\n success: (msg: string, options?: LoggerConfig) => logger(\"success\", msg, options),\n warn: (msg: string, options?: LoggerConfig) => logger(\"warn\", msg, options),\n error: (msg: string, options?: LoggerConfig) => logger(\"error\", msg, options),\n fatal: (msg: string, options?: LoggerConfig) => logger(\"fatal\", msg, options),\n trace: (msg: string, options?: LoggerConfig) => logger(\"trace\", msg, options),\n log: (msg: string, options?: LoggerConfig) => logger(\"log\", msg, options),\n};\n\n/**\n * Color utility functions and constants for advanced customization\n * Provides direct access to color conversion functions and ANSI codes\n * @example\n * colors.hex('#ff5733') // Convert hex to ANSI\n * colors.rgb(255, 87, 51) // Convert RGB to ANSI\n * colors.ansi.brightGreen // Access predefined colors\n * colors.bg.bgRed // Access background colors\n */\nexport const colors = {\n hex: hexToAnsi,\n rgb: rgbToAnsi,\n ansi: ANSI_COLORS,\n bg: BG_COLORS,\n reset: RESET,\n bold: BOLD,\n dim: DIM,\n};\n","export function parseQS(qs: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n if (!qs) return out;\n \n const parts = qs.split(\"&\");\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n if (!p) continue;\n \n const idx = p.indexOf(\"=\");\n if (idx === -1) {\n out[decodeURIComponent(p)] = \"\";\n continue;\n }\n \n const k = decodeURIComponent(p.slice(0, idx));\n const v = decodeURIComponent(p.slice(idx + 1));\n \n const existing = out[k];\n if (existing !== undefined) {\n if (Array.isArray(existing)) {\n existing.push(v);\n } else {\n out[k] = [existing as string, v];\n }\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n","import type { CookieOptions } from \"../../types/http/response.type\";\n\nexport function serializeCookie(name: string, val: string, opts: CookieOptions = {}): string {\n const encode = opts.encode ?? encodeURIComponent;\n let str = `${name}=${encode(val)}`;\n if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))\n str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;\n if (opts.domain) str += `; Domain=${opts.domain}`;\n if (opts.path) str += `; Path=${opts.path}`;\n if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;\n if (opts.httpOnly) str += `; HttpOnly`;\n if (opts.secure) str += `; Secure`;\n if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;\n return str;\n}\n","export function parseCookiesHeader(header: string | undefined): Record<string, string> {\n if (!header) return {};\n return header.split(\";\").reduce<Record<string, string>>((acc, pair) => {\n const [k, ...vals] = pair.trim().split(\"=\");\n if (!k) return acc;\n acc[k] = decodeURIComponent(vals.join(\"=\"));\n return acc;\n }, {});\n}\n","import type { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\n\nexport type NextFunction = (err?: Error | unknown) => Promise<void>;\n\ninterface AdapterContext {\n request?: RequestServer;\n response?: ResponseServer;\n req?: RequestServer;\n res?: ResponseServer;\n next: NextFunction;\n}\n\ntype MiddlewareFunction = (\n req: RequestServer,\n res: ResponseServer,\n next: (err?: Error | unknown) => void | Promise<void>\n) => void | Promise<void>;\n\ntype HandlerFunction = (req: RequestServer, res: ResponseServer) => void | Promise<void>;\n\ntype ModernHandlerFunction = (ctx: {\n req: RequestServer;\n res: ResponseServer;\n next: NextFunction;\n}) => void | Promise<void>;\n\ntype GenericHandler =\n | MiddlewareFunction\n | HandlerFunction\n | ModernHandlerFunction\n | ((ctx: AdapterContext) => void | Promise<void>)\n | Function;\n\nexport function adaptRequestHandler(mw: GenericHandler) {\n if (typeof mw !== \"function\") return mw;\n\n return async (ctx: AdapterContext): Promise<void> => {\n try {\n const req = ctx.request || ctx.req;\n const res = ctx.response || ctx.res;\n\n if (!req || !res) {\n throw new Error(\"Request or Response object is undefined\");\n }\n\n if (mw.length === 3) {\n let nextCalled = false;\n\n const result = (mw as MiddlewareFunction)(req, res, async (err?: Error | unknown) => {\n if (nextCalled) return;\n nextCalled = true;\n\n if (err) throw err;\n\n if (ctx.next) {\n await ctx.next();\n }\n });\n\n if (result && typeof (result as Promise<void>).then === \"function\") {\n await result;\n }\n\n return;\n }\n\n if (mw.length === 2) {\n const result = (mw as HandlerFunction)(req, res);\n if (result && typeof (result as Promise<void>).then === \"function\") {\n await result;\n }\n return;\n }\n\n if (mw.length === 1) {\n await (mw as ModernHandlerFunction)({\n req,\n res,\n next: ctx.next,\n });\n return;\n }\n\n await (mw as Function)(ctx);\n } catch (err) {\n throw err;\n }\n };\n}\n","import type { RequestServer } from \"../../../types/http/request.type\";\nimport type { ResponseServer } from \"../../../types/http/response.type\";\n\nexport type Handler = (ctx: {\n req: RequestServer;\n res: ResponseServer;\n next?: (err?: any) => void;\n}) => Promise<void> | void;\n\nexport class Node {\n children = new Map<string, Node>();\n handlers = new Map<string, Handler[]>();\n paramName?: string;\n isParam?: boolean;\n}\n","import type { RequestHandler } from \"../types\";\nimport { HttpError } from \"./utils/HttpError\";\nimport { Node, type Handler } from \"./utils/route/Node\";\n\ninterface MatchResult {\n handlers: Handler[];\n params: Record<string, string>;\n}\n\nexport class Router {\n private root = new Node();\n private debug?: boolean;\n private middlewares: RequestHandler[] = [];\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n add(method: string, path: string, ...handlers: Handler[]) {\n const segments = path.split(\"/\").filter(Boolean);\n let node = this.root;\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Adding ${method} ${path}`);\n console.log(`[Router:DEBUG] Segments:`, segments);\n }\n\n for (const seg of segments) {\n let child: Node;\n\n if (seg.startsWith(\":\")) {\n const paramKey = \":\";\n const existingChild = node.children.get(paramKey);\n \n if (!existingChild) {\n child = new Node();\n child.isParam = true;\n child.paramName = seg.slice(1);\n node.children.set(paramKey, child);\n \n if (this.debug) {\n console.log(`[Router:DEBUG] Created param node: :${seg.slice(1)}`);\n }\n } else {\n child = existingChild;\n // Update paramName if it's different (shouldn't happen in normal usage)\n if (child.paramName !== seg.slice(1)) {\n if (this.debug) {\n console.warn(`[Router:DEBUG] Warning: Param name mismatch at \"${seg}\". Previous: \":${child.paramName}\", New: \":${seg.slice(1)}\"`);\n }\n }\n }\n } else {\n const existingLiteralChild = node.children.get(seg);\n \n if (!existingLiteralChild) {\n child = new Node();\n node.children.set(seg, child);\n \n if (this.debug) {\n console.log(`[Router:DEBUG] Created literal node: \"${seg}\"`);\n }\n } else {\n child = existingLiteralChild;\n }\n }\n\n node = child;\n }\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Setting handler for ${method} at final node`);\n }\n\n node.handlers.set(method.toUpperCase(), handlers);\n }\n\n find(method: string, path: string): MatchResult {\n const cleanPath = path.split(\"?\")[0] || \"/\";\n const segments = cleanPath === \"/\" ? [] : cleanPath.split(\"/\").filter(Boolean);\n let node = this.root;\n const params: Record<string, string> = {};\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Finding ${method} ${cleanPath}`);\n console.log(`[Router:DEBUG] Segments:`, segments);\n }\n\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n if (!seg) continue;\n\n let child = node.children.get(seg);\n\n if (child) {\n node = child;\n if (this.debug) {\n console.log(`[Router:DEBUG] Matched literal segment: \"${seg}\"`);\n }\n } else {\n child = node.children.get(\":\");\n if (child) {\n node = child;\n if (node.paramName) {\n params[node.paramName] = seg;\n if (this.debug) {\n console.log(`[Router:DEBUG] Matched param segment: \":${node.paramName}\" = \"${seg}\"`);\n }\n } else if (this.debug) {\n console.warn(`[Router:DEBUG] Warning: Param node found but paramName is undefined!`);\n }\n } else {\n if (this.debug) {\n console.error(`[Router:DEBUG] Route not found for ${method} ${cleanPath}`);\n console.error(`[Router:DEBUG] Failed at segment: \"${seg}\"`);\n console.error(`[Router:DEBUG] Available children:`, Array.from(node.children.keys()));\n }\n throw new HttpError(404, \"Route not found\");\n }\n }\n }\n\n const handlers = node.handlers.get(method.toUpperCase()) as Handler[];\n if (!handlers) {\n if (this.debug) {\n console.error(\n `[Router:DEBUG] No handlers for method ${method.toUpperCase()} at path ${cleanPath}`\n );\n console.error(\n `[Router:DEBUG] Available methods at this path:`,\n Array.from(node.handlers.keys())\n );\n console.error(`[Router:DEBUG] Segments matched:`, segments);\n }\n throw new HttpError(404, \"Route not found\");\n }\n \n if (this.debug) {\n console.log(`[Router:DEBUG] Found handlers for ${method} ${cleanPath}`);\n console.log(`[Router:DEBUG] Extracted params:`, params);\n }\n \n return { handlers, params };\n }\n\n public listRoutes(): Array<{ method: string; path: string }> {\n const routes: Array<{ method: string; path: string }> = [];\n\n const traverse = (node: Node, path: string) => {\n if (node.handlers.size > 0) {\n for (const method of node.handlers.keys()) {\n routes.push({ method, path: path || \"/\" });\n }\n }\n\n for (const [segment, child] of node.children) {\n const newPath =\n path + \"/\" + (segment === \":\" && child.paramName ? `:${child.paramName}` : segment);\n traverse(child, newPath);\n }\n };\n\n traverse(this.root, \"\");\n return routes;\n }\n\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, router?: Router): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(prefixOrMw);\n } else if (typeof prefixOrMw === \"string\" && router instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = router.listRoutes();\n\n for (const route of routes) {\n const fullPath = prefix + (route.path === \"/\" ? \"\" : route.path);\n const { handlers } = router.find(route.method, route.path);\n this.add(route.method, fullPath, ...handlers);\n }\n }\n }\n}\n","import os from \"node:os\";\nimport cluster from \"node:cluster\";\nimport { logger } from \"../../utils/Logger\";\n\nexport function getIP(port: number) {\n try {\n const networkInterfaces = os.networkInterfaces();\n\n if (!networkInterfaces || Object.keys(networkInterfaces).length === 0) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n return;\n }\n\n let foundIP = false;\n Object.values(networkInterfaces).forEach((ifaceList) => {\n if (!ifaceList) return;\n\n ifaceList.forEach((iface) => {\n const isIPv4 =\n (iface.family as string | number) === \"IPv4\" || (iface.family as string | number) === 4;\n if (isIPv4 && !iface.internal && iface.address) {\n foundIP = true;\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n logger(\"info\", `[${who}] accessible at http://${iface.address}:${port}`);\n }\n });\n });\n\n if (!foundIP) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n } catch (error) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n}\n","import type { IncomingMessage } from \"node:http\";\n\n/**\n * IP resolution configuration interface\n * Similar to Express's 'trust proxy' setting\n */\nexport interface IpResolverConfig {\n /**\n * Enable trust proxy mode to read X-Forwarded-* headers\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n}\n\n/**\n * Check if an IP address is in a CIDR range\n */\nfunction isInCidrRange(ip: string, cidr: string): boolean {\n if (!cidr.includes(\"/\")) {\n return ip === cidr;\n }\n\n const [range, bits] = cidr.split(\"/\");\n\n // Guard against invalid CIDR format\n if (!range || !bits) {\n return false;\n }\n\n const mask = ~(2 ** (32 - parseInt(bits)) - 1);\n\n const ipNum = ip.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n const rangeNum = range.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n\n return (ipNum & mask) === (rangeNum & mask);\n}\n\n/**\n * Check if IP should be trusted based on trust proxy configuration\n */\nfunction shouldTrustProxy(ip: string, trustProxy: boolean | number | string | string[]): boolean {\n if (trustProxy === true) return true;\n if (trustProxy === false) return false;\n\n if (typeof trustProxy === \"string\") {\n return isInCidrRange(ip, trustProxy);\n }\n\n if (Array.isArray(trustProxy)) {\n return trustProxy.some((range) => isInCidrRange(ip, range));\n }\n\n return false;\n}\n\n/**\n * Resolve client IP address from request\n * Handles proxies, load balancers, and direct connections\n *\n * @param req - HTTP request object\n * @param config - IP resolver configuration\n * @returns Object containing primary IP and array of all IPs\n *\n * @example\n * ```typescript\n * // Don't trust proxies (default)\n * const { ip, ips } = resolveIp(req);\n *\n * // Trust all proxies\n * const { ip, ips } = resolveIp(req, { trustProxy: true });\n *\n * // Trust specific proxy\n * const { ip, ips } = resolveIp(req, { trustProxy: '10.0.0.1' });\n *\n * // Trust CIDR range\n * const { ip, ips } = resolveIp(req, { trustProxy: ['10.0.0.0/8', '172.16.0.0/12'] });\n *\n * // Trust first N hops\n * const { ip, ips } = resolveIp(req, { trustProxy: 2 });\n *\n * // Use custom header\n * const { ip, ips } = resolveIp(req, {\n * trustProxy: true,\n * ipHeader: 'cf-connecting-ip'\n * });\n * ```\n */\nexport function resolveIp(\n req: IncomingMessage,\n config: IpResolverConfig = {}\n): { ip: string; ips: string[] } {\n const { trustProxy = false, ipHeader = \"x-forwarded-for\" } = config;\n\n // Get socket IP as fallback\n // Clean up IPv6 localhost and IPv4-mapped addresses\n let socketIp = req.socket?.remoteAddress || \"\";\n if (socketIp === \"::1\" || socketIp === \"::ffff:127.0.0.1\") {\n socketIp = \"127.0.0.1\";\n } else if (socketIp.startsWith(\"::ffff:\")) {\n socketIp = socketIp.substring(7);\n }\n\n // If not trusting proxy, return socket IP only\n if (trustProxy === false) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Try to get forwarded IPs from headers\n const forwardedHeader = req.headers[ipHeader.toLowerCase()];\n const forwardedFor = Array.isArray(forwardedHeader) ? forwardedHeader[0] : forwardedHeader;\n\n if (!forwardedFor) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Parse all IPs from the header\n const allIps = forwardedFor\n .split(\",\")\n .map((ip) => ip.trim())\n .filter(Boolean);\n\n // Add socket IP to the chain\n if (socketIp) {\n allIps.push(socketIp);\n }\n\n // If trusting all proxies, return first IP\n if (trustProxy === true) {\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is a number, trust that many hops\n if (typeof trustProxy === \"number\") {\n const hopCount = Math.max(0, trustProxy);\n const trustedIndex = Math.max(0, allIps.length - hopCount - 1);\n return {\n ip: allIps[trustedIndex] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is IP/CIDR, validate chain\n const trustedIps: string[] = [];\n for (let i = allIps.length - 1; i >= 0; i--) {\n const currentIp = allIps[i];\n\n if (!currentIp) {\n continue;\n }\n\n if (shouldTrustProxy(currentIp, trustProxy)) {\n continue;\n }\n\n // Found first untrusted IP (client IP)\n return {\n ip: currentIp,\n ips: allIps,\n };\n }\n\n // All IPs were trusted, return first one\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n}\n\n/**\n * Common proxy IP ranges for convenience\n */\nexport const COMMON_PROXY_RANGES = {\n /** Private network ranges (RFC 1918) */\n PRIVATE: [\"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"],\n\n /** Loopback addresses */\n LOOPBACK: [\"127.0.0.0/8\", \"::1/128\"],\n\n /** Link-local addresses */\n LINK_LOCAL: [\"169.254.0.0/16\", \"fe80::/10\"],\n\n /** Cloudflare IP ranges (example - should be updated regularly) */\n CLOUDFLARE: [\n \"173.245.48.0/20\",\n \"103.21.244.0/22\",\n \"103.22.200.0/22\",\n \"103.31.4.0/22\",\n \"141.101.64.0/18\",\n \"108.162.192.0/18\",\n \"190.93.240.0/20\",\n ],\n\n /** AWS ELB IP ranges (example - should be updated regularly) */\n AWS_ELB: [\"52.94.76.0/22\", \"35.180.0.0/16\"],\n};\n","import type { HttpContext } from \"../../types/common.type\";\nimport type { CorsOptions } from \"../../types/plugins/cors.type\";\n\nexport function cors(opts: CorsOptions) {\n const { origin, methods, allowedHeaders } = opts;\n\n return (ctx: HttpContext, next: () => Promise<void>) => {\n ctx.response.setHeader(\n \"Access-Control-Allow-Origin\",\n Array.isArray(origin) ? origin.join(\",\") : origin\n );\n ctx.response.setHeader(\n \"Access-Control-Allow-Methods\",\n Array.isArray(methods) ? methods.join(\",\") : methods\n );\n ctx.response.setHeader(\n \"Access-Control-Allow-Headers\",\n Array.isArray(allowedHeaders) ? allowedHeaders.join(\",\") : allowedHeaders\n );\n\n if (ctx.request.method === \"OPTIONS\") {\n ctx.response.writeHead(204);\n return ctx.response.end();\n }\n\n return next();\n };\n}\n","import type { HttpContext } from \"../../types/common.type\";\n\ninterface Entry {\n count: number;\n ts: number;\n}\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(limit: number, ttl: number) {\n return async (ctx: HttpContext, next: () => Promise<void>) => {\n const ip = ctx.request.socket.remoteAddress;\n const now = Date.now();\n const entry = store.get(ip!) ?? { count: 0, ts: now };\n\n if (now - entry.ts > ttl) {\n entry.count = 1;\n entry.ts = now;\n } else {\n entry.count++;\n }\n\n store.set(ip!, entry);\n\n if (entry.count > limit) {\n ctx.response.status(429).send(\"Too many requests\");\n return;\n }\n\n await next();\n };\n}\n","import http from \"node:http\";\nimport https from \"node:https\";\nimport type { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\nimport { logger } from \"../../utils/Logger\";\nimport type { ProxyOptions } from \"../../types/plugins/proxy.type\";\n\nexport function createProxyMiddleware(options: ProxyOptions) {\n const {\n target,\n pathRewrite = {},\n headers = {},\n timeout = 30000,\n followRedirects = false,\n preserveHost = false,\n logLevel = \"info\",\n onProxyReq,\n onProxyRes,\n onError,\n } = options;\n\n return async (req: RequestServer, res: ResponseServer, next?: Function) => {\n try {\n // Parse target URL\n const targetUrl = new URL(target);\n const isHttps = targetUrl.protocol === \"https:\";\n const client = isHttps ? https : http;\n\n // Construir o path\n let path = req.path || \"/\";\n\n // Aplicar path rewrites\n for (const [pattern, replacement] of Object.entries(pathRewrite)) {\n const regex = new RegExp(pattern);\n path = path.replace(regex, replacement);\n }\n\n // Adicionar query string\n if (req.url && req.url.includes(\"?\")) {\n const queryString = req.url.split(\"?\")[1];\n path += `?${queryString}`;\n }\n\n if (logLevel !== \"none\") {\n logger(\n logLevel === \"debug\" ? \"info\" : \"info\",\n `[Proxy] ${req.method} ${req.url} → ${target}${path}`\n );\n }\n\n // Configurar headers\n const proxyHeaders: http.OutgoingHttpHeaders = {\n ...req.headers,\n ...headers,\n };\n\n // Remover headers problemáticos\n delete proxyHeaders[\"host\"];\n delete proxyHeaders[\"connection\"];\n delete proxyHeaders[\"transfer-encoding\"];\n\n if (preserveHost && req.headers.host) {\n proxyHeaders[\"host\"] = req.headers.host;\n } else {\n proxyHeaders[\"host\"] = targetUrl.host;\n }\n\n // Adicionar headers de forwarding\n if (req.ip) {\n proxyHeaders[\"x-forwarded-for\"] = req.ip;\n }\n proxyHeaders[\"x-forwarded-proto\"] = req.protocol || \"http\";\n proxyHeaders[\"x-forwarded-host\"] = req.headers.host || \"\";\n\n // Criar requisição proxy\n const proxyReqOptions: http.RequestOptions = {\n hostname: targetUrl.hostname,\n port: targetUrl.port || (isHttps ? 443 : 80),\n path,\n method: req.method,\n headers: proxyHeaders,\n timeout,\n };\n\n const proxyReq = client.request(proxyReqOptions, (proxyRes) => {\n // Callback customizado\n if (onProxyRes) {\n onProxyRes(proxyRes, req, res);\n }\n\n // Copiar status code\n res.statusCode = proxyRes.statusCode || 200;\n\n // Copiar headers (exceto alguns problemáticos)\n if (proxyRes.headers) {\n for (const [key, value] of Object.entries(proxyRes.headers)) {\n if (key.toLowerCase() !== \"transfer-encoding\" && value) {\n res.setHeader(key, value);\n }\n }\n }\n\n // Fazer pipe da resposta diretamente\n proxyRes.pipe(res as any);\n });\n\n // Callback customizado antes de enviar\n if (onProxyReq) {\n onProxyReq(proxyReq, req);\n }\n\n // Lidar com erros\n proxyReq.on(\"error\", (err) => {\n if (onError) {\n onError(err, req, res);\n } else {\n logger(\"error\", `[Proxy] Error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 502;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Bad Gateway\",\n message: \"Failed to connect to upstream server\",\n }));\n }\n }\n });\n\n proxyReq.on(\"timeout\", () => {\n proxyReq.destroy();\n if (!res.headersSent) {\n res.statusCode = 504;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Gateway Timeout\",\n message: \"Upstream server took too long to respond\",\n }));\n }\n });\n\n // Enviar body se existir\n if (req.body && [\"POST\", \"PUT\", \"PATCH\"].includes(req.method || \"\")) {\n const bodyStr = typeof req.body === \"string\" ? req.body : JSON.stringify(req.body);\n proxyReq.write(bodyStr);\n }\n\n proxyReq.end();\n } catch (err: any) {\n logger(\"error\", `[Proxy] Setup error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Internal Server Error\",\n message: \"Failed to setup proxy\",\n }));\n }\n }\n };\n}\n\n/**\n * Middleware de proxy simples - apenas passa o target\n */\nexport function proxyPlugin(target: string, options: Partial<ProxyOptions> = {}) {\n return createProxyMiddleware({ target, ...options });\n}\n","import type { RequestServer } from \"../types/http/request.type\";\nimport type { ResponseServer } from \"../types/http/response.type\";\nimport type { ConfigTypes } from \"../shared/config/ConfigModule\";\nimport type { RequestHandler } from \"../types/common.type\";\n\nexport function createLoggingMiddleware(config: ConfigTypes): RequestHandler {\n const isEnabled = config.logging?.enabled ?? true;\n const showDetails = config.logging?.showDetails ?? true;\n const env = config.environment || \"development\";\n\n const reset = \"\\x1b[0m\";\n const bold = \"\\x1b[1m\";\n const dim = \"\\x1b[2m\";\n const colors: Record<string, string> = {\n GET: \"\\x1b[36m\",\n POST: \"\\x1b[32m\",\n PUT: \"\\x1b[33m\",\n DELETE: \"\\x1b[31m\",\n PATCH: \"\\x1b[35m\",\n DEFAULT: \"\\x1b[37m\",\n };\n\n const fn = async (...args: any[]) => {\n let req: RequestServer | undefined;\n let res: ResponseServer | undefined;\n let next: ((err?: any) => Promise<void> | void) | undefined;\n\n if (args.length === 1 && typeof args[0] === \"object\" && args[0] !== null) {\n const ctx = args[0];\n req = (ctx.request || ctx.req) as RequestServer | undefined;\n res = (ctx.response || ctx.res) as ResponseServer | undefined;\n next = ctx.next;\n } else {\n req = args[0] as RequestServer | undefined;\n res = args[1] as ResponseServer | undefined;\n next = args[2] as typeof next;\n }\n\n if (!req || !res) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n if (!isEnabled) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n const start = Date.now();\n const methodRaw = String(req.method || \"GET\").toUpperCase();\n const methodPad = methodRaw.padEnd(6, \" \");\n const methodColor = colors[methodRaw] || colors.DEFAULT;\n const url = String((req as any).originalUrl || req.url || \"/\");\n const ip = String((req as any).ip || \"\").replace(\"::ffff:\", \"\");\n const time = new Date().toLocaleTimeString(\"pt-BR\", { hour12: false });\n\n try {\n if (env === \"development\") {\n const header = `${dim}·${reset} ${bold}${time}${reset} ${methodColor}${methodPad}${reset} ${bold}${url}${reset}`;\n console.log(header);\n if (showDetails) {\n try {\n if (req.query && Object.keys(req.query).length > 0) {\n console.log(`${dim} › query:${reset} ${JSON.stringify(req.query)}`);\n }\n } catch {}\n try {\n const params = (req as any).params;\n if (params && Object.keys(params).length > 0) {\n console.log(`${dim} › params:${reset} ${JSON.stringify(params)}`);\n }\n } catch {}\n try {\n if (req.body && Object.keys(req.body).length > 0) {\n console.log(`${dim} › body:${reset} ${JSON.stringify(req.body)}`);\n }\n } catch {}\n }\n } else {\n console.log(\n `${dim}·${reset} ${time} ${methodColor}${methodPad}${reset} ${url} ${dim}• IP:${ip}${reset}`\n );\n }\n } catch {}\n\n try {\n if (typeof (res as any).on === \"function\") {\n (res as any).on(\"finish\", () => {\n const duration = Date.now() - start;\n const statusCode = Number((res as any).statusCode || 0);\n const statusColor =\n statusCode >= 500 ? \"\\x1b[31m\" : statusCode >= 400 ? \"\\x1b[33m\" : \"\\x1b[32m\";\n const statusText = `${statusColor}${statusCode}${reset}`;\n const durationText = `${dim}(${duration}ms)${reset}`;\n const ipShort = ip || \"-\";\n const line = `${dim}→${reset} ${statusText} ${durationText} ${dim}• IP:${ipShort}${reset}`;\n console.log(line);\n });\n }\n } catch {}\n\n if (typeof next === \"function\") {\n await next();\n }\n };\n\n return fn as unknown as RequestHandler;\n}\n","import http from \"node:http\";\nimport cluster from \"node:cluster\";\nimport os from \"node:os\";\n\nimport { ConfigModule } from \"../shared/config/ConfigModule\";\nimport type { RequestServer } from \"../types/http/request.type\";\nimport type { CookieOptions, ResponseServer } from \"../types/http/response.type\";\nimport { HttpError } from \"./utils/HttpError\";\nimport { logger } from \"../utils/Logger\";\nimport { parseQS } from \"../utils/Parser\";\nimport { serializeCookie } from \"../utils/cookies/SerializeCookie\";\nimport { parseCookiesHeader } from \"../utils/cookies/ParserCookie\";\nimport { adaptRequestHandler } from \"./utils/RequestHandler\";\nimport { Router } from \"./Router\";\nimport type { RequestHandler } from \"../types/common.type\";\nimport { getIP } from \"./utils/GetIp\";\nimport { resolveIp } from \"./utils/IpResolver\";\nimport type { Handler } from \"./utils/route/Node\";\nimport { cors } from \"../shared/plugins/CORSPlugin\";\nimport { rateLimit } from \"../shared/plugins/RateLimitPlugin\";\nimport type { ProxyOptions } from \"../types\";\nimport { proxyPlugin } from \"../shared/plugins\";\n\nexport { createLoggingMiddleware } from \"../middleware/LoggingMiddleware\";\nexport { proxyPlugin, createProxyMiddleware } from \"../shared/plugins/ProxyPlugin\";\n\nexport class AzuraClient {\n private opts: ReturnType<ConfigModule[\"getAll\"]>;\n\n private server?: http.Server;\n private port: number = 3000;\n private initPromise: Promise<void>;\n\n private router: Router;\n private middlewares: RequestHandler[] = [];\n private proxies: Array<{ path: string; handler: RequestHandler }> = [];\n\n constructor() {\n const config = new ConfigModule();\n try {\n config.initSync();\n } catch (error: any) {\n console.error(\"[Azura] ❌ Falha ao carregar configuração:\");\n console.error(\" \", error.message);\n process.exit(1);\n }\n this.opts = config.getAll();\n this.router = new Router(this.opts.debug);\n this.initPromise = this.init();\n this.setupDefaultRoutes();\n }\n\n /**\n * Configura rotas padrão para evitar erros 404 comuns\n */\n private setupDefaultRoutes() {\n this.router.add(\n \"GET\",\n \"/favicon.ico\",\n adaptRequestHandler((ctx: any) => {\n ctx.res.status(204).send();\n }) as any\n );\n }\n\n public getConfig() {\n return this.opts;\n }\n\n private async init() {\n this.port = this.opts.server?.port || 3000;\n\n if (this.opts.server?.cluster && cluster.isPrimary) {\n for (let i = 0; i < os.cpus().length; i++) cluster.fork();\n cluster.on(\"exit\", () => cluster.fork());\n return;\n }\n\n if (this.opts.plugins?.cors?.enabled) {\n cors({\n origin: this.opts.plugins.cors.origins,\n methods: this.opts.plugins.cors.methods,\n allowedHeaders: this.opts.plugins.cors.allowedHeaders,\n });\n\n logger(\"info\", \"CORS plugin enabled\");\n }\n\n if (this.opts.plugins?.rateLimit?.enabled) {\n rateLimit(this.opts.plugins.rateLimit.limit, this.opts.plugins.rateLimit.timeframe);\n\n logger(\"info\", \"Rate Limit plugin enabled\");\n }\n\n this.server = http.createServer();\n this.server.on(\"request\", this.handle.bind(this));\n }\n\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, router?: Router): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(prefixOrMw);\n } else if (typeof prefixOrMw === \"string\" && router instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = router.listRoutes();\n\n for (const route of routes) {\n const fullPath = prefix + (route.path === \"/\" ? \"\" : route.path);\n const { handlers } = router.find(route.method, route.path);\n this.router.add(route.method, fullPath, ...handlers);\n }\n }\n }\n\n public addRoute(method: string, path: string, ...handlers: RequestHandler[]) {\n const adapted = handlers.map(adaptRequestHandler);\n this.router.add(method, path, ...(adapted as unknown as Handler[]));\n }\n\n public get = (p: string, ...h: RequestHandler[]) => this.addRoute(\"GET\", p, ...h);\n public post = (p: string, ...h: RequestHandler[]) => this.addRoute(\"POST\", p, ...h);\n public put = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PUT\", p, ...h);\n public delete = (p: string, ...h: RequestHandler[]) => this.addRoute(\"DELETE\", p, ...h);\n public patch = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PATCH\", p, ...h);\n\n /**\n * Configures a proxy for a specific route\n * @param path - Path of the route to be proxied\n * @param target - Destination server URL\n * @param options - Additional proxy options\n * * @example\n * ```typescript\n * // Simple proxy\n * app.proxy('/api', 'http://localhost:4000');\n * * // With advanced options\n * app.proxy('/api', 'http://localhost:4000', {\n * pathRewrite: { '^/api': '' },\n * headers: { 'X-Custom-Header': 'value' }\n * });\n * ```\n */\n public proxy(path: string, target: string, options: Partial<ProxyOptions> = {}) {\n const proxyMiddleware = proxyPlugin(target, options) as RequestHandler;\n\n // Adicionar à lista de proxies\n this.proxies.push({ path, handler: proxyMiddleware });\n }\n\n public getRoutes() {\n return this.router.listRoutes();\n }\n\n public async listen(port = this.port) {\n await this.initPromise;\n\n if (!this.server) {\n logger(\"error\", \"Server not initialized\");\n return;\n }\n\n this.server.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EADDRINUSE\") {\n logger(\"error\", `❌ Port ${port} is already in use. Please choose a different port.`);\n } else {\n logger(\"error\", \"Server failed to start: \" + (error?.message || String(error)));\n }\n process.exit(1);\n });\n\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n this.server.listen(port, () => {\n logger(\"info\", `[${who}] listening on http://localhost:${port}`);\n if (this.opts.server?.ipHost) getIP(port);\n\n const routes = this.getRoutes();\n if (routes.length > 0) {\n logger(\"info\", `\\n📋 Registered routes (${routes.length}):`);\n routes.forEach((r) => {\n logger(\"info\", ` ${r.method.padEnd(7)} ${r.path}`);\n });\n }\n });\n\n return this.server;\n }\n\n /**\n * Fetch handler compatible with Web API (Bun, Deno, Cloudflare Workers, etc.)\n * @example\n * ```typescript\n * const app = new AzuraClient();\n * app.get('/', (req, res) => res.text('Hello World!'));\n *\n * // Use with Bun\n * Bun.serve({\n * port: 3000,\n * fetch: app.fetch.bind(app),\n * });\n *\n * // Use with Deno\n * Deno.serve({ port: 3000 }, app.fetch.bind(app));\n * ```\n */\n public async fetch(request: Request): Promise<Response> {\n await this.initPromise;\n\n const url = new URL(request.url);\n const urlPath = url.pathname;\n\n const safeQuery: Record<string, string> = {};\n if (url.search) {\n const rawQuery = parseQS(url.search.slice(1));\n for (const k in rawQuery) {\n const v = rawQuery[k];\n safeQuery[k] = Array.isArray(v) ? v[0] || \"\" : (v as string);\n }\n }\n\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n const cookies = parseCookiesHeader(cookieHeader);\n\n let body: any = {};\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(request.method.toUpperCase())) {\n const contentType = request.headers.get(\"content-type\") || \"\";\n try {\n if (contentType.includes(\"application/json\")) {\n body = await request.json();\n } else if (contentType.includes(\"application/x-www-form-urlencoded\")) {\n const text = await request.text();\n const parsed = parseQS(text || \"\");\n const b: Record<string, string> = {};\n for (const k in parsed) {\n const v = parsed[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n body = b;\n } else {\n body = await request.text();\n }\n } catch {\n body = {};\n }\n }\n\n const protocol = url.protocol.slice(0, -1) as \"http\" | \"https\";\n\n const headersObj: Record<string, string | string[]> = {};\n request.headers.forEach((value, key) => {\n headersObj[key] = value;\n });\n\n const rawReq: Partial<RequestServer> = {\n method: request.method,\n url: url.pathname + url.search,\n originalUrl: url.pathname + url.search,\n path: urlPath || \"/\",\n protocol,\n secure: url.protocol === \"https:\",\n hostname: url.hostname,\n subdomains: url.hostname ? url.hostname.split(\".\").slice(0, -2) : [],\n query: safeQuery,\n cookies,\n params: {},\n body,\n headers: headersObj as any,\n get: (name: string) => request.headers.get(name.toLowerCase()) || undefined,\n header: (name: string) => request.headers.get(name.toLowerCase()) || undefined,\n socket: {\n remoteAddress: request.headers.get(\"x-real-ip\") || request.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim() || \"127.0.0.1\",\n } as any,\n } as Partial<RequestServer>;\n\n // Resolve IP for fetch handler using the same logic as HTTP handler\n const { ip, ips } = resolveIp(rawReq as any, {\n trustProxy: this.opts.server?.trustProxy,\n ipHeader: this.opts.server?.ipHeader,\n });\n rawReq.ip = ip;\n rawReq.ips = ips;\n\n const finalReq = rawReq as Partial<RequestServer>;\n\n let statusCode = 200;\n const responseHeaders = new Headers();\n let responseBody: any = null;\n\n const rawRes: Partial<ResponseServer> = {\n statusCode,\n status: (code: number) => {\n statusCode = code;\n return rawRes as ResponseServer;\n },\n set: (field: string, value: string | number | string[]) => {\n responseHeaders.set(field, String(value));\n return rawRes as ResponseServer;\n },\n header: (field: string, value: string | number | string[]) => {\n responseHeaders.set(field, String(value));\n return rawRes as ResponseServer;\n },\n get: (field: string) => responseHeaders.get(field) || undefined,\n type: (t: string) => {\n responseHeaders.set(\"Content-Type\", t);\n return rawRes as ResponseServer;\n },\n contentType: (t: string) => {\n responseHeaders.set(\"Content-Type\", t);\n return rawRes as ResponseServer;\n },\n location: (u: string) => {\n responseHeaders.set(\"Location\", u);\n return rawRes as ResponseServer;\n },\n redirect: ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n statusCode = a;\n responseHeaders.set(\"Location\", b!);\n } else {\n statusCode = 302;\n responseHeaders.set(\"Location\", a);\n }\n return rawRes as ResponseServer;\n }) as ResponseServer[\"redirect\"],\n cookie: (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = responseHeaders.get(\"Set-Cookie\");\n if (prev) {\n responseHeaders.append(\"Set-Cookie\", s);\n } else {\n responseHeaders.set(\"Set-Cookie\", s);\n }\n return rawRes as ResponseServer;\n },\n clearCookie: (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie!(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n },\n send: (b: any) => {\n if (b === undefined || b === null) {\n responseBody = \"\";\n } else if (typeof b === \"object\") {\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(b);\n } else {\n responseBody = String(b);\n }\n return rawRes as ResponseServer;\n },\n json: (b: any) => {\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(b);\n return rawRes as ResponseServer;\n },\n };\n\n const errorHandler = (err: any) => {\n statusCode = err instanceof HttpError ? err.status : 500;\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(\n err instanceof HttpError\n ? err.payload ?? { error: err.message || \"Internal Server Error\" }\n : { error: err?.message || \"Internal Server Error\" }\n );\n };\n\n try {\n const { handlers, params } = this.router.find(request.method, urlPath || \"/\");\n rawReq.params = params || {};\n\n const chain = [\n ...this.middlewares.map(adaptRequestHandler),\n ...handlers.map(adaptRequestHandler),\n ];\n\n let idx = 0;\n const next = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({\n request: rawReq as RequestServer,\n response: rawRes as ResponseServer,\n req: rawReq as RequestServer,\n res: rawRes as ResponseServer,\n next,\n });\n } catch (e) {\n return errorHandler(e);\n }\n };\n\n await next();\n } catch (err) {\n errorHandler(err);\n }\n\n return new Response(responseBody, {\n status: statusCode,\n headers: responseHeaders,\n });\n }\n\n private async handle(rawReq: RequestServer, rawRes: ResponseServer) {\n rawReq.originalUrl = rawReq.url || \"\";\n rawReq.protocol = this.opts.server?.https ? \"https\" : \"http\";\n rawReq.secure = rawReq.protocol === \"https\";\n rawReq.hostname = String(rawReq.headers[\"host\"] || \"\").split(\":\")[0] || \"\";\n rawReq.subdomains = rawReq.hostname ? rawReq.hostname.split(\".\").slice(0, -2) : [];\n\n // Resolve IP using configured trust proxy settings\n const { ip, ips } = resolveIp(rawReq, {\n trustProxy: this.opts.server?.trustProxy,\n ipHeader: this.opts.server?.ipHeader,\n });\n rawReq.ip = ip;\n rawReq.ips = ips;\n\n rawReq.get = rawReq.header = (name: string) => {\n const v = rawReq.headers[name.toLowerCase()];\n if (Array.isArray(v)) return v[0];\n return typeof v === \"string\" ? v : undefined;\n };\n\n rawRes.status = (code: number) => {\n rawRes.statusCode = code;\n return rawRes;\n };\n\n rawRes.set = rawRes.header = (field: string, value: string | number | string[]) => {\n rawRes.setHeader(field, value);\n return rawRes;\n };\n\n rawRes.get = (field: string) => {\n const v = rawRes.getHeader(field);\n if (Array.isArray(v)) return v[0];\n return typeof v === \"number\" ? String(v) : (v as string | undefined);\n };\n\n rawRes.type = rawRes.contentType = (t: string) => {\n rawRes.setHeader(\"Content-Type\", t);\n return rawRes;\n };\n\n rawRes.location = (u: string) => {\n rawRes.setHeader(\"Location\", u);\n return rawRes;\n };\n\n rawRes.redirect = ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n rawRes.statusCode = a;\n rawRes.setHeader(\"Location\", b!);\n } else {\n rawRes.statusCode = 302;\n rawRes.setHeader(\"Location\", a);\n }\n rawRes.end();\n return rawRes;\n }) as ResponseServer[\"redirect\"];\n\n rawRes.cookie = (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = rawRes.getHeader(\"Set-Cookie\");\n if (prev) {\n const list = Array.isArray(prev) ? prev.concat(s) : [String(prev), s];\n rawRes.setHeader(\"Set-Cookie\", list);\n } else {\n rawRes.setHeader(\"Set-Cookie\", s);\n }\n return rawRes;\n };\n\n rawRes.clearCookie = (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n };\n\n rawRes.send = (b: any) => {\n if (b === undefined || b === null) {\n rawRes.end();\n return rawRes;\n }\n if (typeof b === \"object\") {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n } else {\n rawRes.end(String(b));\n }\n return rawRes;\n };\n\n rawRes.json = (b: any) => {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n return rawRes;\n };\n\n const [urlPath, qs] = (rawReq.url || \"\").split(\"?\");\n rawReq.path = urlPath || \"/\";\n const rawQuery = parseQS(qs || \"\");\n const safeQuery: Record<string, string> = {};\n for (const k in rawQuery) {\n const v = rawQuery[k];\n safeQuery[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.query = safeQuery;\n\n rawReq.cookies = parseCookiesHeader((rawReq.headers[\"cookie\"] as string) || \"\");\n rawReq.params = {};\n\n rawReq.body = {};\n if ([\"POST\", \"PUT\", \"PATCH\"].includes((rawReq.method || \"\").toUpperCase())) {\n await new Promise<void>((resolve) => {\n let buf = \"\";\n rawReq.on(\"data\", (chunk: Buffer | string) => {\n buf += chunk;\n });\n rawReq.on(\"end\", () => {\n try {\n const ct = String(rawReq.headers[\"content-type\"] || \"\");\n if (ct.includes(\"application/json\")) {\n rawReq.body = JSON.parse(buf || \"{}\");\n } else {\n const parsed = parseQS(buf || \"\");\n const b: Record<string, string> = {};\n for (const k in parsed) {\n const v = parsed[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.body = b;\n }\n } catch {\n rawReq.body = {};\n }\n resolve();\n });\n rawReq.on(\"error\", (err: Error) => {\n logger(\"error\", \"Body parse error: \" + err.message);\n resolve();\n });\n });\n }\n\n const errorHandler = (err: any) => {\n logger(\"error\", err?.message || String(err));\n rawRes\n .status(err instanceof HttpError ? err.status : 500)\n .json(\n err instanceof HttpError\n ? err.payload ?? { error: err.message || \"Internal Server Error\" }\n : { error: err?.message || \"Internal Server Error\" }\n );\n };\n\n try {\n for (const proxy of this.proxies) {\n if (rawReq.path.startsWith(proxy.path)) {\n const chain = this.middlewares.map(adaptRequestHandler);\n let idx = 0;\n let middlewareError = false;\n\n const middlewareNext = async (err?: any) => {\n if (err) {\n middlewareError = true;\n return errorHandler(err);\n }\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({\n request: rawReq,\n response: rawRes,\n req: rawReq,\n res: rawRes,\n next: middlewareNext,\n });\n } catch (e) {\n middlewareError = true;\n return errorHandler(e);\n }\n };\n\n await middlewareNext();\n\n if (!middlewareError) {\n const handler = proxy.handler as (\n req: RequestServer,\n res: ResponseServer,\n next?: any\n ) => void | Promise<void>;\n await handler(rawReq, rawRes, middlewareNext);\n }\n return;\n }\n }\n\n const { handlers, params } = this.router.find(rawReq.method || \"GET\", rawReq.path);\n rawReq.params = params || {};\n const chain = [\n ...this.middlewares.map(adaptRequestHandler),\n ...handlers.map(adaptRequestHandler),\n ];\n let idx = 0;\n const next = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({\n request: rawReq,\n response: rawRes,\n req: rawReq,\n res: rawRes,\n next,\n });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await next();\n } catch (err) {\n errorHandler(err);\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/shared/config/ConfigModule.ts","../src/infra/utils/HttpError.ts","../src/types/utils/colors.type.ts","../src/types/utils/icons.type.ts","../src/utils/Logger.ts","../src/utils/Parser.ts","../src/utils/cookies/SerializeCookie.ts","../src/utils/cookies/ParserCookie.ts","../src/infra/utils/RequestHandler.ts","../src/infra/utils/route/Node.ts","../src/infra/Router.ts","../src/infra/utils/GetIp.ts","../src/infra/utils/IpResolver.ts","../src/shared/plugins/CORSPlugin.ts","../src/shared/plugins/RateLimitPlugin.ts","../src/shared/plugins/ProxyPlugin.ts","../src/middleware/LoggingMiddleware.ts","../src/infra/Server.ts"],"names":["path","existsSync","readFileSync","os","cluster","https","http","chain","idx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqDO,IAAM,eAAN,MAAmB;AAAA,EAAnB,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,SAAsB,EAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQ/B,QAAA,GAAiB;AACf,IAAA,MAAM,GAAA,GAAM,QAAQ,GAAA,EAAI;AACxB,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,MAAA,GAAS,KAAA;AACb,IAAA,KAAA,MAAW,YAAY,WAAA,EAAa;AAClC,MAAA,MAAM,QAAA,GAAWA,qBAAA,CAAK,IAAA,CAAK,GAAA,EAAK,QAAQ,CAAA;AACxC,MAAA,IAAI,CAACC,aAAA,CAAW,QAAQ,CAAA,EAAG;AAE3B,MAAA,MAAM,SAAA,GAAYD,qBAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA;AACvC,MAAA,MAAM,GAAA,GAAME,eAAA,CAAa,QAAA,EAAU,MAAM,CAAA;AAEzC,MAAA,IAAI;AACF,QAAA,IAAI,MAAA;AACJ,QAAA,QAAQ,SAAA;AAAW,UACjB,KAAK,KAAA;AAAA,UACL,KAAK,KAAA;AACH,YAAA,MAAM,GAAA,GAAM,UAAQ,QAAQ,CAAA;AAC5B,YAAA,MAAA,GAAS,IAAI,OAAA,IAAW,GAAA;AACxB,YAAA;AAAA,UACF,KAAK,OAAA;AACH,YAAA,MAAA,GAAS,IAAA,CAAK,MAAM,GAAG,CAAA;AACvB,YAAA;AAAA,UACF,KAAK,OAAA;AAAA,UACL,KAAK,MAAA;AACH,YAAA,MAAA,GAAS,SAAA,CAAQ,SAAS,CAAA,CAAE,IAAA,CAAK,GAAG,CAAA;AACpC,YAAA;AAAA,UACF;AACE,YAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,SAAS,CAAA,CAAE,CAAA;AAAA;AAGjE,QAAA,IAAA,CAAK,SAAS,EAAE,GAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,MAAA,EAAO;AAC1C,QAAA,MAAA,GAAS,IAAA;AACT,QAAA;AAAA,MACF,SAAS,KAAA,EAAoB;AAC3B,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,QAAQ;AAAA,EAAK,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,MAC5E;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAM,IAAI,MAAM,qDAAqD,CAAA;AAAA,IACvE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA,GAAsB;AACpB,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAiC,GAAA,EAAwB;AACvD,IAAA,OAAO,IAAA,CAAK,OAAO,GAAG,CAAA;AAAA,EACxB;AACF,CAAA;;;ACnIO,IAAM,SAAA,GAAN,cAAwB,KAAA,CAAM;AAAA,EAGnC,WAAA,CAAY,MAAA,EAAgB,OAAA,EAAkB,OAAA,EAAe;AAC3D,IAAA,KAAA,CAAM,OAAA,IAAW,MAAA,CAAO,OAAA,IAAW,OAAO,CAAC,CAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,OAAA;AAAA,EACjB;AACF,CAAA;;;ACJO,IAAM,KAAA,GAAQ,SAAA;AACd,IAAM,IAAA,GAAO,SAAA;AACb,IAAM,GAAA,GAAM,SAAA;AAMZ,IAAM,WAAA,GAAc;AAAA,EACzB,KAAA,EAAO,UAAA;AAAA,EACP,GAAA,EAAK,UAAA;AAAA,EACL,KAAA,EAAO,UAAA;AAAA,EACP,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,OAAA,EAAS,UAAA;AAAA,EACT,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO,UAAA;AAAA,EACP,IAAA,EAAM,UAAA;AAAA,EACN,SAAA,EAAW,UAAA;AAAA,EACX,WAAA,EAAa,UAAA;AAAA,EACb,YAAA,EAAc,UAAA;AAAA,EACd,UAAA,EAAY,UAAA;AAAA,EACZ,aAAA,EAAe,UAAA;AAAA,EACf,UAAA,EAAY,UAAA;AAAA,EACZ,WAAA,EAAa;AACf,CAAA;AAqBO,IAAM,cAAA,GAAiB;AAAA,EAC5B,OAAO,WAAA,CAAY,IAAA;AAAA,EACnB,MAAM,WAAA,CAAY,IAAA;AAAA,EAClB,SAAS,WAAA,CAAY,WAAA;AAAA,EACrB,MAAM,WAAA,CAAY,MAAA;AAAA,EAClB,OAAO,WAAA,CAAY,GAAA;AAAA,EACnB,OAAO,WAAA,CAAY,SAAA;AAAA,EACnB,OAAO,WAAA,CAAY,OAAA;AAAA,EACnB,KAAK,WAAA,CAAY;AACnB,CAAA;;;ACvDO,IAAM,aAAA,GAAgB;AAAA,EAC3B,KAAA,EAAO,WAAA;AAAA,EACP,IAAA,EAAM,cAAA;AAAA,EACN,OAAA,EAAS,QAAA;AAAA,EACT,IAAA,EAAM,cAAA;AAAA,EACN,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,KAAA,EAAO,WAAA;AAAA,EACP,GAAA,EAAK,WAAA;AAAA,EACL,KAAA,EAAO;AACT,CAAA;;;ACCA,IAAI,YAAA,GAA6B;AAAA,EAC/B,aAAA,EAAe,KAAA;AAAA,EACf,QAAA,EAAU,IAAA;AAAA,EACV,eAAA,EAAiB,MAAA;AAAA,EACjB,MAAA,EAAQ,OAAA;AAAA,EACR,SAAA,EAAW,IAAA;AAAA,EACX,IAAA,EAAM,KAAA;AAAA,EACN,GAAA,EAAK;AACP,CAAA;AAwBA,SAAS,UAAU,GAAA,EAAqB;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,MAAM,IAAI,QAAA,CAAS,GAAA,CAAI,MAAM,CAAA,EAAG,CAAC,GAAG,EAAE,CAAA;AACtC,EAAA,OAAO,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA;AACjC;AAUA,SAAS,SAAA,CAAU,CAAA,EAAW,CAAA,EAAW,CAAA,EAAmB;AAC1D,EAAA,OAAO,CAAA,UAAA,EAAa,CAAC,CAAA,CAAA,EAAI,CAAC,IAAI,CAAC,CAAA,CAAA,CAAA;AACjC;AAYA,SAAS,aAAa,KAAA,EAAuB;AAC3C,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,OAAO,UAAU,KAAK,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,KAAA,CAAM,UAAA,CAAW,MAAM,CAAA,EAAG;AAC5B,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,gCAAgC,CAAA;AAC1D,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,OAAO,SAAA,CAAU,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA,EAAG,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAC,CAAA;AAAA,IACvE;AAAA,EACF;AACA,EAAA,OAAQ,WAAA,CAAoB,KAAK,CAAA,IAAK,KAAA;AACxC;AAWA,SAAS,gBAAgB,MAAA,EAA6C;AACpE,EAAA,MAAM,GAAA,uBAAU,IAAA,EAAK;AACrB,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,MAAA;AACH,MAAA,OAAO,IAAI,kBAAA,EAAmB;AAAA,IAChC,KAAK,UAAA;AACH,MAAA,OAAO,IAAI,cAAA,EAAe;AAAA,IAC5B,KAAK,KAAA;AACH,MAAA,OAAO,IAAI,WAAA,EAAY;AAAA,IACzB;AACE,MAAA,OAAO,IAAI,kBAAA,EAAmB;AAAA;AAEpC;AAaO,SAAS,MAAA,CACd,KAAA,EACA,GAAA,EACA,OAAA,EACM;AACN,EAAA,MAAM,MAAA,GAAS,EAAE,GAAG,YAAA,EAAc,GAAG,OAAA,EAAQ;AAE7C,EAAA,MAAM,SAAS,EAAE,GAAG,cAAA,EAAgB,GAAG,OAAO,MAAA,EAAO;AACrD,EAAA,MAAM,QAAQ,EAAE,GAAG,aAAA,EAAe,GAAG,OAAO,KAAA,EAAM;AAElD,EAAA,MAAM,QAAQ,YAAA,CAAa,MAAA,CAAO,KAAK,CAAA,IAAK,YAAY,KAAK,CAAA;AAC7D,EAAA,MAAM,OAAO,MAAA,CAAO,QAAA,KAAa,QAAQ,KAAA,CAAM,KAAK,KAAK,EAAA,GAAK,EAAA;AAC9D,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,SAAA,GAAY,KAAA,CAAM,aAAY,GAAI,KAAA;AAE5D,EAAA,IAAI,KAAA,GAAQ,KAAA;AACZ,EAAA,IAAI,MAAA,CAAO,MAAM,KAAA,IAAS,IAAA;AAC1B,EAAA,IAAI,MAAA,CAAO,KAAK,KAAA,IAAS,GAAA;AACzB,EAAA,IAAI,OAAO,eAAA,EAAiB;AAC1B,IAAA,KAAA,IAAS,YAAA,CAAa,OAAO,eAAe,CAAA;AAAA,EAC9C;AAEA,EAAA,MAAM,QAAkB,EAAC;AAGzB,EAAA,IAAI,OAAO,aAAA,EAAe;AACxB,IAAA,MAAM,SAAA,GAAY,eAAA,CAAgB,MAAA,CAAO,eAAA,IAAmB,MAAM,CAAA;AAClE,IAAA,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,GAAG,SAAS,CAAA,EAAG,KAAK,CAAA,CAAE,CAAA;AAAA,EACzC;AAGA,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,EACjB;AAGA,EAAA,MAAM,SAAS,MAAA,CAAO,MAAA,GAClB,GAAG,KAAK,CAAA,CAAA,EAAI,OAAO,MAAM,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,GAChD,CAAA,EAAG,KAAK,CAAA,CAAA,EAAI,UAAU,IAAI,KAAK,CAAA,CAAA;AACnC,EAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AAGjB,EAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAEd,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA;AAG7B,EAAA,MAAM,gBACJ,KAAA,KAAU,OAAA,IAAW,KAAA,KAAU,OAAA,GAC3B,QAAQ,KAAA,GACR,KAAA,KAAU,MAAA,GACV,OAAA,CAAQ,OACR,KAAA,KAAU,OAAA,IAAW,UAAU,OAAA,GAC/B,OAAA,CAAQ,QACR,OAAA,CAAQ,GAAA;AAEd,EAAA,aAAA,CAAc,MAAM,CAAA;AACtB;;;ACnLO,SAAS,QAAQ,EAAA,EAA+C;AACrE,EAAA,MAAM,MAAyC,EAAC;AAChD,EAAA,IAAI,CAAC,IAAI,OAAO,GAAA;AAEhB,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,CAAA;AAC1B,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,QAAQ,CAAA,EAAA,EAAK;AACrC,IAAA,MAAM,CAAA,GAAI,MAAM,CAAC,CAAA;AACjB,IAAA,IAAI,CAAC,CAAA,EAAG;AAER,IAAA,MAAM,GAAA,GAAM,CAAA,CAAE,OAAA,CAAQ,GAAG,CAAA;AACzB,IAAA,IAAI,QAAQ,EAAA,EAAI;AACd,MAAA,GAAA,CAAI,kBAAA,CAAmB,CAAC,CAAC,CAAA,GAAI,EAAA;AAC7B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA;AAC5C,IAAA,MAAM,IAAI,kBAAA,CAAmB,CAAA,CAAE,KAAA,CAAM,GAAA,GAAM,CAAC,CAAC,CAAA;AAE7C,IAAA,MAAM,QAAA,GAAW,IAAI,CAAC,CAAA;AACtB,IAAA,IAAI,aAAa,MAAA,EAAW;AAC1B,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AAC3B,QAAA,QAAA,CAAS,KAAK,CAAC,CAAA;AAAA,MACjB,CAAA,MAAO;AACL,QAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAC,QAAA,EAAoB,CAAC,CAAA;AAAA,MACjC;AAAA,IACF,CAAA,MAAO;AACL,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,CAAA;AAAA,IACX;AAAA,EACF;AACA,EAAA,OAAO,GAAA;AACT;;;AC5BO,SAAS,eAAA,CAAgB,IAAA,EAAc,GAAA,EAAa,IAAA,GAAsB,EAAC,EAAW;AAC3F,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,IAAU,kBAAA;AAC9B,EAAA,IAAI,MAAM,CAAA,EAAG,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,GAAG,CAAC,CAAA,CAAA;AAChC,EAAA,IAAI,IAAA,CAAK,UAAU,IAAA,IAAQ,CAAC,OAAO,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,MAAM,CAAC,CAAA;AAC1D,IAAA,GAAA,IAAO,aAAa,IAAA,CAAK,KAAA,CAAM,OAAO,IAAA,CAAK,MAAM,CAAC,CAAC,CAAA,CAAA;AACrD,EAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,GAAA,IAAO,CAAA,SAAA,EAAY,KAAK,MAAM,CAAA,CAAA;AAC/C,EAAA,IAAI,IAAA,CAAK,IAAA,EAAM,GAAA,IAAO,CAAA,OAAA,EAAU,KAAK,IAAI,CAAA,CAAA;AACzC,EAAA,IAAI,KAAK,OAAA,EAAS,GAAA,IAAO,aAAa,IAAA,CAAK,OAAA,CAAQ,aAAa,CAAA,CAAA;AAChE,EAAA,IAAI,IAAA,CAAK,UAAU,GAAA,IAAO,CAAA,UAAA,CAAA;AAC1B,EAAA,IAAI,IAAA,CAAK,QAAQ,GAAA,IAAO,CAAA,QAAA,CAAA;AACxB,EAAA,IAAI,IAAA,CAAK,QAAA,EAAU,GAAA,IAAO,CAAA,WAAA,EAAc,KAAK,QAAQ,CAAA,CAAA;AACrD,EAAA,OAAO,GAAA;AACT;;;ACdO,SAAS,mBAAmB,MAAA,EAAoD;AACrF,EAAA,IAAI,CAAC,MAAA,EAAQ,OAAO,EAAC;AACrB,EAAA,OAAO,OAAO,KAAA,CAAM,GAAG,EAAE,MAAA,CAA+B,CAAC,KAAK,IAAA,KAAS;AACrE,IAAA,MAAM,CAAC,GAAG,GAAG,IAAI,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,KAAA,CAAM,GAAG,CAAA;AAC1C,IAAA,IAAI,CAAC,GAAG,OAAO,GAAA;AACf,IAAA,GAAA,CAAI,CAAC,CAAA,GAAI,kBAAA,CAAmB,IAAA,CAAK,IAAA,CAAK,GAAG,CAAC,CAAA;AAC1C,IAAA,OAAO,GAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACP;;;AC0BO,SAAS,oBAAoB,EAAA,EAAoB;AACtD,EAAA,IAAI,OAAO,EAAA,KAAO,UAAA,EAAY,OAAO,EAAA;AAErC,EAAA,OAAO,OAAO,GAAA,KAAuC;AACnD,IAAA,IAAI;AACF,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,IAAW,GAAA,CAAI,GAAA;AAC/B,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,QAAA,IAAY,GAAA,CAAI,GAAA;AAEhC,MAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAK;AAChB,QAAA,MAAM,IAAI,MAAM,yCAAyC,CAAA;AAAA,MAC3D;AAEA,MAAA,IAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACnB,QAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,QAAA,MAAM,MAAA,GAAU,EAAA,CAA0B,GAAA,EAAK,GAAA,EAAK,OAAO,GAAA,KAA0B;AACnF,UAAA,IAAI,UAAA,EAAY;AAChB,UAAA,UAAA,GAAa,IAAA;AAEb,UAAA,IAAI,KAAK,MAAM,GAAA;AAEf,UAAA,IAAI,IAAI,IAAA,EAAM;AACZ,YAAA,MAAM,IAAI,IAAA,EAAK;AAAA,UACjB;AAAA,QACF,CAAC,CAAA;AAED,QAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAAyB,IAAA,KAAS,UAAA,EAAY;AAClE,UAAA,MAAM,MAAA;AAAA,QACR;AAEA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACnB,QAAA,MAAM,MAAA,GAAU,EAAA,CAAuB,GAAA,EAAK,GAAG,CAAA;AAC/C,QAAA,IAAI,MAAA,IAAU,OAAQ,MAAA,CAAyB,IAAA,KAAS,UAAA,EAAY;AAClE,UAAA,MAAM,MAAA;AAAA,QACR;AACA,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,EAAA,CAAG,WAAW,CAAA,EAAG;AACnB,QAAA,MAAO,EAAA,CAA6B;AAAA,UAClC,GAAA;AAAA,UACA,GAAA;AAAA,UACA,MAAM,GAAA,CAAI;AAAA,SACX,CAAA;AACD,QAAA;AAAA,MACF;AAEA,MAAA,MAAO,GAAgB,GAAG,CAAA;AAAA,IAC5B,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF,CAAA;AACF;;;AChFO,IAAM,OAAN,MAAW;AAAA,EAAX,WAAA,GAAA;AACL,IAAA,IAAA,CAAA,QAAA,uBAAe,GAAA,EAAkB;AACjC,IAAA,IAAA,CAAA,QAAA,uBAAe,GAAA,EAAuB;AAAA,EAAA;AAGxC,CAAA;;;ACLO,IAAM,MAAA,GAAN,MAAM,OAAA,CAAO;AAAA,EAKlB,WAAA,CAAY,QAAQ,KAAA,EAAO;AAJ3B,IAAA,IAAA,CAAQ,IAAA,GAAO,IAAI,IAAA,EAAK;AAExB,IAAA,IAAA,CAAQ,cAAgC,EAAC;AAGvC,IAAA,IAAA,CAAK,KAAA,GAAQ,KAAA;AAAA,EACf;AAAA,EAEA,GAAA,CAAI,MAAA,EAAgBF,KAAAA,EAAAA,GAAiB,QAAA,EAAqB;AACxD,IAAA,MAAM,WAAWA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,OAAO,OAAO,CAAA;AAC/C,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA;AAEhB,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyB,MAAM,CAAA,CAAA,EAAIA,KAAI,CAAA,CAAE,CAAA;AACrD,MAAA,OAAA,CAAQ,GAAA,CAAI,4BAA4B,QAAQ,CAAA;AAAA,IAClD;AAEA,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,IAAI,KAAA;AAEJ,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,QAAA,MAAM,QAAA,GAAW,GAAA;AACjB,QAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,QAAQ,CAAA;AAEhD,QAAA,IAAI,CAAC,aAAA,EAAe;AAClB,UAAA,KAAA,GAAQ,IAAI,IAAA,EAAK;AACjB,UAAA,KAAA,CAAM,OAAA,GAAU,IAAA;AAChB,UAAA,KAAA,CAAM,SAAA,GAAY,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA;AAC7B,UAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,KAAK,CAAA;AAEjC,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,IAAI,CAAA,oCAAA,EAAuC,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAE,CAAA;AAAA,UACnE;AAAA,QACF,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,aAAA;AAER,UAAA,IAAI,KAAA,CAAM,SAAA,KAAc,GAAA,CAAI,KAAA,CAAM,CAAC,CAAA,EAAG;AACpC,YAAA,IAAI,KAAK,KAAA,EAAO;AACd,cAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,gDAAA,EAAmD,GAAG,CAAA,eAAA,EAAkB,KAAA,CAAM,SAAS,CAAA,UAAA,EAAa,GAAA,CAAI,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA;AAAA,YAClI;AAAA,UACF;AAAA,QACF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,oBAAA,GAAuB,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAElD,QAAA,IAAI,CAAC,oBAAA,EAAsB;AACzB,UAAA,KAAA,GAAQ,IAAI,IAAA,EAAK;AACjB,UAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAA,EAAK,KAAK,CAAA;AAE5B,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,sCAAA,EAAyC,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,UAC7D;AAAA,QACF,CAAA,MAAO;AACL,UAAA,KAAA,GAAQ,oBAAA;AAAA,QACV;AAAA,MACF;AAEA,MAAA,IAAA,GAAO,KAAA;AAAA,IACT;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,mCAAA,EAAsC,MAAM,CAAA,cAAA,CAAgB,CAAA;AAAA,IAC1E;AAEA,IAAA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,WAAA,IAAe,QAAQ,CAAA;AAAA,EAClD;AAAA,EAEA,IAAA,CAAK,QAAgBA,KAAAA,EAA2B;AAC9C,IAAA,MAAM,YAAYA,KAAAA,CAAK,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,GAAA;AACxC,IAAA,MAAM,QAAA,GAAW,SAAA,KAAc,GAAA,GAAM,EAAC,GAAI,UAAU,KAAA,CAAM,GAAG,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA;AAC7E,IAAA,IAAI,OAAO,IAAA,CAAK,IAAA;AAChB,IAAA,MAAM,SAAiC,EAAC;AAExC,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,uBAAA,EAA0B,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AAC3D,MAAA,OAAA,CAAQ,GAAA,CAAI,4BAA4B,QAAQ,CAAA;AAAA,IAClD;AAEA,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,QAAA,CAAS,QAAQ,CAAA,EAAA,EAAK;AACxC,MAAA,MAAM,GAAA,GAAM,SAAS,CAAC,CAAA;AACtB,MAAA,IAAI,CAAC,GAAA,EAAK;AAEV,MAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAEjC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,IAAA,GAAO,KAAA;AACP,QAAA,IAAI,KAAK,KAAA,EAAO;AACd,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yCAAA,EAA4C,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,QAChE;AAAA,MACF,CAAA,MAAO;AACL,QAAA,KAAA,GAAQ,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,GAAG,CAAA;AAC7B,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,IAAA,GAAO,KAAA;AACP,UAAA,IAAI,KAAK,SAAA,EAAW;AAClB,YAAA,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,GAAI,GAAA;AACzB,YAAA,IAAI,KAAK,KAAA,EAAO;AACd,cAAA,OAAA,CAAQ,IAAI,CAAA,wCAAA,EAA2C,IAAA,CAAK,SAAS,CAAA,KAAA,EAAQ,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,YACrF;AAAA,UACF,CAAA,MAAA,IAAW,KAAK,KAAA,EAAO;AACrB,YAAA,OAAA,CAAQ,KAAK,CAAA,oEAAA,CAAsE,CAAA;AAAA,UACrF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,IAAI,KAAK,KAAA,EAAO;AACd,YAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,mCAAA,EAAsC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AACzE,YAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,mCAAA,EAAsC,GAAG,CAAA,CAAA,CAAG,CAAA;AAC1D,YAAA,OAAA,CAAQ,KAAA,CAAM,sCAAsC,KAAA,CAAM,IAAA,CAAK,KAAK,QAAA,CAAS,IAAA,EAAM,CAAC,CAAA;AAAA,UACtF;AACA,UAAA,MAAM,IAAI,SAAA,CAAU,GAAA,EAAK,iBAAiB,CAAA;AAAA,QAC5C;AAAA,MACF;AAAA,IACF;AAEA,IAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,MAAA,CAAO,aAAa,CAAA;AACvD,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,IAAI,KAAK,KAAA,EAAO;AACd,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,CAAA,sCAAA,EAAyC,MAAA,CAAO,WAAA,EAAa,YAAY,SAAS,CAAA;AAAA,SACpF;AACA,QAAA,OAAA,CAAQ,KAAA;AAAA,UACN,CAAA,8CAAA,CAAA;AAAA,UACA,KAAA,CAAM,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,MAAM;AAAA,SACjC;AACA,QAAA,OAAA,CAAQ,KAAA,CAAM,oCAAoC,QAAQ,CAAA;AAAA,MAC5D;AACA,MAAA,MAAM,IAAI,SAAA,CAAU,GAAA,EAAK,iBAAiB,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,KAAK,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,kCAAA,EAAqC,MAAM,CAAA,CAAA,EAAI,SAAS,CAAA,CAAE,CAAA;AACtE,MAAA,OAAA,CAAQ,GAAA,CAAI,oCAAoC,MAAM,CAAA;AAAA,IACxD;AAEA,IAAA,OAAO,EAAE,UAAU,MAAA,EAAO;AAAA,EAC5B;AAAA,EAEO,UAAA,GAAsD;AAC3D,IAAA,MAAM,SAAkD,EAAC;AAEzD,IAAA,MAAM,QAAA,GAAW,CAAC,IAAA,EAAYA,KAAAA,KAAiB;AAC7C,MAAA,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,GAAO,CAAA,EAAG;AAC1B,QAAA,KAAA,MAAW,MAAA,IAAU,IAAA,CAAK,QAAA,CAAS,IAAA,EAAK,EAAG;AACzC,UAAA,MAAA,CAAO,KAAK,EAAE,MAAA,EAAQ,IAAA,EAAMA,KAAAA,IAAQ,KAAK,CAAA;AAAA,QAC3C;AAAA,MACF;AAEA,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,KAAK,CAAA,IAAK,KAAK,QAAA,EAAU;AAC5C,QAAA,MAAM,OAAA,GACJA,KAAAA,GAAO,GAAA,IAAO,OAAA,KAAY,GAAA,IAAO,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,KAAA,CAAM,SAAS,CAAA,CAAA,GAAK,OAAA,CAAA;AAC7E,QAAA,QAAA,CAAS,OAAO,OAAO,CAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,CAAA;AACtB,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAIO,GAAA,CAAI,YAAqC,MAAA,EAAuB;AACrE,IAAA,IAAI,OAAO,eAAe,UAAA,EAAY;AACpC,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,IAClC,CAAA,MAAA,IAAW,OAAO,UAAA,KAAe,QAAA,IAAY,kBAAkB,OAAA,EAAQ;AACrE,MAAA,MAAM,MAAA,GAAS,WAAW,QAAA,CAAS,GAAG,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,UAAA;AACpE,MAAA,MAAM,MAAA,GAAS,OAAO,UAAA,EAAW;AAEjC,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,WAAW,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,GAAA,GAAM,KAAK,KAAA,CAAM,IAAA,CAAA;AAC3D,QAAA,MAAM,EAAE,UAAS,GAAI,MAAA,CAAO,KAAK,KAAA,CAAM,MAAA,EAAQ,MAAM,IAAI,CAAA;AACzD,QAAA,IAAA,CAAK,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,GAAG,QAAQ,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF;AACF;AClLO,SAAS,MAAM,IAAA,EAAc;AAClC,EAAA,IAAI;AACF,IAAA,MAAM,iBAAA,GAAoBG,oBAAG,iBAAA,EAAkB;AAE/C,IAAA,IAAI,CAAC,iBAAA,IAAqB,MAAA,CAAO,KAAK,iBAAiB,CAAA,CAAE,WAAW,CAAA,EAAG;AACrE,MAAA,MAAA,CAAO,MAAA,EAAQ,CAAA,mCAAA,EAAsC,IAAI,CAAA,CAAE,CAAA;AAC3D,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,OAAA,GAAU,KAAA;AACd,IAAA,MAAA,CAAO,MAAA,CAAO,iBAAiB,CAAA,CAAE,OAAA,CAAQ,CAAC,SAAA,KAAc;AACtD,MAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,MAAA,SAAA,CAAU,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC3B,QAAA,MAAM,MAAA,GACH,KAAA,CAAM,MAAA,KAA+B,MAAA,IAAW,MAAM,MAAA,KAA+B,CAAA;AACxF,QAAA,IAAI,MAAA,IAAU,CAAC,KAAA,CAAM,QAAA,IAAY,MAAM,OAAA,EAAS;AAC9C,UAAA,OAAA,GAAU,IAAA;AACV,UAAA,MAAM,GAAA,GAAMC,yBAAA,CAAQ,SAAA,GAAY,QAAA,GAAW,QAAA;AAC3C,UAAA,MAAA,CAAO,MAAA,EAAQ,IAAI,GAAG,CAAA,uBAAA,EAA0B,MAAM,OAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAA;AAAA,QACzE;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAA,CAAO,MAAA,EAAQ,CAAA,mCAAA,EAAsC,IAAI,CAAA,CAAE,CAAA;AAAA,IAC7D;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,MAAA,EAAQ,CAAA,mCAAA,EAAsC,IAAI,CAAA,CAAE,CAAA;AAAA,EAC7D;AACF;;;ACPA,SAAS,aAAA,CAAc,IAAY,IAAA,EAAuB;AACxD,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAG;AACvB,IAAA,OAAO,EAAA,KAAO,IAAA;AAAA,EAChB;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,IAAI,CAAA,GAAI,IAAA,CAAK,MAAM,GAAG,CAAA;AAGpC,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,IAAA,EAAM;AACnB,IAAA,OAAO,KAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,EAAE,CAAA,KAAM,EAAA,GAAK,QAAA,CAAS,IAAI,CAAA,CAAA,GAAK,CAAA,CAAA;AAE5C,EAAA,MAAM,KAAA,GAAQ,EAAA,CAAG,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAA,CAAW,GAAA,IAAO,CAAA,IAAK,QAAA,CAAS,KAAK,GAAG,CAAC,CAAA;AAClF,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,GAAG,EAAE,MAAA,CAAO,CAAC,GAAA,EAAK,KAAA,KAAA,CAAW,GAAA,IAAO,CAAA,IAAK,QAAA,CAAS,KAAK,GAAG,CAAC,CAAA;AAExF,EAAA,OAAA,CAAQ,KAAA,GAAQ,WAAW,QAAA,GAAW,IAAA,CAAA;AACxC;AAKA,SAAS,gBAAA,CAAiB,IAAY,UAAA,EAA2D;AAC/F,EAAA,IAAI,UAAA,KAAe,MAAM,OAAO,IAAA;AAChC,EAAA,IAAI,UAAA,KAAe,OAAO,OAAO,KAAA;AAEjC,EAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,IAAA,OAAO,aAAA,CAAc,IAAI,UAAU,CAAA;AAAA,EACrC;AAEA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,UAAU,CAAA,EAAG;AAC7B,IAAA,OAAO,WAAW,IAAA,CAAK,CAAC,UAAU,aAAA,CAAc,EAAA,EAAI,KAAK,CAAC,CAAA;AAAA,EAC5D;AAEA,EAAA,OAAO,KAAA;AACT;AAkCO,SAAS,SAAA,CACd,GAAA,EACA,MAAA,GAA2B,EAAC,EACG;AAC/B,EAAA,MAAM,EAAE,UAAA,GAAa,KAAA,EAAO,QAAA,GAAW,mBAAkB,GAAI,MAAA;AAI7D,EAAA,IAAI,QAAA,GAAW,GAAA,CAAI,MAAA,EAAQ,aAAA,IAAiB,EAAA;AAC5C,EAAA,IAAI,QAAA,KAAa,KAAA,IAAS,QAAA,KAAa,kBAAA,EAAoB;AACzD,IAAA,QAAA,GAAW,WAAA;AAAA,EACb,CAAA,MAAA,IAAW,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA,EAAG;AACzC,IAAA,QAAA,GAAW,QAAA,CAAS,UAAU,CAAC,CAAA;AAAA,EACjC;AAGA,EAAA,IAAI,eAAe,KAAA,EAAO;AACxB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,QAAA;AAAA,MACJ,GAAA,EAAK,QAAA,GAAW,CAAC,QAAQ,IAAI;AAAC,KAChC;AAAA,EACF;AAGA,EAAA,MAAM,eAAA,GAAkB,GAAA,CAAI,OAAA,CAAQ,QAAA,CAAS,aAAa,CAAA;AAC1D,EAAA,MAAM,eAAe,KAAA,CAAM,OAAA,CAAQ,eAAe,CAAA,GAAI,eAAA,CAAgB,CAAC,CAAA,GAAI,eAAA;AAE3E,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,QAAA;AAAA,MACJ,GAAA,EAAK,QAAA,GAAW,CAAC,QAAQ,IAAI;AAAC,KAChC;AAAA,EACF;AAGA,EAAA,MAAM,MAAA,GAAS,YAAA,CACZ,KAAA,CAAM,GAAG,CAAA,CACT,GAAA,CAAI,CAAC,EAAA,KAAO,EAAA,CAAG,IAAA,EAAM,CAAA,CACrB,OAAO,OAAO,CAAA;AAGjB,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,MAAA,CAAO,KAAK,QAAQ,CAAA;AAAA,EACtB;AAGA,EAAA,IAAI,eAAe,IAAA,EAAM;AACvB,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAA,CAAO,CAAC,CAAA,IAAK,QAAA,IAAY,EAAA;AAAA,MAC7B,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAGA,EAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,UAAU,CAAA;AACvC,IAAA,MAAM,eAAe,IAAA,CAAK,GAAA,CAAI,GAAG,MAAA,CAAO,MAAA,GAAS,WAAW,CAAC,CAAA;AAC7D,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,MAAA,CAAO,YAAY,CAAA,IAAK,QAAA,IAAY,EAAA;AAAA,MACxC,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAIA,EAAA,KAAA,IAAS,IAAI,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG,CAAA,IAAK,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,SAAA,GAAY,OAAO,CAAC,CAAA;AAE1B,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,gBAAA,CAAiB,SAAA,EAAW,UAAU,CAAA,EAAG;AAC3C,MAAA;AAAA,IACF;AAGA,IAAA,OAAO;AAAA,MACL,EAAA,EAAI,SAAA;AAAA,MACJ,GAAA,EAAK;AAAA,KACP;AAAA,EACF;AAGA,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,MAAA,CAAO,CAAC,CAAA,IAAK,QAAA,IAAY,EAAA;AAAA,IAC7B,GAAA,EAAK;AAAA,GACP;AACF;AAKO,IAAM,mBAAA,GAAsB;AAAA;AAAA,EAEjC,OAAA,EAAS,CAAC,YAAA,EAAc,eAAA,EAAiB,gBAAgB,CAAA;AAAA;AAAA,EAGzD,QAAA,EAAU,CAAC,aAAA,EAAe,SAAS,CAAA;AAAA;AAAA,EAGnC,UAAA,EAAY,CAAC,gBAAA,EAAkB,WAAW,CAAA;AAAA;AAAA,EAG1C,UAAA,EAAY;AAAA,IACV,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA,EAGA,OAAA,EAAS,CAAC,eAAA,EAAiB,eAAe;AAC5C;;;AClNO,SAAS,KAAK,IAAA,EAAmB;AACtC,EAAA,MAAM,EAAE,MAAA,EAAQ,OAAA,EAAS,cAAA,EAAe,GAAI,IAAA;AAE5C,EAAA,OAAO,CAAC,KAAkB,IAAA,KAA8B;AACtD,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,6BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,MAAM,IAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,OAAO,IAAI,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC/C;AACA,IAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MACX,8BAAA;AAAA,MACA,MAAM,OAAA,CAAQ,cAAc,IAAI,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,GAAI;AAAA,KAC7D;AAEA,IAAA,IAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,KAAW,SAAA,EAAW;AACpC,MAAA,GAAA,CAAI,QAAA,CAAS,UAAU,GAAG,CAAA;AAC1B,MAAA,OAAO,GAAA,CAAI,SAAS,GAAA,EAAI;AAAA,IAC1B;AAEA,IAAA,OAAO,IAAA,EAAK;AAAA,EACd,CAAA;AACF;;;ACpBA,IAAM,KAAA,uBAAY,GAAA,EAAmB;AAE9B,SAAS,SAAA,CAAU,OAAe,GAAA,EAAa;AACpD,EAAA,OAAO,OAAO,KAAkB,IAAA,KAA8B;AAC5D,IAAA,MAAM,EAAA,GAAK,GAAA,CAAI,OAAA,CAAQ,MAAA,CAAO,aAAA;AAC9B,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,KAAA,GAAQ,MAAM,GAAA,CAAI,EAAG,KAAK,EAAE,KAAA,EAAO,CAAA,EAAG,EAAA,EAAI,GAAA,EAAI;AAEpD,IAAA,IAAI,GAAA,GAAM,KAAA,CAAM,EAAA,GAAK,GAAA,EAAK;AACxB,MAAA,KAAA,CAAM,KAAA,GAAQ,CAAA;AACd,MAAA,KAAA,CAAM,EAAA,GAAK,GAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,KAAA,CAAM,KAAA,EAAA;AAAA,IACR;AAEA,IAAA,KAAA,CAAM,GAAA,CAAI,IAAK,KAAK,CAAA;AAEpB,IAAA,IAAI,KAAA,CAAM,QAAQ,KAAA,EAAO;AACvB,MAAA,GAAA,CAAI,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,CAAE,KAAK,mBAAmB,CAAA;AACjD,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,IAAA,EAAK;AAAA,EACb,CAAA;AACF;ACxBO,SAAS,sBAAsB,OAAA,EAAuB;AAC3D,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,cAAc,EAAC;AAAA,IACf,UAAU,EAAC;AAAA,IACX,OAAA,GAAU,GAAA;AAAA,IACV,eAAA,GAAkB,KAAA;AAAA,IAClB,YAAA,GAAe,KAAA;AAAA,IACf,QAAA,GAAW,MAAA;AAAA,IACX,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AAEJ,EAAA,OAAO,OAAO,GAAA,EAAoB,GAAA,EAAqB,IAAA,KAAoB;AACzE,IAAA,IAAI;AAEF,MAAA,MAAM,SAAA,GAAY,IAAI,GAAA,CAAI,MAAM,CAAA;AAChC,MAAA,MAAM,OAAA,GAAU,UAAU,QAAA,KAAa,QAAA;AACvC,MAAA,MAAM,MAAA,GAAS,UAAUC,sBAAA,GAAQC,qBAAA;AAGjC,MAAA,IAAIN,KAAAA,GAAO,IAAI,IAAA,IAAQ,GAAA;AAGvB,MAAA,KAAA,MAAW,CAAC,OAAA,EAAS,WAAW,KAAK,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAA,EAAG;AAChE,QAAA,MAAM,KAAA,GAAQ,IAAI,MAAA,CAAO,OAAO,CAAA;AAChC,QAAAA,KAAAA,GAAOA,KAAAA,CAAK,OAAA,CAAQ,KAAA,EAAO,WAAW,CAAA;AAAA,MACxC;AAGA,MAAA,IAAI,IAAI,GAAA,IAAO,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AACpC,QAAA,MAAM,cAAc,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA;AACxC,QAAAA,KAAAA,IAAQ,IAAI,WAAW,CAAA,CAAA;AAAA,MACzB;AAEA,MAAA,IAAI,aAAa,MAAA,EAAQ;AACvB,QAAA,MAAA;AAAA,UACE,QAAA,KAAa,UAAU,MAAA,GAAS,MAAA;AAAA,UAChC,CAAA,QAAA,EAAW,IAAI,MAAM,CAAA,CAAA,EAAI,IAAI,GAAG,CAAA,QAAA,EAAM,MAAM,CAAA,EAAGA,KAAI,CAAA;AAAA,SACrD;AAAA,MACF;AAGA,MAAA,MAAM,YAAA,GAAyC;AAAA,QAC7C,GAAG,GAAA,CAAI,OAAA;AAAA,QACP,GAAG;AAAA,OACL;AAGA,MAAA,OAAO,aAAa,MAAM,CAAA;AAC1B,MAAA,OAAO,aAAa,YAAY,CAAA;AAChC,MAAA,OAAO,aAAa,mBAAmB,CAAA;AAEvC,MAAA,IAAI,YAAA,IAAgB,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM;AACpC,QAAA,YAAA,CAAa,MAAM,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,IAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,YAAA,CAAa,MAAM,IAAI,SAAA,CAAU,IAAA;AAAA,MACnC;AAGA,MAAA,IAAI,IAAI,EAAA,EAAI;AACV,QAAA,YAAA,CAAa,iBAAiB,IAAI,GAAA,CAAI,EAAA;AAAA,MACxC;AACA,MAAA,YAAA,CAAa,mBAAmB,CAAA,GAAI,GAAA,CAAI,QAAA,IAAY,MAAA;AACpD,MAAA,YAAA,CAAa,kBAAkB,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,IAAA,IAAQ,EAAA;AAGvD,MAAA,MAAM,eAAA,GAAuC;AAAA,QAC3C,UAAU,SAAA,CAAU,QAAA;AAAA,QACpB,IAAA,EAAM,SAAA,CAAU,IAAA,KAAS,OAAA,GAAU,GAAA,GAAM,EAAA,CAAA;AAAA,QACzC,IAAA,EAAAA,KAAAA;AAAA,QACA,QAAQ,GAAA,CAAI,MAAA;AAAA,QACZ,OAAA,EAAS,YAAA;AAAA,QACT;AAAA,OACF;AAEA,MAAA,MAAM,QAAA,GAAW,MAAA,CAAO,OAAA,CAAQ,eAAA,EAAiB,CAAC,QAAA,KAAa;AAE7D,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,UAAA,CAAW,QAAA,EAAU,KAAK,GAAG,CAAA;AAAA,QAC/B;AAGA,QAAA,GAAA,CAAI,UAAA,GAAa,SAAS,UAAA,IAAc,GAAA;AAGxC,QAAA,IAAI,SAAS,OAAA,EAAS;AACpB,UAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,QAAA,CAAS,OAAO,CAAA,EAAG;AAC3D,YAAA,IAAI,GAAA,CAAI,WAAA,EAAY,KAAM,mBAAA,IAAuB,KAAA,EAAO;AACtD,cAAA,GAAA,CAAI,SAAA,CAAU,KAAK,KAAK,CAAA;AAAA,YAC1B;AAAA,UACF;AAAA,QACF;AAGA,QAAA,QAAA,CAAS,KAAK,GAAU,CAAA;AAAA,MAC1B,CAAC,CAAA;AAGD,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,UAAA,CAAW,UAAU,GAAG,CAAA;AAAA,MAC1B;AAGA,MAAA,QAAA,CAAS,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAQ;AAC5B,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,CAAQ,GAAA,EAAK,KAAK,GAAG,CAAA;AAAA,QACvB,CAAA,MAAO;AACL,UAAA,MAAA,CAAO,OAAA,EAAS,CAAA,eAAA,EAAkB,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AAC/C,UAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AACpB,YAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,YAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AAChD,YAAA,GAAA,CAAI,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,cACrB,KAAA,EAAO,aAAA;AAAA,cACP,OAAA,EAAS;AAAA,aACV,CAAC,CAAA;AAAA,UACJ;AAAA,QACF;AAAA,MACF,CAAC,CAAA;AAED,MAAA,QAAA,CAAS,EAAA,CAAG,WAAW,MAAM;AAC3B,QAAA,QAAA,CAAS,OAAA,EAAQ;AACjB,QAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AACpB,UAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,UAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AAChD,UAAA,GAAA,CAAI,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,YACrB,KAAA,EAAO,iBAAA;AAAA,YACP,OAAA,EAAS;AAAA,WACV,CAAC,CAAA;AAAA,QACJ;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,CAAE,QAAA,CAAS,GAAA,CAAI,MAAA,IAAU,EAAE,CAAA,EAAG;AACnE,QAAA,MAAM,OAAA,GAAU,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,GAAW,IAAI,IAAA,GAAO,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAA;AACjF,QAAA,QAAA,CAAS,MAAM,OAAO,CAAA;AAAA,MACxB;AAEA,MAAA,QAAA,CAAS,GAAA,EAAI;AAAA,IACf,SAAS,GAAA,EAAU;AACjB,MAAA,MAAA,CAAO,OAAA,EAAS,CAAA,qBAAA,EAAwB,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AACrD,MAAA,IAAI,CAAC,IAAI,WAAA,EAAa;AACpB,QAAA,GAAA,CAAI,UAAA,GAAa,GAAA;AACjB,QAAA,GAAA,CAAI,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AAChD,QAAA,GAAA,CAAI,GAAA,CAAI,KAAK,SAAA,CAAU;AAAA,UACrB,KAAA,EAAO,uBAAA;AAAA,UACP,OAAA,EAAS;AAAA,SACV,CAAC,CAAA;AAAA,MACJ;AAAA,IACF;AAAA,EACF,CAAA;AACF;AAKO,SAAS,WAAA,CAAY,MAAA,EAAgB,OAAA,GAAiC,EAAC,EAAG;AAC/E,EAAA,OAAO,qBAAA,CAAsB,EAAE,MAAA,EAAQ,GAAG,SAAS,CAAA;AACrD;;;ACjKO,SAAS,wBAAwB,MAAA,EAAqC;AAC3E,EAAA,MAAM,SAAA,GAAY,MAAA,CAAO,OAAA,EAAS,OAAA,IAAW,IAAA;AAC7C,EAAA,MAAM,WAAA,GAAc,MAAA,CAAO,OAAA,EAAS,WAAA,IAAe,IAAA;AACnD,EAAA,MAAM,GAAA,GAAM,OAAO,WAAA,IAAe,aAAA;AAElC,EAAA,MAAM,KAAA,GAAQ,SAAA;AACd,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,MAAA,GAAiC;AAAA,IACrC,GAAA,EAAK,UAAA;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,GAAA,EAAK,UAAA;AAAA,IACL,MAAA,EAAQ,UAAA;AAAA,IACR,KAAA,EAAO,UAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,EAAA,GAAK,UAAU,IAAA,KAAgB;AACnC,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,GAAA;AACJ,IAAA,IAAI,IAAA;AAEJ,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,IAAK,OAAO,IAAA,CAAK,CAAC,CAAA,KAAM,QAAA,IAAY,IAAA,CAAK,CAAC,CAAA,KAAM,IAAA,EAAM;AACxE,MAAA,MAAM,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,MAAA,GAAA,GAAO,GAAA,CAAI,WAAW,GAAA,CAAI,GAAA;AAC1B,MAAA,GAAA,GAAO,GAAA,CAAI,YAAY,GAAA,CAAI,GAAA;AAC3B,MAAA,IAAA,GAAO,GAAA,CAAI,IAAA;AAAA,IACb,CAAA,MAAO;AACL,MAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AACZ,MAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AACZ,MAAA,IAAA,GAAO,KAAK,CAAC,CAAA;AAAA,IACf;AAEA,IAAA,IAAI,CAAC,GAAA,IAAO,CAAC,GAAA,EAAK;AAChB,MAAA,IAAI,OAAO,IAAA,KAAS,UAAA,EAAY,MAAM,IAAA,EAAK;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,IAAI,OAAO,IAAA,KAAS,UAAA,EAAY,MAAM,IAAA,EAAK;AAC3C,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAQ,KAAK,GAAA,EAAI;AACvB,IAAA,MAAM,YAAY,MAAA,CAAO,GAAA,CAAI,MAAA,IAAU,KAAK,EAAE,WAAA,EAAY;AAC1D,IAAA,MAAM,SAAA,GAAY,SAAA,CAAU,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AACzC,IAAA,MAAM,WAAA,GAAc,MAAA,CAAO,SAAS,CAAA,IAAK,MAAA,CAAO,OAAA;AAChD,IAAA,MAAM,MAAM,MAAA,CAAQ,GAAA,CAAY,WAAA,IAAe,GAAA,CAAI,OAAO,GAAG,CAAA;AAC7D,IAAA,MAAM,EAAA,GAAK,OAAQ,GAAA,CAAY,EAAA,IAAM,EAAE,CAAA,CAAE,OAAA,CAAQ,WAAW,EAAE,CAAA;AAC9D,IAAA,MAAM,IAAA,GAAA,qBAAW,IAAA,EAAK,EAAE,mBAAmB,OAAA,EAAS,EAAE,MAAA,EAAQ,KAAA,EAAO,CAAA;AAErE,IAAA,IAAI;AACF,MAAA,IAAI,QAAQ,aAAA,EAAe;AACzB,QAAA,MAAM,MAAA,GAAS,GAAG,GAAG,CAAA,IAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,KAAK,KAAK,WAAW,CAAA,EAAG,SAAS,CAAA,EAAG,KAAK,IAAI,IAAI,CAAA,EAAG,GAAG,CAAA,EAAG,KAAK,CAAA,CAAA;AAC/G,QAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAClB,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,IAAI;AACF,YAAA,IAAI,GAAA,CAAI,SAAS,MAAA,CAAO,IAAA,CAAK,IAAI,KAAK,CAAA,CAAE,SAAS,CAAA,EAAG;AAClD,cAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,gBAAA,EAAc,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,KAAK,CAAC,CAAA,CAAE,CAAA;AAAA,YACtE;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAAC;AACT,UAAA,IAAI;AACF,YAAA,MAAM,SAAU,GAAA,CAAY,MAAA;AAC5B,YAAA,IAAI,UAAU,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,CAAE,SAAS,CAAA,EAAG;AAC5C,cAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,iBAAA,EAAe,KAAK,IAAI,IAAA,CAAK,SAAA,CAAU,MAAM,CAAC,CAAA,CAAE,CAAA;AAAA,YACpE;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAAC;AACT,UAAA,IAAI;AACF,YAAA,IAAI,GAAA,CAAI,QAAQ,MAAA,CAAO,IAAA,CAAK,IAAI,IAAI,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,cAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,GAAG,CAAA,eAAA,EAAa,KAAK,CAAA,CAAA,EAAI,IAAA,CAAK,SAAA,CAAU,GAAA,CAAI,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,YACpE;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAAC;AAAA,QACX;AAAA,MACF,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,GAAG,GAAG,CAAA,IAAA,EAAI,KAAK,CAAA,CAAA,EAAI,IAAI,KAAK,WAAW,CAAA,EAAG,SAAS,CAAA,EAAG,KAAK,IAAI,GAAG,CAAA,CAAA,EAAI,GAAG,CAAA,UAAA,EAAQ,EAAE,GAAG,KAAK,CAAA;AAAA,SAC7F;AAAA,MACF;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAC;AAET,IAAA,IAAI;AACF,MAAA,IAAI,OAAQ,GAAA,CAAY,EAAA,KAAO,UAAA,EAAY;AACzC,QAAC,GAAA,CAAY,EAAA,CAAG,QAAA,EAAU,MAAM;AAC9B,UAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA;AAC9B,UAAA,MAAM,UAAA,GAAa,MAAA,CAAQ,GAAA,CAAY,UAAA,IAAc,CAAC,CAAA;AACtD,UAAA,MAAM,cACJ,UAAA,IAAc,GAAA,GAAM,UAAA,GAAa,UAAA,IAAc,MAAM,UAAA,GAAa,UAAA;AACpE,UAAA,MAAM,aAAa,CAAA,EAAG,WAAW,CAAA,EAAG,UAAU,GAAG,KAAK,CAAA,CAAA;AACtD,UAAA,MAAM,eAAe,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,QAAQ,MAAM,KAAK,CAAA,CAAA;AAClD,UAAA,MAAM,UAAU,EAAA,IAAM,GAAA;AACtB,UAAA,MAAM,IAAA,GAAO,CAAA,EAAG,GAAG,CAAA,MAAA,EAAI,KAAK,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,GAAG,CAAA,UAAA,EAAQ,OAAO,GAAG,KAAK,CAAA,CAAA;AACxF,UAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAAA,QAClB,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAA,CAAA,MAAQ;AAAA,IAAC;AAET,IAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC9B,MAAA,MAAM,IAAA,EAAK;AAAA,IACb;AAAA,EACF,CAAA;AAEA,EAAA,OAAO,EAAA;AACT;;;ACjFO,IAAM,cAAN,MAAkB;AAAA,EAWvB,WAAA,GAAc;AAPd,IAAA,IAAA,CAAQ,IAAA,GAAe,GAAA;AAIvB,IAAA,IAAA,CAAQ,cAAgC,EAAC;AACzC,IAAA,IAAA,CAAQ,UAA4D,EAAC;AAsFrE,IAAA,IAAA,CAAO,GAAA,GAAM,CAAC,CAAA,EAAA,GAAc,CAAA,KAAwB,KAAK,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,GAAG,CAAC,CAAA;AAChF,IAAA,IAAA,CAAO,IAAA,GAAO,CAAC,CAAA,EAAA,GAAc,CAAA,KAAwB,KAAK,QAAA,CAAS,MAAA,EAAQ,CAAA,EAAG,GAAG,CAAC,CAAA;AAClF,IAAA,IAAA,CAAO,GAAA,GAAM,CAAC,CAAA,EAAA,GAAc,CAAA,KAAwB,KAAK,QAAA,CAAS,KAAA,EAAO,CAAA,EAAG,GAAG,CAAC,CAAA;AAChF,IAAA,IAAA,CAAO,MAAA,GAAS,CAAC,CAAA,EAAA,GAAc,CAAA,KAAwB,KAAK,QAAA,CAAS,QAAA,EAAU,CAAA,EAAG,GAAG,CAAC,CAAA;AACtF,IAAA,IAAA,CAAO,KAAA,GAAQ,CAAC,CAAA,EAAA,GAAc,CAAA,KAAwB,KAAK,QAAA,CAAS,OAAA,EAAS,CAAA,EAAG,GAAG,CAAC,CAAA;AAvFlF,IAAA,MAAM,MAAA,GAAS,IAAI,YAAA,EAAa;AAChC,IAAA,IAAI;AACF,MAAA,MAAA,CAAO,QAAA,EAAS;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,MAAM,sDAA2C,CAAA;AACzD,MAAA,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,OAAO,CAAA;AACvC,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AACA,IAAA,IAAA,CAAK,IAAA,GAAO,OAAO,MAAA,EAAO;AAC1B,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,MAAA,CAAO,IAAA,CAAK,KAAK,KAAK,CAAA;AACxC,IAAA,IAAA,CAAK,WAAA,GAAc,KAAK,IAAA,EAAK;AAC7B,IAAA,IAAA,CAAK,kBAAA,EAAmB;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKQ,kBAAA,GAAqB;AAC3B,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA;AAAA,MACV,KAAA;AAAA,MACA,cAAA;AAAA,MACA,mBAAA,CAAoB,CAAC,GAAA,KAAa;AAChC,QAAA,GAAA,CAAI,GAAA,CAAI,MAAA,CAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAAA,MAC3B,CAAC;AAAA,KACH;AAAA,EACF;AAAA,EAEO,SAAA,GAAY;AACjB,IAAA,OAAO,IAAA,CAAK,IAAA;AAAA,EACd;AAAA,EAEA,MAAc,IAAA,GAAO;AACnB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,IAAA,IAAQ,GAAA;AAEtC,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,OAAA,IAAWI,0BAAQ,SAAA,EAAW;AAClD,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAID,mBAAAA,CAAG,IAAA,GAAO,MAAA,EAAQ,CAAA,EAAA,EAAKC,yBAAAA,CAAQ,IAAA,EAAK;AACxD,MAAAA,0BAAQ,EAAA,CAAG,MAAA,EAAQ,MAAMA,yBAAAA,CAAQ,MAAM,CAAA;AACvC,MAAA;AAAA,IACF;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,IAAA,EAAM,OAAA,EAAS;AACpC,MAAA,IAAA,CAAK;AAAA,QACH,MAAA,EAAQ,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,QAC/B,OAAA,EAAS,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAA;AAAA,QAChC,cAAA,EAAgB,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,IAAA,CAAK;AAAA,OACxC,CAAA;AAED,MAAA,MAAA,CAAO,QAAQ,qBAAqB,CAAA;AAAA,IACtC;AAEA,IAAA,IAAI,IAAA,CAAK,IAAA,CAAK,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS;AACzC,MAAA,SAAA,CAAU,IAAA,CAAK,KAAK,OAAA,CAAQ,SAAA,CAAU,OAAO,IAAA,CAAK,IAAA,CAAK,OAAA,CAAQ,SAAA,CAAU,SAAS,CAAA;AAElF,MAAA,MAAA,CAAO,QAAQ,2BAA2B,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAA,CAAK,MAAA,GAASE,sBAAK,YAAA,EAAa;AAChC,IAAA,IAAA,CAAK,OAAO,EAAA,CAAG,SAAA,EAAW,KAAK,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,EAClD;AAAA,EAKK,GAAA,CAAI,YAAqC,MAAA,EAAwC;AACpF,IAAA,IAAI,OAAO,eAAe,UAAA,EAAY;AACpC,MAAA,IAAA,CAAK,WAAA,CAAY,KAAK,UAAU,CAAA;AAAA,IAClC,CAAA,MAAA,IAAW,OAAO,UAAA,KAAe,QAAA,IAAY,kBAAkB,MAAA,EAAQ;AACrE,MAAA,MAAM,MAAA,GAAS,WAAW,QAAA,CAAS,GAAG,IAAI,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,UAAA;AACpE,MAAA,MAAM,MAAA,GAAS,OAAO,UAAA,EAAW;AAEjC,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,QAAA,MAAM,WAAW,MAAA,IAAU,KAAA,CAAM,IAAA,KAAS,GAAA,GAAM,KAAK,KAAA,CAAM,IAAA,CAAA;AAC3D,QAAA,MAAM,EAAE,UAAS,GAAI,MAAA,CAAO,KAAK,KAAA,CAAM,MAAA,EAAQ,MAAM,IAAI,CAAA;AACzD,QAAA,IAAA,CAAK,OAAO,GAAA,CAAI,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,GAAG,QAAQ,CAAA;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AAAA,EAEO,QAAA,CAAS,MAAA,EAAgBN,KAAAA,EAAAA,GAAiB,QAAA,EAA4B;AAC3E,IAAA,MAAM,OAAA,GAAU,QAAA,CAAS,GAAA,CAAI,mBAAmB,CAAA;AAChD,IAAA,IAAA,CAAK,MAAA,CAAO,GAAA,CAAI,MAAA,EAAQA,KAAAA,EAAM,GAAI,OAAgC,CAAA;AAAA,EACpE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAwBO,KAAA,CAAMA,KAAAA,EAAc,MAAA,EAAgB,OAAA,GAAiC,EAAC,EAAG;AAC9E,IAAA,MAAM,eAAA,GAAkB,WAAA,CAAY,MAAA,EAAQ,OAAO,CAAA;AAGnD,IAAA,IAAA,CAAK,QAAQ,IAAA,CAAK,EAAE,MAAAA,KAAAA,EAAM,OAAA,EAAS,iBAAiB,CAAA;AAAA,EACtD;AAAA,EAEO,SAAA,GAAY;AACjB,IAAA,OAAO,IAAA,CAAK,OAAO,UAAA,EAAW;AAAA,EAChC;AAAA,EAEA,MAAa,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,IAAA,EAAM;AACpC,IAAA,MAAM,IAAA,CAAK,WAAA;AAEX,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,MAAA,CAAO,SAAS,wBAAwB,CAAA;AACxC,MAAA;AAAA,IACF;AAEA,IAAA,IAAA,CAAK,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,KAAA,KAAiC;AACxD,MAAA,IAAI,KAAA,CAAM,SAAS,YAAA,EAAc;AAC/B,QAAA,MAAA,CAAO,OAAA,EAAS,CAAA,YAAA,EAAU,IAAI,CAAA,mDAAA,CAAqD,CAAA;AAAA,MACrF,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,SAAS,0BAAA,IAA8B,KAAA,EAAO,OAAA,IAAW,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,MAChF;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB,CAAC,CAAA;AAED,IAAA,MAAM,GAAA,GAAMI,yBAAAA,CAAQ,SAAA,GAAY,QAAA,GAAW,QAAA;AAC3C,IAAA,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,MAAM;AAC7B,MAAA,MAAA,CAAO,MAAA,EAAQ,CAAA,CAAA,EAAI,GAAG,CAAA,gCAAA,EAAmC,IAAI,CAAA,CAAE,CAAA;AAC/D,MAAA,IAAI,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,MAAA,QAAc,IAAI,CAAA;AAExC,MAAA,MAAM,MAAA,GAAS,KAAK,SAAA,EAAU;AAC9B,MAAA,IAAI,MAAA,CAAO,SAAS,CAAA,EAAG;AACrB,QAAA,MAAA,CAAO,MAAA,EAAQ;AAAA,6BAAA,EAA2B,MAAA,CAAO,MAAM,CAAA,EAAA,CAAI,CAAA;AAC3D,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAC,CAAA,KAAM;AACpB,UAAA,MAAA,CAAO,MAAA,EAAQ,CAAA,GAAA,EAAM,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,CAAC,CAAC,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAE,CAAA;AAAA,QACrD,CAAC,CAAA;AAAA,MACH;AAAA,IACF,CAAC,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,MAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,MAAa,MAAM,OAAA,EAAqC;AACtD,IAAA,MAAM,IAAA,CAAK,WAAA;AAEX,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAC/B,IAAA,MAAM,UAAU,GAAA,CAAI,QAAA;AAEpB,IAAA,MAAM,YAAoC,EAAC;AAC3C,IAAA,IAAI,IAAI,MAAA,EAAQ;AACd,MAAA,MAAM,WAAW,OAAA,CAAQ,GAAA,CAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,CAAA;AAC5C,MAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,QAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,QAAA,SAAA,CAAU,CAAC,IAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,GAAM,CAAA;AAAA,MAClD;AAAA,IACF;AAEA,IAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAA,IAAK,EAAA;AACtD,IAAA,MAAM,OAAA,GAAU,mBAAmB,YAAY,CAAA;AAE/C,IAAA,IAAI,OAAY,EAAC;AACjB,IAAA,IAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,CAAE,SAAS,OAAA,CAAQ,MAAA,CAAO,WAAA,EAAa,CAAA,EAAG;AACnE,MAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,EAAA;AAC3D,MAAA,IAAI;AACF,QAAA,IAAI,WAAA,CAAY,QAAA,CAAS,kBAAkB,CAAA,EAAG;AAC5C,UAAA,IAAA,GAAO,MAAM,QAAQ,IAAA,EAAK;AAAA,QAC5B,CAAA,MAAA,IAAW,WAAA,CAAY,QAAA,CAAS,mCAAmC,CAAA,EAAG;AACpE,UAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,IAAA,EAAK;AAChC,UAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAA,IAAQ,EAAE,CAAA;AACjC,UAAA,MAAM,IAA4B,EAAC;AACnC,UAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,YAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,YAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAI,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,GAAM,CAAA,IAAgB,EAAA;AAAA,UAC1D;AACA,UAAA,IAAA,GAAO,CAAA;AAAA,QACT,CAAA,MAAO;AACL,UAAA,IAAA,GAAO,MAAM,QAAQ,IAAA,EAAK;AAAA,QAC5B;AAAA,MACF,CAAA,CAAA,MAAQ;AACN,QAAA,IAAA,GAAO,EAAC;AAAA,MACV;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,GAAG,EAAE,CAAA;AAEzC,IAAA,MAAM,aAAgD,EAAC;AACvD,IAAA,OAAA,CAAQ,OAAA,CAAQ,OAAA,CAAQ,CAAC,KAAA,EAAO,GAAA,KAAQ;AACtC,MAAA,UAAA,CAAW,GAAG,CAAA,GAAI,KAAA;AAAA,IACpB,CAAC,CAAA;AAED,IAAA,MAAM,MAAA,GAAiC;AAAA,MACrC,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,GAAA,EAAK,GAAA,CAAI,QAAA,GAAW,GAAA,CAAI,MAAA;AAAA,MACxB,WAAA,EAAa,GAAA,CAAI,QAAA,GAAW,GAAA,CAAI,MAAA;AAAA,MAChC,MAAM,OAAA,IAAW,GAAA;AAAA,MACjB,QAAA;AAAA,MACA,MAAA,EAAQ,IAAI,QAAA,KAAa,QAAA;AAAA,MACzB,UAAU,GAAA,CAAI,QAAA;AAAA,MACd,UAAA,EAAY,GAAA,CAAI,QAAA,GAAW,GAAA,CAAI,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,EAAC;AAAA,MACnE,KAAA,EAAO,SAAA;AAAA,MACP,OAAA;AAAA,MACA,QAAQ,EAAC;AAAA,MACT,IAAA;AAAA,MACA,OAAA,EAAS,UAAA;AAAA,MACT,GAAA,EAAK,CAAC,IAAA,KAAiB,OAAA,CAAQ,QAAQ,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,CAAA,IAAK,MAAA;AAAA,MAClE,MAAA,EAAQ,CAAC,IAAA,KAAiB,OAAA,CAAQ,QAAQ,GAAA,CAAI,IAAA,CAAK,WAAA,EAAa,CAAA,IAAK,MAAA;AAAA,MACrE,MAAA,EAAQ;AAAA,QACN,eAAe,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,WAAW,KAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,iBAAiB,GAAG,KAAA,CAAM,GAAG,EAAE,CAAC,CAAA,EAAG,MAAK,IAAK;AAAA;AACtH,KACF;AAGA,IAAA,MAAM,EAAE,EAAA,EAAI,GAAA,EAAI,GAAI,UAAU,MAAA,EAAe;AAAA,MAC3C,UAAA,EAAY,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,UAAA;AAAA,MAC9B,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ;AAAA,KAC7B,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,GAAK,EAAA;AACZ,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AAIb,IAAA,IAAI,UAAA,GAAa,GAAA;AACjB,IAAA,MAAM,eAAA,GAAkB,IAAI,OAAA,EAAQ;AACpC,IAAA,IAAI,YAAA,GAAoB,IAAA;AAExB,IAAA,MAAM,MAAA,GAAkC;AAAA,MACtC,UAAA;AAAA,MACA,MAAA,EAAQ,CAAC,IAAA,KAAiB;AACxB,QAAA,UAAA,GAAa,IAAA;AACb,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,GAAA,EAAK,CAAC,KAAA,EAAe,KAAA,KAAsC;AACzD,QAAA,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,MAAA,EAAQ,CAAC,KAAA,EAAe,KAAA,KAAsC;AAC5D,QAAA,eAAA,CAAgB,GAAA,CAAI,KAAA,EAAO,MAAA,CAAO,KAAK,CAAC,CAAA;AACxC,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,KAAK,CAAC,KAAA,KAAkB,eAAA,CAAgB,GAAA,CAAI,KAAK,CAAA,IAAK,MAAA;AAAA,MACtD,IAAA,EAAM,CAAC,CAAA,KAAc;AACnB,QAAA,eAAA,CAAgB,GAAA,CAAI,gBAAgB,CAAC,CAAA;AACrC,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,WAAA,EAAa,CAAC,CAAA,KAAc;AAC1B,QAAA,eAAA,CAAgB,GAAA,CAAI,gBAAgB,CAAC,CAAA;AACrC,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,QAAA,EAAU,CAAC,CAAA,KAAc;AACvB,QAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAC,CAAA;AACjC,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,QAAA,GAAW,CAAC,CAAA,EAAoB,CAAA,KAAe;AAC7C,QAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,UAAA,UAAA,GAAa,CAAA;AACb,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAE,CAAA;AAAA,QACpC,CAAA,MAAO;AACL,UAAA,UAAA,GAAa,GAAA;AACb,UAAA,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA,QACnC;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA,CAAA;AAAA,MACA,QAAQ,CAAC,IAAA,EAAc,GAAA,EAAa,IAAA,GAAsB,EAAC,KAAM;AAC/D,QAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,IAAA,EAAM,GAAA,EAAK,IAAI,CAAA;AACzC,QAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,GAAA,CAAI,YAAY,CAAA;AAC7C,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,eAAA,CAAgB,MAAA,CAAO,cAAc,CAAC,CAAA;AAAA,QACxC,CAAA,MAAO;AACL,UAAA,eAAA,CAAgB,GAAA,CAAI,cAAc,CAAC,CAAA;AAAA,QACrC;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,WAAA,EAAa,CAAC,IAAA,EAAc,IAAA,GAAsB,EAAC,KAAM;AACvD,QAAA,OAAO,MAAA,CAAO,MAAA,CAAQ,IAAA,EAAM,EAAA,EAAI,EAAE,GAAG,IAAA,EAAM,OAAA,kBAAS,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,MAAA,EAAQ,GAAG,CAAA;AAAA,MAC9E,CAAA;AAAA,MACA,IAAA,EAAM,CAAC,CAAA,KAAW;AAChB,QAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM;AACjC,UAAA,YAAA,GAAe,EAAA;AAAA,QACjB,CAAA,MAAA,IAAW,OAAO,CAAA,KAAM,QAAA,EAAU;AAChC,UAAA,eAAA,CAAgB,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AACtD,UAAA,YAAA,GAAe,IAAA,CAAK,UAAU,CAAC,CAAA;AAAA,QACjC,CAAA,MAAO;AACL,UAAA,YAAA,GAAe,OAAO,CAAC,CAAA;AAAA,QACzB;AACA,QAAA,OAAO,MAAA;AAAA,MACT,CAAA;AAAA,MACA,IAAA,EAAM,CAAC,CAAA,KAAW;AAChB,QAAA,eAAA,CAAgB,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AACtD,QAAA,YAAA,GAAe,IAAA,CAAK,UAAU,CAAC,CAAA;AAC/B,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,KACF;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAa;AACjC,MAAA,UAAA,GAAa,GAAA,YAAe,SAAA,GAAY,GAAA,CAAI,MAAA,GAAS,GAAA;AACrD,MAAA,eAAA,CAAgB,GAAA,CAAI,gBAAgB,kBAAkB,CAAA;AACtD,MAAA,YAAA,GAAe,IAAA,CAAK,SAAA;AAAA,QAClB,GAAA,YAAe,SAAA,GACX,GAAA,CAAI,OAAA,IAAW,EAAE,KAAA,EAAO,GAAA,CAAI,OAAA,IAAW,uBAAA,EAAwB,GAC/D,EAAE,KAAA,EAAO,GAAA,EAAK,WAAW,uBAAA;AAAwB,OACvD;AAAA,IACF,CAAA;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,IAAA,CAAK,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,EAAQ,OAAA,IAAW,GAAG,CAAA;AAC5E,MAAA,MAAA,CAAO,MAAA,GAAS,UAAU,EAAC;AAE3B,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,GAAG,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,mBAAmB,CAAA;AAAA,QAC3C,GAAG,QAAA,CAAS,GAAA,CAAI,mBAAmB;AAAA,OACrC;AAEA,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,MAAM,IAAA,GAAO,OAAO,GAAA,KAAc;AAChC,QAAA,IAAI,GAAA,EAAK,OAAO,YAAA,CAAa,GAAG,CAAA;AAChC,QAAA,IAAI,GAAA,IAAO,MAAM,MAAA,EAAQ;AACzB,QAAA,MAAM,EAAA,GAAK,MAAM,GAAA,EAAK,CAAA;AACtB,QAAA,IAAI,CAAC,EAAA,EAAI;AACT,QAAA,IAAI;AACF,UAAA,MAAM,EAAA,CAAG;AAAA,YACP,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,GAAA,EAAK,MAAA;AAAA,YACL,GAAA,EAAK,MAAA;AAAA,YACL;AAAA,WACD,CAAA;AAAA,QACH,SAAS,CAAA,EAAG;AACV,UAAA,OAAO,aAAa,CAAC,CAAA;AAAA,QACvB;AAAA,MACF,CAAA;AAEA,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,SAAS,GAAA,EAAK;AACZ,MAAA,YAAA,CAAa,GAAG,CAAA;AAAA,IAClB;AAEA,IAAA,OAAO,IAAI,SAAS,YAAA,EAAc;AAAA,MAChC,MAAA,EAAQ,UAAA;AAAA,MACR,OAAA,EAAS;AAAA,KACV,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,MAAA,CAAO,MAAA,EAAuB,MAAA,EAAwB;AAClE,IAAA,MAAA,CAAO,WAAA,GAAc,OAAO,GAAA,IAAO,EAAA;AACnC,IAAA,MAAA,CAAO,QAAA,GAAW,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,QAAQ,OAAA,GAAU,MAAA;AACtD,IAAA,MAAA,CAAO,MAAA,GAAS,OAAO,QAAA,KAAa,OAAA;AACpC,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,MAAM,CAAA,IAAK,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA;AACxE,IAAA,MAAA,CAAO,UAAA,GAAa,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,EAAC;AAGjF,IAAA,MAAM,EAAE,EAAA,EAAI,GAAA,EAAI,GAAI,UAAU,MAAA,EAAQ;AAAA,MACpC,UAAA,EAAY,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ,UAAA;AAAA,MAC9B,QAAA,EAAU,IAAA,CAAK,IAAA,CAAK,MAAA,EAAQ;AAAA,KAC7B,CAAA;AACD,IAAA,MAAA,CAAO,EAAA,GAAK,EAAA;AACZ,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AAEb,IAAA,MAAA,CAAO,GAAA,GAAM,MAAA,CAAO,MAAA,GAAS,CAAC,IAAA,KAAiB;AAC7C,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,IAAA,CAAK,aAAa,CAAA;AAC3C,MAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,EAAE,CAAC,CAAA;AAChC,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,CAAA,GAAI,MAAA;AAAA,IACrC,CAAA;AAEA,IAAA,MAAA,CAAO,MAAA,GAAS,CAAC,IAAA,KAAiB;AAChC,MAAA,MAAA,CAAO,UAAA,GAAa,IAAA;AACpB,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,GAAA,GAAM,MAAA,CAAO,MAAA,GAAS,CAAC,OAAe,KAAA,KAAsC;AACjF,MAAA,MAAA,CAAO,SAAA,CAAU,OAAO,KAAK,CAAA;AAC7B,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,GAAA,GAAM,CAAC,KAAA,KAAkB;AAC9B,MAAA,MAAM,CAAA,GAAI,MAAA,CAAO,SAAA,CAAU,KAAK,CAAA;AAChC,MAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,EAAE,CAAC,CAAA;AAChC,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,GAAW,MAAA,CAAO,CAAC,CAAA,GAAK,CAAA;AAAA,IAC9C,CAAA;AAEA,IAAA,MAAA,CAAO,IAAA,GAAO,MAAA,CAAO,WAAA,GAAc,CAAC,CAAA,KAAc;AAChD,MAAA,MAAA,CAAO,SAAA,CAAU,gBAAgB,CAAC,CAAA;AAClC,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,QAAA,GAAW,CAAC,CAAA,KAAc;AAC/B,MAAA,MAAA,CAAO,SAAA,CAAU,YAAY,CAAC,CAAA;AAC9B,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,QAAA,IAAY,CAAC,CAAA,EAAoB,CAAA,KAAe;AACrD,MAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,QAAA,MAAA,CAAO,UAAA,GAAa,CAAA;AACpB,QAAA,MAAA,CAAO,SAAA,CAAU,YAAY,CAAE,CAAA;AAAA,MACjC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,UAAA,GAAa,GAAA;AACpB,QAAA,MAAA,CAAO,SAAA,CAAU,YAAY,CAAC,CAAA;AAAA,MAChC;AACA,MAAA,MAAA,CAAO,GAAA,EAAI;AACX,MAAA,OAAO,MAAA;AAAA,IACT,CAAA,CAAA;AAEA,IAAA,MAAA,CAAO,SAAS,CAAC,IAAA,EAAc,GAAA,EAAa,IAAA,GAAsB,EAAC,KAAM;AACvE,MAAA,MAAM,CAAA,GAAI,eAAA,CAAgB,IAAA,EAAM,GAAA,EAAK,IAAI,CAAA;AACzC,MAAA,MAAM,IAAA,GAAO,MAAA,CAAO,SAAA,CAAU,YAAY,CAAA;AAC1C,MAAA,IAAI,IAAA,EAAM;AACR,QAAA,MAAM,IAAA,GAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,GAAI,CAAC,MAAA,CAAO,IAAI,GAAG,CAAC,CAAA;AACpE,QAAA,MAAA,CAAO,SAAA,CAAU,cAAc,IAAI,CAAA;AAAA,MACrC,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,SAAA,CAAU,cAAc,CAAC,CAAA;AAAA,MAClC;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,WAAA,GAAc,CAAC,IAAA,EAAc,IAAA,GAAsB,EAAC,KAAM;AAC/D,MAAA,OAAO,MAAA,CAAO,MAAA,CAAO,IAAA,EAAM,EAAA,EAAI,EAAE,GAAG,IAAA,EAAM,OAAA,kBAAS,IAAI,IAAA,CAAK,CAAC,CAAA,EAAG,MAAA,EAAQ,GAAG,CAAA;AAAA,IAC7E,CAAA;AAEA,IAAA,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA,KAAW;AACxB,MAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM;AACjC,QAAA,MAAA,CAAO,GAAA,EAAI;AACX,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,QAAA,MAAA,CAAO,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AACnD,QAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAAA,MAC9B,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,MACtB;AACA,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAA,CAAO,IAAA,GAAO,CAAC,CAAA,KAAW;AACxB,MAAA,MAAA,CAAO,SAAA,CAAU,gBAAgB,kBAAkB,CAAA;AACnD,MAAA,MAAA,CAAO,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,CAAC,CAAC,CAAA;AAC5B,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAEA,IAAA,MAAM,CAAC,SAAS,EAAE,CAAA,GAAA,CAAK,OAAO,GAAA,IAAO,EAAA,EAAI,MAAM,GAAG,CAAA;AAClD,IAAA,MAAA,CAAO,OAAO,OAAA,IAAW,GAAA;AACzB,IAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,EAAA,IAAM,EAAE,CAAA;AACjC,IAAA,MAAM,YAAoC,EAAC;AAC3C,IAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,MAAA,MAAM,CAAA,GAAI,SAAS,CAAC,CAAA;AACpB,MAAA,SAAA,CAAU,CAAC,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAI,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,GAAM,CAAA,IAAgB,EAAA;AAAA,IAClE;AACA,IAAA,MAAA,CAAO,KAAA,GAAQ,SAAA;AAEf,IAAA,MAAA,CAAO,UAAU,kBAAA,CAAoB,MAAA,CAAO,OAAA,CAAQ,QAAQ,KAAgB,EAAE,CAAA;AAC9E,IAAA,MAAA,CAAO,SAAS,EAAC;AAEjB,IAAA,MAAA,CAAO,OAAO,EAAC;AACf,IAAA,IAAI,CAAC,MAAA,EAAQ,KAAA,EAAO,OAAO,CAAA,CAAE,QAAA,CAAA,CAAU,MAAA,CAAO,MAAA,IAAU,EAAA,EAAI,WAAA,EAAa,CAAA,EAAG;AAC1E,MAAA,MAAM,IAAI,OAAA,CAAc,CAAC,OAAA,KAAY;AACnC,QAAA,IAAI,GAAA,GAAM,EAAA;AACV,QAAA,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,KAAA,KAA2B;AAC5C,UAAA,GAAA,IAAO,KAAA;AAAA,QACT,CAAC,CAAA;AACD,QAAA,MAAA,CAAO,EAAA,CAAG,OAAO,MAAM;AACrB,UAAA,IAAI;AACF,YAAA,MAAM,KAAK,MAAA,CAAO,MAAA,CAAO,OAAA,CAAQ,cAAc,KAAK,EAAE,CAAA;AACtD,YAAA,IAAI,EAAA,CAAG,QAAA,CAAS,kBAAkB,CAAA,EAAG;AACnC,cAAA,MAAA,CAAO,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,GAAA,IAAO,IAAI,CAAA;AAAA,YACtC,CAAA,MAAO;AACL,cAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,GAAA,IAAO,EAAE,CAAA;AAChC,cAAA,MAAM,IAA4B,EAAC;AACnC,cAAA,KAAA,MAAW,KAAK,MAAA,EAAQ;AACtB,gBAAA,MAAM,CAAA,GAAI,OAAO,CAAC,CAAA;AAClB,gBAAA,CAAA,CAAE,CAAC,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAI,CAAA,CAAE,CAAC,CAAA,IAAK,EAAA,GAAM,CAAA,IAAgB,EAAA;AAAA,cAC1D;AACA,cAAA,MAAA,CAAO,IAAA,GAAO,CAAA;AAAA,YAChB;AAAA,UACF,CAAA,CAAA,MAAQ;AACN,YAAA,MAAA,CAAO,OAAO,EAAC;AAAA,UACjB;AACA,UAAA,OAAA,EAAQ;AAAA,QACV,CAAC,CAAA;AACD,QAAA,MAAA,CAAO,EAAA,CAAG,OAAA,EAAS,CAAC,GAAA,KAAe;AACjC,UAAA,MAAA,CAAO,OAAA,EAAS,oBAAA,GAAuB,GAAA,CAAI,OAAO,CAAA;AAClD,UAAA,OAAA,EAAQ;AAAA,QACV,CAAC,CAAA;AAAA,MACH,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,GAAA,KAAa;AACjC,MAAA,MAAA,CAAO,OAAA,EAAS,GAAA,EAAK,OAAA,IAAW,MAAA,CAAO,GAAG,CAAC,CAAA;AAC3C,MAAA,MAAA,CACG,OAAO,GAAA,YAAe,SAAA,GAAY,GAAA,CAAI,MAAA,GAAS,GAAG,CAAA,CAClD,IAAA;AAAA,QACC,GAAA,YAAe,SAAA,GACX,GAAA,CAAI,OAAA,IAAW,EAAE,KAAA,EAAO,GAAA,CAAI,OAAA,IAAW,uBAAA,EAAwB,GAC/D,EAAE,KAAA,EAAO,GAAA,EAAK,WAAW,uBAAA;AAAwB,OACvD;AAAA,IACJ,CAAA;AAEA,IAAA,IAAI;AACF,MAAA,KAAA,MAAW,KAAA,IAAS,KAAK,OAAA,EAAS;AAChC,QAAA,IAAI,MAAA,CAAO,IAAA,CAAK,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,EAAG;AACtC,UAAA,MAAMG,MAAAA,GAAQ,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,mBAAmB,CAAA;AACtD,UAAA,IAAIC,IAAAA,GAAM,CAAA;AACV,UAAA,IAAI,eAAA,GAAkB,KAAA;AAEtB,UAAA,MAAM,cAAA,GAAiB,OAAO,GAAA,KAAc;AAC1C,YAAA,IAAI,GAAA,EAAK;AACP,cAAA,eAAA,GAAkB,IAAA;AAClB,cAAA,OAAO,aAAa,GAAG,CAAA;AAAA,YACzB;AACA,YAAA,IAAIA,IAAAA,IAAOD,OAAM,MAAA,EAAQ;AACzB,YAAA,MAAM,EAAA,GAAKA,OAAMC,IAAAA,EAAK,CAAA;AACtB,YAAA,IAAI,CAAC,EAAA,EAAI;AACT,YAAA,IAAI;AACF,cAAA,MAAM,EAAA,CAAG;AAAA,gBACP,OAAA,EAAS,MAAA;AAAA,gBACT,QAAA,EAAU,MAAA;AAAA,gBACV,GAAA,EAAK,MAAA;AAAA,gBACL,GAAA,EAAK,MAAA;AAAA,gBACL,IAAA,EAAM;AAAA,eACP,CAAA;AAAA,YACH,SAAS,CAAA,EAAG;AACV,cAAA,eAAA,GAAkB,IAAA;AAClB,cAAA,OAAO,aAAa,CAAC,CAAA;AAAA,YACvB;AAAA,UACF,CAAA;AAEA,UAAA,MAAM,cAAA,EAAe;AAErB,UAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,YAAA,MAAM,UAAU,KAAA,CAAM,OAAA;AAKtB,YAAA,MAAM,OAAA,CAAQ,MAAA,EAAQ,MAAA,EAAQ,cAAc,CAAA;AAAA,UAC9C;AACA,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,IAAA,CAAK,MAAA,CAAO,IAAA,CAAK,MAAA,CAAO,MAAA,IAAU,KAAA,EAAO,MAAA,CAAO,IAAI,CAAA;AACjF,MAAA,MAAA,CAAO,MAAA,GAAS,UAAU,EAAC;AAC3B,MAAA,MAAM,KAAA,GAAQ;AAAA,QACZ,GAAG,IAAA,CAAK,WAAA,CAAY,GAAA,CAAI,mBAAmB,CAAA;AAAA,QAC3C,GAAG,QAAA,CAAS,GAAA,CAAI,mBAAmB;AAAA,OACrC;AACA,MAAA,IAAI,GAAA,GAAM,CAAA;AACV,MAAA,MAAM,IAAA,GAAO,OAAO,GAAA,KAAc;AAChC,QAAA,IAAI,GAAA,EAAK,OAAO,YAAA,CAAa,GAAG,CAAA;AAChC,QAAA,IAAI,GAAA,IAAO,MAAM,MAAA,EAAQ;AACzB,QAAA,MAAM,EAAA,GAAK,MAAM,GAAA,EAAK,CAAA;AACtB,QAAA,IAAI,CAAC,EAAA,EAAI;AACT,QAAA,IAAI;AACF,UAAA,MAAM,EAAA,CAAG;AAAA,YACP,OAAA,EAAS,MAAA;AAAA,YACT,QAAA,EAAU,MAAA;AAAA,YACV,GAAA,EAAK,MAAA;AAAA,YACL,GAAA,EAAK,MAAA;AAAA,YACL;AAAA,WACD,CAAA;AAAA,QACH,SAAS,CAAA,EAAG;AACV,UAAA,OAAO,aAAa,CAAC,CAAA;AAAA,QACvB;AAAA,MACF,CAAA;AACA,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,SAAS,GAAA,EAAK;AACZ,MAAA,YAAA,CAAa,GAAG,CAAA;AAAA,IAClB;AAAA,EACF;AACF","file":"index.cjs","sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport path from \"node:path\";\n\n/**\n * Config Files Extensions Supported\n * ex: azura.config.*extension\n */\n\ntype SupportedConfigFile = \".js\" | \".ts\" | \".json\" | \".yaml\" | \".yml\";\n\nexport type ConfigTypes = {\n name?: string;\n environment?: \"development\" | \"production\";\n debug?: boolean;\n server?: {\n port?: number;\n cluster?: boolean;\n ipHost?: boolean;\n https?: boolean;\n /**\n * Configure trust proxy behavior for IP resolution\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n };\n plugins?: {\n rateLimit?: {\n enabled: boolean;\n limit: number;\n timeframe: number;\n };\n cors?: {\n enabled: boolean;\n origins: string | string[];\n methods: string | string[];\n allowedHeaders: string | string[];\n };\n };\n logging?: {\n enabled?: boolean;\n showDetails?: boolean;\n };\n};\n\nexport class ConfigModule {\n private config: ConfigTypes = {};\n\n /**\n * Load config files first (azura.config.*)\n * Recivied error if config file not found or invalid format\n * @param configFiles\n */\n\n initSync(): void {\n const cdw = process.cwd();\n const configFiles = [\n \"azura.config.ts\",\n \"azura.config.json\",\n \"azura.config.yaml\",\n \"azura.config.yml\",\n ];\n\n let loaded = false;\n for (const fileName of configFiles) {\n const filePath = path.join(cdw, fileName);\n if (!existsSync(filePath)) continue;\n\n const extension = path.extname(fileName) as SupportedConfigFile;\n const raw = readFileSync(filePath, \"utf8\");\n\n try {\n let parsed: ConfigTypes;\n switch (extension) {\n case \".ts\":\n case \".js\":\n const mod = require(filePath);\n parsed = mod.default || mod;\n break;\n case \".json\":\n parsed = JSON.parse(raw);\n break;\n case \".yaml\":\n case \".yml\":\n parsed = require(\"js-yaml\").load(raw);\n break;\n default:\n throw new Error(`Invalid config file extension: ${extension}`);\n }\n\n this.config = { ...this.config, ...parsed };\n loaded = true;\n break;\n } catch (error: Error | any) {\n throw new Error(`Error loading config file: ${filePath}\\n${error.message}`);\n }\n }\n\n if (!loaded) {\n throw new Error(\"Nothing config file found in the current directory.\");\n }\n }\n\n /**\n * Get all configs from loaded config file\n * @returns ConfigTypes\n */\n\n getAll(): ConfigTypes {\n return this.config;\n }\n\n /**\n * Return a specific config from loaded config file\n *\n * @template T\n * @param {T} key - key of the config to retrieve\n * @returns {ConfigTypes[T]}\n */\n\n get<T extends keyof ConfigTypes>(key: T): ConfigTypes[T] {\n return this.config[key];\n }\n}\n","export class HttpError extends Error {\n status: number;\n payload?: any;\n constructor(status: number, message?: string, payload?: any) {\n super(message ?? String(message ?? \"Error\"));\n this.status = status;\n this.payload = payload;\n }\n}\n","/**\n * ANSI escape codes for text styling\n * These codes control text formatting in terminal output\n */\nexport const RESET = \"\\x1b[0m\"; // Reset all styles\nexport const BOLD = \"\\x1b[1m\"; // Bold/bright text\nexport const DIM = \"\\x1b[2m\"; // Dim/faded text\n\n/**\n * Predefined ANSI foreground colors\n * Includes standard and bright color variants\n */\nexport const ANSI_COLORS = {\n black: \"\\x1b[30m\",\n red: \"\\x1b[31m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n cyan: \"\\x1b[36m\",\n white: \"\\x1b[37m\",\n gray: \"\\x1b[90m\",\n brightRed: \"\\x1b[91m\",\n brightGreen: \"\\x1b[92m\",\n brightYellow: \"\\x1b[93m\",\n brightBlue: \"\\x1b[94m\",\n brightMagenta: \"\\x1b[95m\",\n brightCyan: \"\\x1b[96m\",\n brightWhite: \"\\x1b[97m\",\n};\n\n/**\n * ANSI background color codes\n * Used for highlighting text with colored backgrounds\n */\nexport const BG_COLORS = {\n bgBlack: \"\\x1b[40m\",\n bgRed: \"\\x1b[41m\",\n bgGreen: \"\\x1b[42m\",\n bgYellow: \"\\x1b[43m\",\n bgBlue: \"\\x1b[44m\",\n bgMagenta: \"\\x1b[45m\",\n bgCyan: \"\\x1b[46m\",\n bgWhite: \"\\x1b[47m\",\n};\n\n/**\n * Default color mapping for each log level\n * Provides semantic color coding for different message types\n */\nexport const DEFAULT_COLORS = {\n debug: ANSI_COLORS.gray,\n info: ANSI_COLORS.cyan,\n success: ANSI_COLORS.brightGreen,\n warn: ANSI_COLORS.yellow,\n error: ANSI_COLORS.red,\n fatal: ANSI_COLORS.brightRed,\n trace: ANSI_COLORS.magenta,\n log: ANSI_COLORS.white,\n};\n","/**\n * Default emoji icons for each log level\n * Provides visual indicators to quickly identify message severity\n */\nexport const DEFAULT_ICONS = {\n debug: \"🐛\",\n info: \"ℹ️\",\n success: \"✅\",\n warn: \"⚠️\",\n error: \"❌\",\n fatal: \"💀\",\n trace: \"🔍\",\n log: \"📝\",\n arrow: \"➡️\",\n};\n","import type { LoggerConfig } from \"../types/logger.types\";\nimport {\n ANSI_COLORS,\n BG_COLORS,\n BOLD,\n DEFAULT_COLORS,\n DIM,\n RESET,\n} from \"../types/utils/colors.type\";\nimport { DEFAULT_ICONS } from \"../types/utils/icons.type\";\n\n/**\n * Global logger configuration\n * These settings apply to all logger calls unless overridden by instance-specific options\n */\nlet globalConfig: LoggerConfig = {\n showTimestamp: false,\n showIcon: true,\n timestampFormat: \"time\",\n prefix: \"Azura\",\n uppercase: true,\n bold: false,\n dim: false,\n};\n\n/**\n * Configure the logger globally\n * Updates default settings that apply to all subsequent log calls\n * @param config - Logger configuration options\n * @example\n * configureLogger({\n * showTimestamp: true,\n * timestampFormat: 'datetime',\n * bold: true,\n * prefix: 'MyApp'\n * });\n */\nexport function configureLogger(config: LoggerConfig): void {\n globalConfig = { ...globalConfig, ...config };\n}\n\n/**\n * Convert hexadecimal color code to ANSI escape sequence\n * @param hex - Hexadecimal color string (e.g., '#ff5733')\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example hexToAnsi('#00ff00') // Returns ANSI code for green\n */\nfunction hexToAnsi(hex: string): string {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Convert RGB color values to ANSI escape sequence\n * @param r - Red component (0-255)\n * @param g - Green component (0-255)\n * @param b - Blue component (0-255)\n * @returns ANSI color escape sequence for 24-bit RGB color\n * @example rgbToAnsi(255, 0, 128) // Returns ANSI code for custom pink\n */\nfunction rgbToAnsi(r: number, g: number, b: number): string {\n return `\\x1b[38;2;${r};${g};${b}m`;\n}\n\n/**\n * Resolve color string to ANSI escape sequence\n * Supports hex (#rrggbb), rgb (rgb(r,g,b)), and predefined color names\n * @param color - Color specification string\n * @returns ANSI escape sequence for the specified color\n * @example\n * getColorCode('#ff0000') // Hex color\n * getColorCode('rgb(255,0,0)') // RGB color\n * getColorCode('brightRed') // Predefined color\n */\nfunction getColorCode(color: string): string {\n if (color.startsWith(\"#\")) {\n return hexToAnsi(color);\n }\n if (color.startsWith(\"rgb(\")) {\n const match = color.match(/rgb\\((\\d+),\\s*(\\d+),\\s*(\\d+)\\)/);\n if (match) {\n return rgbToAnsi(Number(match[1]), Number(match[2]), Number(match[3]));\n }\n }\n return (ANSI_COLORS as any)[color] || color;\n}\n\n/**\n * Format current timestamp according to specified format\n * @param format - Timestamp format: 'time' (HH:MM:SS), 'datetime' (locale string), or 'iso' (ISO 8601)\n * @returns Formatted timestamp string\n * @example\n * formatTimestamp('time') // '14:23:45'\n * formatTimestamp('datetime') // '1/11/2026, 2:23:45 PM'\n * formatTimestamp('iso') // '2026-01-11T14:23:45.123Z'\n */\nfunction formatTimestamp(format: \"time\" | \"datetime\" | \"iso\"): string {\n const now = new Date();\n switch (format) {\n case \"time\":\n return now.toLocaleTimeString();\n case \"datetime\":\n return now.toLocaleString();\n case \"iso\":\n return now.toISOString();\n default:\n return now.toLocaleTimeString();\n }\n}\n\n/**\n * Main logger function - outputs formatted log messages to console\n * Supports multiple log levels, custom colors, icons, timestamps, and styling options\n * @param level - Log level (debug, info, success, warn, error, fatal, trace, log)\n * @param msg - Message to log\n * @param options - Optional configuration to override global settings for this log call\n * @example\n * logger('info', 'Server started on port 3000');\n * logger('error', 'Connection failed', { showTimestamp: true });\n * logger('success', 'Task completed', { colors: { success: '#00ff00' } });\n */\nexport function logger(\n level: keyof typeof DEFAULT_COLORS,\n msg: string,\n options?: LoggerConfig\n): void {\n const config = { ...globalConfig, ...options };\n\n const colors = { ...DEFAULT_COLORS, ...config.colors };\n const icons = { ...DEFAULT_ICONS, ...config.icons };\n\n const color = getColorCode(colors[level] || ANSI_COLORS.white);\n const icon = config.showIcon !== false ? icons[level] || \"\" : \"\";\n const levelLabel = config.uppercase ? level.toUpperCase() : level;\n\n let style = color;\n if (config.bold) style += BOLD;\n if (config.dim) style += DIM;\n if (config.backgroundColor) {\n style += getColorCode(config.backgroundColor);\n }\n\n const parts: string[] = [];\n\n // Add timestamp if enabled\n if (config.showTimestamp) {\n const timestamp = formatTimestamp(config.timestampFormat || \"time\");\n parts.push(`${DIM}${timestamp}${RESET}`);\n }\n\n // Add icon\n if (icon) {\n parts.push(icon);\n }\n\n // Add prefix and level\n const prefix = config.prefix\n ? `${style}[${config.prefix}:${levelLabel}]${RESET}`\n : `${style}[${levelLabel}]${RESET}`;\n parts.push(prefix);\n\n // Add message\n parts.push(msg);\n\n const output = parts.join(\" \");\n\n // Use appropriate console method\n const consoleMethod =\n level === \"error\" || level === \"fatal\"\n ? console.error\n : level === \"warn\"\n ? console.warn\n : level === \"debug\" || level === \"trace\"\n ? console.debug\n : console.log;\n\n consoleMethod(output);\n}\n\n/**\n * Convenience methods for each log level\n * Provides a cleaner API for common logging operations\n * @example\n * log.info('Server started');\n * log.error('Connection failed');\n * log.success('Task completed successfully');\n */\nexport const log = {\n debug: (msg: string, options?: LoggerConfig) => logger(\"debug\", msg, options),\n info: (msg: string, options?: LoggerConfig) => logger(\"info\", msg, options),\n success: (msg: string, options?: LoggerConfig) => logger(\"success\", msg, options),\n warn: (msg: string, options?: LoggerConfig) => logger(\"warn\", msg, options),\n error: (msg: string, options?: LoggerConfig) => logger(\"error\", msg, options),\n fatal: (msg: string, options?: LoggerConfig) => logger(\"fatal\", msg, options),\n trace: (msg: string, options?: LoggerConfig) => logger(\"trace\", msg, options),\n log: (msg: string, options?: LoggerConfig) => logger(\"log\", msg, options),\n};\n\n/**\n * Color utility functions and constants for advanced customization\n * Provides direct access to color conversion functions and ANSI codes\n * @example\n * colors.hex('#ff5733') // Convert hex to ANSI\n * colors.rgb(255, 87, 51) // Convert RGB to ANSI\n * colors.ansi.brightGreen // Access predefined colors\n * colors.bg.bgRed // Access background colors\n */\nexport const colors = {\n hex: hexToAnsi,\n rgb: rgbToAnsi,\n ansi: ANSI_COLORS,\n bg: BG_COLORS,\n reset: RESET,\n bold: BOLD,\n dim: DIM,\n};\n","export function parseQS(qs: string): Record<string, string | string[]> {\n const out: Record<string, string | string[]> = {};\n if (!qs) return out;\n \n const parts = qs.split(\"&\");\n for (let i = 0; i < parts.length; i++) {\n const p = parts[i];\n if (!p) continue;\n \n const idx = p.indexOf(\"=\");\n if (idx === -1) {\n out[decodeURIComponent(p)] = \"\";\n continue;\n }\n \n const k = decodeURIComponent(p.slice(0, idx));\n const v = decodeURIComponent(p.slice(idx + 1));\n \n const existing = out[k];\n if (existing !== undefined) {\n if (Array.isArray(existing)) {\n existing.push(v);\n } else {\n out[k] = [existing as string, v];\n }\n } else {\n out[k] = v;\n }\n }\n return out;\n}\n","import type { CookieOptions } from \"../../types/http/response.type\";\n\nexport function serializeCookie(name: string, val: string, opts: CookieOptions = {}): string {\n const encode = opts.encode ?? encodeURIComponent;\n let str = `${name}=${encode(val)}`;\n if (opts.maxAge != null && !Number.isNaN(Number(opts.maxAge)))\n str += `; Max-Age=${Math.floor(Number(opts.maxAge))}`;\n if (opts.domain) str += `; Domain=${opts.domain}`;\n if (opts.path) str += `; Path=${opts.path}`;\n if (opts.expires) str += `; Expires=${opts.expires.toUTCString()}`;\n if (opts.httpOnly) str += `; HttpOnly`;\n if (opts.secure) str += `; Secure`;\n if (opts.sameSite) str += `; SameSite=${opts.sameSite}`;\n return str;\n}\n","export function parseCookiesHeader(header: string | undefined): Record<string, string> {\n if (!header) return {};\n return header.split(\";\").reduce<Record<string, string>>((acc, pair) => {\n const [k, ...vals] = pair.trim().split(\"=\");\n if (!k) return acc;\n acc[k] = decodeURIComponent(vals.join(\"=\"));\n return acc;\n }, {});\n}\n","import type { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\n\nexport type NextFunction = (err?: Error | unknown) => Promise<void>;\n\ninterface AdapterContext {\n request?: RequestServer;\n response?: ResponseServer;\n req?: RequestServer;\n res?: ResponseServer;\n next: NextFunction;\n}\n\ntype MiddlewareFunction = (\n req: RequestServer,\n res: ResponseServer,\n next: (err?: Error | unknown) => void | Promise<void>\n) => void | Promise<void>;\n\ntype HandlerFunction = (req: RequestServer, res: ResponseServer) => void | Promise<void>;\n\ntype ModernHandlerFunction = (ctx: {\n req: RequestServer;\n res: ResponseServer;\n next: NextFunction;\n}) => void | Promise<void>;\n\ntype GenericHandler =\n | MiddlewareFunction\n | HandlerFunction\n | ModernHandlerFunction\n | ((ctx: AdapterContext) => void | Promise<void>)\n | Function;\n\nexport function adaptRequestHandler(mw: GenericHandler) {\n if (typeof mw !== \"function\") return mw;\n\n return async (ctx: AdapterContext): Promise<void> => {\n try {\n const req = ctx.request || ctx.req;\n const res = ctx.response || ctx.res;\n\n if (!req || !res) {\n throw new Error(\"Request or Response object is undefined\");\n }\n\n if (mw.length === 3) {\n let nextCalled = false;\n\n const result = (mw as MiddlewareFunction)(req, res, async (err?: Error | unknown) => {\n if (nextCalled) return;\n nextCalled = true;\n\n if (err) throw err;\n\n if (ctx.next) {\n await ctx.next();\n }\n });\n\n if (result && typeof (result as Promise<void>).then === \"function\") {\n await result;\n }\n\n return;\n }\n\n if (mw.length === 2) {\n const result = (mw as HandlerFunction)(req, res);\n if (result && typeof (result as Promise<void>).then === \"function\") {\n await result;\n }\n return;\n }\n\n if (mw.length === 1) {\n await (mw as ModernHandlerFunction)({\n req,\n res,\n next: ctx.next,\n });\n return;\n }\n\n await (mw as Function)(ctx);\n } catch (err) {\n throw err;\n }\n };\n}\n","import type { RequestServer } from \"../../../types/http/request.type\";\nimport type { ResponseServer } from \"../../../types/http/response.type\";\n\nexport type Handler = (ctx: {\n req: RequestServer;\n res: ResponseServer;\n next?: (err?: any) => void;\n}) => Promise<void> | void;\n\nexport class Node {\n children = new Map<string, Node>();\n handlers = new Map<string, Handler[]>();\n paramName?: string;\n isParam?: boolean;\n}\n","import type { RequestHandler } from \"../types\";\nimport { HttpError } from \"./utils/HttpError\";\nimport { Node, type Handler } from \"./utils/route/Node\";\n\ninterface MatchResult {\n handlers: Handler[];\n params: Record<string, string>;\n}\n\nexport class Router {\n private root = new Node();\n private debug?: boolean;\n private middlewares: RequestHandler[] = [];\n\n constructor(debug = false) {\n this.debug = debug;\n }\n\n add(method: string, path: string, ...handlers: Handler[]) {\n const segments = path.split(\"/\").filter(Boolean);\n let node = this.root;\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Adding ${method} ${path}`);\n console.log(`[Router:DEBUG] Segments:`, segments);\n }\n\n for (const seg of segments) {\n let child: Node;\n\n if (seg.startsWith(\":\")) {\n const paramKey = \":\";\n const existingChild = node.children.get(paramKey);\n \n if (!existingChild) {\n child = new Node();\n child.isParam = true;\n child.paramName = seg.slice(1);\n node.children.set(paramKey, child);\n \n if (this.debug) {\n console.log(`[Router:DEBUG] Created param node: :${seg.slice(1)}`);\n }\n } else {\n child = existingChild;\n // Update paramName if it's different (shouldn't happen in normal usage)\n if (child.paramName !== seg.slice(1)) {\n if (this.debug) {\n console.warn(`[Router:DEBUG] Warning: Param name mismatch at \"${seg}\". Previous: \":${child.paramName}\", New: \":${seg.slice(1)}\"`);\n }\n }\n }\n } else {\n const existingLiteralChild = node.children.get(seg);\n \n if (!existingLiteralChild) {\n child = new Node();\n node.children.set(seg, child);\n \n if (this.debug) {\n console.log(`[Router:DEBUG] Created literal node: \"${seg}\"`);\n }\n } else {\n child = existingLiteralChild;\n }\n }\n\n node = child;\n }\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Setting handler for ${method} at final node`);\n }\n\n node.handlers.set(method.toUpperCase(), handlers);\n }\n\n find(method: string, path: string): MatchResult {\n const cleanPath = path.split(\"?\")[0] || \"/\";\n const segments = cleanPath === \"/\" ? [] : cleanPath.split(\"/\").filter(Boolean);\n let node = this.root;\n const params: Record<string, string> = {};\n\n if (this.debug) {\n console.log(`[Router:DEBUG] Finding ${method} ${cleanPath}`);\n console.log(`[Router:DEBUG] Segments:`, segments);\n }\n\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n if (!seg) continue;\n\n let child = node.children.get(seg);\n\n if (child) {\n node = child;\n if (this.debug) {\n console.log(`[Router:DEBUG] Matched literal segment: \"${seg}\"`);\n }\n } else {\n child = node.children.get(\":\");\n if (child) {\n node = child;\n if (node.paramName) {\n params[node.paramName] = seg;\n if (this.debug) {\n console.log(`[Router:DEBUG] Matched param segment: \":${node.paramName}\" = \"${seg}\"`);\n }\n } else if (this.debug) {\n console.warn(`[Router:DEBUG] Warning: Param node found but paramName is undefined!`);\n }\n } else {\n if (this.debug) {\n console.error(`[Router:DEBUG] Route not found for ${method} ${cleanPath}`);\n console.error(`[Router:DEBUG] Failed at segment: \"${seg}\"`);\n console.error(`[Router:DEBUG] Available children:`, Array.from(node.children.keys()));\n }\n throw new HttpError(404, \"Route not found\");\n }\n }\n }\n\n const handlers = node.handlers.get(method.toUpperCase()) as Handler[];\n if (!handlers) {\n if (this.debug) {\n console.error(\n `[Router:DEBUG] No handlers for method ${method.toUpperCase()} at path ${cleanPath}`\n );\n console.error(\n `[Router:DEBUG] Available methods at this path:`,\n Array.from(node.handlers.keys())\n );\n console.error(`[Router:DEBUG] Segments matched:`, segments);\n }\n throw new HttpError(404, \"Route not found\");\n }\n \n if (this.debug) {\n console.log(`[Router:DEBUG] Found handlers for ${method} ${cleanPath}`);\n console.log(`[Router:DEBUG] Extracted params:`, params);\n }\n \n return { handlers, params };\n }\n\n public listRoutes(): Array<{ method: string; path: string }> {\n const routes: Array<{ method: string; path: string }> = [];\n\n const traverse = (node: Node, path: string) => {\n if (node.handlers.size > 0) {\n for (const method of node.handlers.keys()) {\n routes.push({ method, path: path || \"/\" });\n }\n }\n\n for (const [segment, child] of node.children) {\n const newPath =\n path + \"/\" + (segment === \":\" && child.paramName ? `:${child.paramName}` : segment);\n traverse(child, newPath);\n }\n };\n\n traverse(this.root, \"\");\n return routes;\n }\n\n public use(mw: RequestHandler): void;\n public use(prefix: string, router: Router): void;\n public use(prefixOrMw: string | RequestHandler, router?: Router): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(prefixOrMw);\n } else if (typeof prefixOrMw === \"string\" && router instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = router.listRoutes();\n\n for (const route of routes) {\n const fullPath = prefix + (route.path === \"/\" ? \"\" : route.path);\n const { handlers } = router.find(route.method, route.path);\n this.add(route.method, fullPath, ...handlers);\n }\n }\n }\n}\n","import os from \"node:os\";\nimport cluster from \"node:cluster\";\nimport { logger } from \"../../utils/Logger\";\n\nexport function getIP(port: number) {\n try {\n const networkInterfaces = os.networkInterfaces();\n\n if (!networkInterfaces || Object.keys(networkInterfaces).length === 0) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n return;\n }\n\n let foundIP = false;\n Object.values(networkInterfaces).forEach((ifaceList) => {\n if (!ifaceList) return;\n\n ifaceList.forEach((iface) => {\n const isIPv4 =\n (iface.family as string | number) === \"IPv4\" || (iface.family as string | number) === 4;\n if (isIPv4 && !iface.internal && iface.address) {\n foundIP = true;\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n logger(\"info\", `[${who}] accessible at http://${iface.address}:${port}`);\n }\n });\n });\n\n if (!foundIP) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n } catch (error) {\n logger(\"info\", `Server running on http://localhost:${port}`);\n }\n}\n","import type { IncomingMessage } from \"node:http\";\n\n/**\n * IP resolution configuration interface\n * Similar to Express's 'trust proxy' setting\n */\nexport interface IpResolverConfig {\n /**\n * Enable trust proxy mode to read X-Forwarded-* headers\n * - true: trust all proxies\n * - false: don't trust any proxies (default)\n * - number: trust the nth hop from the front-facing proxy\n * - string: trust specific IP address or CIDR range\n * - string[]: trust multiple IPs or CIDR ranges\n */\n trustProxy?: boolean | number | string | string[];\n\n /**\n * Custom header name to read IP from\n * @default 'x-forwarded-for'\n */\n ipHeader?: string;\n}\n\n/**\n * Check if an IP address is in a CIDR range\n */\nfunction isInCidrRange(ip: string, cidr: string): boolean {\n if (!cidr.includes(\"/\")) {\n return ip === cidr;\n }\n\n const [range, bits] = cidr.split(\"/\");\n\n // Guard against invalid CIDR format\n if (!range || !bits) {\n return false;\n }\n\n const mask = ~(2 ** (32 - parseInt(bits)) - 1);\n\n const ipNum = ip.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n const rangeNum = range.split(\".\").reduce((acc, octet) => (acc << 8) + parseInt(octet), 0);\n\n return (ipNum & mask) === (rangeNum & mask);\n}\n\n/**\n * Check if IP should be trusted based on trust proxy configuration\n */\nfunction shouldTrustProxy(ip: string, trustProxy: boolean | number | string | string[]): boolean {\n if (trustProxy === true) return true;\n if (trustProxy === false) return false;\n\n if (typeof trustProxy === \"string\") {\n return isInCidrRange(ip, trustProxy);\n }\n\n if (Array.isArray(trustProxy)) {\n return trustProxy.some((range) => isInCidrRange(ip, range));\n }\n\n return false;\n}\n\n/**\n * Resolve client IP address from request\n * Handles proxies, load balancers, and direct connections\n *\n * @param req - HTTP request object\n * @param config - IP resolver configuration\n * @returns Object containing primary IP and array of all IPs\n *\n * @example\n * ```typescript\n * // Don't trust proxies (default)\n * const { ip, ips } = resolveIp(req);\n *\n * // Trust all proxies\n * const { ip, ips } = resolveIp(req, { trustProxy: true });\n *\n * // Trust specific proxy\n * const { ip, ips } = resolveIp(req, { trustProxy: '10.0.0.1' });\n *\n * // Trust CIDR range\n * const { ip, ips } = resolveIp(req, { trustProxy: ['10.0.0.0/8', '172.16.0.0/12'] });\n *\n * // Trust first N hops\n * const { ip, ips } = resolveIp(req, { trustProxy: 2 });\n *\n * // Use custom header\n * const { ip, ips } = resolveIp(req, {\n * trustProxy: true,\n * ipHeader: 'cf-connecting-ip'\n * });\n * ```\n */\nexport function resolveIp(\n req: IncomingMessage,\n config: IpResolverConfig = {}\n): { ip: string; ips: string[] } {\n const { trustProxy = false, ipHeader = \"x-forwarded-for\" } = config;\n\n // Get socket IP as fallback\n // Clean up IPv6 localhost and IPv4-mapped addresses\n let socketIp = req.socket?.remoteAddress || \"\";\n if (socketIp === \"::1\" || socketIp === \"::ffff:127.0.0.1\") {\n socketIp = \"127.0.0.1\";\n } else if (socketIp.startsWith(\"::ffff:\")) {\n socketIp = socketIp.substring(7);\n }\n\n // If not trusting proxy, return socket IP only\n if (trustProxy === false) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Try to get forwarded IPs from headers\n const forwardedHeader = req.headers[ipHeader.toLowerCase()];\n const forwardedFor = Array.isArray(forwardedHeader) ? forwardedHeader[0] : forwardedHeader;\n\n if (!forwardedFor) {\n return {\n ip: socketIp,\n ips: socketIp ? [socketIp] : [],\n };\n }\n\n // Parse all IPs from the header\n const allIps = forwardedFor\n .split(\",\")\n .map((ip) => ip.trim())\n .filter(Boolean);\n\n // Add socket IP to the chain\n if (socketIp) {\n allIps.push(socketIp);\n }\n\n // If trusting all proxies, return first IP\n if (trustProxy === true) {\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is a number, trust that many hops\n if (typeof trustProxy === \"number\") {\n const hopCount = Math.max(0, trustProxy);\n const trustedIndex = Math.max(0, allIps.length - hopCount - 1);\n return {\n ip: allIps[trustedIndex] || socketIp || \"\",\n ips: allIps,\n };\n }\n\n // If trust proxy is IP/CIDR, validate chain\n const trustedIps: string[] = [];\n for (let i = allIps.length - 1; i >= 0; i--) {\n const currentIp = allIps[i];\n\n if (!currentIp) {\n continue;\n }\n\n if (shouldTrustProxy(currentIp, trustProxy)) {\n continue;\n }\n\n // Found first untrusted IP (client IP)\n return {\n ip: currentIp,\n ips: allIps,\n };\n }\n\n // All IPs were trusted, return first one\n return {\n ip: allIps[0] || socketIp || \"\",\n ips: allIps,\n };\n}\n\n/**\n * Common proxy IP ranges for convenience\n */\nexport const COMMON_PROXY_RANGES = {\n /** Private network ranges (RFC 1918) */\n PRIVATE: [\"10.0.0.0/8\", \"172.16.0.0/12\", \"192.168.0.0/16\"],\n\n /** Loopback addresses */\n LOOPBACK: [\"127.0.0.0/8\", \"::1/128\"],\n\n /** Link-local addresses */\n LINK_LOCAL: [\"169.254.0.0/16\", \"fe80::/10\"],\n\n /** Cloudflare IP ranges (example - should be updated regularly) */\n CLOUDFLARE: [\n \"173.245.48.0/20\",\n \"103.21.244.0/22\",\n \"103.22.200.0/22\",\n \"103.31.4.0/22\",\n \"141.101.64.0/18\",\n \"108.162.192.0/18\",\n \"190.93.240.0/20\",\n ],\n\n /** AWS ELB IP ranges (example - should be updated regularly) */\n AWS_ELB: [\"52.94.76.0/22\", \"35.180.0.0/16\"],\n};\n","import type { HttpContext } from \"../../types/common.type\";\nimport type { CorsOptions } from \"../../types/plugins/cors.type\";\n\nexport function cors(opts: CorsOptions) {\n const { origin, methods, allowedHeaders } = opts;\n\n return (ctx: HttpContext, next: () => Promise<void>) => {\n ctx.response.setHeader(\n \"Access-Control-Allow-Origin\",\n Array.isArray(origin) ? origin.join(\",\") : origin\n );\n ctx.response.setHeader(\n \"Access-Control-Allow-Methods\",\n Array.isArray(methods) ? methods.join(\",\") : methods\n );\n ctx.response.setHeader(\n \"Access-Control-Allow-Headers\",\n Array.isArray(allowedHeaders) ? allowedHeaders.join(\",\") : allowedHeaders\n );\n\n if (ctx.request.method === \"OPTIONS\") {\n ctx.response.writeHead(204);\n return ctx.response.end();\n }\n\n return next();\n };\n}\n","import type { HttpContext } from \"../../types/common.type\";\n\ninterface Entry {\n count: number;\n ts: number;\n}\n\nconst store = new Map<string, Entry>();\n\nexport function rateLimit(limit: number, ttl: number) {\n return async (ctx: HttpContext, next: () => Promise<void>) => {\n const ip = ctx.request.socket.remoteAddress;\n const now = Date.now();\n const entry = store.get(ip!) ?? { count: 0, ts: now };\n\n if (now - entry.ts > ttl) {\n entry.count = 1;\n entry.ts = now;\n } else {\n entry.count++;\n }\n\n store.set(ip!, entry);\n\n if (entry.count > limit) {\n ctx.response.status(429).send(\"Too many requests\");\n return;\n }\n\n await next();\n };\n}\n","import http from \"node:http\";\nimport https from \"node:https\";\nimport type { RequestServer } from \"../../types/http/request.type\";\nimport type { ResponseServer } from \"../../types/http/response.type\";\nimport { logger } from \"../../utils/Logger\";\nimport type { ProxyOptions } from \"../../types/plugins/proxy.type\";\n\nexport function createProxyMiddleware(options: ProxyOptions) {\n const {\n target,\n pathRewrite = {},\n headers = {},\n timeout = 30000,\n followRedirects = false,\n preserveHost = false,\n logLevel = \"info\",\n onProxyReq,\n onProxyRes,\n onError,\n } = options;\n\n return async (req: RequestServer, res: ResponseServer, next?: Function) => {\n try {\n // Parse target URL\n const targetUrl = new URL(target);\n const isHttps = targetUrl.protocol === \"https:\";\n const client = isHttps ? https : http;\n\n // Construir o path\n let path = req.path || \"/\";\n\n // Aplicar path rewrites\n for (const [pattern, replacement] of Object.entries(pathRewrite)) {\n const regex = new RegExp(pattern);\n path = path.replace(regex, replacement);\n }\n\n // Adicionar query string\n if (req.url && req.url.includes(\"?\")) {\n const queryString = req.url.split(\"?\")[1];\n path += `?${queryString}`;\n }\n\n if (logLevel !== \"none\") {\n logger(\n logLevel === \"debug\" ? \"info\" : \"info\",\n `[Proxy] ${req.method} ${req.url} → ${target}${path}`\n );\n }\n\n // Configurar headers\n const proxyHeaders: http.OutgoingHttpHeaders = {\n ...req.headers,\n ...headers,\n };\n\n // Remover headers problemáticos\n delete proxyHeaders[\"host\"];\n delete proxyHeaders[\"connection\"];\n delete proxyHeaders[\"transfer-encoding\"];\n\n if (preserveHost && req.headers.host) {\n proxyHeaders[\"host\"] = req.headers.host;\n } else {\n proxyHeaders[\"host\"] = targetUrl.host;\n }\n\n // Adicionar headers de forwarding\n if (req.ip) {\n proxyHeaders[\"x-forwarded-for\"] = req.ip;\n }\n proxyHeaders[\"x-forwarded-proto\"] = req.protocol || \"http\";\n proxyHeaders[\"x-forwarded-host\"] = req.headers.host || \"\";\n\n // Criar requisição proxy\n const proxyReqOptions: http.RequestOptions = {\n hostname: targetUrl.hostname,\n port: targetUrl.port || (isHttps ? 443 : 80),\n path,\n method: req.method,\n headers: proxyHeaders,\n timeout,\n };\n\n const proxyReq = client.request(proxyReqOptions, (proxyRes) => {\n // Callback customizado\n if (onProxyRes) {\n onProxyRes(proxyRes, req, res);\n }\n\n // Copiar status code\n res.statusCode = proxyRes.statusCode || 200;\n\n // Copiar headers (exceto alguns problemáticos)\n if (proxyRes.headers) {\n for (const [key, value] of Object.entries(proxyRes.headers)) {\n if (key.toLowerCase() !== \"transfer-encoding\" && value) {\n res.setHeader(key, value);\n }\n }\n }\n\n // Fazer pipe da resposta diretamente\n proxyRes.pipe(res as any);\n });\n\n // Callback customizado antes de enviar\n if (onProxyReq) {\n onProxyReq(proxyReq, req);\n }\n\n // Lidar com erros\n proxyReq.on(\"error\", (err) => {\n if (onError) {\n onError(err, req, res);\n } else {\n logger(\"error\", `[Proxy] Error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 502;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Bad Gateway\",\n message: \"Failed to connect to upstream server\",\n }));\n }\n }\n });\n\n proxyReq.on(\"timeout\", () => {\n proxyReq.destroy();\n if (!res.headersSent) {\n res.statusCode = 504;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Gateway Timeout\",\n message: \"Upstream server took too long to respond\",\n }));\n }\n });\n\n // Enviar body se existir\n if (req.body && [\"POST\", \"PUT\", \"PATCH\"].includes(req.method || \"\")) {\n const bodyStr = typeof req.body === \"string\" ? req.body : JSON.stringify(req.body);\n proxyReq.write(bodyStr);\n }\n\n proxyReq.end();\n } catch (err: any) {\n logger(\"error\", `[Proxy] Setup error: ${err.message}`);\n if (!res.headersSent) {\n res.statusCode = 500;\n res.setHeader(\"Content-Type\", \"application/json\");\n res.end(JSON.stringify({\n error: \"Internal Server Error\",\n message: \"Failed to setup proxy\",\n }));\n }\n }\n };\n}\n\n/**\n * Middleware de proxy simples - apenas passa o target\n */\nexport function proxyPlugin(target: string, options: Partial<ProxyOptions> = {}) {\n return createProxyMiddleware({ target, ...options });\n}\n","import type { RequestServer } from \"../types/http/request.type\";\nimport type { ResponseServer } from \"../types/http/response.type\";\nimport type { ConfigTypes } from \"../shared/config/ConfigModule\";\nimport type { RequestHandler } from \"../types/common.type\";\n\nexport function createLoggingMiddleware(config: ConfigTypes): RequestHandler {\n const isEnabled = config.logging?.enabled ?? true;\n const showDetails = config.logging?.showDetails ?? true;\n const env = config.environment || \"development\";\n\n const reset = \"\\x1b[0m\";\n const bold = \"\\x1b[1m\";\n const dim = \"\\x1b[2m\";\n const colors: Record<string, string> = {\n GET: \"\\x1b[36m\",\n POST: \"\\x1b[32m\",\n PUT: \"\\x1b[33m\",\n DELETE: \"\\x1b[31m\",\n PATCH: \"\\x1b[35m\",\n DEFAULT: \"\\x1b[37m\",\n };\n\n const fn = async (...args: any[]) => {\n let req: RequestServer | undefined;\n let res: ResponseServer | undefined;\n let next: ((err?: any) => Promise<void> | void) | undefined;\n\n if (args.length === 1 && typeof args[0] === \"object\" && args[0] !== null) {\n const ctx = args[0];\n req = (ctx.request || ctx.req) as RequestServer | undefined;\n res = (ctx.response || ctx.res) as ResponseServer | undefined;\n next = ctx.next;\n } else {\n req = args[0] as RequestServer | undefined;\n res = args[1] as ResponseServer | undefined;\n next = args[2] as typeof next;\n }\n\n if (!req || !res) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n if (!isEnabled) {\n if (typeof next === \"function\") await next();\n return;\n }\n\n const start = Date.now();\n const methodRaw = String(req.method || \"GET\").toUpperCase();\n const methodPad = methodRaw.padEnd(6, \" \");\n const methodColor = colors[methodRaw] || colors.DEFAULT;\n const url = String((req as any).originalUrl || req.url || \"/\");\n const ip = String((req as any).ip || \"\").replace(\"::ffff:\", \"\");\n const time = new Date().toLocaleTimeString(\"pt-BR\", { hour12: false });\n\n try {\n if (env === \"development\") {\n const header = `${dim}·${reset} ${bold}${time}${reset} ${methodColor}${methodPad}${reset} ${bold}${url}${reset}`;\n console.log(header);\n if (showDetails) {\n try {\n if (req.query && Object.keys(req.query).length > 0) {\n console.log(`${dim} › query:${reset} ${JSON.stringify(req.query)}`);\n }\n } catch {}\n try {\n const params = (req as any).params;\n if (params && Object.keys(params).length > 0) {\n console.log(`${dim} › params:${reset} ${JSON.stringify(params)}`);\n }\n } catch {}\n try {\n if (req.body && Object.keys(req.body).length > 0) {\n console.log(`${dim} › body:${reset} ${JSON.stringify(req.body)}`);\n }\n } catch {}\n }\n } else {\n console.log(\n `${dim}·${reset} ${time} ${methodColor}${methodPad}${reset} ${url} ${dim}• IP:${ip}${reset}`\n );\n }\n } catch {}\n\n try {\n if (typeof (res as any).on === \"function\") {\n (res as any).on(\"finish\", () => {\n const duration = Date.now() - start;\n const statusCode = Number((res as any).statusCode || 0);\n const statusColor =\n statusCode >= 500 ? \"\\x1b[31m\" : statusCode >= 400 ? \"\\x1b[33m\" : \"\\x1b[32m\";\n const statusText = `${statusColor}${statusCode}${reset}`;\n const durationText = `${dim}(${duration}ms)${reset}`;\n const ipShort = ip || \"-\";\n const line = `${dim}→${reset} ${statusText} ${durationText} ${dim}• IP:${ipShort}${reset}`;\n console.log(line);\n });\n }\n } catch {}\n\n if (typeof next === \"function\") {\n await next();\n }\n };\n\n return fn as unknown as RequestHandler;\n}\n","import http from \"node:http\";\nimport cluster from \"node:cluster\";\nimport os from \"node:os\";\n\nimport { ConfigModule } from \"../shared/config/ConfigModule\";\nimport type { RequestServer } from \"../types/http/request.type\";\nimport type { CookieOptions, ResponseServer } from \"../types/http/response.type\";\nimport { HttpError } from \"./utils/HttpError\";\nimport { logger } from \"../utils/Logger\";\nimport { parseQS } from \"../utils/Parser\";\nimport { serializeCookie } from \"../utils/cookies/SerializeCookie\";\nimport { parseCookiesHeader } from \"../utils/cookies/ParserCookie\";\nimport { adaptRequestHandler } from \"./utils/RequestHandler\";\nimport { Router } from \"./Router\";\nimport type { RequestHandler } from \"../types/common.type\";\nimport { getIP } from \"./utils/GetIp\";\nimport { resolveIp } from \"./utils/IpResolver\";\nimport type { Handler } from \"./utils/route/Node\";\nimport { cors } from \"../shared/plugins/CORSPlugin\";\nimport { rateLimit } from \"../shared/plugins/RateLimitPlugin\";\nimport type { ProxyOptions } from \"../types\";\nimport { proxyPlugin } from \"../shared/plugins\";\n\nexport { createLoggingMiddleware } from \"../middleware/LoggingMiddleware\";\nexport { proxyPlugin, createProxyMiddleware } from \"../shared/plugins/ProxyPlugin\";\n\nexport class AzuraClient {\n private opts: ReturnType<ConfigModule[\"getAll\"]>;\n\n private server?: http.Server;\n private port: number = 3000;\n private initPromise: Promise<void>;\n\n private router: Router;\n private middlewares: RequestHandler[] = [];\n private proxies: Array<{ path: string; handler: RequestHandler }> = [];\n\n constructor() {\n const config = new ConfigModule();\n try {\n config.initSync();\n } catch (error: any) {\n console.error(\"[Azura] ❌ Falha ao carregar configuração:\");\n console.error(\" \", error.message);\n process.exit(1);\n }\n this.opts = config.getAll();\n this.router = new Router(this.opts.debug);\n this.initPromise = this.init();\n this.setupDefaultRoutes();\n }\n\n /**\n * Configura rotas padrão para evitar erros 404 comuns\n */\n private setupDefaultRoutes() {\n this.router.add(\n \"GET\",\n \"/favicon.ico\",\n adaptRequestHandler((ctx: any) => {\n ctx.res.status(204).send();\n }) as any\n );\n }\n\n public getConfig() {\n return this.opts;\n }\n\n private async init() {\n this.port = this.opts.server?.port || 3000;\n\n if (this.opts.server?.cluster && cluster.isPrimary) {\n for (let i = 0; i < os.cpus().length; i++) cluster.fork();\n cluster.on(\"exit\", () => cluster.fork());\n return;\n }\n\n if (this.opts.plugins?.cors?.enabled) {\n cors({\n origin: this.opts.plugins.cors.origins,\n methods: this.opts.plugins.cors.methods,\n allowedHeaders: this.opts.plugins.cors.allowedHeaders,\n });\n\n logger(\"info\", \"CORS plugin enabled\");\n }\n\n if (this.opts.plugins?.rateLimit?.enabled) {\n rateLimit(this.opts.plugins.rateLimit.limit, this.opts.plugins.rateLimit.timeframe);\n\n logger(\"info\", \"Rate Limit plugin enabled\");\n }\n\n this.server = http.createServer();\n this.server.on(\"request\", this.handle.bind(this));\n }\n\n public use(prefix: string, mw: RequestHandler): void;\npublic use(mw: RequestHandler): void;\npublic use(prefix: string, router: Router): void;\npublic use(prefixOrMw: string | RequestHandler, router?: Router | RequestHandler): void {\n if (typeof prefixOrMw === \"function\") {\n this.middlewares.push(prefixOrMw);\n } else if (typeof prefixOrMw === \"string\" && router instanceof Router) {\n const prefix = prefixOrMw.endsWith(\"/\") ? prefixOrMw.slice(0, -1) : prefixOrMw;\n const routes = router.listRoutes();\n\n for (const route of routes) {\n const fullPath = prefix + (route.path === \"/\" ? \"\" : route.path);\n const { handlers } = router.find(route.method, route.path);\n this.router.add(route.method, fullPath, ...handlers);\n }\n }\n }\n\n public addRoute(method: string, path: string, ...handlers: RequestHandler[]) {\n const adapted = handlers.map(adaptRequestHandler);\n this.router.add(method, path, ...(adapted as unknown as Handler[]));\n }\n\n public get = (p: string, ...h: RequestHandler[]) => this.addRoute(\"GET\", p, ...h);\n public post = (p: string, ...h: RequestHandler[]) => this.addRoute(\"POST\", p, ...h);\n public put = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PUT\", p, ...h);\n public delete = (p: string, ...h: RequestHandler[]) => this.addRoute(\"DELETE\", p, ...h);\n public patch = (p: string, ...h: RequestHandler[]) => this.addRoute(\"PATCH\", p, ...h);\n\n /**\n * Configures a proxy for a specific route\n * @param path - Path of the route to be proxied\n * @param target - Destination server URL\n * @param options - Additional proxy options\n * * @example\n * ```typescript\n * // Simple proxy\n * app.proxy('/api', 'http://localhost:4000');\n * * // With advanced options\n * app.proxy('/api', 'http://localhost:4000', {\n * pathRewrite: { '^/api': '' },\n * headers: { 'X-Custom-Header': 'value' }\n * });\n * ```\n */\n public proxy(path: string, target: string, options: Partial<ProxyOptions> = {}) {\n const proxyMiddleware = proxyPlugin(target, options) as RequestHandler;\n\n // Adicionar à lista de proxies\n this.proxies.push({ path, handler: proxyMiddleware });\n }\n\n public getRoutes() {\n return this.router.listRoutes();\n }\n\n public async listen(port = this.port) {\n await this.initPromise;\n\n if (!this.server) {\n logger(\"error\", \"Server not initialized\");\n return;\n }\n\n this.server.on(\"error\", (error: NodeJS.ErrnoException) => {\n if (error.code === \"EADDRINUSE\") {\n logger(\"error\", `❌ Port ${port} is already in use. Please choose a different port.`);\n } else {\n logger(\"error\", \"Server failed to start: \" + (error?.message || String(error)));\n }\n process.exit(1);\n });\n\n const who = cluster.isPrimary ? \"master\" : \"worker\";\n this.server.listen(port, () => {\n logger(\"info\", `[${who}] listening on http://localhost:${port}`);\n if (this.opts.server?.ipHost) getIP(port);\n\n const routes = this.getRoutes();\n if (routes.length > 0) {\n logger(\"info\", `\\n📋 Registered routes (${routes.length}):`);\n routes.forEach((r) => {\n logger(\"info\", ` ${r.method.padEnd(7)} ${r.path}`);\n });\n }\n });\n\n return this.server;\n }\n\n /**\n * Fetch handler compatible with Web API (Bun, Deno, Cloudflare Workers, etc.)\n * @example\n * ```typescript\n * const app = new AzuraClient();\n * app.get('/', (req, res) => res.text('Hello World!'));\n *\n * // Use with Bun\n * Bun.serve({\n * port: 3000,\n * fetch: app.fetch.bind(app),\n * });\n *\n * // Use with Deno\n * Deno.serve({ port: 3000 }, app.fetch.bind(app));\n * ```\n */\n public async fetch(request: Request): Promise<Response> {\n await this.initPromise;\n\n const url = new URL(request.url);\n const urlPath = url.pathname;\n\n const safeQuery: Record<string, string> = {};\n if (url.search) {\n const rawQuery = parseQS(url.search.slice(1));\n for (const k in rawQuery) {\n const v = rawQuery[k];\n safeQuery[k] = Array.isArray(v) ? v[0] || \"\" : (v as string);\n }\n }\n\n const cookieHeader = request.headers.get(\"cookie\") || \"\";\n const cookies = parseCookiesHeader(cookieHeader);\n\n let body: any = {};\n if ([\"POST\", \"PUT\", \"PATCH\"].includes(request.method.toUpperCase())) {\n const contentType = request.headers.get(\"content-type\") || \"\";\n try {\n if (contentType.includes(\"application/json\")) {\n body = await request.json();\n } else if (contentType.includes(\"application/x-www-form-urlencoded\")) {\n const text = await request.text();\n const parsed = parseQS(text || \"\");\n const b: Record<string, string> = {};\n for (const k in parsed) {\n const v = parsed[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n body = b;\n } else {\n body = await request.text();\n }\n } catch {\n body = {};\n }\n }\n\n const protocol = url.protocol.slice(0, -1) as \"http\" | \"https\";\n\n const headersObj: Record<string, string | string[]> = {};\n request.headers.forEach((value, key) => {\n headersObj[key] = value;\n });\n\n const rawReq: Partial<RequestServer> = {\n method: request.method,\n url: url.pathname + url.search,\n originalUrl: url.pathname + url.search,\n path: urlPath || \"/\",\n protocol,\n secure: url.protocol === \"https:\",\n hostname: url.hostname,\n subdomains: url.hostname ? url.hostname.split(\".\").slice(0, -2) : [],\n query: safeQuery,\n cookies,\n params: {},\n body,\n headers: headersObj as any,\n get: (name: string) => request.headers.get(name.toLowerCase()) || undefined,\n header: (name: string) => request.headers.get(name.toLowerCase()) || undefined,\n socket: {\n remoteAddress: request.headers.get(\"x-real-ip\") || request.headers.get(\"x-forwarded-for\")?.split(\",\")[0]?.trim() || \"127.0.0.1\",\n } as any,\n } as Partial<RequestServer>;\n\n // Resolve IP for fetch handler using the same logic as HTTP handler\n const { ip, ips } = resolveIp(rawReq as any, {\n trustProxy: this.opts.server?.trustProxy,\n ipHeader: this.opts.server?.ipHeader,\n });\n rawReq.ip = ip;\n rawReq.ips = ips;\n\n const finalReq = rawReq as Partial<RequestServer>;\n\n let statusCode = 200;\n const responseHeaders = new Headers();\n let responseBody: any = null;\n\n const rawRes: Partial<ResponseServer> = {\n statusCode,\n status: (code: number) => {\n statusCode = code;\n return rawRes as ResponseServer;\n },\n set: (field: string, value: string | number | string[]) => {\n responseHeaders.set(field, String(value));\n return rawRes as ResponseServer;\n },\n header: (field: string, value: string | number | string[]) => {\n responseHeaders.set(field, String(value));\n return rawRes as ResponseServer;\n },\n get: (field: string) => responseHeaders.get(field) || undefined,\n type: (t: string) => {\n responseHeaders.set(\"Content-Type\", t);\n return rawRes as ResponseServer;\n },\n contentType: (t: string) => {\n responseHeaders.set(\"Content-Type\", t);\n return rawRes as ResponseServer;\n },\n location: (u: string) => {\n responseHeaders.set(\"Location\", u);\n return rawRes as ResponseServer;\n },\n redirect: ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n statusCode = a;\n responseHeaders.set(\"Location\", b!);\n } else {\n statusCode = 302;\n responseHeaders.set(\"Location\", a);\n }\n return rawRes as ResponseServer;\n }) as ResponseServer[\"redirect\"],\n cookie: (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = responseHeaders.get(\"Set-Cookie\");\n if (prev) {\n responseHeaders.append(\"Set-Cookie\", s);\n } else {\n responseHeaders.set(\"Set-Cookie\", s);\n }\n return rawRes as ResponseServer;\n },\n clearCookie: (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie!(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n },\n send: (b: any) => {\n if (b === undefined || b === null) {\n responseBody = \"\";\n } else if (typeof b === \"object\") {\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(b);\n } else {\n responseBody = String(b);\n }\n return rawRes as ResponseServer;\n },\n json: (b: any) => {\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(b);\n return rawRes as ResponseServer;\n },\n };\n\n const errorHandler = (err: any) => {\n statusCode = err instanceof HttpError ? err.status : 500;\n responseHeaders.set(\"Content-Type\", \"application/json\");\n responseBody = JSON.stringify(\n err instanceof HttpError\n ? err.payload ?? { error: err.message || \"Internal Server Error\" }\n : { error: err?.message || \"Internal Server Error\" }\n );\n };\n\n try {\n const { handlers, params } = this.router.find(request.method, urlPath || \"/\");\n rawReq.params = params || {};\n\n const chain = [\n ...this.middlewares.map(adaptRequestHandler),\n ...handlers.map(adaptRequestHandler),\n ];\n\n let idx = 0;\n const next = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({\n request: rawReq as RequestServer,\n response: rawRes as ResponseServer,\n req: rawReq as RequestServer,\n res: rawRes as ResponseServer,\n next,\n });\n } catch (e) {\n return errorHandler(e);\n }\n };\n\n await next();\n } catch (err) {\n errorHandler(err);\n }\n\n return new Response(responseBody, {\n status: statusCode,\n headers: responseHeaders,\n });\n }\n\n private async handle(rawReq: RequestServer, rawRes: ResponseServer) {\n rawReq.originalUrl = rawReq.url || \"\";\n rawReq.protocol = this.opts.server?.https ? \"https\" : \"http\";\n rawReq.secure = rawReq.protocol === \"https\";\n rawReq.hostname = String(rawReq.headers[\"host\"] || \"\").split(\":\")[0] || \"\";\n rawReq.subdomains = rawReq.hostname ? rawReq.hostname.split(\".\").slice(0, -2) : [];\n\n // Resolve IP using configured trust proxy settings\n const { ip, ips } = resolveIp(rawReq, {\n trustProxy: this.opts.server?.trustProxy,\n ipHeader: this.opts.server?.ipHeader,\n });\n rawReq.ip = ip;\n rawReq.ips = ips;\n\n rawReq.get = rawReq.header = (name: string) => {\n const v = rawReq.headers[name.toLowerCase()];\n if (Array.isArray(v)) return v[0];\n return typeof v === \"string\" ? v : undefined;\n };\n\n rawRes.status = (code: number) => {\n rawRes.statusCode = code;\n return rawRes;\n };\n\n rawRes.set = rawRes.header = (field: string, value: string | number | string[]) => {\n rawRes.setHeader(field, value);\n return rawRes;\n };\n\n rawRes.get = (field: string) => {\n const v = rawRes.getHeader(field);\n if (Array.isArray(v)) return v[0];\n return typeof v === \"number\" ? String(v) : (v as string | undefined);\n };\n\n rawRes.type = rawRes.contentType = (t: string) => {\n rawRes.setHeader(\"Content-Type\", t);\n return rawRes;\n };\n\n rawRes.location = (u: string) => {\n rawRes.setHeader(\"Location\", u);\n return rawRes;\n };\n\n rawRes.redirect = ((a: number | string, b?: string) => {\n if (typeof a === \"number\") {\n rawRes.statusCode = a;\n rawRes.setHeader(\"Location\", b!);\n } else {\n rawRes.statusCode = 302;\n rawRes.setHeader(\"Location\", a);\n }\n rawRes.end();\n return rawRes;\n }) as ResponseServer[\"redirect\"];\n\n rawRes.cookie = (name: string, val: string, opts: CookieOptions = {}) => {\n const s = serializeCookie(name, val, opts);\n const prev = rawRes.getHeader(\"Set-Cookie\");\n if (prev) {\n const list = Array.isArray(prev) ? prev.concat(s) : [String(prev), s];\n rawRes.setHeader(\"Set-Cookie\", list);\n } else {\n rawRes.setHeader(\"Set-Cookie\", s);\n }\n return rawRes;\n };\n\n rawRes.clearCookie = (name: string, opts: CookieOptions = {}) => {\n return rawRes.cookie(name, \"\", { ...opts, expires: new Date(1), maxAge: 0 });\n };\n\n rawRes.send = (b: any) => {\n if (b === undefined || b === null) {\n rawRes.end();\n return rawRes;\n }\n if (typeof b === \"object\") {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n } else {\n rawRes.end(String(b));\n }\n return rawRes;\n };\n\n rawRes.json = (b: any) => {\n rawRes.setHeader(\"Content-Type\", \"application/json\");\n rawRes.end(JSON.stringify(b));\n return rawRes;\n };\n\n const [urlPath, qs] = (rawReq.url || \"\").split(\"?\");\n rawReq.path = urlPath || \"/\";\n const rawQuery = parseQS(qs || \"\");\n const safeQuery: Record<string, string> = {};\n for (const k in rawQuery) {\n const v = rawQuery[k];\n safeQuery[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.query = safeQuery;\n\n rawReq.cookies = parseCookiesHeader((rawReq.headers[\"cookie\"] as string) || \"\");\n rawReq.params = {};\n\n rawReq.body = {};\n if ([\"POST\", \"PUT\", \"PATCH\"].includes((rawReq.method || \"\").toUpperCase())) {\n await new Promise<void>((resolve) => {\n let buf = \"\";\n rawReq.on(\"data\", (chunk: Buffer | string) => {\n buf += chunk;\n });\n rawReq.on(\"end\", () => {\n try {\n const ct = String(rawReq.headers[\"content-type\"] || \"\");\n if (ct.includes(\"application/json\")) {\n rawReq.body = JSON.parse(buf || \"{}\");\n } else {\n const parsed = parseQS(buf || \"\");\n const b: Record<string, string> = {};\n for (const k in parsed) {\n const v = parsed[k];\n b[k] = Array.isArray(v) ? v[0] || \"\" : (v as string) || \"\";\n }\n rawReq.body = b;\n }\n } catch {\n rawReq.body = {};\n }\n resolve();\n });\n rawReq.on(\"error\", (err: Error) => {\n logger(\"error\", \"Body parse error: \" + err.message);\n resolve();\n });\n });\n }\n\n const errorHandler = (err: any) => {\n logger(\"error\", err?.message || String(err));\n rawRes\n .status(err instanceof HttpError ? err.status : 500)\n .json(\n err instanceof HttpError\n ? err.payload ?? { error: err.message || \"Internal Server Error\" }\n : { error: err?.message || \"Internal Server Error\" }\n );\n };\n\n try {\n for (const proxy of this.proxies) {\n if (rawReq.path.startsWith(proxy.path)) {\n const chain = this.middlewares.map(adaptRequestHandler);\n let idx = 0;\n let middlewareError = false;\n\n const middlewareNext = async (err?: any) => {\n if (err) {\n middlewareError = true;\n return errorHandler(err);\n }\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({\n request: rawReq,\n response: rawRes,\n req: rawReq,\n res: rawRes,\n next: middlewareNext,\n });\n } catch (e) {\n middlewareError = true;\n return errorHandler(e);\n }\n };\n\n await middlewareNext();\n\n if (!middlewareError) {\n const handler = proxy.handler as (\n req: RequestServer,\n res: ResponseServer,\n next?: any\n ) => void | Promise<void>;\n await handler(rawReq, rawRes, middlewareNext);\n }\n return;\n }\n }\n\n const { handlers, params } = this.router.find(rawReq.method || \"GET\", rawReq.path);\n rawReq.params = params || {};\n const chain = [\n ...this.middlewares.map(adaptRequestHandler),\n ...handlers.map(adaptRequestHandler),\n ];\n let idx = 0;\n const next = async (err?: any) => {\n if (err) return errorHandler(err);\n if (idx >= chain.length) return;\n const fn = chain[idx++];\n if (!fn) return;\n try {\n await fn({\n request: rawReq,\n response: rawRes,\n req: rawReq,\n res: rawRes,\n next,\n });\n } catch (e) {\n return errorHandler(e);\n }\n };\n await next();\n } catch (err) {\n errorHandler(err);\n }\n }\n}\n"]}
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- export { A as AzuraClient } from './Server-CVyJAYne.cjs';
1
+ export { A as AzuraClient } from './Server-jD16Crmt.cjs';
2
2
  export { Router } from './router.cjs';
3
3
  import { IncomingMessage } from 'node:http';
4
4
  export { c as createLoggingMiddleware } from './LoggingMiddleware-D8FkeXT4.cjs';