balda-js 0.0.70 → 0.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.js +1 -1
- package/lib/cli.js.map +1 -1
- package/package.json +1 -1
package/lib/cli.js
CHANGED
|
@@ -117,7 +117,7 @@ server.listen(({ url }) => {
|
|
|
117
117
|
${e.bold}\u2728 Registered Routes:${e.reset}
|
|
118
118
|
`);let l=7,c=Math.min(Math.max(...n.map(i=>i.path.length)),50);n.forEach(i=>{let a=r[i.method]||e.reset,d=i.method.padEnd(l),x=i.path.padEnd(c),f=[],T=i.handler.name||"anonymous";if(f.push(`${e.dim}${T}${e.reset}`),i.middleware.length>0&&f.push(`${e.cyan}${i.middleware.length} middleware${e.reset}`),i.swaggerOptions){let w=i.swaggerOptions;w.service&&f.push(`${e.blue}[${w.service}]${e.reset}`),w.name&&f.push(`${e.dim}"${w.name}"${e.reset}`),w.deprecated&&f.push(`${e.red}[DEPRECATED]${e.reset}`),w.security&&f.push(`${e.yellow}\u{1F512} secured${e.reset}`);}let g=f.length>0?` ${e.dim}\u2502${e.reset} ${f.join(" ")}`:"";console.log(` ${a}${d}${e.reset} ${x}${g}`);}),console.log(`
|
|
119
119
|
${e.bold}Total: ${t.length} routes${e.reset}
|
|
120
|
-
`);}};m([h.string({aliases:["e","s"],name:"entry",required:false,defaultValue:"./src/index.ts",description:"The entry point of the project, default is ./src/index.ts"})],V,"entry");var Se=[E,B,F,A,q,k,D,_,$,L,V],N=class s{commands;builtInCommands;static commandsPattern="src/commands/**/*.{ts,js}";static logger=G;constructor(){this.commands=new Map,this.builtInCommands=new Set;}static getInstance(){return new s}static setCommandsPattern(t){this.commandsPattern=t;}getCommand(t){return this.commands.get(t)??null}getCommands(){return Array.from(this.commands.values())}getBuiltInCommands(){return Array.from(this.commands.values()).filter(t=>this.builtInCommands.has(t.commandName))}getUserDefinedCommands(){return Array.from(this.commands.values()).filter(t=>!this.builtInCommands.has(t.commandName))}isBuiltInCommand(t){return this.builtInCommands.has(t)}async loadCommands(t){s.logger.info(`Loading commands from ${t}`);let e=await glob(t,{absolute:true,cwd:P.getCwd()});if(e.some(r=>r.endsWith(".ts")))try{let{register:r}=await import('module');r("ts-node/esm",import.meta.url);}catch{s.logger.error("Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\ntry running: `npm install -D ts-node`"),process.exit(1);}for(let r of e){let o=await import(r).then(n=>n.default?n.default:n).catch(n=>(s.logger.error(`Error loading command ${r}: ${n}`),null));o&&this.commands.set(o.commandName,o);}for(let r of Se)this.commands.set(r.commandName,r),this.builtInCommands.add(r.commandName);}},S=N.getInstance();var Ce=s=>{let t=new Map;for(let e of s){let r=e.options?.category||"other";t.has(r)||t.set(r,[]),t.get(r).push(e);}return t},je=s=>{let t=Array.from(s.keys()).sort();for(let e of t){let r=s.get(e).filter(c=>c&&c.commandName);if(!r.length)continue;let n={generator:"\x1B[35m",setup:"\x1B[34m",production:"\x1B[32m",utility:"\x1B[36m",other:"\x1B[37m"}[e]||"\x1B[37m";console.log(` ${n}${e.toUpperCase()}:\x1B[0m`);let l=Math.max(...r.map(c=>c.commandName.length));for(let c of r){let i=c.commandName.padEnd(l+2),a=c.description||"No description available",d="";c.options?.deprecated&&(d=" \x1B[33m[deprecated]\x1B[0m"),console.log(` \x1B[36m${i}\x1B[0m ${a}${d}`);}console.log("");}},ae=async()=>{await S.loadCommands(N.commandsPattern);let[s,...t]=I.getCliArgs();if(!s||
|
|
120
|
+
`);}};m([h.string({aliases:["e","s"],name:"entry",required:false,defaultValue:"./src/index.ts",description:"The entry point of the project, default is ./src/index.ts"})],V,"entry");var Se=[E,B,F,A,q,k,D,_,$,L,V],N=class s{commands;builtInCommands;static commandsPattern="src/commands/**/*.{ts,js}";static logger=G;constructor(){this.commands=new Map,this.builtInCommands=new Set;}static getInstance(){return new s}static setCommandsPattern(t){this.commandsPattern=t;}getCommand(t){return this.commands.get(t)??null}getCommands(){return Array.from(this.commands.values())}getBuiltInCommands(){return Array.from(this.commands.values()).filter(t=>this.builtInCommands.has(t.commandName))}getUserDefinedCommands(){return Array.from(this.commands.values()).filter(t=>!this.builtInCommands.has(t.commandName))}isBuiltInCommand(t){return this.builtInCommands.has(t)}async loadCommands(t){s.logger.info(`Loading commands from ${t}`);let e=await glob(t,{absolute:true,cwd:P.getCwd()});if(e.some(r=>r.endsWith(".ts")))try{let{register:r}=await import('module');r("ts-node/esm",import.meta.url);}catch{s.logger.error("Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\ntry running: `npm install -D ts-node`"),process.exit(1);}for(let r of e){let o=await import(r).then(n=>n.default?n.default:n).catch(n=>(s.logger.error(`Error loading command ${r}: ${n}`),null));o&&this.commands.set(o.commandName,o);}for(let r of Se)this.commands.set(r.commandName,r),this.builtInCommands.add(r.commandName);}},S=N.getInstance();var Ce=s=>{let t=new Map;for(let e of s){let r=e.options?.category||"other";t.has(r)||t.set(r,[]),t.get(r).push(e);}return t},je=s=>{let t=Array.from(s.keys()).sort();for(let e of t){let r=s.get(e).filter(c=>c&&c.commandName);if(!r.length)continue;let n={generator:"\x1B[35m",setup:"\x1B[34m",production:"\x1B[32m",utility:"\x1B[36m",other:"\x1B[37m"}[e]||"\x1B[37m";console.log(` ${n}${e.toUpperCase()}:\x1B[0m`);let l=Math.max(...r.map(c=>c.commandName.length));for(let c of r){let i=c.commandName.padEnd(l+2),a=c.description||"No description available",d="";c.options?.deprecated&&(d=" \x1B[33m[deprecated]\x1B[0m"),console.log(` \x1B[36m${i}\x1B[0m ${a}${d}`);}console.log("");}},ae=async()=>{await S.loadCommands(N.commandsPattern);let[s,...t]=I.getCliArgs();if(!s||s==="-h"||s==="--help"){let n=S.getBuiltInCommands(),l=S.getUserDefinedCommands();if(console.log(`
|
|
121
121
|
\u2728 Available Balda Commands:
|
|
122
122
|
`),l.length&&(console.log(`\x1B[1;33mUser Commands:\x1B[0m
|
|
123
123
|
`),je(Ce(l))),n.length){console.log(`\x1B[1;32mBuilt-in Commands:\x1B[0m
|
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/runtime/runtime.ts","../src/runtime/native_args.ts","../src/utils.ts","../src/commands/arg_parser.ts","../src/logger/logger.ts","../src/runtime/native_cwd.ts","../src/metadata_store.ts","../src/decorators/command/arg.ts","../src/decorators/command/flag.ts","../src/runtime/native_exit.ts","../src/commands/base_command.ts","../src/commands/base_commands/build_command.ts","../src/runtime/native_fs.ts","../src/runtime/native_path.ts","../src/commands/base_commands/generate_command.ts","../src/commands/base_commands/generate_controller.ts","../src/commands/base_commands/generate_cron.ts","../src/commands/base_commands/generate_middleware.ts","../src/commands/base_commands/generate_plugin.ts","../src/commands/base_commands/generate_queue.ts","../src/package.ts","../src/commands/base_commands/init_command.ts","../src/commands/base_commands/list_command.ts","../src/commands/base_commands/serve_command.ts","../src/errors/balda_error.ts","../src/server/router/router.ts","../src/commands/base_commands/routes_list_command.ts","../src/commands/command_registry.ts","../src/cli.ts"],"names":["RunTime","runtime","NativeArgs","args","scriptIndex","i","arg","argBasename","j","nativeArgs","levenshteinDistance","str1","str2","matrix","indicator","toLowerSnakeCase","str","toPascalCase","input","word","toDashCase","parseFlag","equalIndex","name","value","parseFlagValue","numValue","parseCliArgsAndFlags","cliArgs","parsedArgs","parsedFlags","flag","nextArg","existingValue","findSimilarCommands","notFoundCommand","availableCommands","searchTerm","similarCommands","command","normalizedCommand","distance","maxDistance","suggestions","cmd","getCalledCommandName","createBaseLogger","pino","label","logger","NativeCwd","nativeCwd","MetadataStore","target","propertyKey","VALIDATION_ERROR_SYMBOL","options","currentCommandName","argName","argValue","errorChain","flagDecorator","primaryFlagName","flagAliases","allFlagVariants","resolvedFlagValue","flagVariant","possibleNames","flagName","rawValue","val","stringVal","NativeExit","code","nativeExit","Command","flags","helpFlags","commandName","description","helpText","helpOutput","info","commandClass","colors","lines","helpLines","line","allMeta","argsMeta","meta","flagsMeta","required","aliases","flagKey","flagValue","valueDisplay","example","error","index","errorNumber","errorType","errorName","BuildCommand","esbuild","err","assetsDir","path","plugins","copy","fs","outFile","result","__decorateClass","NativeFs","buffer","arrayBuffer","data","stats","bunStats","denoStats","nativeFs","NativePath","inputPath","paths","nativePath","GenerateCommand","commandRegistry","commandType","commandTemplate","GenerateControllerCommand","controllerTemplate","fileName","className","GenerateCron","cronTemplate","GenerateMiddlewareCommand","middlewareTemplate","middlewareName","GeneratePluginCommand","pluginTemplate","GenerateQueueCommand","isValidLiteral","queueTemplate","getPackageManager","InitCommand","packageManager","packageManagerCommand","devDependenciesCommand","execSync","ext","serverTemplate","indexTemplate","ListCommand","builtInCommands","userCommands","categorizedCommands","maxNameLength","desc","deprecatedTag","commands","map","category","sortedCategories","color","ServeCommand","denoCommand","packageCommand","devFlag","initCommand","BaldaError","message","Node","Router","_Router","basePath","middlewares","method","middleware","handler","swaggerOptions","root","trimmed","segments","node","seg","idx","r","rawPath","params","middlewareOrHandler","maybeHandler","maybeSwagger","fullPath","isHandlerOnly","provided","middlewareOrCb","maybeCb","groupMiddlewares","cb","childBase","child","route","normalized","joined","v","router","RoutesListCommand","routes","methodColors","methodOrder","sortedRoutes","a","b","methodCompare","maxMethodLength","maxPathLength","infoParts","handlerName","swagger","baseCommands","CommandRegistry","_CommandRegistry","pattern","commandsPattern","commandFiles","glob","file","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","rest","CommandClass","replacement","retryErr"],"mappings":"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","file":"cli.js","sourcesContent":["export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","import pino from \"pino\";\nimport type { LoggerOptions } from \"./logger_types.js\";\n\nconst createBaseLogger = () => {\n const baseOptions: LoggerOptions = {\n level: \"info\",\n formatters: {\n level: (label) => {\n return { level: label };\n },\n },\n };\n\n return pino(baseOptions);\n};\n\n/**\n * The logger instance, can be overridden by the `defineLoggerConfig` function\n */\nexport let logger = createBaseLogger();\n\n/**\n * Define the logger config, this will override the logger instance with the given options\n * @param options - The logger options\n */\nexport const defineLoggerConfig = (options?: LoggerOptions) => {\n logger = pino(options);\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeCwd {\n getCwd(): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n return process.cwd();\n case \"deno\":\n return Deno.cwd();\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeCwd = new NativeCwd();\n","/**\n * Cross-runtime metadata store used to store metadata for the decorators without using reflect-metadata\n */\nexport class MetadataStore {\n private static metadata = new WeakMap<any, Map<string | symbol, any>>();\n\n /**\n * Set the metadata for the given target and property key\n */\n static set(target: any, propertyKey: string, value: any): void {\n if (!this.metadata.has(target)) {\n this.metadata.set(target, new Map());\n }\n this.metadata.get(target)!.set(propertyKey, value);\n }\n\n /**\n * Get the metadata for the given target and property key\n */\n static get(target: any, propertyKey: string): any {\n return this.metadata.get(target)?.get(propertyKey);\n }\n\n /**\n * Get all the metadata for the given target\n */\n static getAll(target: any): Map<string | symbol, any> {\n return this.metadata.get(target) || new Map();\n }\n\n /**\n * Delete the metadata for the given target and property key\n */\n static delete(target: any, propertyKey: string | symbol): void {\n this.metadata.get(target)?.delete(propertyKey.toString());\n }\n\n /**\n * Clear all the metadata for the given target\n */\n static clear(target: any): void {\n this.metadata.delete(target);\n }\n}\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { ArgOptions } from \"./command_decorator_types.js\";\n\nexport const VALIDATION_ERROR_SYMBOL = \"VALIDATION_ERROR\";\nexport const ARG_SYMBOL = \"ARG\";\n\n/**\n * The arguments of the current command. Shifted to get the next argument each time for each argument decorator.\n */\nlet args = parseCliArgsAndFlags().args.slice(1);\n\n/**\n * Decorator to mark a field of a command class as an argument.\n * @param options - The options for the argument.\n * @warning Arguments are evaluated in the order they are defined in the Command class.\n */\nexport const arg = (options: ArgOptions) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const argName = propertyKey;\n MetadataStore.set(target, propertyKey, {\n type: \"arg\",\n name: argName,\n description: options.description,\n });\n\n let argValue = args.length ? args.shift() : options.defaultValue;\n if (options.required && !argValue) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"arg\",\n name: argName,\n message: \"Required argument not provided\",\n },\n ]);\n\n return;\n }\n\n if (options.parse && argValue) {\n argValue = options.parse(argValue);\n }\n\n Object.defineProperty(target, propertyKey, {\n value: argValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { VALIDATION_ERROR_SYMBOL } from \"./arg.js\";\nimport type {\n FlagOptions,\n FlagType,\n InferFlagType,\n} from \"./command_decorator_types.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\n\n/**\n * Decorator for defining command-line flags with type safety.\n *\n * Supports multiple flag types:\n * - `boolean`: true/false flags\n * - `string`: text values\n * - `number`: numeric values\n * - `list`: array of strings (can be specified multiple times)\n *\n * @example\n * ```typescript\n * class MyCommand extends Command {\n * @flag.string({ name: \"name\", description: \"User name\" })\n * name?: string;\n *\n * @flag.list({ name: \"tag\", aliases: [\"t\"], description: \"Tags\" })\n * tags!: string[];\n * }\n * ```\n *\n * Usage:\n * - Single flag: `--name=value` or `--name value`\n * - List flag: `--tag=one --tag=two --tag=three`\n * - Aliases: `-t one -t two`\n */\nconst flagDecorator = <T extends FlagType>(options: FlagOptions<T>) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const primaryFlagName = options.name || propertyKey;\n const parsedFlags = parseCliArgsAndFlags().flags;\n const flagAliases = options.aliases || [];\n const allFlagVariants = [primaryFlagName, ...flagAliases];\n\n // Find the actual flag value by checking all possible flag names\n let resolvedFlagValue = options.defaultValue;\n\n for (const flagVariant of allFlagVariants) {\n // Check both with and without prefixes\n const possibleNames = [\n flagVariant,\n `-${flagVariant}`,\n `--${flagVariant}`,\n ];\n\n for (const flagName of possibleNames) {\n if (flagName in parsedFlags) {\n const rawValue = parsedFlags[flagName];\n\n if (options.type === \"list\") {\n // For list type, ensure we have an array\n const arrayValue = Array.isArray(rawValue) ? rawValue : [rawValue];\n resolvedFlagValue = arrayValue.map((val) => {\n const stringVal = String(val);\n return options.parse ? options.parse(stringVal) : stringVal;\n }) as InferFlagType<T>;\n } else {\n resolvedFlagValue = rawValue as InferFlagType<T>;\n\n if (options.type === \"boolean\") {\n resolvedFlagValue = Boolean(\n resolvedFlagValue,\n ) as InferFlagType<T>;\n } else if (options.type === \"number\") {\n resolvedFlagValue = Number(resolvedFlagValue) as InferFlagType<T>;\n }\n\n if (options.parse) {\n resolvedFlagValue = options.parse(resolvedFlagValue);\n }\n }\n\n break;\n }\n }\n\n if (resolvedFlagValue !== options.defaultValue) {\n break;\n }\n }\n\n MetadataStore.set(target, propertyKey, {\n type: \"flag\",\n name: primaryFlagName,\n aliases: flagAliases || [],\n description: options.description,\n });\n\n if (options.required) {\n const isValueMissing =\n options.type === \"list\"\n ? !resolvedFlagValue ||\n (Array.isArray(resolvedFlagValue) && resolvedFlagValue.length === 0)\n : !resolvedFlagValue;\n\n if (isValueMissing) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"flag\",\n name: primaryFlagName,\n message: \"Required flag not provided\",\n },\n ]);\n return;\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n value: resolvedFlagValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n\n/** Shorthand decorator for boolean flags */\nflagDecorator.boolean = (options: Omit<FlagOptions<\"boolean\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"boolean\" });\n};\n\n/** Shorthand decorator for string flags */\nflagDecorator.string = (options: Omit<FlagOptions<\"string\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"string\" });\n};\n\n/** Shorthand decorator for number flags */\nflagDecorator.number = (options: Omit<FlagOptions<\"number\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"number\" });\n};\n\n/** Shorthand decorator for list flags (can be specified multiple times) */\nflagDecorator.list = (options: Omit<FlagOptions<\"list\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"list\" });\n};\n\nexport const flag = flagDecorator;\n","import { runtime } from \"./runtime.js\";\n\nclass NativeExit {\n exit(code: number): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.exit(code);\n case \"deno\":\n Deno.exit(code);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeExit = new NativeExit();\n","import { VALIDATION_ERROR_SYMBOL } from \"../decorators/command/arg.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { MetadataStore } from \"../metadata_store.js\";\nimport { nativeExit } from \"../runtime/native_exit.js\";\nimport {\n Argument,\n type FlagSchema,\n parseCliArgsAndFlags,\n} from \"./arg_parser.js\";\nimport type { CommandOptions } from \"./command_types.js\";\n\n/**\n * Base class for all cli commands.\n * @abstract\n */\nexport abstract class Command {\n /**\n * The name of the command.\n */\n static commandName: string = this.name;\n /**\n * package manager that called the command (e.g. npx, yarn, bun etc.)\n */\n static calledBy: string = this.name;\n /**\n * The description of the command.\n */\n static description: string = \"\";\n /**\n * The help text of the command.\n */\n static help: string[] | string = [];\n /**\n * The options of the command.\n */\n static options: CommandOptions = {\n keepAlive: false,\n };\n\n /**\n * Static arguments in order to be validated by decorators. Will be fetched in the command instance.\n */\n static args: Argument[] = parseCliArgsAndFlags().args.slice(1);\n\n /**\n * Static flags in order to be validated by decorators. Will be fetched in the command instance.\n */\n static flags: FlagSchema = parseCliArgsAndFlags().flags;\n\n static readonly logger = logger;\n\n /**\n * Main entry point for the command.\n */\n static handle(): Promise<void> {\n throw new Error(\n `Handle method not implemented in command class ${this.name}`,\n );\n }\n\n /**\n * Enhanced help flag handler with rich formatting and command information\n */\n static handleHelpFlag(flags: FlagSchema): void {\n const helpFlags = [\"-h\", \"--help\"];\n const hasHelpFlag = Object.keys(flags).some((flag) =>\n helpFlags.includes(flag),\n );\n\n if (!hasHelpFlag) {\n return;\n }\n\n const commandName = this.commandName;\n const description = this.description || \"No description available\";\n const helpText = this.help || [];\n const options = this.options;\n\n const helpOutput = this.generateHelpOutput(\n {\n name: commandName,\n description,\n helpText,\n options,\n args: this.args,\n flags: this.flags,\n },\n this,\n );\n\n console.log(helpOutput);\n nativeExit.exit(0);\n }\n\n private static readonly generateHelpOutput = (\n info: {\n name: string;\n description: string;\n helpText: string[] | string;\n options: CommandOptions;\n args: Argument[];\n flags: FlagSchema;\n },\n commandClass: any,\n ): string => {\n const { name, description, helpText, options, args, flags } = info;\n\n const colors = {\n title: \"\\x1b[1;36m\", // Bright cyan\n subtitle: \"\\x1b[1;33m\", // Bright yellow\n description: \"\\x1b[0;37m\", // White\n code: \"\\x1b[0;32m\", // Green\n flag: \"\\x1b[0;35m\", // Magenta\n reset: \"\\x1b[0m\", // Reset\n error: \"\\x1b[0;31m\", // Red\n success: \"\\x1b[0;32m\", // Green\n info: \"\\x1b[0;34m\", // Blue\n };\n\n const lines = [\n `${colors.title}${name}${colors.reset}`,\n `${colors.description}${description}${colors.reset}`,\n \"\",\n `${colors.subtitle}Usage:${colors.reset}`,\n ` ${colors.code}${name}${colors.reset} [options] [arguments]`,\n \"\",\n `${colors.subtitle}Options:${colors.reset}`,\n ` ${colors.flag}-h, --help${colors.reset} Show this help message`,\n \"\",\n `${colors.subtitle}Command Options:${colors.reset}`,\n ` ${colors.flag}keepAlive${colors.reset} ${(options?.keepAlive ?? false) ? colors.success + \"Enabled\" + colors.reset : colors.error + \"Disabled\" + colors.reset}`,\n \"\",\n ];\n\n if (helpText) {\n const helpLines = Array.isArray(helpText) ? helpText : [helpText];\n lines.push(`${colors.subtitle}Help:${colors.reset}`);\n helpLines.forEach((line) => {\n lines.push(` ${colors.description}${line}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n // Always show available arguments and flags from decorators\n const allMeta = MetadataStore.getAll(commandClass);\n const argsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"arg\",\n );\n const flagsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"flag\",\n );\n\n if (argsMeta.length) {\n lines.push(`${colors.subtitle}Available Arguments:${colors.reset}`);\n argsMeta.forEach((meta) => {\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.code}${meta.name}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n if (flagsMeta.length) {\n lines.push(`${colors.subtitle}Available Flags:${colors.reset}`);\n flagsMeta.forEach((meta) => {\n if (meta.aliases && !Array.isArray(meta.aliases)) {\n meta.aliases = [meta.aliases];\n }\n\n const aliases = meta.aliases.length\n ? ` ${colors.flag}(${meta.aliases.join(\", \")})${colors.reset}`\n : \"\";\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}--${meta.name}${aliases}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n // Show current context if arguments or flags were provided\n if ((args?.length ?? 0) > 0 || (flags && Object.keys(flags).length > 0)) {\n lines.push(`${colors.subtitle}Current Context:${colors.reset}`);\n\n if (args?.length) {\n lines.push(\n ` ${colors.info}Provided Arguments:${colors.reset} ${colors.code}${args.join(\" \")}${colors.reset}`,\n );\n }\n\n if (flags && Object.keys(flags).length > 0) {\n lines.push(` ${colors.info}Provided Flags:${colors.reset}`);\n Object.keys(flags).forEach((flagKey) => {\n const flagValue = flags[flagKey];\n const valueDisplay =\n flagValue !== undefined && flagValue !== null\n ? ` = ${colors.code}${flagValue}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}${flagKey}${colors.reset}${valueDisplay}`,\n );\n });\n }\n lines.push(\"\");\n }\n\n if (\n helpText &&\n (Array.isArray(helpText)\n ? helpText.some((line) => line.includes(\"example\"))\n : helpText.includes(\"example\"))\n ) {\n lines.push(`${colors.subtitle}Examples:${colors.reset}`);\n const examples = Array.isArray(helpText)\n ? helpText.filter((line) => line.includes(\"example\"))\n : [helpText.split(\"example\")[1].trim()];\n examples.forEach((example) => {\n lines.push(` ${colors.code}${example}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n };\n\n static readonly validateContext = (target: any): void => {\n const errorChain = Array.from(\n MetadataStore.get(target, VALIDATION_ERROR_SYMBOL) || [],\n ) as Array<{ type: string; name: string; message: string }>;\n\n if (errorChain.length) {\n const colors = {\n error: \"\\x1b[0;31m\", // Red\n title: \"\\x1b[1;31m\", // Bright red\n reset: \"\\x1b[0m\", // Reset\n info: \"\\x1b[0;34m\", // Blue\n code: \"\\x1b[0;32m\", // Green\n };\n\n console.error(`${colors.title}❌ Validation Errors:${colors.reset}`);\n console.error(\"\");\n\n errorChain.forEach((error, index) => {\n const errorNumber = `${colors.info}${index + 1}.${colors.reset}`;\n const errorType = `${colors.error}${error.type.toUpperCase()}${colors.reset}`;\n const errorName = `${colors.code}${error.name}${colors.reset}`;\n\n console.error(\n ` ${errorNumber} ${errorType} ${errorName}: ${colors.error}${error.message}${colors.reset}`,\n );\n });\n\n console.error(\"\");\n console.error(\n `${colors.info}💡 Tip: Use --help for usage information${colors.reset}`,\n );\n nativeExit.exit(1);\n }\n };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class BuildCommand extends Command {\n static commandName = \"build\";\n static description = \"Build the project for production, node.js only\";\n static help = [\n \"Build the project for production, node.js only\",\n \"It will create a production build of the project in the dist directory\",\n \"Must have a tsconfig.json file in the root of the project\",\n \"Must have esbuild installed as a dependency while running the command\",\n \"Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory\",\n \"Example: npx balda build -t ./tsconfig.json -a ./assets\",\n ];\n\n @flag({\n type: \"boolean\",\n aliases: [\"c\"],\n name: \"clear-dist\",\n required: false,\n defaultValue: false,\n description:\n \"Whether to clear the dist directory before building the project\",\n })\n static clearDist: boolean;\n\n @flag({\n type: \"string\",\n aliases: [\"e\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"./dist\",\n description: \"The path to the output directory, default is ./dist\",\n })\n static output: string;\n\n @flag({\n type: \"string\",\n aliases: [\"t\"],\n name: \"tsconfig\",\n required: false,\n defaultValue: \"./tsconfig.json\",\n description:\n \"The path to the tsconfig.json file, default is ./tsconfig.json\",\n })\n static tsconfig: string;\n\n @flag({\n type: \"string\",\n aliases: [\"a\"],\n name: \"assets\",\n required: false,\n description:\n \"The path to the assets directory that will be loaded in the production build\",\n })\n static assets: string;\n\n @flag({\n type: \"string\",\n aliases: [\"f\"],\n name: \"format\",\n required: false,\n defaultValue: \"esm\",\n description:\n \"The format to build the project, default is esm, can be 'esm' or 'cjs'\",\n })\n static format: \"esm\" | \"cjs\";\n\n @flag({\n type: \"string\",\n aliases: [\"p\"],\n name: \"packages\",\n required: false,\n defaultValue: \"external\",\n description:\n \"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'\",\n })\n static packages: \"external\" | \"bundle\";\n\n @flag({\n type: \"boolean\",\n aliases: [\"s\"],\n name: \"sourcemap\",\n required: false,\n defaultValue: true,\n description: \"Whether to generate sourcemaps or not, default is true\",\n })\n static sourcemap: boolean;\n\n static async handle(): Promise<void> {\n if (typeof process === undefined) {\n this.logger.error(\"Build command is only supported in node.js\");\n process.exit(1);\n }\n\n if (![\"esm\", \"cjs\"].includes(this.format)) {\n this.logger.error(\"Invalid format, must be 'esm' or 'cjs'\");\n process.exit(1);\n }\n\n if (![\"bundle\", \"external\"].includes(this.packages)) {\n this.logger.error(\"Invalid packages, must be 'bundle' or 'external'\");\n process.exit(1);\n }\n\n const esbuild = await import(\"esbuild\").catch((err) => {\n this.logger.error(\n \"esbuild is not installed, please install it with `npm install -D esbuild` to use the build command\",\n );\n throw new Error(\"esbuild is not installed\");\n });\n\n const assetsDir = path.join(this.output, \"assets\");\n const plugins = [];\n if (this.assets) {\n const { copy } = await import(\"esbuild-plugin-copy\").catch((err) => {\n this.logger.error(\n \"esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command\",\n );\n throw new Error(\"esbuild-plugin-copy is not installed\");\n });\n\n if (!fs.existsSync(assetsDir)) {\n fs.mkdirSync(assetsDir, { recursive: true });\n }\n\n plugins.push(\n copy({\n assets: {\n from: this.assets,\n to: assetsDir,\n },\n }),\n );\n }\n\n if (this.clearDist && fs.existsSync(this.output)) {\n this.logger.info(`Clearing dist directory...`);\n fs.rmSync(this.output, { recursive: true });\n }\n\n this.logger.info(`Building project...`);\n const outFile = path.join(this.output, \"server.js\");\n const result = await esbuild.build({\n tsconfig: this.tsconfig,\n entryPoints: [this.entry],\n bundle: true,\n platform: \"node\",\n outfile: outFile,\n minify: true,\n sourcemap: this.sourcemap,\n plugins,\n format: this.format,\n packages: this.packages,\n });\n\n if (result.errors.length) {\n this.logger.error(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n errors: result.errors,\n },\n null,\n 2,\n ),\n );\n\n process.exit(1);\n }\n\n if (result.warnings.length) {\n this.logger.warn(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n warnings: result.warnings,\n },\n null,\n 2,\n ),\n );\n }\n\n this.logger.info(\n JSON.stringify(\n {\n message: `Project built successfully in ${outFile}`,\n output: outFile,\n assets: this.assets ? true : false,\n },\n null,\n 2,\n ),\n );\n process.exit(0);\n }\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeFs {\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n return Bun.file(path).exists();\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(path: string): Promise<Uint8Array> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const buffer = await fs.readFile(path);\n return new Uint8Array(buffer);\n case \"bun\":\n const arrayBuffer = await Bun.file(path).arrayBuffer();\n return new Uint8Array(arrayBuffer);\n case \"deno\":\n return new Uint8Array(await Deno.readFile(path));\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunStats = await Bun.file(path).stat();\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","// Both Deno and Bun are compatible with path api\nimport path from \"node:path\";\nimport { runtime } from \"./runtime.js\";\n\nclass NativePath {\n basename(inputPath: string): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.basename(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n join(...paths: string[]): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.join(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n extName(inputPath: string): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.extname(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n resolve(...paths: string[]): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.resolve(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativePath = new NativePath();\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class GenerateCommand extends Command {\n static commandName = \"generate-command\";\n static description = \"Generate a new command in the specified path\";\n static help = [\n \"Generate a new cli command in the specified path\",\n \"Example: npx balda generate-command my-command -p src/commands\",\n ];\n\n /**\n * The path where the command will be generated\n */\n static path = \"src/commands\";\n\n @arg({\n description: \"The name of the command to generate\",\n required: true,\n })\n static name: string;\n\n static async handle(): Promise<void> {\n // Check if command already exists to prevent overriding built-in commands\n const existingCommand = commandRegistry.getCommand(this.name);\n if (existingCommand) {\n const isBuiltIn = commandRegistry.isBuiltInCommand(this.name);\n const commandType = isBuiltIn ? \"built-in\" : \"user-defined\";\n this.logger.error(\n { commandName: this.name, type: commandType },\n `Command \"${this.name}\" already exists as a ${commandType} command. Cannot override existing commands.`,\n );\n return;\n }\n\n const commandTemplate = this.getCommandTemplate();\n this.path = nativePath.join(this.path, `${this.name}.ts`);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(commandTemplate),\n );\n\n this.logger.info(\n `Command ${this.name} created successfully at ${this.path}`,\n );\n }\n\n static getCommandTemplate() {\n return `import { Command, CommandOptions } from \"balda-js\";\n\nexport default class extends Command {\n static commandName = \"${this.name}\";\n static description = \"Command description\";\n\n static options: CommandOptions = {\n // Define your command options here\n keepAlive: false,\n };\n\n static async handle(): Promise<void> {\n // Implement your command logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toDashCase, toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateControllerCommand extends Command {\n static commandName = \"generate-controller\";\n static description = \"Generate a new controller in the specified path\";\n static help = [\n \"Generate a new controller in the specified path\",\n \"Example: npx balda generate-controller user -p src/controllers\",\n ];\n\n @arg({\n description: \"The name of the controller to generate\",\n required: true,\n })\n static controllerName: string;\n\n @flag({\n description:\n \"The path to the controller to generate, default is src/controllers\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/controllers\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const controllerTemplate = this.getControllerTemplate();\n const fileName = `${this.controllerName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(controllerTemplate),\n );\n\n this.logger.info(\n `Controller ${this.controllerName} created successfully at ${this.path}`,\n );\n }\n\n static getControllerTemplate() {\n const className = toPascalCase(this.controllerName);\n return `import { controller, get, post, put, del, Request, Response } from \"balda-js\";\n\n@controller(\"/${toDashCase(this.controllerName)}\")\nexport default class ${className}Controller {\n @get(\"/\")\n async index(req: Request, res: Response) {\n return { message: \"List all ${this.controllerName.toLowerCase()}s\" };\n }\n\n @get(\"/:id\")\n async show(req: Request, res: Response) {\n return { message: \\`Get ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n\n @post(\"/\")\n async create(req: Request, res: Response) {\n return { message: \\`Create ${this.controllerName.toLowerCase()}\\`, data: req.body };\n }\n\n @put(\"/:id\")\n async update(req: Request, res: Response) {\n return { message: \\`Update ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\`, data: req.body };\n }\n\n @del(\"/:id\")\n async destroy(req: Request, res: Response) {\n return { message: \\`Delete ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateCron extends Command {\n static commandName = \"generate-cron\";\n static description = \"Generate a new cron job in the specified path\";\n static help = [\n \"Generate a new cron job in the specified path\",\n \"Example: npx balda generate-cron my-cron -p src/cron\",\n ];\n\n @arg({\n description: \"The name of the cron job file to generate\",\n required: true,\n })\n static fileName: string;\n\n @flag({\n description: \"The path to the cron job to generate, default is src/cron\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/cron\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const cronTemplate = this.getCronTemplate();\n this.path = nativePath.join(this.path, `${this.fileName}.ts`);\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(cronTemplate));\n\n this.logger.info(\n `Cron job ${this.fileName} created successfully at ${this.path}`,\n );\n }\n\n static getCronTemplate() {\n return `import { BaseCron, cron } from \"balda-js\";\n\nexport default class extends BaseCron {\n @cron(\"* * * * *\")\n handle() {\n this.logger.info(\"Running cron job\");\n // Implement your cron job logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMiddlewareCommand extends Command {\n static commandName = \"generate-middleware\";\n static description = \"Generate a new middleware in the specified path\";\n static help = [\n \"Generate a new middleware in the specified path\",\n \"Example: npx balda generate-middleware auth -p src/middlewares\",\n ];\n\n @arg({\n description: \"The name of the middleware to generate\",\n required: true,\n })\n static middlewareName: string;\n\n @flag({\n description:\n \"The path to the middleware to generate, default is src/middlewares\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/middlewares\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const middlewareTemplate = this.getMiddlewareTemplate();\n const fileName = `${this.middlewareName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(middlewareTemplate),\n );\n\n this.logger.info(\n `Middleware ${this.middlewareName} created successfully at ${this.path}`,\n );\n }\n\n static getMiddlewareTemplate() {\n const middlewareName = toPascalCase(this.middlewareName);\n return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from \"balda-js\";\n\n/**\n * ${middlewareName} middleware\n * @description Add your middleware logic here\n */\nexport const ${middlewareName}: ServerRouteMiddleware = async () => {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Add your middleware logic here\n return next();\n };\n};`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GeneratePluginCommand extends Command {\n static commandName = \"generate-plugin\";\n static description = \"Generate a new plugin in the specified path\";\n static help = [\n \"Generate a new plugin in the specified path\",\n \"Example: npx balda generate-plugin my-plugin -p src/plugins\",\n ];\n\n @arg({\n description: \"The name of the plugin to generate\",\n required: true,\n })\n static pluginName: string;\n\n @flag({\n description: \"The path to the plugin to generate, default is src/plugins\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/plugins\",\n })\n static pluginPath: string;\n\n static async handle(): Promise<void> {\n const pluginTemplate = this.getPluginTemplate();\n this.pluginPath = nativePath.join(this.pluginPath, `${this.pluginName}.ts`);\n\n if (\n !(await nativeFs.exists(nativePath.join(process.cwd(), this.pluginPath)))\n ) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.pluginPath.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.pluginPath,\n new TextEncoder().encode(pluginTemplate),\n );\n\n this.logger.info(\n `Plugin ${this.name} created successfully at ${this.pluginPath}`,\n );\n }\n\n static getPluginTemplate() {\n return `import { BasePlugin, Request, Response, NextFunction, ServerRouteMiddleware } from \"balda-js\";\n\nexport default class extends BasePlugin {\n async handle(): Promise<ServerRouteMiddleware> {\n return async (req: Request, res: Response, next: NextFunction) => {\n console.log(\"${this.pluginName} plugin is running\");\n await next();\n };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateQueueCommand extends Command {\n static commandName = \"generate-queue\";\n static description = \"Generate a new queue in the specified path\";\n static help = [\n \"Generate a new queue in the specified path\",\n \"Example: npx balda generate-queue my-queue -p src/queues --provider bullmq\",\n ];\n\n @arg({\n description: \"The name of the queue to generate\",\n required: true,\n })\n static queueName: string;\n\n @flag({\n description: \"The path to the queue to generate, default is src/queues\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/queues\",\n })\n static path: string;\n\n @flag({\n description: \"The provider of the queue to generate, default is bullmq\",\n type: \"string\",\n aliases: [\"pr\"],\n name: \"provider\",\n required: false,\n defaultValue: \"bullmq\",\n })\n static provider: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.queueName.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const queueTemplate = this.getQueueTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.queueName)}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(queueTemplate),\n );\n\n this.logger.info(\n `Queue ${this.queueName} created successfully at ${this.path}`,\n );\n }\n\n static getQueueTemplate(isValidLiteral: boolean) {\n return `import { BaseQueue, queue } from \"balda-js\";\n\nexport type Payload = {\n // Add your payload here\n};\n\ndeclare module \"balda-js\" {\n export interface QueueTopic {\n ${isValidLiteral ? this.queueName : `'${this.queueName}'`}: Payload;\n }\n}\n\nexport default class extends BaseQueue {\n @queue('${this.provider}', '${this.queueName}')\n async handle(payload: Payload) {\n // Implement your queue logic here\n this.logger.info({ payload }, 'Payload received');\n return Promise.resolve();\n }\n}`;\n }\n}\n","import { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\nexport const getPackageManager = async (): Promise<\n [string, string, string]\n> => {\n const hasYarnLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"yarn.lock\"),\n );\n\n if (hasYarnLock) {\n return [\"yarn\", \"add\", \"-D\"];\n }\n\n const hasPnpmLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"pnpm-lock.yaml\"),\n );\n\n if (hasPnpmLock) {\n return [\"pnpm\", \"add\", \"-D\"];\n }\n\n const hasPackageLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"package-lock.json\"),\n );\n\n if (hasPackageLock) {\n return [\"npm\", \"install\", \"-D\"];\n }\n\n const hasBunLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"bun.lockb\"),\n );\n\n if (hasBunLock) {\n return [\"bun\", \"add\", \"-D\"];\n }\n\n const hasDenoLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"deno.lock\"),\n );\n\n if (hasDenoLock) {\n return [\"deno\", \"add\", \"-D\"];\n }\n\n return [\"npm\", \"install\", \"-D\"];\n};\n","import { execSync } from \"node:child_process\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitCommand extends Command {\n static commandName = \"init\";\n static description =\n \"Initialize a new balda project in the current directory\";\n static help = [\n \"Initialize a new balda project, it is given for granted that balda-js is installed in the project as a dependency\",\n \"All the files are created in the /src directory (created if not exists)\",\n \"It adds a server.ts for the file instance and a index.ts for the entry point with a dummy hello world route\",\n \"Example: npx balda init -p ./src -t true\",\n ];\n\n @flag.string({\n description:\n \"The path to the project, default is the current directory /src\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"./src\",\n })\n static srcPath: string;\n\n @flag.boolean({\n description: \"Whether to use typescript, default is true\",\n aliases: \"t\",\n name: \"typescript\",\n required: false,\n defaultValue: true,\n })\n static typescript: boolean;\n\n static devDependencies: string[] = [\n \"esbuild\",\n \"esbuild-plugin-copy\",\n \"tsx\",\n \"typescript\",\n ];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing project...\");\n const [packageManager, packageManagerCommand, devDependenciesCommand] =\n await getPackageManager();\n\n // if the package manager is npm, yarn or pnpm, install the dev dependencies since we're on node.js\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n this.logger.info(`Installing dev dependencies with ${packageManager}...`);\n\n execSync(\n `${packageManager} ${packageManagerCommand} ${this.devDependencies.join(\" \")} -${devDependenciesCommand}`,\n {\n stdio: \"inherit\",\n },\n );\n }\n\n const ext = this.typescript ? \"ts\" : \"js\";\n const serverTemplate = this.getServerTemplate();\n const indexTemplate = this.getIndexTemplate();\n\n if (!nativeFs.exists(this.srcPath)) {\n await nativeFs.mkdir(this.srcPath, { recursive: true });\n }\n\n this.logger.info(`Creating server.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/server.${ext}`,\n new TextEncoder().encode(serverTemplate),\n );\n\n this.logger.info(`Creating index.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/index.${ext}`,\n new TextEncoder().encode(indexTemplate),\n );\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n return `import { Server } from \"balda-js\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n plugins: {\n json: {\n sizeLimit: \"100kb\",\n },\n },\n});\n\nexport { serverInstance as server };\n`;\n }\n\n static getIndexTemplate() {\n return `import { server } from \"./server.js\";\n\nserver.listen(({ url }) => {\n console.log(\\`Server is running on \\${url}\\`);\n});\n`;\n }\n}\n","import { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class ListCommand extends Command {\n static commandName = \"list\";\n static description = \"List all available commands\";\n static help = [\n \"Display all registered Balda CLI commands with their descriptions\",\n \"Example: npx balda list\",\n ];\n\n static async handle(): Promise<void> {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Group user commands by category\n if (userCommands.length > 0) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n\n const categorizedCommands = this.groupByCategory(userCommands);\n this.displayCategorizedCommands(categorizedCommands);\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length > 0) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n }\n\n private static groupByCategory(\n commands: (typeof Command)[],\n ): Map<string, (typeof Command)[]> {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n }\n\n private static displayCategorizedCommands(\n categorizedCommands: Map<string, (typeof Command)[]>,\n ): void {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (commands.length === 0) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n }\n}\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager } from \"../../package.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { runtime } from \"../../runtime/runtime.js\";\nimport { Command } from \"../base_command.js\";\nimport { CommandOptions } from \"../command_types.js\";\n\nexport default class ServeCommand extends Command {\n static commandName = \"serve\";\n static description = \"Run the server in dev mode with hot reload\";\n static help = [\n \"This command is intended to be run from the root of the project\",\n \"Bun and Deno have native dev hot reload\",\n \"Runtime is automatically inferred\",\n \"Node.js requires tsx to be installed for both typescript and javascript files\",\n \"Node.js dev dependencies (tsx) are installed automatically if not detected\",\n ];\n\n static runtime = runtime.type;\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @flag({\n type: \"string\",\n aliases: [\"e\", \"s\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"d\"],\n name: \"deno-import-map\",\n required: false,\n description: \"Path to deno import map\",\n })\n static denoImportMap?: string;\n\n static async handle(): Promise<void> {\n if (this.runtime === \"bun\") {\n execSync(`bun run --watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n if (this.runtime === \"deno\") {\n let denoCommand = `deno run --watch --unstable-sloppy-imports --allow-all`;\n if (this.denoImportMap) {\n denoCommand = `${denoCommand} --import-map ${this.denoImportMap}`;\n }\n\n execSync(`${denoCommand} ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n this.handleNodeHotReload();\n }\n\n private static async handleNodeHotReload() {\n const hasTsx = fs.existsSync(\"node_modules/.bin/tsx\");\n if (!hasTsx) {\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n this.logger.info(`tsx not found in node_modules, installing...`);\n execSync(`${packageManager} ${packageCommand} tsx ${devFlag}`, {\n stdio: \"inherit\",\n });\n }\n\n const initCommand = this.calledBy !== \"node\" ? this.calledBy : \"npx\";\n execSync(`${initCommand} tsx watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n }\n}\n","export class BaldaError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","import type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\nimport type { Params, Route } from \"./router_type.js\";\n\nclass Node {\n staticChildren: Map<string, Node>;\n paramChild: { node: Node; name: string } | null;\n wildcardChild: Node | null;\n middleware: ServerRouteMiddleware[] | null;\n handler: ((req: Request, res: Response) => void) | null;\n\n constructor() {\n this.staticChildren = new Map();\n this.paramChild = null;\n this.wildcardChild = null;\n this.middleware = null;\n this.handler = null;\n }\n}\n\n/**\n * Singleton that handles the routing of requests to the appropriate handler(s).\n */\nexport class Router {\n private trees: Map<string, Node>;\n private routes: Route[];\n private middlewares: ServerRouteMiddleware[];\n private basePath: string;\n\n /**\n * Create a new router with an optional base path and default middlewares.\n * Base path is normalized so it never produces duplicate slashes and never ends with a trailing slash (except root).\n */\n constructor(\n basePath: string = \"\",\n middlewares: ServerRouteMiddleware[] = [],\n ) {\n this.trees = new Map();\n this.routes = [];\n this.middlewares = middlewares;\n this.basePath = this.normalizeBasePath(basePath);\n }\n\n /** Returns a shallow copy of all registered routes. */\n getRoutes(): Route[] {\n return this.routes.slice();\n }\n\n /**\n * Add or update a route\n * @internal\n */\n addOrUpdate(\n method: HttpMethod,\n path: string,\n middleware: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void {\n method = method.toUpperCase() as HttpMethod;\n\n // ensure root exists\n let root = this.trees.get(method);\n if (!root) {\n root = new Node();\n this.trees.set(method, root);\n }\n\n // strip query string and split into segments (handling root path correctly)\n const clean = path.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n\n let node = root;\n for (const seg of segments) {\n if (seg === \"*\") {\n if (!node.wildcardChild) {\n node.wildcardChild = new Node();\n }\n node = node.wildcardChild;\n break;\n }\n\n if (seg.startsWith(\":\")) {\n const name = seg.slice(1);\n if (!node.paramChild) {\n node.paramChild = { node: new Node(), name };\n }\n node = node.paramChild.node;\n continue;\n }\n\n // static segment\n if (!node.staticChildren.has(seg)) {\n node.staticChildren.set(seg, new Node());\n }\n node = node.staticChildren.get(seg)!;\n }\n\n // assign middleware & handler\n node.middleware = middleware;\n node.handler = handler;\n\n // upsert in registry\n const idx = this.routes.findIndex(\n (r) => r.method === method && r.path === path,\n );\n if (idx !== -1) {\n this.routes[idx].middleware = middleware;\n this.routes[idx].handler = handler;\n return;\n }\n\n this.routes.push({ method, path, middleware, handler, swaggerOptions });\n }\n\n /**\n * Find the matching route for the given HTTP method and path.\n * Returns the resolved middleware chain, handler, and extracted params; or null if not found.\n */\n find(\n method: string,\n rawPath: string,\n ): {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n } | null {\n method = method.toUpperCase();\n const root = this.trees.get(method);\n if (!root) {\n return null;\n }\n\n const clean = rawPath.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n const params: Params = {};\n\n let node = root;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n\n if (node.staticChildren.has(seg)) {\n node = node.staticChildren.get(seg)!;\n continue;\n }\n\n if (node.paramChild) {\n params[node.paramChild.name] = seg;\n node = node.paramChild.node;\n continue;\n }\n\n if (node.wildcardChild) {\n params[\"*\"] = segments.slice(i).join(\"/\");\n node = node.wildcardChild;\n break;\n }\n\n return null;\n }\n\n if (!node.handler || !node.middleware) {\n return null;\n }\n\n return { middleware: node.middleware, handler: node.handler, params };\n }\n\n /**\n * Register a GET route under this router's base path.\n */\n get(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"GET\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a POST route under this router's base path.\n */\n post(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"POST\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PATCH route under this router's base path.\n */\n patch(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PATCH\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PUT route under this router's base path.\n */\n put(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PUT\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a DELETE route under this router's base path.\n */\n delete(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"DELETE\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an OPTIONS route under this router's base path.\n */\n options(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"OPTIONS\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an HEAD route under this router's base path.\n */\n head(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"HEAD\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Create a grouped router that shares a base path and middlewares.\n * The callback receives a child router where routes are defined; routes\n * are then merged back into the parent with the composed base path and middlewares.\n */\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: Router) => void,\n ): void;\n group(path: string, cb: (router: Router) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: Router) => void),\n maybeCb?: (router: Router) => void,\n ): void {\n const groupMiddlewares = Array.isArray(middlewareOrCb)\n ? middlewareOrCb\n : typeof middlewareOrCb === \"function\"\n ? []\n : middlewareOrCb\n ? [middlewareOrCb]\n : [];\n const cb = (\n Array.isArray(middlewareOrCb)\n ? maybeCb\n : typeof middlewareOrCb === \"function\"\n ? (middlewareOrCb as (router: Router) => void)\n : undefined\n ) as ((router: Router) => void) | undefined;\n\n const childBase = this.joinPath(path);\n const child = new Router(childBase, [\n ...this.middlewares,\n ...groupMiddlewares,\n ]);\n cb?.(child);\n for (const r of child.getRoutes()) {\n this.addOrUpdate(\n r.method as HttpMethod,\n r.path,\n r.middleware,\n r.handler,\n r.swaggerOptions,\n );\n }\n }\n\n /**\n * Apply global middlewares to all routes\n * @param middlewares - The middlewares to apply\n * @internal\n */\n applyGlobalMiddlewaresToAllRoutes(\n middlewares: ServerRouteMiddleware[],\n ): void {\n for (const route of this.routes) {\n this.addOrUpdate(\n route.method as HttpMethod,\n route.path,\n [...middlewares, ...(route.middleware || [])],\n route.handler,\n );\n }\n }\n\n private normalizeBasePath(path: string): string {\n if (!path) {\n return \"\";\n }\n\n let normalized = path.replace(/\\s+/g, \"\");\n normalized = normalized.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n\n if (normalized.length > 1) {\n normalized = normalized.replace(/\\/+$/g, \"\");\n }\n\n return normalized;\n }\n\n private joinPath(path: string): string {\n const parts = [this.basePath, path].filter(\n (v) => typeof v === \"string\" && v.length > 0,\n ) as string[];\n let joined = parts.join(\"/\");\n joined = joined.replace(/\\/+/g, \"/\");\n if (!joined.startsWith(\"/\")) {\n joined = \"/\" + joined;\n }\n if (joined.length > 1) {\n joined = joined.replace(/\\/+$/g, \"\");\n }\n return joined;\n }\n}\n\n/** Main singleton router instance */\nexport const router = new Router();\n","import { flag } from \"../../decorators/command/flag.js\";\nimport { BaldaError } from \"../../errors/balda_error.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { router } from \"../../server/router/router.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class RoutesListCommand extends Command {\n static commandName = \"routes-list\";\n static description = \"List all routes defined\";\n static help = [\n \"Display all routes defined in the project\",\n \"Example: npx balda routes-list\",\n ];\n\n @flag.string({\n aliases: [\"e\", \"s\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n static async handle(): Promise<void> {\n await import(nativePath.resolve(nativeCwd.getCwd(), this.entry)).catch(\n () => {\n throw new BaldaError(\n `Could not import entry path ${this.entry}, make sure to give a valid path to this command`,\n );\n },\n );\n\n const routes = router.getRoutes();\n\n if (!routes.length) {\n console.log(\"No routes found.\");\n return;\n }\n\n // ANSI colors\n const colors = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n red: \"\\x1b[31m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n };\n\n const methodColors: Record<string, string> = {\n GET: colors.green,\n POST: colors.yellow,\n PUT: colors.blue,\n PATCH: colors.magenta,\n DELETE: colors.red,\n OPTIONS: colors.cyan,\n HEAD: colors.gray,\n };\n\n const methodOrder = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ];\n const sortedRoutes = routes.slice().sort((a, b) => {\n const methodCompare =\n methodOrder.indexOf(a.method) - methodOrder.indexOf(b.method);\n if (methodCompare !== 0) {\n return methodCompare;\n }\n return a.path.localeCompare(b.path);\n });\n\n console.log(`\\n${colors.bold}✨ Registered Routes:${colors.reset}\\n`);\n\n const maxMethodLength = 7;\n const maxPathLength = Math.min(\n Math.max(...sortedRoutes.map((r) => r.path.length)),\n 50,\n );\n\n sortedRoutes.forEach((route) => {\n const color = methodColors[route.method] || colors.reset;\n const method = route.method.padEnd(maxMethodLength);\n const path = route.path.padEnd(maxPathLength);\n\n // Build info parts\n const infoParts: string[] = [];\n\n // Handler name - always show it\n const handlerName = route.handler.name || \"anonymous\";\n infoParts.push(`${colors.dim}${handlerName}${colors.reset}`);\n\n // Middleware count\n if (route.middleware.length > 0) {\n infoParts.push(\n `${colors.cyan}${route.middleware.length} middleware${colors.reset}`,\n );\n }\n\n // Swagger metadata\n if (route.swaggerOptions) {\n const swagger = route.swaggerOptions;\n\n if (swagger.service) {\n infoParts.push(`${colors.blue}[${swagger.service}]${colors.reset}`);\n }\n\n if (swagger.name) {\n infoParts.push(`${colors.dim}\"${swagger.name}\"${colors.reset}`);\n }\n\n if (swagger.deprecated) {\n infoParts.push(`${colors.red}[DEPRECATED]${colors.reset}`);\n }\n\n if (swagger.security) {\n infoParts.push(`${colors.yellow}🔒 secured${colors.reset}`);\n }\n }\n\n // Build the output line\n const info =\n infoParts.length > 0\n ? ` ${colors.dim}│${colors.reset} ${infoParts.join(\" \")}`\n : \"\";\n console.log(` ${color}${method}${colors.reset} ${path}${info}`);\n });\n\n console.log(\n `\\n${colors.bold}Total: ${routes.length} routes${colors.reset}\\n`,\n );\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport type { Command } from \"./base_command.js\";\nimport BuildCommand from \"./base_commands/build_command.js\";\nimport GenerateCommand from \"./base_commands/generate_command.js\";\nimport GenerateControllerCommand from \"./base_commands/generate_controller.js\";\nimport GenerateCronCommand from \"./base_commands/generate_cron.js\";\nimport GenerateMiddlewareCommand from \"./base_commands/generate_middleware.js\";\nimport GeneratePluginCommand from \"./base_commands/generate_plugin.js\";\nimport GenerateQueueCommand from \"./base_commands/generate_queue.js\";\nimport InitCommand from \"./base_commands/init_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport ServeCommand from \"./base_commands/serve_command.js\";\nimport RoutesListCommand from \"./base_commands/routes_list_command.js\";\n\n// Base commands are always loaded\nexport const baseCommands = [\n GeneratePluginCommand,\n GenerateCommand,\n GenerateCronCommand,\n GenerateQueueCommand,\n GenerateControllerCommand,\n GenerateMiddlewareCommand,\n InitCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n RoutesListCommand,\n];\n\n/**\n * Singleton that registers all commands and provides a way to execute them.\n * Commands are loaded from the commands directory, and are expected to have a default export with the command class that extends the base command class.\n * Commands can be run both as `.js` or `.ts` files. If the file is a ts file `typescript` npm package must be installed.\n * You can use the `CommandRegistry.setCommandsPattern` method to change the pattern of the commands to load.\n * @example\n * // commands/test.ts\n * export default class TestCommand extends Command {\n * static name = \"test\";\n * async handle() {\n * console.log(\"Test command\");\n * }\n * }\n */\nexport class CommandRegistry {\n private commands: Map<string, typeof Command>;\n private builtInCommands: Set<string>;\n static commandsPattern = \"src/commands/**/*.{ts,js}\";\n static logger = logger;\n\n /**\n * Private constructor to prevent direct instantiation\n * @internal Not meant to be used outside by the user\n */\n private constructor() {\n this.commands = new Map();\n this.builtInCommands = new Set();\n }\n\n static getInstance() {\n return new CommandRegistry();\n }\n\n static setCommandsPattern(pattern: string) {\n this.commandsPattern = pattern;\n }\n\n getCommand(name: string): typeof Command | null {\n return this.commands.get(name) ?? null;\n }\n\n getCommands(): (typeof Command)[] {\n return Array.from(this.commands.values());\n }\n\n getBuiltInCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter((cmd) =>\n this.builtInCommands.has(cmd.commandName),\n );\n }\n\n getUserDefinedCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter(\n (cmd) => !this.builtInCommands.has(cmd.commandName),\n );\n }\n\n isBuiltInCommand(commandName: string): boolean {\n return this.builtInCommands.has(commandName);\n }\n\n async loadCommands(commandsPattern: string) {\n CommandRegistry.logger.info(`Loading commands from ${commandsPattern}`);\n\n const commandFiles = await glob(commandsPattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n // if even one file is ts check if ts-node is installed\n if (commandFiles.some((file) => file.endsWith(\".ts\"))) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n } catch {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n }\n\n for (const commandFile of commandFiles) {\n const command = await import(commandFile)\n .then((module) => {\n if (module.default) {\n return module.default;\n }\n\n return module;\n })\n .catch((error) => {\n CommandRegistry.logger.error(\n `Error loading command ${commandFile}: ${error}`,\n );\n return null;\n });\n\n if (command) {\n this.commands.set(command.commandName, command);\n }\n }\n\n for (const command of baseCommands) {\n this.commands.set(command.commandName, command);\n this.builtInCommands.add(command.commandName);\n }\n }\n}\n\nexport const commandRegistry = CommandRegistry.getInstance();\n","import { findSimilarCommands } from \"./commands/arg_parser.js\";\nimport type { Command } from \"./commands/base_command.js\";\nimport {\n CommandRegistry,\n commandRegistry,\n} from \"./commands/command_registry.js\";\nimport { nativeArgs } from \"./runtime/native_args.js\";\nimport { nativeExit } from \"./runtime/native_exit.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\n// Helper functions for grouping and displaying commands\nconst groupByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\nconst displayCategorizedCommands = (\n categorizedCommands: Map<string, (typeof Command)[]>,\n): void => {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (!commands.length) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Show deprecated warning if applicable\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n};\n\n/**\n * CLI entry point\n */\nexport const cli = async () => {\n await commandRegistry.loadCommands(CommandRegistry.commandsPattern);\n const [commandName, ...rest] = nativeArgs.getCliArgs();\n\n // Handle global help flag\n if (!commandName || rest.includes(\"-h\") || rest.includes(\"--help\")) {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Display user commands grouped by category\n if (userCommands.length) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n displayCategorizedCommands(groupByCategory(userCommands));\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Show deprecated warning if applicable\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n\n nativeExit.exit(0);\n return;\n }\n\n const CommandClass = commandRegistry.getCommand(commandName);\n if (!CommandClass) {\n console.error(\n findSimilarCommands(\n commandName,\n commandRegistry\n .getCommands()\n .filter((command) => command && command.commandName)\n .map((command) => command.commandName),\n ) || `Command ${commandName} not found`,\n );\n\n nativeExit.exit(1);\n return;\n }\n\n const commandClass = CommandClass as unknown as typeof Command;\n commandClass.calledBy = nativePath.basename(nativeArgs.getCliCaller());\n\n // Deprecated command warning\n if (commandClass.options?.deprecated) {\n const message =\n commandClass.options.deprecated.message || \"This command is deprecated\";\n const replacement = commandClass.options.deprecated.replacement;\n console.warn(`\\x1b[33m⚠️ Warning: ${message}\\x1b[0m`);\n if (replacement) {\n console.warn(`\\x1b[33m Use '${replacement}' instead.\\x1b[0m\\n`);\n }\n }\n\n // Check if the command has the help flag\n commandClass.handleHelpFlag(commandClass.flags);\n\n // Validate the command context\n commandClass.validateContext(commandClass);\n\n // Run custom validation if provided\n if (commandClass.options?.validate) {\n const isValid = await commandClass.options.validate(commandClass);\n if (!isValid) {\n console.error(\"Command validation failed\");\n nativeExit.exit(1);\n return;\n }\n }\n\n // Handle the command\n await commandClass.handle();\n\n // Exit the process if the command is not keepAlive\n const keepAlive =\n (CommandClass as unknown as typeof Command).options?.keepAlive ?? false;\n if (!keepAlive) {\n nativeExit.exit(0);\n }\n};\n\nif (typeof process !== \"undefined\") {\n // Try to run CLI without ts-node first (for js files)\n cli().catch(async (err) => {\n if (\n err?.message?.includes(\"SyntaxError\") ||\n err?.code === \"ERR_UNKNOWN_FILE_EXTENSION\"\n ) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n cli().catch((retryErr) => {\n CommandRegistry.logger.error(retryErr);\n process.exit(1);\n });\n } catch (registerErr) {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n } else {\n CommandRegistry.logger.error(err);\n process.exit(1);\n }\n });\n} else {\n cli().catch((err) => {\n CommandRegistry.logger.error(err);\n nativeExit.exit(1);\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/runtime/runtime.ts","../src/runtime/native_args.ts","../src/utils.ts","../src/commands/arg_parser.ts","../src/logger/logger.ts","../src/runtime/native_cwd.ts","../src/metadata_store.ts","../src/decorators/command/arg.ts","../src/decorators/command/flag.ts","../src/runtime/native_exit.ts","../src/commands/base_command.ts","../src/commands/base_commands/build_command.ts","../src/runtime/native_fs.ts","../src/runtime/native_path.ts","../src/commands/base_commands/generate_command.ts","../src/commands/base_commands/generate_controller.ts","../src/commands/base_commands/generate_cron.ts","../src/commands/base_commands/generate_middleware.ts","../src/commands/base_commands/generate_plugin.ts","../src/commands/base_commands/generate_queue.ts","../src/package.ts","../src/commands/base_commands/init_command.ts","../src/commands/base_commands/list_command.ts","../src/commands/base_commands/serve_command.ts","../src/errors/balda_error.ts","../src/server/router/router.ts","../src/commands/base_commands/routes_list_command.ts","../src/commands/command_registry.ts","../src/cli.ts"],"names":["RunTime","runtime","NativeArgs","args","scriptIndex","i","arg","argBasename","j","nativeArgs","levenshteinDistance","str1","str2","matrix","indicator","toLowerSnakeCase","str","toPascalCase","input","word","toDashCase","parseFlag","equalIndex","name","value","parseFlagValue","numValue","parseCliArgsAndFlags","cliArgs","parsedArgs","parsedFlags","flag","nextArg","existingValue","findSimilarCommands","notFoundCommand","availableCommands","searchTerm","similarCommands","command","normalizedCommand","distance","maxDistance","suggestions","cmd","getCalledCommandName","createBaseLogger","pino","label","logger","NativeCwd","nativeCwd","MetadataStore","target","propertyKey","VALIDATION_ERROR_SYMBOL","options","currentCommandName","argName","argValue","errorChain","flagDecorator","primaryFlagName","flagAliases","allFlagVariants","resolvedFlagValue","flagVariant","possibleNames","flagName","rawValue","val","stringVal","NativeExit","code","nativeExit","Command","flags","helpFlags","commandName","description","helpText","helpOutput","info","commandClass","colors","lines","helpLines","line","allMeta","argsMeta","meta","flagsMeta","required","aliases","flagKey","flagValue","valueDisplay","example","error","index","errorNumber","errorType","errorName","BuildCommand","esbuild","err","assetsDir","path","plugins","copy","fs","outFile","result","__decorateClass","NativeFs","buffer","arrayBuffer","data","stats","bunStats","denoStats","nativeFs","NativePath","inputPath","paths","nativePath","GenerateCommand","commandRegistry","commandType","commandTemplate","GenerateControllerCommand","controllerTemplate","fileName","className","GenerateCron","cronTemplate","GenerateMiddlewareCommand","middlewareTemplate","middlewareName","GeneratePluginCommand","pluginTemplate","GenerateQueueCommand","isValidLiteral","queueTemplate","getPackageManager","InitCommand","packageManager","packageManagerCommand","devDependenciesCommand","execSync","ext","serverTemplate","indexTemplate","ListCommand","builtInCommands","userCommands","categorizedCommands","maxNameLength","desc","deprecatedTag","commands","map","category","sortedCategories","color","ServeCommand","denoCommand","packageCommand","devFlag","initCommand","BaldaError","message","Node","Router","_Router","basePath","middlewares","method","middleware","handler","swaggerOptions","root","trimmed","segments","node","seg","idx","r","rawPath","params","middlewareOrHandler","maybeHandler","maybeSwagger","fullPath","isHandlerOnly","provided","middlewareOrCb","maybeCb","groupMiddlewares","cb","childBase","child","route","normalized","joined","v","router","RoutesListCommand","routes","methodColors","methodOrder","sortedRoutes","a","b","methodCompare","maxMethodLength","maxPathLength","infoParts","handlerName","swagger","baseCommands","CommandRegistry","_CommandRegistry","pattern","commandsPattern","commandFiles","glob","file","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","rest","CommandClass","replacement","retryErr"],"mappings":"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","file":"cli.js","sourcesContent":["export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","import pino from \"pino\";\nimport type { LoggerOptions } from \"./logger_types.js\";\n\nconst createBaseLogger = () => {\n const baseOptions: LoggerOptions = {\n level: \"info\",\n formatters: {\n level: (label) => {\n return { level: label };\n },\n },\n };\n\n return pino(baseOptions);\n};\n\n/**\n * The logger instance, can be overridden by the `defineLoggerConfig` function\n */\nexport let logger = createBaseLogger();\n\n/**\n * Define the logger config, this will override the logger instance with the given options\n * @param options - The logger options\n */\nexport const defineLoggerConfig = (options?: LoggerOptions) => {\n logger = pino(options);\n};\n","import { runtime } from \"./runtime.js\";\n\nclass NativeCwd {\n getCwd(): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n return process.cwd();\n case \"deno\":\n return Deno.cwd();\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeCwd = new NativeCwd();\n","/**\n * Cross-runtime metadata store used to store metadata for the decorators without using reflect-metadata\n */\nexport class MetadataStore {\n private static metadata = new WeakMap<any, Map<string | symbol, any>>();\n\n /**\n * Set the metadata for the given target and property key\n */\n static set(target: any, propertyKey: string, value: any): void {\n if (!this.metadata.has(target)) {\n this.metadata.set(target, new Map());\n }\n this.metadata.get(target)!.set(propertyKey, value);\n }\n\n /**\n * Get the metadata for the given target and property key\n */\n static get(target: any, propertyKey: string): any {\n return this.metadata.get(target)?.get(propertyKey);\n }\n\n /**\n * Get all the metadata for the given target\n */\n static getAll(target: any): Map<string | symbol, any> {\n return this.metadata.get(target) || new Map();\n }\n\n /**\n * Delete the metadata for the given target and property key\n */\n static delete(target: any, propertyKey: string | symbol): void {\n this.metadata.get(target)?.delete(propertyKey.toString());\n }\n\n /**\n * Clear all the metadata for the given target\n */\n static clear(target: any): void {\n this.metadata.delete(target);\n }\n}\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\nimport type { ArgOptions } from \"./command_decorator_types.js\";\n\nexport const VALIDATION_ERROR_SYMBOL = \"VALIDATION_ERROR\";\nexport const ARG_SYMBOL = \"ARG\";\n\n/**\n * The arguments of the current command. Shifted to get the next argument each time for each argument decorator.\n */\nlet args = parseCliArgsAndFlags().args.slice(1);\n\n/**\n * Decorator to mark a field of a command class as an argument.\n * @param options - The options for the argument.\n * @warning Arguments are evaluated in the order they are defined in the Command class.\n */\nexport const arg = (options: ArgOptions) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const argName = propertyKey;\n MetadataStore.set(target, propertyKey, {\n type: \"arg\",\n name: argName,\n description: options.description,\n });\n\n let argValue = args.length ? args.shift() : options.defaultValue;\n if (options.required && !argValue) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"arg\",\n name: argName,\n message: \"Required argument not provided\",\n },\n ]);\n\n return;\n }\n\n if (options.parse && argValue) {\n argValue = options.parse(argValue);\n }\n\n Object.defineProperty(target, propertyKey, {\n value: argValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n","import {\n getCalledCommandName,\n parseCliArgsAndFlags,\n} from \"../../commands/arg_parser.js\";\nimport type { Command } from \"../../commands/base_command.js\";\nimport { VALIDATION_ERROR_SYMBOL } from \"./arg.js\";\nimport type {\n FlagOptions,\n FlagType,\n InferFlagType,\n} from \"./command_decorator_types.js\";\nimport { MetadataStore } from \"../../metadata_store.js\";\n\n/**\n * Decorator for defining command-line flags with type safety.\n *\n * Supports multiple flag types:\n * - `boolean`: true/false flags\n * - `string`: text values\n * - `number`: numeric values\n * - `list`: array of strings (can be specified multiple times)\n *\n * @example\n * ```typescript\n * class MyCommand extends Command {\n * @flag.string({ name: \"name\", description: \"User name\" })\n * name?: string;\n *\n * @flag.list({ name: \"tag\", aliases: [\"t\"], description: \"Tags\" })\n * tags!: string[];\n * }\n * ```\n *\n * Usage:\n * - Single flag: `--name=value` or `--name value`\n * - List flag: `--tag=one --tag=two --tag=three`\n * - Aliases: `-t one -t two`\n */\nconst flagDecorator = <T extends FlagType>(options: FlagOptions<T>) => {\n return (target: any, propertyKey: string) => {\n const currentCommandName = getCalledCommandName();\n // If the called command is not the same as the command class, skip the decorator\n if (\n !currentCommandName ||\n currentCommandName !== (target as typeof Command).commandName\n ) {\n return;\n }\n\n const primaryFlagName = options.name || propertyKey;\n const parsedFlags = parseCliArgsAndFlags().flags;\n const flagAliases = options.aliases || [];\n const allFlagVariants = [primaryFlagName, ...flagAliases];\n\n // Find the actual flag value by checking all possible flag names\n let resolvedFlagValue = options.defaultValue;\n\n for (const flagVariant of allFlagVariants) {\n // Check both with and without prefixes\n const possibleNames = [\n flagVariant,\n `-${flagVariant}`,\n `--${flagVariant}`,\n ];\n\n for (const flagName of possibleNames) {\n if (flagName in parsedFlags) {\n const rawValue = parsedFlags[flagName];\n\n if (options.type === \"list\") {\n // For list type, ensure we have an array\n const arrayValue = Array.isArray(rawValue) ? rawValue : [rawValue];\n resolvedFlagValue = arrayValue.map((val) => {\n const stringVal = String(val);\n return options.parse ? options.parse(stringVal) : stringVal;\n }) as InferFlagType<T>;\n } else {\n resolvedFlagValue = rawValue as InferFlagType<T>;\n\n if (options.type === \"boolean\") {\n resolvedFlagValue = Boolean(\n resolvedFlagValue,\n ) as InferFlagType<T>;\n } else if (options.type === \"number\") {\n resolvedFlagValue = Number(resolvedFlagValue) as InferFlagType<T>;\n }\n\n if (options.parse) {\n resolvedFlagValue = options.parse(resolvedFlagValue);\n }\n }\n\n break;\n }\n }\n\n if (resolvedFlagValue !== options.defaultValue) {\n break;\n }\n }\n\n MetadataStore.set(target, propertyKey, {\n type: \"flag\",\n name: primaryFlagName,\n aliases: flagAliases || [],\n description: options.description,\n });\n\n if (options.required) {\n const isValueMissing =\n options.type === \"list\"\n ? !resolvedFlagValue ||\n (Array.isArray(resolvedFlagValue) && resolvedFlagValue.length === 0)\n : !resolvedFlagValue;\n\n if (isValueMissing) {\n const errorChain = MetadataStore.get(target, VALIDATION_ERROR_SYMBOL);\n MetadataStore.set(target, VALIDATION_ERROR_SYMBOL, [\n ...(errorChain || []),\n {\n type: \"flag\",\n name: primaryFlagName,\n message: \"Required flag not provided\",\n },\n ]);\n return;\n }\n }\n\n Object.defineProperty(target, propertyKey, {\n value: resolvedFlagValue,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n };\n};\n\n/** Shorthand decorator for boolean flags */\nflagDecorator.boolean = (options: Omit<FlagOptions<\"boolean\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"boolean\" });\n};\n\n/** Shorthand decorator for string flags */\nflagDecorator.string = (options: Omit<FlagOptions<\"string\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"string\" });\n};\n\n/** Shorthand decorator for number flags */\nflagDecorator.number = (options: Omit<FlagOptions<\"number\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"number\" });\n};\n\n/** Shorthand decorator for list flags (can be specified multiple times) */\nflagDecorator.list = (options: Omit<FlagOptions<\"list\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"list\" });\n};\n\nexport const flag = flagDecorator;\n","import { runtime } from \"./runtime.js\";\n\nclass NativeExit {\n exit(code: number): void {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n process.exit(code);\n case \"deno\":\n Deno.exit(code);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeExit = new NativeExit();\n","import { VALIDATION_ERROR_SYMBOL } from \"../decorators/command/arg.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { MetadataStore } from \"../metadata_store.js\";\nimport { nativeExit } from \"../runtime/native_exit.js\";\nimport {\n Argument,\n type FlagSchema,\n parseCliArgsAndFlags,\n} from \"./arg_parser.js\";\nimport type { CommandOptions } from \"./command_types.js\";\n\n/**\n * Base class for all cli commands.\n * @abstract\n */\nexport abstract class Command {\n /**\n * The name of the command.\n */\n static commandName: string = this.name;\n /**\n * package manager that called the command (e.g. npx, yarn, bun etc.)\n */\n static calledBy: string = this.name;\n /**\n * The description of the command.\n */\n static description: string = \"\";\n /**\n * The help text of the command.\n */\n static help: string[] | string = [];\n /**\n * The options of the command.\n */\n static options: CommandOptions = {\n keepAlive: false,\n };\n\n /**\n * Static arguments in order to be validated by decorators. Will be fetched in the command instance.\n */\n static args: Argument[] = parseCliArgsAndFlags().args.slice(1);\n\n /**\n * Static flags in order to be validated by decorators. Will be fetched in the command instance.\n */\n static flags: FlagSchema = parseCliArgsAndFlags().flags;\n\n static readonly logger = logger;\n\n /**\n * Main entry point for the command.\n */\n static handle(): Promise<void> {\n throw new Error(\n `Handle method not implemented in command class ${this.name}`,\n );\n }\n\n /**\n * Enhanced help flag handler with rich formatting and command information\n */\n static handleHelpFlag(flags: FlagSchema): void {\n const helpFlags = [\"-h\", \"--help\"];\n const hasHelpFlag = Object.keys(flags).some((flag) =>\n helpFlags.includes(flag),\n );\n\n if (!hasHelpFlag) {\n return;\n }\n\n const commandName = this.commandName;\n const description = this.description || \"No description available\";\n const helpText = this.help || [];\n const options = this.options;\n\n const helpOutput = this.generateHelpOutput(\n {\n name: commandName,\n description,\n helpText,\n options,\n args: this.args,\n flags: this.flags,\n },\n this,\n );\n\n console.log(helpOutput);\n nativeExit.exit(0);\n }\n\n private static readonly generateHelpOutput = (\n info: {\n name: string;\n description: string;\n helpText: string[] | string;\n options: CommandOptions;\n args: Argument[];\n flags: FlagSchema;\n },\n commandClass: any,\n ): string => {\n const { name, description, helpText, options, args, flags } = info;\n\n const colors = {\n title: \"\\x1b[1;36m\", // Bright cyan\n subtitle: \"\\x1b[1;33m\", // Bright yellow\n description: \"\\x1b[0;37m\", // White\n code: \"\\x1b[0;32m\", // Green\n flag: \"\\x1b[0;35m\", // Magenta\n reset: \"\\x1b[0m\", // Reset\n error: \"\\x1b[0;31m\", // Red\n success: \"\\x1b[0;32m\", // Green\n info: \"\\x1b[0;34m\", // Blue\n };\n\n const lines = [\n `${colors.title}${name}${colors.reset}`,\n `${colors.description}${description}${colors.reset}`,\n \"\",\n `${colors.subtitle}Usage:${colors.reset}`,\n ` ${colors.code}${name}${colors.reset} [options] [arguments]`,\n \"\",\n `${colors.subtitle}Options:${colors.reset}`,\n ` ${colors.flag}-h, --help${colors.reset} Show this help message`,\n \"\",\n `${colors.subtitle}Command Options:${colors.reset}`,\n ` ${colors.flag}keepAlive${colors.reset} ${(options?.keepAlive ?? false) ? colors.success + \"Enabled\" + colors.reset : colors.error + \"Disabled\" + colors.reset}`,\n \"\",\n ];\n\n if (helpText) {\n const helpLines = Array.isArray(helpText) ? helpText : [helpText];\n lines.push(`${colors.subtitle}Help:${colors.reset}`);\n helpLines.forEach((line) => {\n lines.push(` ${colors.description}${line}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n // Always show available arguments and flags from decorators\n const allMeta = MetadataStore.getAll(commandClass);\n const argsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"arg\",\n );\n const flagsMeta = Array.from(allMeta.values()).filter(\n (meta) => meta.type === \"flag\",\n );\n\n if (argsMeta.length) {\n lines.push(`${colors.subtitle}Available Arguments:${colors.reset}`);\n argsMeta.forEach((meta) => {\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.code}${meta.name}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n if (flagsMeta.length) {\n lines.push(`${colors.subtitle}Available Flags:${colors.reset}`);\n flagsMeta.forEach((meta) => {\n if (meta.aliases && !Array.isArray(meta.aliases)) {\n meta.aliases = [meta.aliases];\n }\n\n const aliases = meta.aliases.length\n ? ` ${colors.flag}(${meta.aliases.join(\", \")})${colors.reset}`\n : \"\";\n const required = meta.required\n ? ` ${colors.error}(required)${colors.reset}`\n : \"\";\n const description = meta.description\n ? ` ${colors.description}${meta.description}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}--${meta.name}${aliases}${colors.reset}${required}${description}`,\n );\n });\n lines.push(\"\");\n }\n\n // Show current context if arguments or flags were provided\n if ((args?.length ?? 0) > 0 || (flags && Object.keys(flags).length > 0)) {\n lines.push(`${colors.subtitle}Current Context:${colors.reset}`);\n\n if (args?.length) {\n lines.push(\n ` ${colors.info}Provided Arguments:${colors.reset} ${colors.code}${args.join(\" \")}${colors.reset}`,\n );\n }\n\n if (flags && Object.keys(flags).length > 0) {\n lines.push(` ${colors.info}Provided Flags:${colors.reset}`);\n Object.keys(flags).forEach((flagKey) => {\n const flagValue = flags[flagKey];\n const valueDisplay =\n flagValue !== undefined && flagValue !== null\n ? ` = ${colors.code}${flagValue}${colors.reset}`\n : \"\";\n lines.push(\n ` ${colors.flag}${flagKey}${colors.reset}${valueDisplay}`,\n );\n });\n }\n lines.push(\"\");\n }\n\n if (\n helpText &&\n (Array.isArray(helpText)\n ? helpText.some((line) => line.includes(\"example\"))\n : helpText.includes(\"example\"))\n ) {\n lines.push(`${colors.subtitle}Examples:${colors.reset}`);\n const examples = Array.isArray(helpText)\n ? helpText.filter((line) => line.includes(\"example\"))\n : [helpText.split(\"example\")[1].trim()];\n examples.forEach((example) => {\n lines.push(` ${colors.code}${example}${colors.reset}`);\n });\n lines.push(\"\");\n }\n\n return lines.join(\"\\n\");\n };\n\n static readonly validateContext = (target: any): void => {\n const errorChain = Array.from(\n MetadataStore.get(target, VALIDATION_ERROR_SYMBOL) || [],\n ) as Array<{ type: string; name: string; message: string }>;\n\n if (errorChain.length) {\n const colors = {\n error: \"\\x1b[0;31m\", // Red\n title: \"\\x1b[1;31m\", // Bright red\n reset: \"\\x1b[0m\", // Reset\n info: \"\\x1b[0;34m\", // Blue\n code: \"\\x1b[0;32m\", // Green\n };\n\n console.error(`${colors.title}❌ Validation Errors:${colors.reset}`);\n console.error(\"\");\n\n errorChain.forEach((error, index) => {\n const errorNumber = `${colors.info}${index + 1}.${colors.reset}`;\n const errorType = `${colors.error}${error.type.toUpperCase()}${colors.reset}`;\n const errorName = `${colors.code}${error.name}${colors.reset}`;\n\n console.error(\n ` ${errorNumber} ${errorType} ${errorName}: ${colors.error}${error.message}${colors.reset}`,\n );\n });\n\n console.error(\"\");\n console.error(\n `${colors.info}💡 Tip: Use --help for usage information${colors.reset}`,\n );\n nativeExit.exit(1);\n }\n };\n}\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class BuildCommand extends Command {\n static commandName = \"build\";\n static description = \"Build the project for production, node.js only\";\n static help = [\n \"Build the project for production, node.js only\",\n \"It will create a production build of the project in the dist directory\",\n \"Must have a tsconfig.json file in the root of the project\",\n \"Must have esbuild installed as a dependency while running the command\",\n \"Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory\",\n \"Example: npx balda build -t ./tsconfig.json -a ./assets\",\n ];\n\n @flag({\n type: \"boolean\",\n aliases: [\"c\"],\n name: \"clear-dist\",\n required: false,\n defaultValue: false,\n description:\n \"Whether to clear the dist directory before building the project\",\n })\n static clearDist: boolean;\n\n @flag({\n type: \"string\",\n aliases: [\"e\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"./dist\",\n description: \"The path to the output directory, default is ./dist\",\n })\n static output: string;\n\n @flag({\n type: \"string\",\n aliases: [\"t\"],\n name: \"tsconfig\",\n required: false,\n defaultValue: \"./tsconfig.json\",\n description:\n \"The path to the tsconfig.json file, default is ./tsconfig.json\",\n })\n static tsconfig: string;\n\n @flag({\n type: \"string\",\n aliases: [\"a\"],\n name: \"assets\",\n required: false,\n description:\n \"The path to the assets directory that will be loaded in the production build\",\n })\n static assets: string;\n\n @flag({\n type: \"string\",\n aliases: [\"f\"],\n name: \"format\",\n required: false,\n defaultValue: \"esm\",\n description:\n \"The format to build the project, default is esm, can be 'esm' or 'cjs'\",\n })\n static format: \"esm\" | \"cjs\";\n\n @flag({\n type: \"string\",\n aliases: [\"p\"],\n name: \"packages\",\n required: false,\n defaultValue: \"external\",\n description:\n \"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'\",\n })\n static packages: \"external\" | \"bundle\";\n\n @flag({\n type: \"boolean\",\n aliases: [\"s\"],\n name: \"sourcemap\",\n required: false,\n defaultValue: true,\n description: \"Whether to generate sourcemaps or not, default is true\",\n })\n static sourcemap: boolean;\n\n static async handle(): Promise<void> {\n if (typeof process === undefined) {\n this.logger.error(\"Build command is only supported in node.js\");\n process.exit(1);\n }\n\n if (![\"esm\", \"cjs\"].includes(this.format)) {\n this.logger.error(\"Invalid format, must be 'esm' or 'cjs'\");\n process.exit(1);\n }\n\n if (![\"bundle\", \"external\"].includes(this.packages)) {\n this.logger.error(\"Invalid packages, must be 'bundle' or 'external'\");\n process.exit(1);\n }\n\n const esbuild = await import(\"esbuild\").catch((err) => {\n this.logger.error(\n \"esbuild is not installed, please install it with `npm install -D esbuild` to use the build command\",\n );\n throw new Error(\"esbuild is not installed\");\n });\n\n const assetsDir = path.join(this.output, \"assets\");\n const plugins = [];\n if (this.assets) {\n const { copy } = await import(\"esbuild-plugin-copy\").catch((err) => {\n this.logger.error(\n \"esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command\",\n );\n throw new Error(\"esbuild-plugin-copy is not installed\");\n });\n\n if (!fs.existsSync(assetsDir)) {\n fs.mkdirSync(assetsDir, { recursive: true });\n }\n\n plugins.push(\n copy({\n assets: {\n from: this.assets,\n to: assetsDir,\n },\n }),\n );\n }\n\n if (this.clearDist && fs.existsSync(this.output)) {\n this.logger.info(`Clearing dist directory...`);\n fs.rmSync(this.output, { recursive: true });\n }\n\n this.logger.info(`Building project...`);\n const outFile = path.join(this.output, \"server.js\");\n const result = await esbuild.build({\n tsconfig: this.tsconfig,\n entryPoints: [this.entry],\n bundle: true,\n platform: \"node\",\n outfile: outFile,\n minify: true,\n sourcemap: this.sourcemap,\n plugins,\n format: this.format,\n packages: this.packages,\n });\n\n if (result.errors.length) {\n this.logger.error(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n errors: result.errors,\n },\n null,\n 2,\n ),\n );\n\n process.exit(1);\n }\n\n if (result.warnings.length) {\n this.logger.warn(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n warnings: result.warnings,\n },\n null,\n 2,\n ),\n );\n }\n\n this.logger.info(\n JSON.stringify(\n {\n message: `Project built successfully in ${outFile}`,\n output: outFile,\n assets: this.assets ? true : false,\n },\n null,\n 2,\n ),\n );\n process.exit(0);\n }\n}\n","import { runtime } from \"./runtime.js\";\n\nclass NativeFs {\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n return Bun.file(path).exists();\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(path: string): Promise<Uint8Array> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const buffer = await fs.readFile(path);\n return new Uint8Array(buffer);\n case \"bun\":\n const arrayBuffer = await Bun.file(path).arrayBuffer();\n return new Uint8Array(arrayBuffer);\n case \"deno\":\n return new Uint8Array(await Deno.readFile(path));\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunStats = await Bun.file(path).stat();\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","// Both Deno and Bun are compatible with path api\nimport path from \"node:path\";\nimport { runtime } from \"./runtime.js\";\n\nclass NativePath {\n basename(inputPath: string): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.basename(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n join(...paths: string[]): string {\n switch (runtime.type) {\n case \"node\":\n case \"bun\":\n case \"deno\":\n return path.join(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n extName(inputPath: string): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.extname(inputPath);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n resolve(...paths: string[]): string {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n case \"deno\":\n return path.resolve(...paths);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativePath = new NativePath();\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class GenerateCommand extends Command {\n static commandName = \"generate-command\";\n static description = \"Generate a new command in the specified path\";\n static help = [\n \"Generate a new cli command in the specified path\",\n \"Example: npx balda generate-command my-command -p src/commands\",\n ];\n\n /**\n * The path where the command will be generated\n */\n static path = \"src/commands\";\n\n @arg({\n description: \"The name of the command to generate\",\n required: true,\n })\n static name: string;\n\n static async handle(): Promise<void> {\n // Check if command already exists to prevent overriding built-in commands\n const existingCommand = commandRegistry.getCommand(this.name);\n if (existingCommand) {\n const isBuiltIn = commandRegistry.isBuiltInCommand(this.name);\n const commandType = isBuiltIn ? \"built-in\" : \"user-defined\";\n this.logger.error(\n { commandName: this.name, type: commandType },\n `Command \"${this.name}\" already exists as a ${commandType} command. Cannot override existing commands.`,\n );\n return;\n }\n\n const commandTemplate = this.getCommandTemplate();\n this.path = nativePath.join(this.path, `${this.name}.ts`);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(commandTemplate),\n );\n\n this.logger.info(\n `Command ${this.name} created successfully at ${this.path}`,\n );\n }\n\n static getCommandTemplate() {\n return `import { Command, CommandOptions } from \"balda-js\";\n\nexport default class extends Command {\n static commandName = \"${this.name}\";\n static description = \"Command description\";\n\n static options: CommandOptions = {\n // Define your command options here\n keepAlive: false,\n };\n\n static async handle(): Promise<void> {\n // Implement your command logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toDashCase, toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateControllerCommand extends Command {\n static commandName = \"generate-controller\";\n static description = \"Generate a new controller in the specified path\";\n static help = [\n \"Generate a new controller in the specified path\",\n \"Example: npx balda generate-controller user -p src/controllers\",\n ];\n\n @arg({\n description: \"The name of the controller to generate\",\n required: true,\n })\n static controllerName: string;\n\n @flag({\n description:\n \"The path to the controller to generate, default is src/controllers\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/controllers\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const controllerTemplate = this.getControllerTemplate();\n const fileName = `${this.controllerName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(controllerTemplate),\n );\n\n this.logger.info(\n `Controller ${this.controllerName} created successfully at ${this.path}`,\n );\n }\n\n static getControllerTemplate() {\n const className = toPascalCase(this.controllerName);\n return `import { controller, get, post, put, del, Request, Response } from \"balda-js\";\n\n@controller(\"/${toDashCase(this.controllerName)}\")\nexport default class ${className}Controller {\n @get(\"/\")\n async index(req: Request, res: Response) {\n return { message: \"List all ${this.controllerName.toLowerCase()}s\" };\n }\n\n @get(\"/:id\")\n async show(req: Request, res: Response) {\n return { message: \\`Get ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n\n @post(\"/\")\n async create(req: Request, res: Response) {\n return { message: \\`Create ${this.controllerName.toLowerCase()}\\`, data: req.body };\n }\n\n @put(\"/:id\")\n async update(req: Request, res: Response) {\n return { message: \\`Update ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\`, data: req.body };\n }\n\n @del(\"/:id\")\n async destroy(req: Request, res: Response) {\n return { message: \\`Delete ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateCron extends Command {\n static commandName = \"generate-cron\";\n static description = \"Generate a new cron job in the specified path\";\n static help = [\n \"Generate a new cron job in the specified path\",\n \"Example: npx balda generate-cron my-cron -p src/cron\",\n ];\n\n @arg({\n description: \"The name of the cron job file to generate\",\n required: true,\n })\n static fileName: string;\n\n @flag({\n description: \"The path to the cron job to generate, default is src/cron\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/cron\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const cronTemplate = this.getCronTemplate();\n this.path = nativePath.join(this.path, `${this.fileName}.ts`);\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(cronTemplate));\n\n this.logger.info(\n `Cron job ${this.fileName} created successfully at ${this.path}`,\n );\n }\n\n static getCronTemplate() {\n return `import { BaseCron, cron } from \"balda-js\";\n\nexport default class extends BaseCron {\n @cron(\"* * * * *\")\n handle() {\n this.logger.info(\"Running cron job\");\n // Implement your cron job logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMiddlewareCommand extends Command {\n static commandName = \"generate-middleware\";\n static description = \"Generate a new middleware in the specified path\";\n static help = [\n \"Generate a new middleware in the specified path\",\n \"Example: npx balda generate-middleware auth -p src/middlewares\",\n ];\n\n @arg({\n description: \"The name of the middleware to generate\",\n required: true,\n })\n static middlewareName: string;\n\n @flag({\n description:\n \"The path to the middleware to generate, default is src/middlewares\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/middlewares\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const middlewareTemplate = this.getMiddlewareTemplate();\n const fileName = `${this.middlewareName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(middlewareTemplate),\n );\n\n this.logger.info(\n `Middleware ${this.middlewareName} created successfully at ${this.path}`,\n );\n }\n\n static getMiddlewareTemplate() {\n const middlewareName = toPascalCase(this.middlewareName);\n return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from \"balda-js\";\n\n/**\n * ${middlewareName} middleware\n * @description Add your middleware logic here\n */\nexport const ${middlewareName}: ServerRouteMiddleware = async () => {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Add your middleware logic here\n return next();\n };\n};`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GeneratePluginCommand extends Command {\n static commandName = \"generate-plugin\";\n static description = \"Generate a new plugin in the specified path\";\n static help = [\n \"Generate a new plugin in the specified path\",\n \"Example: npx balda generate-plugin my-plugin -p src/plugins\",\n ];\n\n @arg({\n description: \"The name of the plugin to generate\",\n required: true,\n })\n static pluginName: string;\n\n @flag({\n description: \"The path to the plugin to generate, default is src/plugins\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/plugins\",\n })\n static pluginPath: string;\n\n static async handle(): Promise<void> {\n const pluginTemplate = this.getPluginTemplate();\n this.pluginPath = nativePath.join(this.pluginPath, `${this.pluginName}.ts`);\n\n if (\n !(await nativeFs.exists(nativePath.join(process.cwd(), this.pluginPath)))\n ) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.pluginPath.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.pluginPath,\n new TextEncoder().encode(pluginTemplate),\n );\n\n this.logger.info(\n `Plugin ${this.name} created successfully at ${this.pluginPath}`,\n );\n }\n\n static getPluginTemplate() {\n return `import { BasePlugin, Request, Response, NextFunction, ServerRouteMiddleware } from \"balda-js\";\n\nexport default class extends BasePlugin {\n async handle(): Promise<ServerRouteMiddleware> {\n return async (req: Request, res: Response, next: NextFunction) => {\n console.log(\"${this.pluginName} plugin is running\");\n await next();\n };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateQueueCommand extends Command {\n static commandName = \"generate-queue\";\n static description = \"Generate a new queue in the specified path\";\n static help = [\n \"Generate a new queue in the specified path\",\n \"Example: npx balda generate-queue my-queue -p src/queues --provider bullmq\",\n ];\n\n @arg({\n description: \"The name of the queue to generate\",\n required: true,\n })\n static queueName: string;\n\n @flag({\n description: \"The path to the queue to generate, default is src/queues\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/queues\",\n })\n static path: string;\n\n @flag({\n description: \"The provider of the queue to generate, default is bullmq\",\n type: \"string\",\n aliases: [\"pr\"],\n name: \"provider\",\n required: false,\n defaultValue: \"bullmq\",\n })\n static provider: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.queueName.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const queueTemplate = this.getQueueTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.queueName)}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(queueTemplate),\n );\n\n this.logger.info(\n `Queue ${this.queueName} created successfully at ${this.path}`,\n );\n }\n\n static getQueueTemplate(isValidLiteral: boolean) {\n return `import { BaseQueue, queue } from \"balda-js\";\n\nexport type Payload = {\n // Add your payload here\n};\n\ndeclare module \"balda-js\" {\n export interface QueueTopic {\n ${isValidLiteral ? this.queueName : `'${this.queueName}'`}: Payload;\n }\n}\n\nexport default class extends BaseQueue {\n @queue('${this.provider}', '${this.queueName}')\n async handle(payload: Payload) {\n // Implement your queue logic here\n this.logger.info({ payload }, 'Payload received');\n return Promise.resolve();\n }\n}`;\n }\n}\n","import { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\nexport const getPackageManager = async (): Promise<\n [string, string, string]\n> => {\n const hasYarnLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"yarn.lock\"),\n );\n\n if (hasYarnLock) {\n return [\"yarn\", \"add\", \"-D\"];\n }\n\n const hasPnpmLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"pnpm-lock.yaml\"),\n );\n\n if (hasPnpmLock) {\n return [\"pnpm\", \"add\", \"-D\"];\n }\n\n const hasPackageLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"package-lock.json\"),\n );\n\n if (hasPackageLock) {\n return [\"npm\", \"install\", \"-D\"];\n }\n\n const hasBunLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"bun.lockb\"),\n );\n\n if (hasBunLock) {\n return [\"bun\", \"add\", \"-D\"];\n }\n\n const hasDenoLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"deno.lock\"),\n );\n\n if (hasDenoLock) {\n return [\"deno\", \"add\", \"-D\"];\n }\n\n return [\"npm\", \"install\", \"-D\"];\n};\n","import { execSync } from \"node:child_process\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitCommand extends Command {\n static commandName = \"init\";\n static description =\n \"Initialize a new balda project in the current directory\";\n static help = [\n \"Initialize a new balda project, it is given for granted that balda-js is installed in the project as a dependency\",\n \"All the files are created in the /src directory (created if not exists)\",\n \"It adds a server.ts for the file instance and a index.ts for the entry point with a dummy hello world route\",\n \"Example: npx balda init -p ./src -t true\",\n ];\n\n @flag.string({\n description:\n \"The path to the project, default is the current directory /src\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"./src\",\n })\n static srcPath: string;\n\n @flag.boolean({\n description: \"Whether to use typescript, default is true\",\n aliases: \"t\",\n name: \"typescript\",\n required: false,\n defaultValue: true,\n })\n static typescript: boolean;\n\n static devDependencies: string[] = [\n \"esbuild\",\n \"esbuild-plugin-copy\",\n \"tsx\",\n \"typescript\",\n ];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing project...\");\n const [packageManager, packageManagerCommand, devDependenciesCommand] =\n await getPackageManager();\n\n // if the package manager is npm, yarn or pnpm, install the dev dependencies since we're on node.js\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n this.logger.info(`Installing dev dependencies with ${packageManager}...`);\n\n execSync(\n `${packageManager} ${packageManagerCommand} ${this.devDependencies.join(\" \")} -${devDependenciesCommand}`,\n {\n stdio: \"inherit\",\n },\n );\n }\n\n const ext = this.typescript ? \"ts\" : \"js\";\n const serverTemplate = this.getServerTemplate();\n const indexTemplate = this.getIndexTemplate();\n\n if (!nativeFs.exists(this.srcPath)) {\n await nativeFs.mkdir(this.srcPath, { recursive: true });\n }\n\n this.logger.info(`Creating server.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/server.${ext}`,\n new TextEncoder().encode(serverTemplate),\n );\n\n this.logger.info(`Creating index.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/index.${ext}`,\n new TextEncoder().encode(indexTemplate),\n );\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n return `import { Server } from \"balda-js\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n plugins: {\n json: {\n sizeLimit: \"100kb\",\n },\n },\n});\n\nexport { serverInstance as server };\n`;\n }\n\n static getIndexTemplate() {\n return `import { server } from \"./server.js\";\n\nserver.listen(({ url }) => {\n console.log(\\`Server is running on \\${url}\\`);\n});\n`;\n }\n}\n","import { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class ListCommand extends Command {\n static commandName = \"list\";\n static description = \"List all available commands\";\n static help = [\n \"Display all registered Balda CLI commands with their descriptions\",\n \"Example: npx balda list\",\n ];\n\n static async handle(): Promise<void> {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Group user commands by category\n if (userCommands.length > 0) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n\n const categorizedCommands = this.groupByCategory(userCommands);\n this.displayCategorizedCommands(categorizedCommands);\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length > 0) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n }\n\n private static groupByCategory(\n commands: (typeof Command)[],\n ): Map<string, (typeof Command)[]> {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n }\n\n private static displayCategorizedCommands(\n categorizedCommands: Map<string, (typeof Command)[]>,\n ): void {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (commands.length === 0) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n }\n}\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager } from \"../../package.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { runtime } from \"../../runtime/runtime.js\";\nimport { Command } from \"../base_command.js\";\nimport { CommandOptions } from \"../command_types.js\";\n\nexport default class ServeCommand extends Command {\n static commandName = \"serve\";\n static description = \"Run the server in dev mode with hot reload\";\n static help = [\n \"This command is intended to be run from the root of the project\",\n \"Bun and Deno have native dev hot reload\",\n \"Runtime is automatically inferred\",\n \"Node.js requires tsx to be installed for both typescript and javascript files\",\n \"Node.js dev dependencies (tsx) are installed automatically if not detected\",\n ];\n\n static runtime = runtime.type;\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @flag({\n type: \"string\",\n aliases: [\"e\", \"s\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"d\"],\n name: \"deno-import-map\",\n required: false,\n description: \"Path to deno import map\",\n })\n static denoImportMap?: string;\n\n static async handle(): Promise<void> {\n if (this.runtime === \"bun\") {\n execSync(`bun run --watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n if (this.runtime === \"deno\") {\n let denoCommand = `deno run --watch --unstable-sloppy-imports --allow-all`;\n if (this.denoImportMap) {\n denoCommand = `${denoCommand} --import-map ${this.denoImportMap}`;\n }\n\n execSync(`${denoCommand} ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n this.handleNodeHotReload();\n }\n\n private static async handleNodeHotReload() {\n const hasTsx = fs.existsSync(\"node_modules/.bin/tsx\");\n if (!hasTsx) {\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n this.logger.info(`tsx not found in node_modules, installing...`);\n execSync(`${packageManager} ${packageCommand} tsx ${devFlag}`, {\n stdio: \"inherit\",\n });\n }\n\n const initCommand = this.calledBy !== \"node\" ? this.calledBy : \"npx\";\n execSync(`${initCommand} tsx watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n }\n}\n","export class BaldaError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","import type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\nimport type { Params, Route } from \"./router_type.js\";\n\nclass Node {\n staticChildren: Map<string, Node>;\n paramChild: { node: Node; name: string } | null;\n wildcardChild: Node | null;\n middleware: ServerRouteMiddleware[] | null;\n handler: ((req: Request, res: Response) => void) | null;\n\n constructor() {\n this.staticChildren = new Map();\n this.paramChild = null;\n this.wildcardChild = null;\n this.middleware = null;\n this.handler = null;\n }\n}\n\n/**\n * Singleton that handles the routing of requests to the appropriate handler(s).\n */\nexport class Router {\n private trees: Map<string, Node>;\n private routes: Route[];\n private middlewares: ServerRouteMiddleware[];\n private basePath: string;\n\n /**\n * Create a new router with an optional base path and default middlewares.\n * Base path is normalized so it never produces duplicate slashes and never ends with a trailing slash (except root).\n */\n constructor(\n basePath: string = \"\",\n middlewares: ServerRouteMiddleware[] = [],\n ) {\n this.trees = new Map();\n this.routes = [];\n this.middlewares = middlewares;\n this.basePath = this.normalizeBasePath(basePath);\n }\n\n /** Returns a shallow copy of all registered routes. */\n getRoutes(): Route[] {\n return this.routes.slice();\n }\n\n /**\n * Add or update a route\n * @internal\n */\n addOrUpdate(\n method: HttpMethod,\n path: string,\n middleware: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void {\n method = method.toUpperCase() as HttpMethod;\n\n // ensure root exists\n let root = this.trees.get(method);\n if (!root) {\n root = new Node();\n this.trees.set(method, root);\n }\n\n // strip query string and split into segments (handling root path correctly)\n const clean = path.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n\n let node = root;\n for (const seg of segments) {\n if (seg === \"*\") {\n if (!node.wildcardChild) {\n node.wildcardChild = new Node();\n }\n node = node.wildcardChild;\n break;\n }\n\n if (seg.startsWith(\":\")) {\n const name = seg.slice(1);\n if (!node.paramChild) {\n node.paramChild = { node: new Node(), name };\n }\n node = node.paramChild.node;\n continue;\n }\n\n // static segment\n if (!node.staticChildren.has(seg)) {\n node.staticChildren.set(seg, new Node());\n }\n node = node.staticChildren.get(seg)!;\n }\n\n // assign middleware & handler\n node.middleware = middleware;\n node.handler = handler;\n\n // upsert in registry\n const idx = this.routes.findIndex(\n (r) => r.method === method && r.path === path,\n );\n if (idx !== -1) {\n this.routes[idx].middleware = middleware;\n this.routes[idx].handler = handler;\n return;\n }\n\n this.routes.push({ method, path, middleware, handler, swaggerOptions });\n }\n\n /**\n * Find the matching route for the given HTTP method and path.\n * Returns the resolved middleware chain, handler, and extracted params; or null if not found.\n */\n find(\n method: string,\n rawPath: string,\n ): {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n } | null {\n method = method.toUpperCase();\n const root = this.trees.get(method);\n if (!root) {\n return null;\n }\n\n const clean = rawPath.split(\"?\")[0];\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n const params: Params = {};\n\n let node = root;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n\n if (node.staticChildren.has(seg)) {\n node = node.staticChildren.get(seg)!;\n continue;\n }\n\n if (node.paramChild) {\n params[node.paramChild.name] = seg;\n node = node.paramChild.node;\n continue;\n }\n\n if (node.wildcardChild) {\n params[\"*\"] = segments.slice(i).join(\"/\");\n node = node.wildcardChild;\n break;\n }\n\n return null;\n }\n\n if (!node.handler || !node.middleware) {\n return null;\n }\n\n return { middleware: node.middleware, handler: node.handler, params };\n }\n\n /**\n * Register a GET route under this router's base path.\n */\n get(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n get(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"GET\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a POST route under this router's base path.\n */\n post(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n post(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"POST\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PATCH route under this router's base path.\n */\n patch(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n patch(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PATCH\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a PUT route under this router's base path.\n */\n put(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n put(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"PUT\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register a DELETE route under this router's base path.\n */\n delete(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n delete(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"DELETE\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an OPTIONS route under this router's base path.\n */\n options(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n options(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"OPTIONS\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Register an HEAD route under this router's base path.\n */\n head(\n path: string,\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middleware: ServerRouteMiddleware | ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n swaggerOptions?: SwaggerRouteOptions,\n ): void;\n head(\n path: string,\n middlewareOrHandler:\n | ServerRouteMiddleware\n | ServerRouteMiddleware[]\n | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler | SwaggerRouteOptions,\n maybeSwagger?: SwaggerRouteOptions,\n ): void {\n const fullPath = this.joinPath(path);\n const isHandlerOnly =\n typeof middlewareOrHandler === \"function\" &&\n (middlewareOrHandler as Function).length !== 3;\n const handler = (\n isHandlerOnly\n ? (middlewareOrHandler as ServerRouteHandler)\n : (maybeHandler as ServerRouteHandler)\n ) as ServerRouteHandler;\n const provided = isHandlerOnly\n ? []\n : Array.isArray(middlewareOrHandler)\n ? middlewareOrHandler\n : [middlewareOrHandler as ServerRouteMiddleware];\n const middlewares = [...this.middlewares, ...provided];\n const swaggerOptions = (\n isHandlerOnly ? (maybeHandler as SwaggerRouteOptions) : maybeSwagger\n ) as SwaggerRouteOptions | undefined;\n this.addOrUpdate(\"HEAD\", fullPath, middlewares, handler, swaggerOptions);\n }\n\n /**\n * Create a grouped router that shares a base path and middlewares.\n * The callback receives a child router where routes are defined; routes\n * are then merged back into the parent with the composed base path and middlewares.\n */\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: Router) => void,\n ): void;\n group(path: string, cb: (router: Router) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: Router) => void),\n maybeCb?: (router: Router) => void,\n ): void {\n const groupMiddlewares = Array.isArray(middlewareOrCb)\n ? middlewareOrCb\n : typeof middlewareOrCb === \"function\"\n ? []\n : middlewareOrCb\n ? [middlewareOrCb]\n : [];\n const cb = (\n Array.isArray(middlewareOrCb)\n ? maybeCb\n : typeof middlewareOrCb === \"function\"\n ? (middlewareOrCb as (router: Router) => void)\n : undefined\n ) as ((router: Router) => void) | undefined;\n\n const childBase = this.joinPath(path);\n const child = new Router(childBase, [\n ...this.middlewares,\n ...groupMiddlewares,\n ]);\n cb?.(child);\n for (const r of child.getRoutes()) {\n this.addOrUpdate(\n r.method as HttpMethod,\n r.path,\n r.middleware,\n r.handler,\n r.swaggerOptions,\n );\n }\n }\n\n /**\n * Apply global middlewares to all routes\n * @param middlewares - The middlewares to apply\n * @internal\n */\n applyGlobalMiddlewaresToAllRoutes(\n middlewares: ServerRouteMiddleware[],\n ): void {\n for (const route of this.routes) {\n this.addOrUpdate(\n route.method as HttpMethod,\n route.path,\n [...middlewares, ...(route.middleware || [])],\n route.handler,\n );\n }\n }\n\n private normalizeBasePath(path: string): string {\n if (!path) {\n return \"\";\n }\n\n let normalized = path.replace(/\\s+/g, \"\");\n normalized = normalized.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n\n if (normalized.length > 1) {\n normalized = normalized.replace(/\\/+$/g, \"\");\n }\n\n return normalized;\n }\n\n private joinPath(path: string): string {\n const parts = [this.basePath, path].filter(\n (v) => typeof v === \"string\" && v.length > 0,\n ) as string[];\n let joined = parts.join(\"/\");\n joined = joined.replace(/\\/+/g, \"/\");\n if (!joined.startsWith(\"/\")) {\n joined = \"/\" + joined;\n }\n if (joined.length > 1) {\n joined = joined.replace(/\\/+$/g, \"\");\n }\n return joined;\n }\n}\n\n/** Main singleton router instance */\nexport const router = new Router();\n","import { flag } from \"../../decorators/command/flag.js\";\nimport { BaldaError } from \"../../errors/balda_error.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { router } from \"../../server/router/router.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class RoutesListCommand extends Command {\n static commandName = \"routes-list\";\n static description = \"List all routes defined\";\n static help = [\n \"Display all routes defined in the project\",\n \"Example: npx balda routes-list\",\n ];\n\n @flag.string({\n aliases: [\"e\", \"s\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n static async handle(): Promise<void> {\n await import(nativePath.resolve(nativeCwd.getCwd(), this.entry)).catch(\n () => {\n throw new BaldaError(\n `Could not import entry path ${this.entry}, make sure to give a valid path to this command`,\n );\n },\n );\n\n const routes = router.getRoutes();\n\n if (!routes.length) {\n console.log(\"No routes found.\");\n return;\n }\n\n // ANSI colors\n const colors = {\n reset: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n dim: \"\\x1b[2m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n blue: \"\\x1b[34m\",\n magenta: \"\\x1b[35m\",\n red: \"\\x1b[31m\",\n cyan: \"\\x1b[36m\",\n gray: \"\\x1b[90m\",\n };\n\n const methodColors: Record<string, string> = {\n GET: colors.green,\n POST: colors.yellow,\n PUT: colors.blue,\n PATCH: colors.magenta,\n DELETE: colors.red,\n OPTIONS: colors.cyan,\n HEAD: colors.gray,\n };\n\n const methodOrder = [\n \"GET\",\n \"POST\",\n \"PUT\",\n \"PATCH\",\n \"DELETE\",\n \"OPTIONS\",\n \"HEAD\",\n ];\n const sortedRoutes = routes.slice().sort((a, b) => {\n const methodCompare =\n methodOrder.indexOf(a.method) - methodOrder.indexOf(b.method);\n if (methodCompare !== 0) {\n return methodCompare;\n }\n return a.path.localeCompare(b.path);\n });\n\n console.log(`\\n${colors.bold}✨ Registered Routes:${colors.reset}\\n`);\n\n const maxMethodLength = 7;\n const maxPathLength = Math.min(\n Math.max(...sortedRoutes.map((r) => r.path.length)),\n 50,\n );\n\n sortedRoutes.forEach((route) => {\n const color = methodColors[route.method] || colors.reset;\n const method = route.method.padEnd(maxMethodLength);\n const path = route.path.padEnd(maxPathLength);\n\n // Build info parts\n const infoParts: string[] = [];\n\n // Handler name - always show it\n const handlerName = route.handler.name || \"anonymous\";\n infoParts.push(`${colors.dim}${handlerName}${colors.reset}`);\n\n // Middleware count\n if (route.middleware.length > 0) {\n infoParts.push(\n `${colors.cyan}${route.middleware.length} middleware${colors.reset}`,\n );\n }\n\n // Swagger metadata\n if (route.swaggerOptions) {\n const swagger = route.swaggerOptions;\n\n if (swagger.service) {\n infoParts.push(`${colors.blue}[${swagger.service}]${colors.reset}`);\n }\n\n if (swagger.name) {\n infoParts.push(`${colors.dim}\"${swagger.name}\"${colors.reset}`);\n }\n\n if (swagger.deprecated) {\n infoParts.push(`${colors.red}[DEPRECATED]${colors.reset}`);\n }\n\n if (swagger.security) {\n infoParts.push(`${colors.yellow}🔒 secured${colors.reset}`);\n }\n }\n\n // Build the output line\n const info =\n infoParts.length > 0\n ? ` ${colors.dim}│${colors.reset} ${infoParts.join(\" \")}`\n : \"\";\n console.log(` ${color}${method}${colors.reset} ${path}${info}`);\n });\n\n console.log(\n `\\n${colors.bold}Total: ${routes.length} routes${colors.reset}\\n`,\n );\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport type { Command } from \"./base_command.js\";\nimport BuildCommand from \"./base_commands/build_command.js\";\nimport GenerateCommand from \"./base_commands/generate_command.js\";\nimport GenerateControllerCommand from \"./base_commands/generate_controller.js\";\nimport GenerateCronCommand from \"./base_commands/generate_cron.js\";\nimport GenerateMiddlewareCommand from \"./base_commands/generate_middleware.js\";\nimport GeneratePluginCommand from \"./base_commands/generate_plugin.js\";\nimport GenerateQueueCommand from \"./base_commands/generate_queue.js\";\nimport InitCommand from \"./base_commands/init_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport ServeCommand from \"./base_commands/serve_command.js\";\nimport RoutesListCommand from \"./base_commands/routes_list_command.js\";\n\n// Base commands are always loaded\nexport const baseCommands = [\n GeneratePluginCommand,\n GenerateCommand,\n GenerateCronCommand,\n GenerateQueueCommand,\n GenerateControllerCommand,\n GenerateMiddlewareCommand,\n InitCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n RoutesListCommand,\n];\n\n/**\n * Singleton that registers all commands and provides a way to execute them.\n * Commands are loaded from the commands directory, and are expected to have a default export with the command class that extends the base command class.\n * Commands can be run both as `.js` or `.ts` files. If the file is a ts file `typescript` npm package must be installed.\n * You can use the `CommandRegistry.setCommandsPattern` method to change the pattern of the commands to load.\n * @example\n * // commands/test.ts\n * export default class TestCommand extends Command {\n * static name = \"test\";\n * async handle() {\n * console.log(\"Test command\");\n * }\n * }\n */\nexport class CommandRegistry {\n private commands: Map<string, typeof Command>;\n private builtInCommands: Set<string>;\n static commandsPattern = \"src/commands/**/*.{ts,js}\";\n static logger = logger;\n\n /**\n * Private constructor to prevent direct instantiation\n * @internal Not meant to be used outside by the user\n */\n private constructor() {\n this.commands = new Map();\n this.builtInCommands = new Set();\n }\n\n static getInstance() {\n return new CommandRegistry();\n }\n\n static setCommandsPattern(pattern: string) {\n this.commandsPattern = pattern;\n }\n\n getCommand(name: string): typeof Command | null {\n return this.commands.get(name) ?? null;\n }\n\n getCommands(): (typeof Command)[] {\n return Array.from(this.commands.values());\n }\n\n getBuiltInCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter((cmd) =>\n this.builtInCommands.has(cmd.commandName),\n );\n }\n\n getUserDefinedCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter(\n (cmd) => !this.builtInCommands.has(cmd.commandName),\n );\n }\n\n isBuiltInCommand(commandName: string): boolean {\n return this.builtInCommands.has(commandName);\n }\n\n async loadCommands(commandsPattern: string) {\n CommandRegistry.logger.info(`Loading commands from ${commandsPattern}`);\n\n const commandFiles = await glob(commandsPattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n // if even one file is ts check if ts-node is installed\n if (commandFiles.some((file) => file.endsWith(\".ts\"))) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n } catch {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n }\n\n for (const commandFile of commandFiles) {\n const command = await import(commandFile)\n .then((module) => {\n if (module.default) {\n return module.default;\n }\n\n return module;\n })\n .catch((error) => {\n CommandRegistry.logger.error(\n `Error loading command ${commandFile}: ${error}`,\n );\n return null;\n });\n\n if (command) {\n this.commands.set(command.commandName, command);\n }\n }\n\n for (const command of baseCommands) {\n this.commands.set(command.commandName, command);\n this.builtInCommands.add(command.commandName);\n }\n }\n}\n\nexport const commandRegistry = CommandRegistry.getInstance();\n","import { findSimilarCommands } from \"./commands/arg_parser.js\";\nimport type { Command } from \"./commands/base_command.js\";\nimport {\n CommandRegistry,\n commandRegistry,\n} from \"./commands/command_registry.js\";\nimport { nativeArgs } from \"./runtime/native_args.js\";\nimport { nativeExit } from \"./runtime/native_exit.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\n// Helper functions for grouping and displaying commands\nconst groupByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\nconst displayCategorizedCommands = (\n categorizedCommands: Map<string, (typeof Command)[]>,\n): void => {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (!commands.length) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Show deprecated warning if applicable\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n};\n\n/**\n * CLI entry point\n */\nexport const cli = async () => {\n await commandRegistry.loadCommands(CommandRegistry.commandsPattern);\n const [commandName, ...rest] = nativeArgs.getCliArgs();\n\n // Handle global help flag\n if (!commandName || commandName === \"-h\" || commandName === \"--help\") {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Display user commands grouped by category\n if (userCommands.length) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n displayCategorizedCommands(groupByCategory(userCommands));\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Show deprecated warning if applicable\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n\n nativeExit.exit(0);\n return;\n }\n\n const CommandClass = commandRegistry.getCommand(commandName);\n if (!CommandClass) {\n console.error(\n findSimilarCommands(\n commandName,\n commandRegistry\n .getCommands()\n .filter((command) => command && command.commandName)\n .map((command) => command.commandName),\n ) || `Command ${commandName} not found`,\n );\n\n nativeExit.exit(1);\n return;\n }\n\n const commandClass = CommandClass as unknown as typeof Command;\n commandClass.calledBy = nativePath.basename(nativeArgs.getCliCaller());\n\n // Deprecated command warning\n if (commandClass.options?.deprecated) {\n const message =\n commandClass.options.deprecated.message || \"This command is deprecated\";\n const replacement = commandClass.options.deprecated.replacement;\n console.warn(`\\x1b[33m⚠️ Warning: ${message}\\x1b[0m`);\n if (replacement) {\n console.warn(`\\x1b[33m Use '${replacement}' instead.\\x1b[0m\\n`);\n }\n }\n\n // Check if the command has the help flag\n commandClass.handleHelpFlag(commandClass.flags);\n\n // Validate the command context\n commandClass.validateContext(commandClass);\n\n // Run custom validation if provided\n if (commandClass.options?.validate) {\n const isValid = await commandClass.options.validate(commandClass);\n if (!isValid) {\n console.error(\"Command validation failed\");\n nativeExit.exit(1);\n return;\n }\n }\n\n // Handle the command\n await commandClass.handle();\n\n // Exit the process if the command is not keepAlive\n const keepAlive =\n (CommandClass as unknown as typeof Command).options?.keepAlive ?? false;\n if (!keepAlive) {\n nativeExit.exit(0);\n }\n};\n\nif (typeof process !== \"undefined\") {\n // Try to run CLI without ts-node first (for js files)\n cli().catch(async (err) => {\n if (\n err?.message?.includes(\"SyntaxError\") ||\n err?.code === \"ERR_UNKNOWN_FILE_EXTENSION\"\n ) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n cli().catch((retryErr) => {\n CommandRegistry.logger.error(retryErr);\n process.exit(1);\n });\n } catch (registerErr) {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n } else {\n CommandRegistry.logger.error(err);\n process.exit(1);\n }\n });\n} else {\n cli().catch((err) => {\n CommandRegistry.logger.error(err);\n nativeExit.exit(1);\n });\n}\n"]}
|