balda 0.0.8 → 0.0.10
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 +24 -22
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +60 -58
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +239 -275
- package/lib/index.d.ts +239 -275
- package/lib/index.js +60 -58
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
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/runtime/native_fs.ts","../src/runtime/native_path.ts","../src/package.ts","../src/commands/base_commands/build_command.ts","../src/commands/base_commands/generate_command.ts","../src/commands/base_commands/generate_controller.ts","../src/commands/base_commands/generate_cron.ts","../src/commands/base_commands/generate_middleware.ts","../src/commands/base_commands/generate_mqtt.ts","../src/commands/base_commands/generate_plugin.ts","../src/commands/base_commands/generate_queue.ts","../src/commands/base_commands/generate_sdk.ts","../src/commands/base_commands/init_command.ts","../src/commands/base_commands/init_queue_command.ts","../src/commands/base_commands/list_command.ts","../src/commands/base_commands/serve_command.ts","../src/commands/base_commands/setup_storage_command.ts","../src/commands/command_registry.ts","../src/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","NativeFs","path","data","arrayBuffer","denoBuffer","stats","bunStats","denoStats","fs","Readable","nodeStream","entries","entry","nativeFs","NativePath","inputPath","paths","nativePath","getUninstalledPackages","packages","nodeModulesPath","uninstalled","pkg","pkgPath","getPackageManager","execWithPrompt","packageManager","dependencies","areDevDeps","rl","dependenciesList","prompt","resolve","answer","execSync","BuildCommand","esbuild","packageManagerCommand","devFlag","err","assetsDir","plugins","copy","outFile","result","__decorateClass","GenerateCommand","commandRegistry","commandType","commandTemplate","GenerateControllerCommand","controllerTemplate","fileName","className","GenerateCron","cronTemplate","GenerateMiddlewareCommand","middlewareTemplate","middlewareName","GenerateMqttCommand","isValidLiteral","mqttTemplate","GeneratePluginCommand","pluginTemplate","GenerateQueueCommand","queueTemplate","GenerateSdkCommand","sdkGenerator","hasNodeModules","generatorPath","packageCommand","absoluteServerPath","serverModule","possibleExports","serverInstance","exportName","currentModule","wasStarted","serverUrl","res","rej","swaggerPath","swaggerJsonUrl","openApiSpec","response","serverWithClose","tempSpecPath","outputDir","commandParts","InitCommand","devDependenciesCommand","uninstalledDevDeps","uninstalledMqtt","uninstalledCron","ext","serverTemplate","indexTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","imports","services","importsBlock","servicesBlock","InitQueueCommand","uninstalledDeps","configTemplate","fullPath","ListCommand","builtInCommands","userCommands","categorizedCommands","maxNameLength","desc","deprecatedTag","commands","map","category","sortedCategories","color","ServeCommand","denoCommand","initCommand","SetupStorageCommand","validTypes","missingDeps","installCommand","storageType","packageJsonPath","missing","dep","depPath","outputPath","resolvedPath","configFile","template","baseCommands","CommandRegistry","_CommandRegistry","pattern","commandsPattern","commandFiles","glob","file","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","rest","CommandClass","message","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 { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","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 { runtime } from \"./runtime.js\";\n\nclass NativeFs {\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n const bunFs = await import(\"fs\");\n return bunFs.existsSync(path);\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(\n path: string,\n options?: { encoding?: \"utf8\" },\n ): Promise<Uint8Array | string> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const data = await fs.readFile(path, {\n encoding: options?.encoding ?? null,\n });\n\n if (options?.encoding === \"utf8\") {\n return data as string;\n }\n\n return new Uint8Array(data as Buffer);\n case \"bun\":\n const arrayBuffer = Bun.file(path);\n if (options?.encoding === \"utf8\") {\n return arrayBuffer.text();\n }\n\n return new Uint8Array(await arrayBuffer.arrayBuffer());\n case \"deno\":\n const denoBuffer = await Deno.readFile(path);\n if (options?.encoding === \"utf8\") {\n return new TextDecoder().decode(denoBuffer);\n }\n\n return new Uint8Array(denoBuffer);\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunFs = await import(\"fs/promises\");\n const bunStats = await bunFs.stat(path);\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async streamFile(path: string): Promise<ReadableStream> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n const { Readable } = await import(\"stream\");\n const nodeStream = fs.createReadStream(path);\n return Readable.toWeb(nodeStream) as unknown as ReadableStream;\n\n case \"bun\":\n return Bun.file(path).stream();\n case \"deno\":\n const denoFile = await Deno.open(path);\n return denoFile.readable;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readdir(path: string): Promise<string[]> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"fs/promises\");\n return fs.readdir(path);\n case \"deno\":\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n\n return entries;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","// 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 { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\n/**\n * Check if packages are already installed in node_modules\n */\nexport const getUninstalledPackages = async (\n packages: string[],\n): Promise<string[]> => {\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n\n if (!hasNodeModules) {\n return packages;\n }\n\n const uninstalled: string[] = [];\n\n for (const pkg of packages) {\n const pkgPath = nativePath.join(nodeModulesPath, pkg);\n const isInstalled = await nativeFs.exists(pkgPath);\n\n if (!isInstalled) {\n uninstalled.push(pkg);\n }\n }\n\n return uninstalled;\n};\n\nexport const getPackageManager = async (): Promise<\n [string, string, string]\n> => {\n const hasYarnLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"yarn.lock\"),\n );\n\n if (hasYarnLock) {\n return [\"yarn\", \"add\", \"-D\"];\n }\n\n const hasPnpmLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"pnpm-lock.yaml\"),\n );\n\n if (hasPnpmLock) {\n return [\"pnpm\", \"add\", \"-D\"];\n }\n\n const hasPackageLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"package-lock.json\"),\n );\n\n if (hasPackageLock) {\n return [\"npm\", \"install\", \"-D\"];\n }\n\n const hasBunLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"bun.lockb\"),\n );\n\n if (hasBunLock) {\n return [\"bun\", \"add\", \"-D\"];\n }\n\n const hasDenoLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"deno.lock\"),\n );\n\n if (hasDenoLock) {\n return [\"deno\", \"add\", \"-D\"];\n }\n\n return [\"npm\", \"install\", \"-D\"];\n};\n\n/**\n * Prompts user for confirmation and executes a command if approved\n * @param command - The command to execute\n * @param packageManager - The package manager name (e.g., \"npm\", \"yarn\")\n * @param dependencies - Array of dependencies to display\n * @param options - execSync options\n * @returns Promise that resolves to true if executed, false if skipped\n */\nexport const execWithPrompt = async (\n command: string,\n packageManager: string,\n dependencies: string[],\n options?: Parameters<typeof execSync>[1],\n areDevDeps: boolean = true,\n): Promise<boolean> => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const dependenciesList = dependencies.join(\", \");\n const prompt = `Do you want to install the following ${areDevDeps ? \"dev\" : \"\"} dependencies using ${packageManager}?\\n${dependenciesList}\\n(y/n): `;\n\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n\n if (answer.toLowerCase() === \"y\" || answer.toLowerCase() === \"yes\") {\n execSync(command, options);\n resolve(true);\n return;\n }\n\n resolve(false);\n });\n });\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\n\nexport default class BuildCommand extends Command {\n static commandName = \"build\";\n static description = \"Build the project for production, node.js only\";\n static help = [\n \"Build the project for production, node.js only\",\n \"It will create a production build of the project in the dist directory\",\n \"Must have a tsconfig.json file in the root of the project\",\n \"Must have esbuild installed as a dependency while running the command\",\n \"Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory\",\n \"Example: npx balda build -t ./tsconfig.json -a ./assets\",\n ];\n\n @flag({\n type: \"boolean\",\n aliases: [\"c\"],\n name: \"clear-dist\",\n required: false,\n defaultValue: false,\n description:\n \"Whether to clear the dist directory before building the project\",\n })\n static clearDist: boolean;\n\n @flag({\n type: \"string\",\n aliases: [\"e\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"./dist\",\n description: \"The path to the output directory, default is ./dist\",\n })\n static output: string;\n\n @flag({\n type: \"string\",\n aliases: [\"t\"],\n name: \"tsconfig\",\n required: false,\n defaultValue: \"./tsconfig.json\",\n description:\n \"The path to the tsconfig.json file, default is ./tsconfig.json\",\n })\n static tsconfig: string;\n\n @flag({\n type: \"string\",\n aliases: [\"a\"],\n name: \"assets\",\n required: false,\n description:\n \"The path to the assets directory that will be loaded in the production build\",\n })\n static assets: string;\n\n @flag({\n type: \"string\",\n aliases: [\"f\"],\n name: \"format\",\n required: false,\n defaultValue: \"esm\",\n description:\n \"The format to build the project, default is esm, can be 'esm' or 'cjs'\",\n })\n static format: \"esm\" | \"cjs\";\n\n @flag({\n type: \"string\",\n aliases: [\"p\"],\n name: \"packages\",\n required: false,\n defaultValue: \"external\",\n description:\n \"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'\",\n })\n static packages: \"external\" | \"bundle\";\n\n @flag({\n type: \"boolean\",\n aliases: [\"s\"],\n name: \"sourcemap\",\n required: false,\n defaultValue: true,\n description: \"Whether to generate sourcemaps or not, default is true\",\n })\n static sourcemap: boolean;\n\n static async handle(): Promise<void> {\n if (typeof process === undefined) {\n this.logger.error(\"Build command is only supported in node.js\");\n process.exit(1);\n }\n\n if (![\"esm\", \"cjs\"].includes(this.format)) {\n this.logger.error(\"Invalid format, must be 'esm' or 'cjs'\");\n process.exit(1);\n }\n\n if (![\"bundle\", \"external\"].includes(this.packages)) {\n this.logger.error(\"Invalid packages, must be 'bundle' or 'external'\");\n process.exit(1);\n }\n\n const isEsBuildInstalled = await import(\"esbuild\")\n .then((esbuild) => true)\n .catch(() => false);\n\n if (!isEsBuildInstalled) {\n const [packageManager, packageManagerCommand, devFlag] =\n await getPackageManager();\n\n const didInstall = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} esbuild ${devFlag}`,\n packageManager,\n [\"esbuild\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!didInstall) {\n this.logger.warn(\n `User chose to not continue with the installation of esbuild, exiting...`,\n );\n process.exit(0);\n }\n }\n\n const esbuild = await import(\"esbuild\").catch((err) => {\n this.logger.error(\n \"esbuild is not installed, please install it with `npm install -D esbuild` to use the build command\",\n );\n throw new Error(\"esbuild is not installed\");\n });\n\n const assetsDir = path.join(this.output, \"assets\");\n const plugins = [];\n if (this.assets) {\n const { copy } = await import(\"esbuild-plugin-copy\").catch((err) => {\n this.logger.error(\n \"esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command\",\n );\n throw new Error(\"esbuild-plugin-copy is not installed\");\n });\n\n if (!fs.existsSync(assetsDir)) {\n fs.mkdirSync(assetsDir, { recursive: true });\n }\n\n plugins.push(\n copy({\n assets: {\n from: this.assets,\n to: assetsDir,\n },\n }),\n );\n }\n\n if (this.clearDist && fs.existsSync(this.output)) {\n this.logger.info(`Clearing dist directory...`);\n fs.rmSync(this.output, { recursive: true });\n }\n\n this.logger.info(`Building project...`);\n const outFile = path.join(this.output, \"server.js\");\n const result = await esbuild.build({\n tsconfig: this.tsconfig,\n entryPoints: [this.entry],\n bundle: true,\n platform: \"node\",\n outfile: outFile,\n minify: true,\n sourcemap: this.sourcemap,\n plugins,\n format: this.format,\n packages: this.packages,\n });\n\n if (result.errors.length) {\n this.logger.error(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n errors: result.errors,\n },\n null,\n 2,\n ),\n );\n\n process.exit(1);\n }\n\n if (result.warnings.length) {\n this.logger.warn(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n warnings: result.warnings,\n },\n null,\n 2,\n ),\n );\n }\n\n this.logger.info(\n JSON.stringify(\n {\n message: `Project built successfully in ${outFile}`,\n output: outFile,\n assets: this.assets ? true : false,\n },\n null,\n 2,\n ),\n );\n process.exit(0);\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class GenerateCommand extends Command {\n static commandName = \"generate-command\";\n static description = \"Generate a new command in the specified path\";\n static help = [\n \"Generate a new cli command in the specified path\",\n \"Example: npx balda generate-command my-command -p src/commands\",\n ];\n\n /**\n * The path where the command will be generated\n */\n static path = \"src/commands\";\n\n @arg({\n description: \"The name of the command to generate\",\n required: true,\n })\n static name: string;\n\n static async handle(): Promise<void> {\n // Check if command already exists to prevent overriding built-in commands\n const existingCommand = commandRegistry.getCommand(this.name);\n if (existingCommand) {\n const isBuiltIn = commandRegistry.isBuiltInCommand(this.name);\n const commandType = isBuiltIn ? \"built-in\" : \"user-defined\";\n this.logger.error(\n { commandName: this.name, type: commandType },\n `Command \"${this.name}\" already exists as a ${commandType} command. Cannot override existing commands.`,\n );\n return;\n }\n\n const commandTemplate = this.getCommandTemplate();\n this.path = nativePath.join(this.path, `${this.name}.ts`);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(commandTemplate),\n );\n\n this.logger.info(\n `Command ${this.name} created successfully at ${this.path}`,\n );\n }\n\n static getCommandTemplate() {\n return `import { Command, CommandOptions } from \"balda\";\n\nexport default class extends Command {\n static commandName = \"${this.name}\";\n static description = \"Command description\";\n\n static options: CommandOptions = {\n // Define your command options here\n keepAlive: false,\n };\n\n static async handle(): Promise<void> {\n // Implement your command logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toDashCase, toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateControllerCommand extends Command {\n static commandName = \"generate-controller\";\n static description = \"Generate a new controller in the specified path\";\n static help = [\n \"Generate a new controller in the specified path\",\n \"Example: npx balda generate-controller user -p src/controllers\",\n ];\n\n @arg({\n description: \"The name of the controller to generate\",\n required: true,\n })\n static controllerName: string;\n\n @flag({\n description:\n \"The path to the controller to generate, default is src/controllers\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/controllers\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const controllerTemplate = this.getControllerTemplate();\n const fileName = `${this.controllerName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(controllerTemplate),\n );\n\n this.logger.info(\n `Controller ${this.controllerName} created successfully at ${this.path}`,\n );\n }\n\n static getControllerTemplate() {\n const className = toPascalCase(this.controllerName);\n return `import { controller, get, post, put, del, Request, Response } from \"balda\";\n\n@controller(\"/${toDashCase(this.controllerName)}\")\nexport default class ${className}Controller {\n @get(\"/\")\n async index(req: Request, res: Response) {\n return { message: \"List all ${this.controllerName.toLowerCase()}s\" };\n }\n\n @get(\"/:id\")\n async show(req: Request, res: Response) {\n return { message: \\`Get ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n\n @post(\"/\")\n async create(req: Request, res: Response) {\n return { message: \\`Create ${this.controllerName.toLowerCase()}\\`, data: req.body };\n }\n\n @put(\"/:id\")\n async update(req: Request, res: Response) {\n return { message: \\`Update ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\`, data: req.body };\n }\n\n @del(\"/:id\")\n async destroy(req: Request, res: Response) {\n return { message: \\`Delete ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateCron extends Command {\n static commandName = \"generate-cron\";\n static description = \"Generate a new cron job in the specified path\";\n static help = [\n \"Generate a new cron job in the specified path\",\n \"Example: npx balda generate-cron my-cron -p src/cron\",\n ];\n\n @arg({\n description: \"The name of the cron job file to generate\",\n required: true,\n })\n static fileName: string;\n\n @flag({\n description: \"The path to the cron job to generate, default is src/cron\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/cron\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const cronTemplate = this.getCronTemplate();\n this.path = nativePath.join(this.path, `${this.fileName}.ts`);\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(cronTemplate));\n\n this.logger.info(\n `Cron job ${this.fileName} created successfully at ${this.path}`,\n );\n }\n\n static getCronTemplate() {\n return `import { BaseCron, cron } from \"balda\";\n\nexport default class extends BaseCron {\n @cron(\"* * * * *\")\n handle() {\n this.logger.info(\"Running cron job\");\n // Implement your cron job logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMiddlewareCommand extends Command {\n static commandName = \"generate-middleware\";\n static description = \"Generate a new middleware in the specified path\";\n static help = [\n \"Generate a new middleware in the specified path\",\n \"Example: npx balda generate-middleware auth -p src/middlewares\",\n ];\n\n @arg({\n description: \"The name of the middleware to generate\",\n required: true,\n })\n static middlewareName: string;\n\n @flag({\n description:\n \"The path to the middleware to generate, default is src/middlewares\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/middlewares\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const middlewareTemplate = this.getMiddlewareTemplate();\n const fileName = `${this.middlewareName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(middlewareTemplate),\n );\n\n this.logger.info(\n `Middleware ${this.middlewareName} created successfully at ${this.path}`,\n );\n }\n\n static getMiddlewareTemplate() {\n const middlewareName = toPascalCase(this.middlewareName);\n return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\n/**\n * ${middlewareName} middleware\n * @description Add your middleware logic here\n */\nexport const ${middlewareName}: ServerRouteMiddleware = async () => {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Add your middleware logic here\n return next();\n };\n};`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMqttCommand extends Command {\n static commandName = \"generate-mqtt\";\n static description = \"Generate a new MQTT handler in the specified path\";\n static help = [\n \"Generate a new MQTT handler in the specified path\",\n \"Example: npx balda generate-mqtt temperature-handler -p src/mqtt\",\n ];\n\n @flag({\n description:\n \"The path to the MQTT handler to generate, default is src/mqtt\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/mqtt\",\n })\n static path: string;\n\n @arg({\n description: \"The MQTT topic to subscribe to\",\n required: true,\n })\n static topic: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.topic.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const mqttTemplate = this.getMqttTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.topic.replace(/\\//g, \"_\"))}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(mqttTemplate));\n\n this.logger.info(\n `MQTT handler for topic ${this.topic} created successfully at ${this.path}`,\n );\n }\n\n static getMqttTemplate(isValidLiteral: boolean) {\n return `import { BaseMqtt, mqtt } from \"balda\";\n\n/**\n * Define your MQTT topics interface for type safety\n */\ndeclare module \"balda\" {\n interface MqttTopics {\n ${isValidLiteral ? `${this.topic}: string;` : `'${this.topic}': string;`}\n }\n}\n\nexport default class extends BaseMqtt {\n @mqtt.subscribe(\"${this.topic}\")\n async handle(message: string) {\n this.logger.info({ message }, \"Message received\");\n // Implement your MQTT handler logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GeneratePluginCommand extends Command {\n static commandName = \"generate-plugin\";\n static description = \"Generate a new plugin in the specified path\";\n static help = [\n \"Generate a new plugin in the specified path\",\n \"Example: npx balda generate-plugin my-plugin -p src/plugins\",\n ];\n\n @arg({\n description: \"The name of the plugin to generate\",\n required: true,\n })\n static pluginName: string;\n\n @flag({\n description: \"The path to the plugin to generate, default is src/plugins\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/plugins\",\n })\n static pluginPath: string;\n\n static async handle(): Promise<void> {\n const pluginTemplate = this.getPluginTemplate();\n this.pluginPath = nativePath.join(this.pluginPath, `${this.pluginName}.ts`);\n\n if (\n !(await nativeFs.exists(nativePath.join(process.cwd(), this.pluginPath)))\n ) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.pluginPath.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.pluginPath,\n new TextEncoder().encode(pluginTemplate),\n );\n\n this.logger.info(\n `Plugin ${this.name} created successfully at ${this.pluginPath}`,\n );\n }\n\n static getPluginTemplate() {\n return `import { BasePlugin, Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\nexport default class extends BasePlugin {\n async handle(): Promise<ServerRouteMiddleware> {\n return async (req: Request, res: Response, next: NextFunction) => {\n console.log(\"${this.pluginName} plugin is running\");\n await next();\n };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateQueueCommand extends Command {\n static commandName = \"generate-queue\";\n static description = \"Generate a new queue in the specified path\";\n static help = [\n \"Generate a new queue in the specified path\",\n \"Example: npx balda generate-queue my-queue -p src/queues --provider bullmq\",\n ];\n\n @arg({\n description: \"The name of the queue to generate\",\n required: true,\n })\n static queueName: string;\n\n @flag({\n description: \"The path to the queue to generate, default is src/queues\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/queues\",\n })\n static path: string;\n\n @flag({\n description: \"The provider of the queue to generate, default is bullmq\",\n type: \"string\",\n aliases: [\"pr\"],\n name: \"provider\",\n required: false,\n defaultValue: \"bullmq\",\n })\n static provider: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.queueName.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const queueTemplate = this.getQueueTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.queueName)}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(queueTemplate),\n );\n\n this.logger.info(\n `Queue ${this.queueName} created successfully at ${this.path}`,\n );\n }\n\n static getQueueTemplate(isValidLiteral: boolean) {\n return `import { BaseQueue, queue } from \"balda\";\n\nexport type Payload = {\n // Add your payload here\n};\n\ndeclare module \"balda\" {\n export interface QueueTopic {\n ${isValidLiteral ? this.queueName : `'${this.queueName}'`}: Payload;\n }\n}\n\nexport default class extends BaseQueue {\n @queue('${this.provider}', '${this.queueName}')\n async handle(payload: Payload) {\n // Implement your queue logic here\n this.logger.info({ payload }, 'Payload received');\n return Promise.resolve();\n }\n}`;\n }\n}\n","import { execSync } from \"node:child_process\";\nimport { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Server } from \"../../server/server.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateSdkCommand extends Command {\n static commandName = \"generate-sdk\";\n static description =\n \"Generate a TypeScript SDK from your server's OpenAPI specification\";\n static help = [\n \"Generate a TypeScript SDK from your server's OpenAPI specification\",\n \"This command imports your server instance, starts it if needed, downloads the OpenAPI spec, and generates an SDK\",\n \"\",\n \"Arguments:\",\n \" serverPath Path to the server instance file (default: test/server/instance.ts)\",\n \"\",\n \"Flags:\",\n \" -o, --output <path> Output directory for generated SDK (default: sdk)\",\n \" -s, --swagger-path <path> Swagger UI path on your server (default: /docs)\",\n \" -c, --client <type> HTTP client to use: axios or fetch (default: fetch)\",\n \" --unwrap-response-data Automatically unwrap response data property\",\n \" --single-http-client Generate single HTTP client instance\",\n \" --type-prefix <prefix> Add prefix to all generated types\",\n \" --type-suffix <suffix> Add suffix to all generated types\",\n \" --enum-names-as-values Use enum names as values\",\n \" --sort-types Sort types alphabetically\",\n \"\",\n \"Examples:\",\n \" npx balda generate-sdk\",\n \" npx balda generate-sdk src/server/index.ts -o ./client-sdk\",\n \" npx balda generate-sdk src/server.ts --client axios\",\n \" npx balda generate-sdk --unwrap-response-data --single-http-client\",\n \" npx balda generate-sdk --type-prefix Api --sort-types\",\n ];\n\n @arg({\n description:\n \"Path to the server instance file (should export a Server instance)\",\n required: false,\n defaultValue: \"test/server/instance.ts\",\n })\n static serverPath: string;\n\n @flag({\n description: \"Output directory for generated SDK\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"sdk\",\n })\n static outputPath: string;\n\n @flag({\n description: \"Swagger UI path on your server\",\n type: \"string\",\n aliases: [\"s\"],\n name: \"swagger-path\",\n required: false,\n })\n static swaggerPath?: string;\n\n @flag({\n description: \"HTTP client to use (axios or fetch)\",\n type: \"string\",\n aliases: [\"c\"],\n name: \"client\",\n required: false,\n defaultValue: \"fetch\",\n })\n static httpClient: string;\n\n @flag({\n description: \"Unwrap response data automatically\",\n type: \"boolean\",\n name: \"unwrap-response-data\",\n required: false,\n defaultValue: false,\n })\n static unwrapResponseData: boolean;\n\n @flag({\n description: \"Generate single HTTP client instance\",\n type: \"boolean\",\n name: \"single-http-client\",\n required: false,\n defaultValue: false,\n })\n static singleHttpClient: boolean;\n\n @flag({\n description: \"Add prefix to all generated types\",\n type: \"string\",\n name: \"type-prefix\",\n required: false,\n })\n static typePrefix?: string;\n\n @flag({\n description: \"Add suffix to all generated types\",\n type: \"string\",\n name: \"type-suffix\",\n required: false,\n })\n static typeSuffix?: string;\n\n @flag({\n description: \"Use enum names as values\",\n type: \"boolean\",\n name: \"enum-names-as-values\",\n required: false,\n defaultValue: false,\n })\n static enumNamesAsValues: boolean;\n\n @flag({\n description: \"Sort types alphabetically\",\n type: \"boolean\",\n name: \"sort-types\",\n required: false,\n defaultValue: false,\n })\n static sortTypes: boolean;\n\n static async handle(): Promise<void> {\n console.log(\"\\n🚀 Starting SDK generation...\\n\");\n\n // Step 1: Check if swagger-typescript-api is installed\n const sdkGenerator = \"swagger-typescript-api\";\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n const generatorPath = nativePath.join(nodeModulesPath, sdkGenerator);\n const hasGenerator = hasNodeModules\n ? await nativeFs.exists(generatorPath)\n : false;\n\n if (!hasGenerator) {\n console.log(\n `📦 ${sdkGenerator} not found. Installing as dev dependency...\\n`,\n );\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} ${sdkGenerator} ${devFlag}`,\n packageManager,\n [sdkGenerator],\n { stdio: \"inherit\" },\n true,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ SDK generation cancelled: swagger-typescript-api installation was skipped.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ ${sdkGenerator} installed successfully!\\x1b[0m\\n`,\n );\n }\n\n // Step 2: Import and start the server\n const absoluteServerPath = nativePath.resolve(\n process.cwd(),\n this.serverPath,\n );\n const serverPathExists = await nativeFs.exists(absoluteServerPath);\n\n if (!serverPathExists) {\n console.error(\n `\\x1b[31m❌ Error: Server file not found at ${absoluteServerPath}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(`📂 Loading server from: ${this.serverPath}`);\n\n let serverModule: Record<string, unknown>;\n try {\n // Import the server module\n const fileUrl = `file://${absoluteServerPath}`;\n serverModule = (await import(fileUrl)) as Record<string, unknown>;\n } catch (error) {\n console.error(`\\x1b[31m❌ Error importing server module:\\x1b[0m`, error);\n return;\n }\n\n const possibleExports = Object.keys(serverModule);\n\n // Find the Server instance in the module exports\n let serverInstance: Server | null = null;\n for (const exportName of possibleExports) {\n let currentModule = serverModule[exportName] as {\n default?: any;\n [key: string]: any;\n };\n\n if (\"default\" in currentModule && currentModule.default) {\n currentModule = currentModule.default;\n }\n\n if (\n currentModule &&\n \"_brand\" in currentModule &&\n currentModule._brand === \"BaldaServer\"\n ) {\n if (typeof currentModule === \"object\" && \"listen\" in currentModule) {\n serverInstance = currentModule as unknown as Server;\n console.log(`✅ Found server instance in export: \"${exportName}\"\\n`);\n break;\n }\n }\n }\n\n if (!serverInstance) {\n console.error(\n `\\x1b[31m❌ Error: No Server instance found in ${this.serverPath}\\x1b[0m`,\n );\n console.log(\n `\\x1b[90mExpected exports: ${possibleExports.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n // Step 3: Start the server\n let wasStarted = false;\n let serverUrl = \"\";\n let serverPort = 80;\n let serverHost = \"localhost\";\n\n serverUrl = `http://${serverHost}:${serverPort}`;\n try {\n // Start the server\n console.log(`🌐 Starting server on ${serverUrl}...`);\n if (\n typeof serverInstance.listen === \"function\" &&\n !serverInstance.isListening\n ) {\n await new Promise<void>((res, rej) => {\n try {\n serverInstance.listen(() => {\n wasStarted = true;\n console.log(`✅ Server started successfully!\\n`);\n res();\n });\n } catch (error) {\n rej(error);\n }\n }).catch((error) => {\n console.error(`Failed to start the server, continuing...`);\n });\n } else {\n throw new Error(\"Server instance does not have a listen() method\");\n }\n } catch (error) {\n console.error(`\\x1b[31m❌ Error starting server:\\x1b[0m`, error);\n return;\n }\n\n // Step 4: Download OpenAPI spec\n const swaggerPath =\n this.swaggerPath ??\n (typeof serverInstance.serverOptions.swagger !== \"boolean\"\n ? serverInstance.serverOptions.swagger?.path\n : \"/docs\");\n const swaggerJsonUrl = nativePath.join(\n serverUrl,\n swaggerPath ?? \"/docs\",\n \"/json\",\n );\n\n console.log(`📥 Downloading OpenAPI spec from: ${swaggerJsonUrl}`);\n\n let openApiSpec: Record<string, unknown>;\n try {\n const response = await globalThis.fetch(swaggerJsonUrl);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch OpenAPI spec: ${response.status} ${response.statusText}`,\n );\n }\n openApiSpec = (await response.json()) as Record<string, unknown>;\n console.log(`✅ OpenAPI spec downloaded successfully!\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error downloading OpenAPI spec:\\x1b[0m`, error);\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 5: Save OpenAPI spec to temp file\n const tempSpecPath = nativePath.join(process.cwd(), \".openapi-spec.json\");\n try {\n await nativeFs.writeFile(\n tempSpecPath,\n new TextEncoder().encode(JSON.stringify(openApiSpec, null, 2)),\n );\n } catch (error) {\n console.error(\n `\\x1b[31m❌ Error saving OpenAPI spec to file:\\x1b[0m`,\n error,\n );\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 6: Generate SDK using swagger-typescript-api\n const outputDir = nativePath.resolve(process.cwd(), this.outputPath);\n console.log(`🔨 Generating SDK...\\n`);\n\n try {\n // Create output directory if it doesn't exist\n if (!(await nativeFs.exists(outputDir))) {\n await nativeFs.mkdir(outputDir, { recursive: true });\n }\n\n // Build command with options\n const commandParts = [\n \"npx swagger-typescript-api generate\",\n `--path=\"${tempSpecPath}\"`,\n `--output=\"${this.outputPath}\"`,\n `--http-client ${this.httpClient}`,\n \"--modular\",\n \"--extract-request-params\",\n \"--extract-request-body\",\n \"--extract-response-body\",\n \"--extract-response-error\",\n ];\n\n // Add optional flags\n if (this.unwrapResponseData) {\n commandParts.push(\"--unwrap-response-data\");\n }\n\n if (this.singleHttpClient) {\n commandParts.push(\"--single-http-client\");\n }\n\n if (this.typePrefix) {\n commandParts.push(`--type-prefix \"${this.typePrefix}\"`);\n }\n\n if (this.typeSuffix) {\n commandParts.push(`--type-suffix \"${this.typeSuffix}\"`);\n }\n\n if (this.enumNamesAsValues) {\n commandParts.push(\"--enum-names-as-values\");\n }\n\n if (this.sortTypes) {\n commandParts.push(\"--sort-types\");\n }\n\n const command = commandParts.join(\" \");\n\n execSync(command, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n\n console.log(`\\n\\x1b[32m✅ SDK generated successfully!\\x1b[0m`);\n console.log(`\\x1b[32m📁 SDK location: ${outputDir}\\x1b[0m\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error generating SDK:\\x1b[0m`, error);\n } finally {\n // Cleanup: Remove temp spec file\n try {\n await nativeFs.unlink(tempSpecPath);\n } catch {\n // Ignore cleanup errors\n }\n\n // Cleanup: Stop server if we started it\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n console.log(\"🛑 Stopping server...\");\n await serverWithClose.close?.();\n console.log(\"✅ Server stopped.\\n\");\n } catch {\n console.log(\"\\x1b[33m⚠️ Could not stop server gracefully.\\x1b[0m\\n\");\n }\n }\n }\n\n console.log(\"\\x1b[32m✨ SDK generation complete!\\x1b[0m\\n\");\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitCommand extends Command {\n static commandName = \"init\";\n static description =\n \"Initialize a new balda project in the current directory\";\n static help = [\n \"Initialize a new balda project, it is given for granted that balda is installed in the project as a dependency\",\n \"All the files are created in the /src directory (created if not exists)\",\n \"It adds a server.ts for the file instance and a index.ts for the entry point with a dummy hello world route\",\n \"Example: npx balda init -p ./src -t true\",\n ];\n\n @flag.string({\n description:\n \"The path to the project, default is the current directory /src\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"./src\",\n })\n static srcPath: string;\n\n @flag.boolean({\n description: \"Whether to use typescript, default is true\",\n aliases: \"t\",\n name: \"typescript\",\n required: false,\n defaultValue: true,\n })\n static typescript: boolean;\n\n @flag.boolean({\n description: \"Initialize MQTT service connection\",\n aliases: \"m\",\n name: \"mqtt\",\n required: false,\n defaultValue: false,\n })\n static mqtt: boolean;\n\n @flag.boolean({\n description: \"Initialize Cron service\",\n aliases: \"c\",\n name: \"cron\",\n required: false,\n defaultValue: false,\n })\n static cron: boolean;\n\n static devDependencies: string[] = [\n \"esbuild\",\n \"esbuild-plugin-copy\",\n \"tsx\",\n \"typescript\",\n ];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing project...\");\n const [packageManager, packageManagerCommand, devDependenciesCommand] =\n await getPackageManager();\n\n // if the package manager is npm, yarn or pnpm, install the dev dependencies since we're on node.js\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledDevDeps = await getUninstalledPackages(\n this.devDependencies,\n );\n\n if (uninstalledDevDeps.length) {\n this.logger.info(\n `Found ${uninstalledDevDeps.length} missing dev dependencies`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDevDeps.join(\" \")} -${devDependenciesCommand}`,\n packageManager,\n uninstalledDevDeps,\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Project initialization aborted.\",\n );\n return;\n }\n }\n\n if (!uninstalledDevDeps.length) {\n this.logger.info(\"All dev dependencies are already installed\");\n }\n }\n\n // Handle optional service dependencies\n if (this.mqtt && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledMqtt = await getUninstalledPackages([\"mqtt\"]);\n\n if (uninstalledMqtt.length) {\n const mqttInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} mqtt`,\n packageManager,\n [\"mqtt\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!mqttInstalled) {\n this.logger.info(\n \"MQTT installation cancelled by user. Skipping MQTT scaffolding.\",\n );\n this.mqtt = false;\n }\n }\n\n if (!uninstalledMqtt.length) {\n this.logger.info(\"MQTT package is already installed\");\n }\n }\n\n if (this.cron && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledCron = await getUninstalledPackages([\"node-cron\"]);\n\n if (uninstalledCron.length > 0) {\n const cronInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} node-cron`,\n packageManager,\n [\"node-cron\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!cronInstalled) {\n this.logger.info(\n \"node-cron installation cancelled by user. Skipping Cron scaffolding.\",\n );\n this.cron = false;\n }\n }\n\n if (!uninstalledCron.length) {\n this.logger.info(\"node-cron package is already installed\");\n }\n }\n\n const ext = this.typescript ? \"ts\" : \"js\";\n const serverTemplate = this.getServerTemplate();\n const indexTemplate = this.getIndexTemplate();\n\n if (!nativeFs.exists(this.srcPath)) {\n await nativeFs.mkdir(this.srcPath, { recursive: true });\n }\n\n this.logger.info(`Creating server.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/server.${ext}`,\n new TextEncoder().encode(serverTemplate),\n );\n\n this.logger.info(`Creating index.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/index.${ext}`,\n new TextEncoder().encode(indexTemplate),\n );\n\n // Create MQTT configuration if requested\n if (this.mqtt) {\n const mqttDir = nativePath.join(this.srcPath, \"mqtt\");\n if (!(await nativeFs.exists(mqttDir))) {\n await nativeFs.mkdir(mqttDir, { recursive: true });\n }\n\n const mqttConfigTemplate = this.getMqttConfigTemplate();\n this.logger.info(`Creating mqtt/mqtt.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(mqttDir, `mqtt.config.${ext}`),\n new TextEncoder().encode(mqttConfigTemplate),\n );\n }\n\n // Create Cron configuration if requested\n if (this.cron) {\n const cronDir = nativePath.join(this.srcPath, \"cron\");\n if (!(await nativeFs.exists(cronDir))) {\n await nativeFs.mkdir(cronDir, { recursive: true });\n }\n\n const cronConfigTemplate = this.getCronConfigTemplate();\n this.logger.info(`Creating cron/cron.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(cronDir, `cron.config.${ext}`),\n new TextEncoder().encode(cronConfigTemplate),\n );\n }\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n return `import { Server } from \"balda\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n plugins: {\n json: {\n sizeLimit: \"100kb\",\n },\n },\n});\n\nexport { serverInstance as server };\n`;\n }\n\n static getIndexTemplate() {\n const imports: string[] = ['import { server } from \"./server.js\";'];\n const services: string[] = [];\n\n if (this.mqtt) {\n imports.push('import \"./mqtt/mqtt.config.js\";');\n imports.push('import { MqttService } from \"balda\";');\n services.push(`\n // Initialize MQTT service\n await MqttService.connect({\n host: \"localhost\",\n port: 1883,\n protocol: \"mqtt\",\n });\n console.log(\"MQTT service connected\");`);\n }\n\n if (this.cron) {\n imports.push('import \"./cron/cron.config.js\";');\n imports.push('import { CronService } from \"balda\";');\n services.push(`\n // Initialize Cron service\n await CronService.run();\n console.log(\"Cron service started\");`);\n }\n\n const importsBlock = imports.join(\"\\n\");\n const servicesBlock = services.length > 0 ? services.join(\"\\n\") : \"\";\n\n return `${importsBlock}\n${servicesBlock ? `\\n${servicesBlock}\\n` : \"\"}\nserver.listen(({ url }) => {\n console.log(\\`Server is running on \\${url}\\`);\n});\n`;\n }\n\n static getMqttConfigTemplate() {\n return `// MQTT Configuration\n// This file is imported to set up MQTT connection options\n// Add your MQTT handlers in separate files within this directory\n// Use: npx balda generate-mqtt <handler-name> to create new handlers\n`;\n }\n\n static getCronConfigTemplate() {\n return `// Cron Configuration\n// This file is imported to set up Cron jobs\n// Add your cron jobs in separate files within this directory\n// Use: npx balda generate-cron <job-name> to create new cron jobs\n`;\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitQueueCommand extends Command {\n static commandName = \"init-queue\";\n static description =\n \"Initialize queue provider configuration with required dependencies\";\n static help = [\n \"Initialize a queue provider configuration file with basic credentials\",\n \"Automatically installs required packages for the selected provider\",\n \"Only scaffolds the connection, handlers should be created with generate-queue command\",\n \"Example: npx balda init-queue -t bullmq -o src/queue\",\n ];\n\n @flag.string({\n description: \"Queue provider type (bullmq, sqs, pgboss) - required\",\n aliases: \"t\",\n name: \"type\",\n required: true,\n })\n static queueType: \"bullmq\" | \"sqs\" | \"pgboss\";\n\n @flag.string({\n description:\n \"Output directory for queue configuration, default is src/queue\",\n aliases: \"o\",\n name: \"output\",\n required: false,\n defaultValue: \"src/queue\",\n })\n static outputPath: string;\n\n static queueDependencies: Record<string, string[]> = {\n bullmq: [\"bullmq\", \"ioredis\"],\n sqs: [\"@aws-sdk/client-sqs\", \"sqs-consumer\"],\n pgboss: [\"pg-boss\", \"pg\"],\n };\n\n static async handle(): Promise<void> {\n this.logger.info(`Initializing ${this.queueType} queue provider...`);\n\n if (![\"bullmq\", \"sqs\", \"pgboss\"].includes(this.queueType)) {\n this.logger.error(\n `Invalid queue type: ${this.queueType}. Must be one of: bullmq, sqs, pgboss`,\n );\n return;\n }\n\n const [packageManager, packageManagerCommand] = await getPackageManager();\n\n // Install dependencies if on npm, yarn, or pnpm\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const dependencies = this.queueDependencies[this.queueType];\n const uninstalledDeps = await getUninstalledPackages(dependencies);\n\n if (uninstalledDeps.length > 0) {\n this.logger.info(\n `Found ${uninstalledDeps.length} missing dependencies for ${this.queueType}`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDeps.join(\" \")}`,\n packageManager,\n uninstalledDeps,\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Queue initialization aborted.\",\n );\n return;\n }\n }\n\n if (uninstalledDeps.length === 0) {\n this.logger.info(\n `All ${this.queueType} dependencies are already installed`,\n );\n }\n }\n\n const configTemplate = this.getConfigTemplate();\n const fileName = `${this.queueType}.config.ts`;\n const fullPath = nativePath.join(this.outputPath, fileName);\n\n if (!(await nativeFs.exists(this.outputPath))) {\n await nativeFs.mkdir(this.outputPath, { recursive: true });\n }\n\n this.logger.info(`Creating ${fileName} file at ${this.outputPath}...`);\n await nativeFs.writeFile(\n fullPath,\n new TextEncoder().encode(configTemplate),\n );\n\n this.logger.info(\n `Queue configuration initialized successfully at ${fullPath}`,\n );\n this.logger.info(\n `Remember to update the configuration with your actual credentials`,\n );\n this.logger.info(`Use 'npx balda generate-queue' to create queue handlers`);\n }\n\n static getConfigTemplate(): string {\n if (this.queueType === \"bullmq\") {\n return this.getBullMQTemplate();\n }\n\n if (this.queueType === \"sqs\") {\n return this.getSQSTemplate();\n }\n\n if (this.queueType === \"pgboss\") {\n return this.getPGBossTemplate();\n }\n\n return \"\";\n }\n\n static getBullMQTemplate(): string {\n return `import { defineBullMQConfiguration } from \"balda\";\n\n// Configure BullMQ connection and default options\ndefineBullMQConfiguration({\n connection: {\n host: process.env.REDIS_HOST || \"localhost\",\n port: parseInt(process.env.REDIS_PORT || \"6379\", 10),\n password: process.env.REDIS_PASSWORD,\n },\n defaultJobOptions: {\n attempts: 3,\n backoff: {\n type: \"exponential\",\n delay: 1000,\n },\n },\n errorHandler: async (job, error) => {\n console.error(\\`Job \\${job.id} failed:\\`, error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { bullmqQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: bullmqQueue<{ email: string; subject: string }>(\"email-notifications\"),\n * orderProcessing: bullmqQueue<{ orderId: string; userId: string }>(\"order-processing\"),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n\n static getSQSTemplate(): string {\n return `import { defineSQSConfiguration } from \"balda\";\n\n// Configure SQS connection and consumer options\ndefineSQSConfiguration({\n client: {\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n consumer: {\n batchSize: 10,\n visibilityTimeout: 30,\n waitTimeSeconds: 20,\n queueUrlMap: {\n // Map your queue topics to SQS queue URLs\n // Example: \"user-notifications\": process.env.USER_NOTIFICATIONS_QUEUE_URL || \"\",\n },\n },\n errorHandler: (error) => {\n console.error(\"SQS error:\", error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { sqsQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: sqsQueue<{ email: string; subject: string }>(\n * \"email-notifications\",\n * { queueUrl: process.env.EMAIL_QUEUE_URL || \"\" }\n * ),\n * orderProcessing: sqsQueue<{ orderId: string; userId: string }>(\n * \"order-processing\",\n * { queueUrl: process.env.ORDER_QUEUE_URL || \"\" }\n * ),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n\n static getPGBossTemplate(): string {\n return `import { definePGBossConfiguration } from \"balda\";\n\n// Configure PGBoss connection\ndefinePGBossConfiguration({\n connectionString:\n process.env.DATABASE_URL ||\n \"postgresql://user:password@localhost:5432/database\",\n errorHandler: (error) => {\n console.error(\"PG-Boss error:\", error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { pgbossQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: pgbossQueue<{ email: string; subject: string }>(\"email-notifications\"),\n * orderProcessing: pgbossQueue<{ orderId: string; userId: string }>(\"order-processing\"),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n}\n","import { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class ListCommand extends Command {\n static commandName = \"list\";\n static description = \"List all available commands\";\n static help = [\n \"Display all registered Balda CLI commands with their descriptions\",\n \"Example: npx balda list\",\n ];\n\n static async handle(): Promise<void> {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Group user commands by category\n if (userCommands.length > 0) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n\n const categorizedCommands = this.groupByCategory(userCommands);\n this.displayCategorizedCommands(categorizedCommands);\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length > 0) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n }\n\n private static groupByCategory(\n commands: (typeof Command)[],\n ): Map<string, (typeof Command)[]> {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n }\n\n private static displayCategorizedCommands(\n categorizedCommands: Map<string, (typeof Command)[]>,\n ): void {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (commands.length === 0) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n }\n}\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager, execWithPrompt } from \"../../package.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { runtime } from \"../../runtime/runtime.js\";\nimport { Command } from \"../base_command.js\";\nimport { CommandOptions } from \"../command_types.js\";\nimport { arg } from \"../../decorators/command/arg.js\";\n\nexport default class ServeCommand extends Command {\n static commandName = \"serve\";\n static description = \"Run the server in dev mode with hot reload\";\n static help = [\n \"This command is intended to be run from the root of the project\",\n \"Bun and Deno have native dev hot reload\",\n \"Runtime is automatically inferred\",\n \"Node.js requires tsx to be installed for both typescript and javascript files\",\n \"Node.js dev dependencies (tsx) are installed automatically if not detected\",\n ];\n\n static runtime = runtime.type;\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @arg({\n required: false,\n defaultValue: \"src/index.ts\",\n description: \"The entry point of the project, default is src/index.ts\",\n })\n static entry: string;\n\n @flag.string({\n aliases: [\"d\"],\n name: \"deno-import-map\",\n required: false,\n description: \"Path to deno import map\",\n })\n static denoImportMap?: string;\n\n static async handle(): Promise<void> {\n if (this.runtime === \"bun\") {\n execSync(`bun run --watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n if (this.runtime === \"deno\") {\n let denoCommand = `deno run --watch --unstable-sloppy-imports --allow-all`;\n if (this.denoImportMap) {\n denoCommand = `${denoCommand} --import-map ${this.denoImportMap}`;\n }\n\n execSync(`${denoCommand} ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n this.handleNodeHotReload();\n }\n\n private static async handleNodeHotReload() {\n const hasTsx = fs.existsSync(\"node_modules/.bin/tsx\");\n if (!hasTsx) {\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} tsx ${devFlag}`,\n packageManager,\n [\"tsx\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Cannot start dev server without tsx.\",\n );\n return;\n }\n }\n\n const initCommand = this.calledBy !== \"node\" ? this.calledBy : \"npx\";\n execSync(`${initCommand} tsx watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class SetupStorageCommand extends Command {\n static commandName = \"setup-storage\";\n static description = \"Setup storage provider with required dependencies\";\n static help = [\n \"Install dependencies and create storage configuration for a specific provider\",\n \"Flags:\",\n \" -t, --type <provider> Storage provider type (s3, azure, local)\",\n \" -o, --output <path> Output directory for storage setup (default: src/storage/)\",\n \"\",\n \"Examples:\",\n \" npx balda setup:storage -t s3\",\n \" npx balda setup:storage --type azure --output src/config/\",\n ];\n\n @flag({\n description: \"Storage provider type (s3, azure, local)\",\n type: \"string\",\n aliases: [\"t\"],\n name: \"type\",\n required: true,\n })\n static storageType: string;\n\n @flag({\n description: \"Output directory for storage setup\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"src/storage/\",\n })\n static outputPath: string;\n\n static async handle(): Promise<void> {\n if (!this.storageType) {\n console.error(\n \"\\x1b[31m❌ Error: Storage type is required. Use -t or --type flag.\\x1b[0m\",\n );\n console.log(\"\\x1b[90mExample: npx balda setup:storage -t s3\\x1b[0m\\n\");\n return;\n }\n\n if (!this.outputPath) {\n await nativeFs.mkdir(nativePath.join(process.cwd(), this.outputPath), {\n recursive: true,\n });\n }\n\n const validTypes = [\"s3\", \"azure\", \"local\"];\n if (!validTypes.includes(this.storageType)) {\n console.error(\n `\\x1b[31m❌ Error: Invalid storage type '${this.storageType}'. Valid types: ${validTypes.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(\n `\\n🚀 Setting up ${this.storageType.toUpperCase()} storage provider...\\n`,\n );\n\n const dependencies = this.getDependencies(this.storageType);\n\n if (dependencies.length === 0) {\n console.log(\n `\\x1b[32m✅ ${this.storageType.toUpperCase()} storage doesn't require additional dependencies.\\x1b[0m\\n`,\n );\n }\n\n if (dependencies.length) {\n const missingDeps = await this.checkMissingDependencies(dependencies);\n\n if (missingDeps.length === 0) {\n console.log(\n `\\x1b[32m✅ All required dependencies are already installed.\\x1b[0m\\n`,\n );\n }\n\n if (missingDeps.length) {\n const [packageManager, installCommand] = await getPackageManager();\n const command = `${packageManager} ${installCommand} ${missingDeps.join(\" \")}`;\n\n const installed = await execWithPrompt(\n command,\n packageManager,\n missingDeps,\n { stdio: \"inherit\" },\n false,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ Dependency installation skipped by user.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ Dependencies installed successfully!\\x1b[0m\\n`,\n );\n }\n }\n\n await this.createStorageSetup(this.storageType, this.outputPath);\n\n console.log(\n `\\x1b[32m✨ ${this.storageType.toUpperCase()} storage setup complete!\\x1b[0m\\n`,\n );\n }\n\n private static getDependencies(storageType: string): string[] {\n const dependencyMap: Record<string, string[]> = {\n s3: [\n \"@aws-sdk/client-s3\",\n \"@aws-sdk/s3-request-presigner\",\n \"@aws-sdk/cloudfront-signer\",\n ],\n azure: [\"@azure/storage-blob\"],\n local: [],\n };\n\n return dependencyMap[storageType] || [];\n }\n\n private static async checkMissingDependencies(\n dependencies: string[],\n ): Promise<string[]> {\n const packageJsonPath = nativePath.join(process.cwd(), \"package.json\");\n const exists = await nativeFs.exists(packageJsonPath);\n if (!exists) {\n return dependencies;\n }\n\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const nodeModulesExists = await nativeFs.exists(nodeModulesPath);\n if (!nodeModulesExists) {\n return dependencies;\n }\n\n const missing: string[] = [];\n for (const dep of dependencies) {\n const depPath = nativePath.join(nodeModulesPath, dep);\n const depExists = await nativeFs.exists(depPath);\n if (!depExists) {\n missing.push(dep);\n }\n }\n\n return missing;\n }\n\n private static async createStorageSetup(\n storageType: string,\n outputPath: string,\n ): Promise<void> {\n const resolvedPath = nativePath.join(process.cwd(), outputPath);\n const exists = await nativeFs.exists(resolvedPath);\n\n if (!exists) {\n await nativeFs.mkdir(resolvedPath, { recursive: true });\n }\n\n const configFile = nativePath.join(resolvedPath, `storage.ts`);\n const configExists = await nativeFs.exists(configFile);\n if (configExists) {\n console.log(\n `\\x1b[33m⚠️ Configuration file already exists: ${configFile}\\x1b[0m`,\n );\n return;\n }\n\n const template = this.getConfigTemplate(storageType);\n await nativeFs.writeFile(configFile, new TextEncoder().encode(template));\n\n console.log(`\\x1b[32m✅ Created configuration file: ${configFile}\\x1b[0m`);\n }\n\n private static getConfigTemplate(storageType: string): string {\n const templates: Record<string, string> = {\n s3: `import { Storage, S3StorageProvider } from \"balda\";\n\n/**\n * S3 Storage Configuration\n *\n * Environment variables required:\n * - AWS_ACCESS_KEY_ID\n * - AWS_SECRET_ACCESS_KEY\n * - AWS_REGION\n * - S3_BUCKET\n *\n * Optional for CloudFront:\n * - CLOUDFRONT_DOMAIN\n * - CLOUDFRONT_KEY_PAIR_ID\n * - CLOUDFRONT_PRIVATE_KEY\n */\n\nexport const storage = new Storage(\n {\n s3: new S3StorageProvider({\n s3ClientConfig: {\n bucketName: process.env.S3_BUCKET || \"your-bucket-name\",\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n // Uncomment to enable CloudFront signed URLs\n // cloudfrontOptions: {\n // domainName: process.env.CLOUDFRONT_DOMAIN || \"\",\n // keyPairId: process.env.CLOUDFRONT_KEY_PAIR_ID || \"\",\n // privateKey: process.env.CLOUDFRONT_PRIVATE_KEY || \"\",\n // },\n }),\n },\n {\n defaultProvider: \"s3\",\n },\n);\n`,\n azure: `import { Storage, AzureBlobStorageProvider } from \"balda\";\n\n/**\n * Azure Blob Storage Configuration\n *\n * Environment variables required:\n * - AZURE_STORAGE_CONNECTION_STRING\n * - AZURE_CONTAINER_NAME\n * - AZURE_STORAGE_ACCOUNT\n * - AZURE_STORAGE_KEY\n */\n\nexport const storage = new Storage(\n {\n azure: new AzureBlobStorageProvider({\n containerName: process.env.AZURE_CONTAINER_NAME || \"your-container-name\",\n connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || \"\",\n storageAccountName: process.env.AZURE_STORAGE_ACCOUNT || \"\",\n storageAccountKey: process.env.AZURE_STORAGE_KEY || \"\",\n }),\n },\n {\n defaultProvider: \"azure\",\n },\n);\n`,\n local: `import { Storage, LocalStorageProvider } from \"balda\";\n\n/**\n * Local Storage Configuration\n */\nexport const storage = new Storage(\n {\n local: new LocalStorageProvider({\n directory: \"./uploads\",\n }),\n },\n {\n defaultProvider: \"local\",\n },\n);\n`,\n };\n\n return templates[storageType] || \"\";\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport type { Command } from \"./base_command.js\";\nimport BuildCommand from \"./base_commands/build_command.js\";\nimport GenerateCommand from \"./base_commands/generate_command.js\";\nimport GenerateControllerCommand from \"./base_commands/generate_controller.js\";\nimport GenerateCronCommand from \"./base_commands/generate_cron.js\";\nimport GenerateMiddlewareCommand from \"./base_commands/generate_middleware.js\";\nimport GenerateMqttCommand from \"./base_commands/generate_mqtt.js\";\nimport GeneratePluginCommand from \"./base_commands/generate_plugin.js\";\nimport GenerateQueueCommand from \"./base_commands/generate_queue.js\";\nimport GenerateSdkCommand from \"./base_commands/generate_sdk.js\";\nimport InitCommand from \"./base_commands/init_command.js\";\nimport InitQueueCommand from \"./base_commands/init_queue_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport ServeCommand from \"./base_commands/serve_command.js\";\nimport SetupStorageCommand from \"./base_commands/setup_storage_command.js\";\n\n// Base commands are always loaded\nexport const baseCommands = [\n GeneratePluginCommand,\n GenerateCommand,\n GenerateCronCommand,\n GenerateMqttCommand,\n GenerateQueueCommand,\n GenerateControllerCommand,\n GenerateMiddlewareCommand,\n GenerateSdkCommand,\n InitCommand,\n InitQueueCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n SetupStorageCommand,\n];\n\n/**\n * Singleton that registers all commands and provides a way to execute them.\n * Commands are loaded from the commands directory, and are expected to have a default export with the command class that extends the base command class.\n * Commands can be run both as `.js` or `.ts` files. If the file is a ts file `typescript` npm package must be installed.\n * You can use the `CommandRegistry.setCommandsPattern` method to change the pattern of the commands to load.\n * @example\n * // commands/test.ts\n * export default class TestCommand extends Command {\n * static name = \"test\";\n * async handle() {\n * console.log(\"Test command\");\n * }\n * }\n */\nexport class CommandRegistry {\n private commands: Map<string, typeof Command>;\n private builtInCommands: Set<string>;\n static commandsPattern = \"src/commands/**/*.{ts,js}\";\n static logger = logger;\n\n /**\n * Private constructor to prevent direct instantiation\n * @internal Not meant to be used outside by the user\n */\n private constructor() {\n this.commands = new Map();\n this.builtInCommands = new Set();\n }\n\n static getInstance() {\n return new CommandRegistry();\n }\n\n static setCommandsPattern(pattern: string) {\n this.commandsPattern = pattern;\n }\n\n getCommand(name: string): typeof Command | null {\n return this.commands.get(name) ?? null;\n }\n\n getCommands(): (typeof Command)[] {\n return Array.from(this.commands.values());\n }\n\n getBuiltInCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter((cmd) =>\n this.builtInCommands.has(cmd.commandName),\n );\n }\n\n getUserDefinedCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter(\n (cmd) => !this.builtInCommands.has(cmd.commandName),\n );\n }\n\n isBuiltInCommand(commandName: string): boolean {\n return this.builtInCommands.has(commandName);\n }\n\n async loadCommands(commandsPattern: string) {\n CommandRegistry.logger.info(`Loading commands from ${commandsPattern}`);\n\n const commandFiles = await glob(commandsPattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n // if even one file is ts check if ts-node is installed\n if (commandFiles.some((file) => file.endsWith(\".ts\"))) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n } catch {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n }\n\n for (const commandFile of commandFiles) {\n const command = await import(commandFile)\n .then((module) => {\n if (module.default) {\n return module.default;\n }\n\n return module;\n })\n .catch((error) => {\n CommandRegistry.logger.error(\n `Error loading command ${commandFile}: ${error}`,\n );\n return null;\n });\n\n if (command) {\n this.commands.set(command.commandName, command);\n }\n }\n\n for (const command of baseCommands) {\n this.commands.set(command.commandName, command);\n this.builtInCommands.add(command.commandName);\n }\n }\n}\n\nexport const commandRegistry = CommandRegistry.getInstance();\n","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"]}
|
|
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/runtime/native_fs.ts","../src/runtime/native_path.ts","../src/package.ts","../src/commands/base_commands/build_command.ts","../src/commands/base_commands/generate_command.ts","../src/commands/base_commands/generate_controller.ts","../src/commands/base_commands/generate_cron.ts","../src/commands/base_commands/generate_middleware.ts","../src/commands/base_commands/generate_mqtt.ts","../src/commands/base_commands/generate_plugin.ts","../src/commands/base_commands/generate_queue.ts","../src/commands/base_commands/generate_sdk.ts","../src/commands/base_commands/init_command.ts","../src/commands/base_commands/init_queue_command.ts","../src/commands/base_commands/list_command.ts","../src/commands/base_commands/serve_command.ts","../src/commands/base_commands/setup_storage_command.ts","../src/commands/command_registry.ts","../src/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","NativeFs","path","data","arrayBuffer","denoBuffer","stats","bunStats","denoStats","fs","Readable","nodeStream","entries","entry","nativeFs","NativePath","inputPath","paths","nativePath","getUninstalledPackages","packages","nodeModulesPath","uninstalled","pkg","pkgPath","getPackageManager","execWithPrompt","packageManager","dependencies","areDevDeps","rl","dependenciesList","prompt","resolve","answer","execSync","BuildCommand","esbuild","packageManagerCommand","devFlag","err","assetsDir","plugins","copy","outFile","result","__decorateClass","GenerateCommand","commandRegistry","commandType","commandTemplate","GenerateControllerCommand","controllerTemplate","fileName","className","GenerateCron","cronTemplate","GenerateMiddlewareCommand","middlewareTemplate","middlewareName","GenerateMqttCommand","isValidLiteral","mqttTemplate","GeneratePluginCommand","pluginTemplate","GenerateQueueCommand","queueTemplate","GenerateSdkCommand","sdkGenerator","hasNodeModules","generatorPath","packageCommand","absoluteServerPath","serverModule","possibleExports","serverInstance","exportName","currentModule","wasStarted","serverUrl","res","rej","swaggerPath","swaggerJsonUrl","openApiSpec","response","serverWithClose","tempSpecPath","outputDir","commandParts","InitCommand","devDependenciesCommand","uninstalledDevDeps","uninstalledMqtt","uninstalledCron","ext","serverTemplate","indexTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","imports","services","importsBlock","servicesBlock","InitQueueCommand","uninstalledDeps","configTemplate","fullPath","ListCommand","builtInCommands","userCommands","categorizedCommands","maxNameLength","desc","deprecatedTag","commands","map","category","sortedCategories","color","ServeCommand","denoCommand","initCommand","SetupStorageCommand","validTypes","missingDeps","installCommand","storageType","packageJsonPath","missing","dep","depPath","outputPath","resolvedPath","configFile","template","baseCommands","CommandRegistry","_CommandRegistry","pattern","commandsPattern","commandFiles","glob","file","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","rest","CommandClass","message","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 { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","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 { runtime } from \"./runtime.js\";\n\nclass NativeFs {\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n const bunFs = await import(\"fs\");\n return bunFs.existsSync(path);\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(\n path: string,\n options?: { encoding?: \"utf8\" },\n ): Promise<Uint8Array | string> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const data = await fs.readFile(path, {\n encoding: options?.encoding ?? null,\n });\n\n if (options?.encoding === \"utf8\") {\n return data as string;\n }\n\n return new Uint8Array(data as Buffer);\n case \"bun\":\n const arrayBuffer = Bun.file(path);\n if (options?.encoding === \"utf8\") {\n return arrayBuffer.text();\n }\n\n return new Uint8Array(await arrayBuffer.arrayBuffer());\n case \"deno\":\n const denoBuffer = await Deno.readFile(path);\n if (options?.encoding === \"utf8\") {\n return new TextDecoder().decode(denoBuffer);\n }\n\n return new Uint8Array(denoBuffer);\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunFs = await import(\"fs/promises\");\n const bunStats = await bunFs.stat(path);\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async streamFile(path: string): Promise<ReadableStream> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n const { Readable } = await import(\"stream\");\n const nodeStream = fs.createReadStream(path);\n return Readable.toWeb(nodeStream) as unknown as ReadableStream;\n\n case \"bun\":\n return Bun.file(path).stream();\n case \"deno\":\n const denoFile = await Deno.open(path);\n return denoFile.readable;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readdir(path: string): Promise<string[]> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"fs/promises\");\n return fs.readdir(path);\n case \"deno\":\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n\n return entries;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","// 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 { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\n\n/**\n * Check if packages are already installed in node_modules\n */\nexport const getUninstalledPackages = async (\n packages: string[],\n): Promise<string[]> => {\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n\n if (!hasNodeModules) {\n return packages;\n }\n\n const uninstalled: string[] = [];\n\n for (const pkg of packages) {\n const pkgPath = nativePath.join(nodeModulesPath, pkg);\n const isInstalled = await nativeFs.exists(pkgPath);\n\n if (!isInstalled) {\n uninstalled.push(pkg);\n }\n }\n\n return uninstalled;\n};\n\nexport const getPackageManager = async (): Promise<\n [string, string, string]\n> => {\n const hasYarnLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"yarn.lock\"),\n );\n\n if (hasYarnLock) {\n return [\"yarn\", \"add\", \"-D\"];\n }\n\n const hasPnpmLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"pnpm-lock.yaml\"),\n );\n\n if (hasPnpmLock) {\n return [\"pnpm\", \"add\", \"-D\"];\n }\n\n const hasPackageLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"package-lock.json\"),\n );\n\n if (hasPackageLock) {\n return [\"npm\", \"install\", \"-D\"];\n }\n\n const hasBunLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"bun.lockb\"),\n );\n\n if (hasBunLock) {\n return [\"bun\", \"add\", \"-D\"];\n }\n\n const hasDenoLock = await nativeFs.exists(\n nativePath.join(process.cwd(), \"deno.lock\"),\n );\n\n if (hasDenoLock) {\n return [\"deno\", \"add\", \"-D\"];\n }\n\n return [\"npm\", \"install\", \"-D\"];\n};\n\n/**\n * Prompts user for confirmation and executes a command if approved\n * @param command - The command to execute\n * @param packageManager - The package manager name (e.g., \"npm\", \"yarn\")\n * @param dependencies - Array of dependencies to display\n * @param options - execSync options\n * @returns Promise that resolves to true if executed, false if skipped\n */\nexport const execWithPrompt = async (\n command: string,\n packageManager: string,\n dependencies: string[],\n options?: Parameters<typeof execSync>[1],\n areDevDeps: boolean = true,\n): Promise<boolean> => {\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n });\n\n const dependenciesList = dependencies.join(\", \");\n const prompt = `Do you want to install the following ${areDevDeps ? \"dev\" : \"\"} dependencies using ${packageManager}?\\n${dependenciesList}\\n(y/n): `;\n\n return new Promise((resolve) => {\n rl.question(prompt, (answer) => {\n rl.close();\n\n if (answer.toLowerCase() === \"y\" || answer.toLowerCase() === \"yes\") {\n execSync(command, options);\n resolve(true);\n return;\n }\n\n resolve(false);\n });\n });\n};\n","import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\n\nexport default class BuildCommand extends Command {\n static commandName = \"build\";\n static description = \"Build the project for production, node.js only\";\n static help = [\n \"Build the project for production, node.js only\",\n \"It will create a production build of the project in the dist directory\",\n \"Must have a tsconfig.json file in the root of the project\",\n \"Must have esbuild installed as a dependency while running the command\",\n \"Must have esbuild-plugin-copy installed as a dependency while running the command if you want to copy assets to the output directory\",\n \"Example: npx balda build -t ./tsconfig.json -a ./assets\",\n ];\n\n @flag({\n type: \"boolean\",\n aliases: [\"c\"],\n name: \"clear-dist\",\n required: false,\n defaultValue: false,\n description:\n \"Whether to clear the dist directory before building the project\",\n })\n static clearDist: boolean;\n\n @flag({\n type: \"string\",\n aliases: [\"e\"],\n name: \"entry\",\n required: false,\n defaultValue: \"./src/index.ts\",\n description: \"The entry point of the project, default is ./src/index.ts\",\n })\n static entry: string;\n\n @flag({\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"./dist\",\n description: \"The path to the output directory, default is ./dist\",\n })\n static output: string;\n\n @flag({\n type: \"string\",\n aliases: [\"t\"],\n name: \"tsconfig\",\n required: false,\n defaultValue: \"./tsconfig.json\",\n description:\n \"The path to the tsconfig.json file, default is ./tsconfig.json\",\n })\n static tsconfig: string;\n\n @flag({\n type: \"string\",\n aliases: [\"a\"],\n name: \"assets\",\n required: false,\n description:\n \"The path to the assets directory that will be loaded in the production build\",\n })\n static assets: string;\n\n @flag({\n type: \"string\",\n aliases: [\"f\"],\n name: \"format\",\n required: false,\n defaultValue: \"esm\",\n description:\n \"The format to build the project, default is esm, can be 'esm' or 'cjs'\",\n })\n static format: \"esm\" | \"cjs\";\n\n @flag({\n type: \"string\",\n aliases: [\"p\"],\n name: \"packages\",\n required: false,\n defaultValue: \"external\",\n description:\n \"Weather to bundle node_modules or not, default is external, can be 'bundle' or 'external'\",\n })\n static packages: \"external\" | \"bundle\";\n\n @flag({\n type: \"boolean\",\n aliases: [\"s\"],\n name: \"sourcemap\",\n required: false,\n defaultValue: true,\n description: \"Whether to generate sourcemaps or not, default is true\",\n })\n static sourcemap: boolean;\n\n static async handle(): Promise<void> {\n if (typeof process === undefined) {\n this.logger.error(\"Build command is only supported in node.js\");\n process.exit(1);\n }\n\n if (![\"esm\", \"cjs\"].includes(this.format)) {\n this.logger.error(\"Invalid format, must be 'esm' or 'cjs'\");\n process.exit(1);\n }\n\n if (![\"bundle\", \"external\"].includes(this.packages)) {\n this.logger.error(\"Invalid packages, must be 'bundle' or 'external'\");\n process.exit(1);\n }\n\n const isEsBuildInstalled = await import(\"esbuild\")\n .then((esbuild) => true)\n .catch(() => false);\n\n if (!isEsBuildInstalled) {\n const [packageManager, packageManagerCommand, devFlag] =\n await getPackageManager();\n\n const didInstall = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} esbuild ${devFlag}`,\n packageManager,\n [\"esbuild\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!didInstall) {\n this.logger.warn(\n `User chose to not continue with the installation of esbuild, exiting...`,\n );\n process.exit(0);\n }\n }\n\n const esbuild = await import(\"esbuild\").catch((err) => {\n this.logger.error(\n \"esbuild is not installed, please install it with `npm install -D esbuild` to use the build command\",\n );\n throw new Error(\"esbuild is not installed\");\n });\n\n const assetsDir = path.join(this.output, \"assets\");\n const plugins = [];\n if (this.assets) {\n const { copy } = await import(\"esbuild-plugin-copy\").catch((err) => {\n this.logger.error(\n \"esbuild-plugin-copy is not installed, please install it with `npm install -D esbuild-plugin-copy` to use the build command\",\n );\n throw new Error(\"esbuild-plugin-copy is not installed\");\n });\n\n if (!fs.existsSync(assetsDir)) {\n fs.mkdirSync(assetsDir, { recursive: true });\n }\n\n plugins.push(\n copy({\n assets: {\n from: this.assets,\n to: assetsDir,\n },\n }),\n );\n }\n\n if (this.clearDist && fs.existsSync(this.output)) {\n this.logger.info(`Clearing dist directory...`);\n fs.rmSync(this.output, { recursive: true });\n }\n\n this.logger.info(`Building project...`);\n const outFile = path.join(this.output, \"server.js\");\n const result = await esbuild.build({\n tsconfig: this.tsconfig,\n entryPoints: [this.entry],\n bundle: true,\n platform: \"node\",\n outfile: outFile,\n minify: true,\n sourcemap: this.sourcemap,\n plugins,\n format: this.format,\n packages: this.packages,\n });\n\n if (result.errors.length) {\n this.logger.error(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n errors: result.errors,\n },\n null,\n 2,\n ),\n );\n\n process.exit(1);\n }\n\n if (result.warnings.length) {\n this.logger.warn(\n JSON.stringify(\n {\n message: \"Failed to build the project\",\n warnings: result.warnings,\n },\n null,\n 2,\n ),\n );\n }\n\n this.logger.info(\n JSON.stringify(\n {\n message: `Project built successfully in ${outFile}`,\n output: outFile,\n assets: this.assets ? true : false,\n },\n null,\n 2,\n ),\n );\n process.exit(0);\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class GenerateCommand extends Command {\n static commandName = \"generate-command\";\n static description = \"Generate a new command in the specified path\";\n static help = [\n \"Generate a new cli command in the specified path\",\n \"Example: npx balda generate-command my-command -p src/commands\",\n ];\n\n /**\n * The path where the command will be generated\n */\n static path = \"src/commands\";\n\n @arg({\n description: \"The name of the command to generate\",\n required: true,\n })\n static name: string;\n\n static async handle(): Promise<void> {\n // Check if command already exists to prevent overriding built-in commands\n const existingCommand = commandRegistry.getCommand(this.name);\n if (existingCommand) {\n const isBuiltIn = commandRegistry.isBuiltInCommand(this.name);\n const commandType = isBuiltIn ? \"built-in\" : \"user-defined\";\n this.logger.error(\n { commandName: this.name, type: commandType },\n `Command \"${this.name}\" already exists as a ${commandType} command. Cannot override existing commands.`,\n );\n return;\n }\n\n const commandTemplate = this.getCommandTemplate();\n this.path = nativePath.join(this.path, `${this.name}.ts`);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(commandTemplate),\n );\n\n this.logger.info(\n `Command ${this.name} created successfully at ${this.path}`,\n );\n }\n\n static getCommandTemplate() {\n return `import { Command, CommandOptions } from \"balda\";\n\nexport default class extends Command {\n static commandName = \"${this.name}\";\n static description = \"Command description\";\n\n static options: CommandOptions = {\n // Define your command options here\n keepAlive: false,\n };\n\n static async handle(): Promise<void> {\n // Implement your command logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toDashCase, toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateControllerCommand extends Command {\n static commandName = \"generate-controller\";\n static description = \"Generate a new controller in the specified path\";\n static help = [\n \"Generate a new controller in the specified path\",\n \"Example: npx balda generate-controller user -p src/controllers\",\n ];\n\n @arg({\n description: \"The name of the controller to generate\",\n required: true,\n })\n static controllerName: string;\n\n @flag({\n description:\n \"The path to the controller to generate, default is src/controllers\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/controllers\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const controllerTemplate = this.getControllerTemplate();\n const fileName = `${this.controllerName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(controllerTemplate),\n );\n\n this.logger.info(\n `Controller ${this.controllerName} created successfully at ${this.path}`,\n );\n }\n\n static getControllerTemplate() {\n const className = toPascalCase(this.controllerName);\n return `import { controller, get, post, put, del, Request, Response } from \"balda\";\n\n@controller(\"/${toDashCase(this.controllerName)}\")\nexport default class ${className}Controller {\n @get(\"/\")\n async index(req: Request, res: Response) {\n return { message: \"List all ${this.controllerName.toLowerCase()}s\" };\n }\n\n @get(\"/:id\")\n async show(req: Request, res: Response) {\n return { message: \\`Get ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n\n @post(\"/\")\n async create(req: Request, res: Response) {\n return { message: \\`Create ${this.controllerName.toLowerCase()}\\`, data: req.parsedBody };\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.parsedBody };\n }\n\n @del(\"/:id\")\n async destroy(req: Request, res: Response) {\n return { message: \\`Delete ${this.controllerName.toLowerCase()} with id \\${req.params.id}\\` };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateCron extends Command {\n static commandName = \"generate-cron\";\n static description = \"Generate a new cron job in the specified path\";\n static help = [\n \"Generate a new cron job in the specified path\",\n \"Example: npx balda generate-cron my-cron -p src/cron\",\n ];\n\n @arg({\n description: \"The name of the cron job file to generate\",\n required: true,\n })\n static fileName: string;\n\n @flag({\n description: \"The path to the cron job to generate, default is src/cron\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/cron\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const cronTemplate = this.getCronTemplate();\n this.path = nativePath.join(this.path, `${this.fileName}.ts`);\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(cronTemplate));\n\n this.logger.info(\n `Cron job ${this.fileName} created successfully at ${this.path}`,\n );\n }\n\n static getCronTemplate() {\n return `import { BaseCron, cron } from \"balda\";\n\nexport default class extends BaseCron {\n @cron(\"* * * * *\")\n handle() {\n this.logger.info(\"Running cron job\");\n // Implement your cron job logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toPascalCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMiddlewareCommand extends Command {\n static commandName = \"generate-middleware\";\n static description = \"Generate a new middleware in the specified path\";\n static help = [\n \"Generate a new middleware in the specified path\",\n \"Example: npx balda generate-middleware auth -p src/middlewares\",\n ];\n\n @arg({\n description: \"The name of the middleware to generate\",\n required: true,\n })\n static middlewareName: string;\n\n @flag({\n description:\n \"The path to the middleware to generate, default is src/middlewares\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/middlewares\",\n })\n static path: string;\n\n static async handle(): Promise<void> {\n const middlewareTemplate = this.getMiddlewareTemplate();\n const fileName = `${this.middlewareName.toLowerCase()}.ts`;\n this.path = nativePath.join(this.path, fileName);\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(middlewareTemplate),\n );\n\n this.logger.info(\n `Middleware ${this.middlewareName} created successfully at ${this.path}`,\n );\n }\n\n static getMiddlewareTemplate() {\n const middlewareName = toPascalCase(this.middlewareName);\n return `import type { Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\n/**\n * ${middlewareName} middleware\n * @description Add your middleware logic here\n */\nexport const ${middlewareName}: ServerRouteMiddleware = async () => {\n return async (req: Request, res: Response, next: NextFunction) => {\n // Add your middleware logic here\n return next();\n };\n};`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateMqttCommand extends Command {\n static commandName = \"generate-mqtt\";\n static description = \"Generate a new MQTT handler in the specified path\";\n static help = [\n \"Generate a new MQTT handler in the specified path\",\n \"Example: npx balda generate-mqtt temperature-handler -p src/mqtt\",\n ];\n\n @flag({\n description:\n \"The path to the MQTT handler to generate, default is src/mqtt\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/mqtt\",\n })\n static path: string;\n\n @arg({\n description: \"The MQTT topic to subscribe to\",\n required: true,\n })\n static topic: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.topic.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const mqttTemplate = this.getMqttTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.topic.replace(/\\//g, \"_\"))}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(this.path, new TextEncoder().encode(mqttTemplate));\n\n this.logger.info(\n `MQTT handler for topic ${this.topic} created successfully at ${this.path}`,\n );\n }\n\n static getMqttTemplate(isValidLiteral: boolean) {\n return `import { BaseMqtt, mqtt } from \"balda\";\n\n/**\n * Define your MQTT topics interface for type safety\n */\ndeclare module \"balda\" {\n interface MqttTopics {\n ${isValidLiteral ? `${this.topic}: string;` : `'${this.topic}': string;`}\n }\n}\n\nexport default class extends BaseMqtt {\n @mqtt.subscribe(\"${this.topic}\")\n async handle(message: string) {\n this.logger.info({ message }, \"Message received\");\n // Implement your MQTT handler logic here\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GeneratePluginCommand extends Command {\n static commandName = \"generate-plugin\";\n static description = \"Generate a new plugin in the specified path\";\n static help = [\n \"Generate a new plugin in the specified path\",\n \"Example: npx balda generate-plugin my-plugin -p src/plugins\",\n ];\n\n @arg({\n description: \"The name of the plugin to generate\",\n required: true,\n })\n static pluginName: string;\n\n @flag({\n description: \"The path to the plugin to generate, default is src/plugins\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/plugins\",\n })\n static pluginPath: string;\n\n static async handle(): Promise<void> {\n const pluginTemplate = this.getPluginTemplate();\n this.pluginPath = nativePath.join(this.pluginPath, `${this.pluginName}.ts`);\n\n if (\n !(await nativeFs.exists(nativePath.join(process.cwd(), this.pluginPath)))\n ) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.pluginPath.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.pluginPath,\n new TextEncoder().encode(pluginTemplate),\n );\n\n this.logger.info(\n `Plugin ${this.name} created successfully at ${this.pluginPath}`,\n );\n }\n\n static getPluginTemplate() {\n return `import { BasePlugin, Request, Response, NextFunction, ServerRouteMiddleware } from \"balda\";\n\nexport default class extends BasePlugin {\n async handle(): Promise<ServerRouteMiddleware> {\n return async (req: Request, res: Response, next: NextFunction) => {\n console.log(\"${this.pluginName} plugin is running\");\n await next();\n };\n }\n}`;\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { toLowerSnakeCase } from \"../../utils.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateQueueCommand extends Command {\n static commandName = \"generate-queue\";\n static description = \"Generate a new queue in the specified path\";\n static help = [\n \"Generate a new queue in the specified path\",\n \"Example: npx balda generate-queue my-queue -p src/queues --provider bullmq\",\n ];\n\n @arg({\n description: \"The name of the queue to generate\",\n required: true,\n })\n static queueName: string;\n\n @flag({\n description: \"The path to the queue to generate, default is src/queues\",\n type: \"string\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"src/queues\",\n })\n static path: string;\n\n @flag({\n description: \"The provider of the queue to generate, default is bullmq\",\n type: \"string\",\n aliases: [\"pr\"],\n name: \"provider\",\n required: false,\n defaultValue: \"bullmq\",\n })\n static provider: string;\n\n static async handle(): Promise<void> {\n const isValidLiteral = this.queueName.match(/^[a-zA-Z_][a-zA-Z0-9_]*$/);\n const queueTemplate = this.getQueueTemplate(!!isValidLiteral);\n this.path = nativePath.join(\n this.path,\n `${toLowerSnakeCase(this.queueName)}.ts`,\n );\n\n if (!(await nativeFs.exists(nativePath.join(process.cwd(), this.path)))) {\n await nativeFs.mkdir(\n nativePath.join(\n process.cwd(),\n this.path.split(\"/\").slice(0, -1).join(\"/\"),\n ),\n { recursive: true },\n );\n }\n\n await nativeFs.writeFile(\n this.path,\n new TextEncoder().encode(queueTemplate),\n );\n\n this.logger.info(\n `Queue ${this.queueName} created successfully at ${this.path}`,\n );\n }\n\n static getQueueTemplate(isValidLiteral: boolean) {\n return `import { BaseQueue, queue } from \"balda\";\n\nexport type Payload = {\n // Add your payload here\n};\n\ndeclare module \"balda\" {\n export interface QueueTopic {\n ${isValidLiteral ? this.queueName : `'${this.queueName}'`}: Payload;\n }\n}\n\nexport default class extends BaseQueue {\n @queue('${this.provider}', '${this.queueName}')\n async handle(payload: Payload) {\n // Implement your queue logic here\n this.logger.info({ payload }, 'Payload received');\n return Promise.resolve();\n }\n}`;\n }\n}\n","import { execSync } from \"node:child_process\";\nimport { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Server } from \"../../server/server.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class GenerateSdkCommand extends Command {\n static commandName = \"generate-sdk\";\n static description =\n \"Generate a TypeScript SDK from your server's OpenAPI specification\";\n static help = [\n \"Generate a TypeScript SDK from your server's OpenAPI specification\",\n \"This command imports your server instance, starts it if needed, downloads the OpenAPI spec, and generates an SDK\",\n \"\",\n \"Arguments:\",\n \" serverPath Path to the server instance file (default: test/server/instance.ts)\",\n \"\",\n \"Flags:\",\n \" -o, --output <path> Output directory for generated SDK (default: sdk)\",\n \" -s, --swagger-path <path> Swagger UI path on your server (default: /docs)\",\n \" -c, --client <type> HTTP client to use: axios or fetch (default: fetch)\",\n \" --unwrap-response-data Automatically unwrap response data property\",\n \" --single-http-client Generate single HTTP client instance\",\n \" --type-prefix <prefix> Add prefix to all generated types\",\n \" --type-suffix <suffix> Add suffix to all generated types\",\n \" --enum-names-as-values Use enum names as values\",\n \" --sort-types Sort types alphabetically\",\n \"\",\n \"Examples:\",\n \" npx balda generate-sdk\",\n \" npx balda generate-sdk src/server/index.ts -o ./client-sdk\",\n \" npx balda generate-sdk src/server.ts --client axios\",\n \" npx balda generate-sdk --unwrap-response-data --single-http-client\",\n \" npx balda generate-sdk --type-prefix Api --sort-types\",\n ];\n\n @arg({\n description:\n \"Path to the server instance file (should export a Server instance)\",\n required: false,\n defaultValue: \"test/server/instance.ts\",\n })\n static serverPath: string;\n\n @flag({\n description: \"Output directory for generated SDK\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"sdk\",\n })\n static outputPath: string;\n\n @flag({\n description: \"Swagger UI path on your server\",\n type: \"string\",\n aliases: [\"s\"],\n name: \"swagger-path\",\n required: false,\n })\n static swaggerPath?: string;\n\n @flag({\n description: \"HTTP client to use (axios or fetch)\",\n type: \"string\",\n aliases: [\"c\"],\n name: \"client\",\n required: false,\n defaultValue: \"fetch\",\n })\n static httpClient: string;\n\n @flag({\n description: \"Unwrap response data automatically\",\n type: \"boolean\",\n name: \"unwrap-response-data\",\n required: false,\n defaultValue: false,\n })\n static unwrapResponseData: boolean;\n\n @flag({\n description: \"Generate single HTTP client instance\",\n type: \"boolean\",\n name: \"single-http-client\",\n required: false,\n defaultValue: false,\n })\n static singleHttpClient: boolean;\n\n @flag({\n description: \"Add prefix to all generated types\",\n type: \"string\",\n name: \"type-prefix\",\n required: false,\n })\n static typePrefix?: string;\n\n @flag({\n description: \"Add suffix to all generated types\",\n type: \"string\",\n name: \"type-suffix\",\n required: false,\n })\n static typeSuffix?: string;\n\n @flag({\n description: \"Use enum names as values\",\n type: \"boolean\",\n name: \"enum-names-as-values\",\n required: false,\n defaultValue: false,\n })\n static enumNamesAsValues: boolean;\n\n @flag({\n description: \"Sort types alphabetically\",\n type: \"boolean\",\n name: \"sort-types\",\n required: false,\n defaultValue: false,\n })\n static sortTypes: boolean;\n\n static async handle(): Promise<void> {\n console.log(\"\\n🚀 Starting SDK generation...\\n\");\n\n // Step 1: Check if swagger-typescript-api is installed\n const sdkGenerator = \"swagger-typescript-api\";\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const hasNodeModules = await nativeFs.exists(nodeModulesPath);\n const generatorPath = nativePath.join(nodeModulesPath, sdkGenerator);\n const hasGenerator = hasNodeModules\n ? await nativeFs.exists(generatorPath)\n : false;\n\n if (!hasGenerator) {\n console.log(\n `📦 ${sdkGenerator} not found. Installing as dev dependency...\\n`,\n );\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} ${sdkGenerator} ${devFlag}`,\n packageManager,\n [sdkGenerator],\n { stdio: \"inherit\" },\n true,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ SDK generation cancelled: swagger-typescript-api installation was skipped.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ ${sdkGenerator} installed successfully!\\x1b[0m\\n`,\n );\n }\n\n // Step 2: Import and start the server\n const absoluteServerPath = nativePath.resolve(\n process.cwd(),\n this.serverPath,\n );\n const serverPathExists = await nativeFs.exists(absoluteServerPath);\n\n if (!serverPathExists) {\n console.error(\n `\\x1b[31m❌ Error: Server file not found at ${absoluteServerPath}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(`📂 Loading server from: ${this.serverPath}`);\n\n let serverModule: Record<string, unknown>;\n try {\n // Import the server module\n const fileUrl = `file://${absoluteServerPath}`;\n serverModule = (await import(fileUrl)) as Record<string, unknown>;\n } catch (error) {\n console.error(`\\x1b[31m❌ Error importing server module:\\x1b[0m`, error);\n return;\n }\n\n const possibleExports = Object.keys(serverModule);\n\n // Find the Server instance in the module exports\n let serverInstance: Server | null = null;\n for (const exportName of possibleExports) {\n let currentModule = serverModule[exportName] as {\n default?: any;\n [key: string]: any;\n };\n\n if (\"default\" in currentModule && currentModule.default) {\n currentModule = currentModule.default;\n }\n\n if (\n currentModule &&\n \"_brand\" in currentModule &&\n currentModule._brand === \"BaldaServer\"\n ) {\n if (typeof currentModule === \"object\" && \"listen\" in currentModule) {\n serverInstance = currentModule as unknown as Server;\n console.log(`✅ Found server instance in export: \"${exportName}\"\\n`);\n break;\n }\n }\n }\n\n if (!serverInstance) {\n console.error(\n `\\x1b[31m❌ Error: No Server instance found in ${this.serverPath}\\x1b[0m`,\n );\n console.log(\n `\\x1b[90mExpected exports: ${possibleExports.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n // Step 3: Start the server\n let wasStarted = false;\n let serverUrl = \"\";\n let serverPort = 80;\n let serverHost = \"localhost\";\n\n serverUrl = `http://${serverHost}:${serverPort}`;\n try {\n // Start the server\n console.log(`🌐 Starting server on ${serverUrl}...`);\n if (\n typeof serverInstance.listen === \"function\" &&\n !serverInstance.isListening\n ) {\n await new Promise<void>((res, rej) => {\n try {\n serverInstance.listen(() => {\n wasStarted = true;\n console.log(`✅ Server started successfully!\\n`);\n res();\n });\n } catch (error) {\n rej(error);\n }\n }).catch((error) => {\n console.error(`Failed to start the server, continuing...`);\n });\n } else {\n throw new Error(\"Server instance does not have a listen() method\");\n }\n } catch (error) {\n console.error(`\\x1b[31m❌ Error starting server:\\x1b[0m`, error);\n return;\n }\n\n // Step 4: Download OpenAPI spec\n const swaggerPath =\n this.swaggerPath ??\n (typeof serverInstance.serverOptions.swagger !== \"boolean\"\n ? serverInstance.serverOptions.swagger?.path\n : \"/docs\");\n const swaggerJsonUrl = nativePath.join(\n serverUrl,\n swaggerPath ?? \"/docs\",\n \"/json\",\n );\n\n console.log(`📥 Downloading OpenAPI spec from: ${swaggerJsonUrl}`);\n\n let openApiSpec: Record<string, unknown>;\n try {\n const response = await globalThis.fetch(swaggerJsonUrl);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch OpenAPI spec: ${response.status} ${response.statusText}`,\n );\n }\n openApiSpec = (await response.json()) as Record<string, unknown>;\n console.log(`✅ OpenAPI spec downloaded successfully!\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error downloading OpenAPI spec:\\x1b[0m`, error);\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 5: Save OpenAPI spec to temp file\n const tempSpecPath = nativePath.join(process.cwd(), \".openapi-spec.json\");\n try {\n await nativeFs.writeFile(\n tempSpecPath,\n new TextEncoder().encode(JSON.stringify(openApiSpec, null, 2)),\n );\n } catch (error) {\n console.error(\n `\\x1b[31m❌ Error saving OpenAPI spec to file:\\x1b[0m`,\n error,\n );\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n await serverWithClose.close?.();\n } catch {\n // Ignore close errors\n }\n }\n return;\n }\n\n // Step 6: Generate SDK using swagger-typescript-api\n const outputDir = nativePath.resolve(process.cwd(), this.outputPath);\n console.log(`🔨 Generating SDK...\\n`);\n\n try {\n // Create output directory if it doesn't exist\n if (!(await nativeFs.exists(outputDir))) {\n await nativeFs.mkdir(outputDir, { recursive: true });\n }\n\n // Build command with options\n const commandParts = [\n \"npx swagger-typescript-api generate\",\n `--path=\"${tempSpecPath}\"`,\n `--output=\"${this.outputPath}\"`,\n `--http-client ${this.httpClient}`,\n \"--modular\",\n \"--extract-request-params\",\n \"--extract-request-body\",\n \"--extract-response-body\",\n \"--extract-response-error\",\n ];\n\n // Add optional flags\n if (this.unwrapResponseData) {\n commandParts.push(\"--unwrap-response-data\");\n }\n\n if (this.singleHttpClient) {\n commandParts.push(\"--single-http-client\");\n }\n\n if (this.typePrefix) {\n commandParts.push(`--type-prefix \"${this.typePrefix}\"`);\n }\n\n if (this.typeSuffix) {\n commandParts.push(`--type-suffix \"${this.typeSuffix}\"`);\n }\n\n if (this.enumNamesAsValues) {\n commandParts.push(\"--enum-names-as-values\");\n }\n\n if (this.sortTypes) {\n commandParts.push(\"--sort-types\");\n }\n\n const command = commandParts.join(\" \");\n\n execSync(command, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n\n console.log(`\\n\\x1b[32m✅ SDK generated successfully!\\x1b[0m`);\n console.log(`\\x1b[32m📁 SDK location: ${outputDir}\\x1b[0m\\n`);\n } catch (error) {\n console.error(`\\x1b[31m❌ Error generating SDK:\\x1b[0m`, error);\n } finally {\n // Cleanup: Remove temp spec file\n try {\n await nativeFs.unlink(tempSpecPath);\n } catch {\n // Ignore cleanup errors\n }\n\n // Cleanup: Stop server if we started it\n if (wasStarted) {\n const serverWithClose = serverInstance as Server & {\n close?: () => Promise<void>;\n };\n try {\n console.log(\"🛑 Stopping server...\");\n await serverWithClose.close?.();\n console.log(\"✅ Server stopped.\\n\");\n } catch {\n console.log(\"\\x1b[33m⚠️ Could not stop server gracefully.\\x1b[0m\\n\");\n }\n }\n }\n\n console.log(\"\\x1b[32m✨ SDK generation complete!\\x1b[0m\\n\");\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitCommand extends Command {\n static commandName = \"init\";\n static description =\n \"Initialize a new balda project in the current directory\";\n static help = [\n \"Initialize a new balda project, it is given for granted that balda is installed in the project as a dependency\",\n \"All the files are created in the /src directory (created if not exists)\",\n \"It adds a server.ts for the file instance and a index.ts for the entry point with a dummy hello world route\",\n \"Example: npx balda init -p ./src -t true\",\n ];\n\n @flag.string({\n description:\n \"The path to the project, default is the current directory /src\",\n aliases: \"p\",\n name: \"path\",\n required: false,\n defaultValue: \"./src\",\n })\n static srcPath: string;\n\n @flag.boolean({\n description: \"Whether to use typescript, default is true\",\n aliases: \"t\",\n name: \"typescript\",\n required: false,\n defaultValue: true,\n })\n static typescript: boolean;\n\n @flag.boolean({\n description: \"Initialize MQTT service connection\",\n aliases: \"m\",\n name: \"mqtt\",\n required: false,\n defaultValue: false,\n })\n static mqtt: boolean;\n\n @flag.boolean({\n description: \"Initialize Cron service\",\n aliases: \"c\",\n name: \"cron\",\n required: false,\n defaultValue: false,\n })\n static cron: boolean;\n\n static devDependencies: string[] = [\n \"esbuild\",\n \"esbuild-plugin-copy\",\n \"tsx\",\n \"typescript\",\n ];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing project...\");\n const [packageManager, packageManagerCommand, devDependenciesCommand] =\n await getPackageManager();\n\n // if the package manager is npm, yarn or pnpm, install the dev dependencies since we're on node.js\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledDevDeps = await getUninstalledPackages(\n this.devDependencies,\n );\n\n if (uninstalledDevDeps.length) {\n this.logger.info(\n `Found ${uninstalledDevDeps.length} missing dev dependencies`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDevDeps.join(\" \")} -${devDependenciesCommand}`,\n packageManager,\n uninstalledDevDeps,\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Project initialization aborted.\",\n );\n return;\n }\n }\n\n if (!uninstalledDevDeps.length) {\n this.logger.info(\"All dev dependencies are already installed\");\n }\n }\n\n // Handle optional service dependencies\n if (this.mqtt && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledMqtt = await getUninstalledPackages([\"mqtt\"]);\n\n if (uninstalledMqtt.length) {\n const mqttInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} mqtt`,\n packageManager,\n [\"mqtt\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!mqttInstalled) {\n this.logger.info(\n \"MQTT installation cancelled by user. Skipping MQTT scaffolding.\",\n );\n this.mqtt = false;\n }\n }\n\n if (!uninstalledMqtt.length) {\n this.logger.info(\"MQTT package is already installed\");\n }\n }\n\n if (this.cron && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledCron = await getUninstalledPackages([\"node-cron\"]);\n\n if (uninstalledCron.length > 0) {\n const cronInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} node-cron`,\n packageManager,\n [\"node-cron\"],\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!cronInstalled) {\n this.logger.info(\n \"node-cron installation cancelled by user. Skipping Cron scaffolding.\",\n );\n this.cron = false;\n }\n }\n\n if (!uninstalledCron.length) {\n this.logger.info(\"node-cron package is already installed\");\n }\n }\n\n const ext = this.typescript ? \"ts\" : \"js\";\n const serverTemplate = this.getServerTemplate();\n const indexTemplate = this.getIndexTemplate();\n\n if (!nativeFs.exists(this.srcPath)) {\n await nativeFs.mkdir(this.srcPath, { recursive: true });\n }\n\n this.logger.info(`Creating server.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/server.${ext}`,\n new TextEncoder().encode(serverTemplate),\n );\n\n this.logger.info(`Creating index.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/index.${ext}`,\n new TextEncoder().encode(indexTemplate),\n );\n\n // Create MQTT configuration if requested\n if (this.mqtt) {\n const mqttDir = nativePath.join(this.srcPath, \"mqtt\");\n if (!(await nativeFs.exists(mqttDir))) {\n await nativeFs.mkdir(mqttDir, { recursive: true });\n }\n\n const mqttConfigTemplate = this.getMqttConfigTemplate();\n this.logger.info(`Creating mqtt/mqtt.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(mqttDir, `mqtt.config.${ext}`),\n new TextEncoder().encode(mqttConfigTemplate),\n );\n }\n\n // Create Cron configuration if requested\n if (this.cron) {\n const cronDir = nativePath.join(this.srcPath, \"cron\");\n if (!(await nativeFs.exists(cronDir))) {\n await nativeFs.mkdir(cronDir, { recursive: true });\n }\n\n const cronConfigTemplate = this.getCronConfigTemplate();\n this.logger.info(`Creating cron/cron.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(cronDir, `cron.config.${ext}`),\n new TextEncoder().encode(cronConfigTemplate),\n );\n }\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n return `import { Server } from \"balda\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n plugins: {\n bodyParser: {\n json: {\n sizeLimit: \"100kb\",\n }\n },\n },\n});\n\nexport { serverInstance as server };\n`;\n }\n\n static getIndexTemplate() {\n const imports: string[] = ['import { server } from \"./server.js\";'];\n const services: string[] = [];\n\n if (this.mqtt) {\n imports.push('import \"./mqtt/mqtt.config.js\";');\n imports.push('import { MqttService } from \"balda\";');\n services.push(`\n // Initialize MQTT service\n await MqttService.connect({\n host: \"localhost\",\n port: 1883,\n protocol: \"mqtt\",\n });\n console.log(\"MQTT service connected\");`);\n }\n\n if (this.cron) {\n imports.push('import \"./cron/cron.config.js\";');\n imports.push('import { CronService } from \"balda\";');\n services.push(`\n // Initialize Cron service\n await CronService.run();\n console.log(\"Cron service started\");`);\n }\n\n const importsBlock = imports.join(\"\\n\");\n const servicesBlock = services.length > 0 ? services.join(\"\\n\") : \"\";\n\n return `${importsBlock}\n${servicesBlock ? `\\n${servicesBlock}\\n` : \"\"}\nserver.listen(({ url }) => {\n console.log(\\`Server is running on \\${url}\\`);\n});\n`;\n }\n\n static getMqttConfigTemplate() {\n return `// MQTT Configuration\n// This file is imported to set up MQTT connection options\n// Add your MQTT handlers in separate files within this directory\n// Use: npx balda generate-mqtt <handler-name> to create new handlers\n`;\n }\n\n static getCronConfigTemplate() {\n return `// Cron Configuration\n// This file is imported to set up Cron jobs\n// Add your cron jobs in separate files within this directory\n// Use: npx balda generate-cron <job-name> to create new cron jobs\n`;\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport {\n execWithPrompt,\n getPackageManager,\n getUninstalledPackages,\n} from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class InitQueueCommand extends Command {\n static commandName = \"init-queue\";\n static description =\n \"Initialize queue provider configuration with required dependencies\";\n static help = [\n \"Initialize a queue provider configuration file with basic credentials\",\n \"Automatically installs required packages for the selected provider\",\n \"Only scaffolds the connection, handlers should be created with generate-queue command\",\n \"Example: npx balda init-queue -t bullmq -o src/queue\",\n ];\n\n @flag.string({\n description: \"Queue provider type (bullmq, sqs, pgboss) - required\",\n aliases: \"t\",\n name: \"type\",\n required: true,\n })\n static queueType: \"bullmq\" | \"sqs\" | \"pgboss\";\n\n @flag.string({\n description:\n \"Output directory for queue configuration, default is src/queue\",\n aliases: \"o\",\n name: \"output\",\n required: false,\n defaultValue: \"src/queue\",\n })\n static outputPath: string;\n\n static queueDependencies: Record<string, string[]> = {\n bullmq: [\"bullmq\", \"ioredis\"],\n sqs: [\"@aws-sdk/client-sqs\", \"sqs-consumer\"],\n pgboss: [\"pg-boss\", \"pg\"],\n };\n\n static async handle(): Promise<void> {\n this.logger.info(`Initializing ${this.queueType} queue provider...`);\n\n if (![\"bullmq\", \"sqs\", \"pgboss\"].includes(this.queueType)) {\n this.logger.error(\n `Invalid queue type: ${this.queueType}. Must be one of: bullmq, sqs, pgboss`,\n );\n return;\n }\n\n const [packageManager, packageManagerCommand] = await getPackageManager();\n\n // Install dependencies if on npm, yarn, or pnpm\n if ([\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const dependencies = this.queueDependencies[this.queueType];\n const uninstalledDeps = await getUninstalledPackages(dependencies);\n\n if (uninstalledDeps.length > 0) {\n this.logger.info(\n `Found ${uninstalledDeps.length} missing dependencies for ${this.queueType}`,\n );\n const installed = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledDeps.join(\" \")}`,\n packageManager,\n uninstalledDeps,\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Queue initialization aborted.\",\n );\n return;\n }\n }\n\n if (uninstalledDeps.length === 0) {\n this.logger.info(\n `All ${this.queueType} dependencies are already installed`,\n );\n }\n }\n\n const configTemplate = this.getConfigTemplate();\n const fileName = `${this.queueType}.config.ts`;\n const fullPath = nativePath.join(this.outputPath, fileName);\n\n if (!(await nativeFs.exists(this.outputPath))) {\n await nativeFs.mkdir(this.outputPath, { recursive: true });\n }\n\n this.logger.info(`Creating ${fileName} file at ${this.outputPath}...`);\n await nativeFs.writeFile(\n fullPath,\n new TextEncoder().encode(configTemplate),\n );\n\n this.logger.info(\n `Queue configuration initialized successfully at ${fullPath}`,\n );\n this.logger.info(\n `Remember to update the configuration with your actual credentials`,\n );\n this.logger.info(`Use 'npx balda generate-queue' to create queue handlers`);\n }\n\n static getConfigTemplate(): string {\n if (this.queueType === \"bullmq\") {\n return this.getBullMQTemplate();\n }\n\n if (this.queueType === \"sqs\") {\n return this.getSQSTemplate();\n }\n\n if (this.queueType === \"pgboss\") {\n return this.getPGBossTemplate();\n }\n\n return \"\";\n }\n\n static getBullMQTemplate(): string {\n return `import { defineBullMQConfiguration } from \"balda\";\n\n// Configure BullMQ connection and default options\ndefineBullMQConfiguration({\n connection: {\n host: process.env.REDIS_HOST || \"localhost\",\n port: parseInt(process.env.REDIS_PORT || \"6379\", 10),\n password: process.env.REDIS_PASSWORD,\n },\n defaultJobOptions: {\n attempts: 3,\n backoff: {\n type: \"exponential\",\n delay: 1000,\n },\n },\n errorHandler: async (job, error) => {\n console.error(\\`Job \\${job.id} failed:\\`, error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { bullmqQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: bullmqQueue<{ email: string; subject: string }>(\"email-notifications\"),\n * orderProcessing: bullmqQueue<{ orderId: string; userId: string }>(\"order-processing\"),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n\n static getSQSTemplate(): string {\n return `import { defineSQSConfiguration } from \"balda\";\n\n// Configure SQS connection and consumer options\ndefineSQSConfiguration({\n client: {\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n consumer: {\n batchSize: 10,\n visibilityTimeout: 30,\n waitTimeSeconds: 20,\n queueUrlMap: {\n // Map your queue topics to SQS queue URLs\n // Example: \"user-notifications\": process.env.USER_NOTIFICATIONS_QUEUE_URL || \"\",\n },\n },\n errorHandler: (error) => {\n console.error(\"SQS error:\", error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { sqsQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: sqsQueue<{ email: string; subject: string }>(\n * \"email-notifications\",\n * { queueUrl: process.env.EMAIL_QUEUE_URL || \"\" }\n * ),\n * orderProcessing: sqsQueue<{ orderId: string; userId: string }>(\n * \"order-processing\",\n * { queueUrl: process.env.ORDER_QUEUE_URL || \"\" }\n * ),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n\n static getPGBossTemplate(): string {\n return `import { definePGBossConfiguration } from \"balda\";\n\n// Configure PGBoss connection\ndefinePGBossConfiguration({\n connectionString:\n process.env.DATABASE_URL ||\n \"postgresql://user:password@localhost:5432/database\",\n errorHandler: (error) => {\n console.error(\"PG-Boss error:\", error);\n },\n});\n\n/**\n * Best Practice: Create a centralized queue registry\n * Define all your queues in one place for better organization and type safety\n *\n * Example usage:\n *\n * // queues.ts\n * import { pgbossQueue } from \"balda\";\n *\n * export const queues = {\n * emailNotifications: pgbossQueue<{ email: string; subject: string }>(\"email-notifications\"),\n * orderProcessing: pgbossQueue<{ orderId: string; userId: string }>(\"order-processing\"),\n * };\n *\n * // Publish to queue\n * await queues.emailNotifications.publish({\n * email: \"user@example.com\",\n * subject: \"Welcome!\"\n * });\n *\n * // Subscribe with decorator\n * import { queues } from \"./queues.js\";\n *\n * export class EmailHandler {\n * @queues.emailNotifications.subscribe()\n * async handle(payload: { email: string; subject: string }) {\n * console.log(\"Sending email:\", payload);\n * }\n * }\n *\n * // Or subscribe with callback\n * await queues.emailNotifications.subscribe(async (payload) => {\n * console.log(\"Processing:\", payload);\n * });\n */\n`;\n }\n}\n","import { Command } from \"../base_command.js\";\nimport { commandRegistry } from \"../command_registry.js\";\n\nexport default class ListCommand extends Command {\n static commandName = \"list\";\n static description = \"List all available commands\";\n static help = [\n \"Display all registered Balda CLI commands with their descriptions\",\n \"Example: npx balda list\",\n ];\n\n static async handle(): Promise<void> {\n const builtInCommands = commandRegistry.getBuiltInCommands();\n const userCommands = commandRegistry.getUserDefinedCommands();\n\n console.log(\"\\n✨ Available Balda Commands:\\n\");\n\n // Group user commands by category\n if (userCommands.length > 0) {\n console.log(\"\\x1b[1;33mUser Commands:\\x1b[0m\\n\");\n\n const categorizedCommands = this.groupByCategory(userCommands);\n this.displayCategorizedCommands(categorizedCommands);\n }\n\n // Display built-in commands without categories\n if (builtInCommands.length > 0) {\n console.log(\"\\x1b[1;32mBuilt-in Commands:\\x1b[0m\\n\");\n\n const maxNameLength = Math.max(\n ...builtInCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of builtInCommands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n\n console.log(\n \"\\x1b[90mRun 'npx balda <command> -h' for more information on a specific command.\\x1b[0m\\n\",\n );\n }\n\n private static groupByCategory(\n commands: (typeof Command)[],\n ): Map<string, (typeof Command)[]> {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n }\n\n private static displayCategorizedCommands(\n categorizedCommands: Map<string, (typeof Command)[]>,\n ): void {\n const sortedCategories = Array.from(categorizedCommands.keys()).sort();\n\n for (const category of sortedCategories) {\n const commands = categorizedCommands\n .get(category)!\n .filter((cmd) => cmd && cmd.commandName);\n\n if (commands.length === 0) {\n continue;\n }\n\n // Display category header with color\n const categoryColors: Record<string, string> = {\n generator: \"\\x1b[35m\", // Magenta\n setup: \"\\x1b[34m\", // Blue\n production: \"\\x1b[32m\", // Green\n utility: \"\\x1b[36m\", // Cyan\n other: \"\\x1b[37m\", // White\n };\n\n const color = categoryColors[category] || \"\\x1b[37m\";\n console.log(` ${color}${category.toUpperCase()}:\\x1b[0m`);\n\n const maxNameLength = Math.max(\n ...commands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of commands) {\n const name = command.commandName.padEnd(maxNameLength + 2);\n const desc = command.description || \"No description available\";\n\n // Deprecated warning\n let deprecatedTag = \"\";\n if (command.options?.deprecated) {\n deprecatedTag = \" \\x1b[33m[deprecated]\\x1b[0m\";\n }\n\n console.log(` \\x1b[36m${name}\\x1b[0m ${desc}${deprecatedTag}`);\n }\n\n console.log(\"\");\n }\n }\n}\n","import { execSync } from \"node:child_process\";\nimport fs from \"node:fs\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { getPackageManager, execWithPrompt } from \"../../package.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { runtime } from \"../../runtime/runtime.js\";\nimport { Command } from \"../base_command.js\";\nimport { CommandOptions } from \"../command_types.js\";\nimport { arg } from \"../../decorators/command/arg.js\";\n\nexport default class ServeCommand extends Command {\n static commandName = \"serve\";\n static description = \"Run the server in dev mode with hot reload\";\n static help = [\n \"This command is intended to be run from the root of the project\",\n \"Bun and Deno have native dev hot reload\",\n \"Runtime is automatically inferred\",\n \"Node.js requires tsx to be installed for both typescript and javascript files\",\n \"Node.js dev dependencies (tsx) are installed automatically if not detected\",\n ];\n\n static runtime = runtime.type;\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @arg({\n required: false,\n defaultValue: \"src/index.ts\",\n description: \"The entry point of the project, default is src/index.ts\",\n })\n static entry: string;\n\n @flag.string({\n aliases: [\"d\"],\n name: \"deno-import-map\",\n required: false,\n description: \"Path to deno import map\",\n })\n static denoImportMap?: string;\n\n static async handle(): Promise<void> {\n if (this.runtime === \"bun\") {\n execSync(`bun run --watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n if (this.runtime === \"deno\") {\n let denoCommand = `deno run --watch --unstable-sloppy-imports --allow-all`;\n if (this.denoImportMap) {\n denoCommand = `${denoCommand} --import-map ${this.denoImportMap}`;\n }\n\n execSync(`${denoCommand} ${this.entry}`, {\n stdio: \"inherit\",\n cwd: nativeCwd.getCwd(),\n });\n return;\n }\n\n this.handleNodeHotReload();\n }\n\n private static async handleNodeHotReload() {\n const hasTsx = fs.existsSync(\"node_modules/.bin/tsx\");\n if (!hasTsx) {\n const [packageManager, packageCommand, devFlag] =\n await getPackageManager();\n\n const installed = await execWithPrompt(\n `${packageManager} ${packageCommand} tsx ${devFlag}`,\n packageManager,\n [\"tsx\"],\n {\n stdio: \"inherit\",\n },\n );\n\n if (!installed) {\n this.logger.info(\n \"Installation cancelled by user. Cannot start dev server without tsx.\",\n );\n return;\n }\n }\n\n const initCommand = this.calledBy !== \"node\" ? this.calledBy : \"npx\";\n execSync(`${initCommand} tsx watch ${this.entry}`, {\n stdio: \"inherit\",\n cwd: process.cwd(),\n });\n }\n}\n","import { flag } from \"../../decorators/command/flag.js\";\nimport { execWithPrompt, getPackageManager } from \"../../package.js\";\nimport { nativeFs } from \"../../runtime/native_fs.js\";\nimport { nativePath } from \"../../runtime/native_path.js\";\nimport { Command } from \"../base_command.js\";\n\nexport default class SetupStorageCommand extends Command {\n static commandName = \"setup-storage\";\n static description = \"Setup storage provider with required dependencies\";\n static help = [\n \"Install dependencies and create storage configuration for a specific provider\",\n \"Flags:\",\n \" -t, --type <provider> Storage provider type (s3, azure, local)\",\n \" -o, --output <path> Output directory for storage setup (default: src/storage/)\",\n \"\",\n \"Examples:\",\n \" npx balda setup:storage -t s3\",\n \" npx balda setup:storage --type azure --output src/config/\",\n ];\n\n @flag({\n description: \"Storage provider type (s3, azure, local)\",\n type: \"string\",\n aliases: [\"t\"],\n name: \"type\",\n required: true,\n })\n static storageType: string;\n\n @flag({\n description: \"Output directory for storage setup\",\n type: \"string\",\n aliases: [\"o\"],\n name: \"output\",\n required: false,\n defaultValue: \"src/storage/\",\n })\n static outputPath: string;\n\n static async handle(): Promise<void> {\n if (!this.storageType) {\n console.error(\n \"\\x1b[31m❌ Error: Storage type is required. Use -t or --type flag.\\x1b[0m\",\n );\n console.log(\"\\x1b[90mExample: npx balda setup:storage -t s3\\x1b[0m\\n\");\n return;\n }\n\n if (!this.outputPath) {\n await nativeFs.mkdir(nativePath.join(process.cwd(), this.outputPath), {\n recursive: true,\n });\n }\n\n const validTypes = [\"s3\", \"azure\", \"local\"];\n if (!validTypes.includes(this.storageType)) {\n console.error(\n `\\x1b[31m❌ Error: Invalid storage type '${this.storageType}'. Valid types: ${validTypes.join(\", \")}\\x1b[0m\\n`,\n );\n return;\n }\n\n console.log(\n `\\n🚀 Setting up ${this.storageType.toUpperCase()} storage provider...\\n`,\n );\n\n const dependencies = this.getDependencies(this.storageType);\n\n if (dependencies.length === 0) {\n console.log(\n `\\x1b[32m✅ ${this.storageType.toUpperCase()} storage doesn't require additional dependencies.\\x1b[0m\\n`,\n );\n }\n\n if (dependencies.length) {\n const missingDeps = await this.checkMissingDependencies(dependencies);\n\n if (missingDeps.length === 0) {\n console.log(\n `\\x1b[32m✅ All required dependencies are already installed.\\x1b[0m\\n`,\n );\n }\n\n if (missingDeps.length) {\n const [packageManager, installCommand] = await getPackageManager();\n const command = `${packageManager} ${installCommand} ${missingDeps.join(\" \")}`;\n\n const installed = await execWithPrompt(\n command,\n packageManager,\n missingDeps,\n { stdio: \"inherit\" },\n false,\n );\n\n if (!installed) {\n console.log(\n \"\\x1b[33m⚠️ Dependency installation skipped by user.\\x1b[0m\\n\",\n );\n return;\n }\n\n console.log(\n `\\n\\x1b[32m✅ Dependencies installed successfully!\\x1b[0m\\n`,\n );\n }\n }\n\n await this.createStorageSetup(this.storageType, this.outputPath);\n\n console.log(\n `\\x1b[32m✨ ${this.storageType.toUpperCase()} storage setup complete!\\x1b[0m\\n`,\n );\n }\n\n private static getDependencies(storageType: string): string[] {\n const dependencyMap: Record<string, string[]> = {\n s3: [\n \"@aws-sdk/client-s3\",\n \"@aws-sdk/s3-request-presigner\",\n \"@aws-sdk/cloudfront-signer\",\n ],\n azure: [\"@azure/storage-blob\"],\n local: [],\n };\n\n return dependencyMap[storageType] || [];\n }\n\n private static async checkMissingDependencies(\n dependencies: string[],\n ): Promise<string[]> {\n const packageJsonPath = nativePath.join(process.cwd(), \"package.json\");\n const exists = await nativeFs.exists(packageJsonPath);\n if (!exists) {\n return dependencies;\n }\n\n const nodeModulesPath = nativePath.join(process.cwd(), \"node_modules\");\n const nodeModulesExists = await nativeFs.exists(nodeModulesPath);\n if (!nodeModulesExists) {\n return dependencies;\n }\n\n const missing: string[] = [];\n for (const dep of dependencies) {\n const depPath = nativePath.join(nodeModulesPath, dep);\n const depExists = await nativeFs.exists(depPath);\n if (!depExists) {\n missing.push(dep);\n }\n }\n\n return missing;\n }\n\n private static async createStorageSetup(\n storageType: string,\n outputPath: string,\n ): Promise<void> {\n const resolvedPath = nativePath.join(process.cwd(), outputPath);\n const exists = await nativeFs.exists(resolvedPath);\n\n if (!exists) {\n await nativeFs.mkdir(resolvedPath, { recursive: true });\n }\n\n const configFile = nativePath.join(resolvedPath, `storage.ts`);\n const configExists = await nativeFs.exists(configFile);\n if (configExists) {\n console.log(\n `\\x1b[33m⚠️ Configuration file already exists: ${configFile}\\x1b[0m`,\n );\n return;\n }\n\n const template = this.getConfigTemplate(storageType);\n await nativeFs.writeFile(configFile, new TextEncoder().encode(template));\n\n console.log(`\\x1b[32m✅ Created configuration file: ${configFile}\\x1b[0m`);\n }\n\n private static getConfigTemplate(storageType: string): string {\n const templates: Record<string, string> = {\n s3: `import { Storage, S3StorageProvider } from \"balda\";\n\n/**\n * S3 Storage Configuration\n *\n * Environment variables required:\n * - AWS_ACCESS_KEY_ID\n * - AWS_SECRET_ACCESS_KEY\n * - AWS_REGION\n * - S3_BUCKET\n *\n * Optional for CloudFront:\n * - CLOUDFRONT_DOMAIN\n * - CLOUDFRONT_KEY_PAIR_ID\n * - CLOUDFRONT_PRIVATE_KEY\n */\n\nexport const storage = new Storage(\n {\n s3: new S3StorageProvider({\n s3ClientConfig: {\n bucketName: process.env.S3_BUCKET || \"your-bucket-name\",\n region: process.env.AWS_REGION || \"us-east-1\",\n credentials: {\n accessKeyId: process.env.AWS_ACCESS_KEY_ID || \"\",\n secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY || \"\",\n },\n },\n // Uncomment to enable CloudFront signed URLs\n // cloudfrontOptions: {\n // domainName: process.env.CLOUDFRONT_DOMAIN || \"\",\n // keyPairId: process.env.CLOUDFRONT_KEY_PAIR_ID || \"\",\n // privateKey: process.env.CLOUDFRONT_PRIVATE_KEY || \"\",\n // },\n }),\n },\n {\n defaultProvider: \"s3\",\n },\n);\n`,\n azure: `import { Storage, AzureBlobStorageProvider } from \"balda\";\n\n/**\n * Azure Blob Storage Configuration\n *\n * Environment variables required:\n * - AZURE_STORAGE_CONNECTION_STRING\n * - AZURE_CONTAINER_NAME\n * - AZURE_STORAGE_ACCOUNT\n * - AZURE_STORAGE_KEY\n */\n\nexport const storage = new Storage(\n {\n azure: new AzureBlobStorageProvider({\n containerName: process.env.AZURE_CONTAINER_NAME || \"your-container-name\",\n connectionString: process.env.AZURE_STORAGE_CONNECTION_STRING || \"\",\n storageAccountName: process.env.AZURE_STORAGE_ACCOUNT || \"\",\n storageAccountKey: process.env.AZURE_STORAGE_KEY || \"\",\n }),\n },\n {\n defaultProvider: \"azure\",\n },\n);\n`,\n local: `import { Storage, LocalStorageProvider } from \"balda\";\n\n/**\n * Local Storage Configuration\n */\nexport const storage = new Storage(\n {\n local: new LocalStorageProvider({\n directory: \"./uploads\",\n }),\n },\n {\n defaultProvider: \"local\",\n },\n);\n`,\n };\n\n return templates[storageType] || \"\";\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport type { Command } from \"./base_command.js\";\nimport BuildCommand from \"./base_commands/build_command.js\";\nimport GenerateCommand from \"./base_commands/generate_command.js\";\nimport GenerateControllerCommand from \"./base_commands/generate_controller.js\";\nimport GenerateCronCommand from \"./base_commands/generate_cron.js\";\nimport GenerateMiddlewareCommand from \"./base_commands/generate_middleware.js\";\nimport GenerateMqttCommand from \"./base_commands/generate_mqtt.js\";\nimport GeneratePluginCommand from \"./base_commands/generate_plugin.js\";\nimport GenerateQueueCommand from \"./base_commands/generate_queue.js\";\nimport GenerateSdkCommand from \"./base_commands/generate_sdk.js\";\nimport InitCommand from \"./base_commands/init_command.js\";\nimport InitQueueCommand from \"./base_commands/init_queue_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport ServeCommand from \"./base_commands/serve_command.js\";\nimport SetupStorageCommand from \"./base_commands/setup_storage_command.js\";\n\n// Base commands are always loaded\nexport const baseCommands = [\n GeneratePluginCommand,\n GenerateCommand,\n GenerateCronCommand,\n GenerateMqttCommand,\n GenerateQueueCommand,\n GenerateControllerCommand,\n GenerateMiddlewareCommand,\n GenerateSdkCommand,\n InitCommand,\n InitQueueCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n SetupStorageCommand,\n];\n\n/**\n * Singleton that registers all commands and provides a way to execute them.\n * Commands are loaded from the commands directory, and are expected to have a default export with the command class that extends the base command class.\n * Commands can be run both as `.js` or `.ts` files. If the file is a ts file `typescript` npm package must be installed.\n * You can use the `CommandRegistry.setCommandsPattern` method to change the pattern of the commands to load.\n * @example\n * // commands/test.ts\n * export default class TestCommand extends Command {\n * static name = \"test\";\n * async handle() {\n * console.log(\"Test command\");\n * }\n * }\n */\nexport class CommandRegistry {\n private commands: Map<string, typeof Command>;\n private builtInCommands: Set<string>;\n static commandsPattern = \"src/commands/**/*.{ts,js}\";\n static logger = logger;\n\n /**\n * Private constructor to prevent direct instantiation\n * @internal Not meant to be used outside by the user\n */\n private constructor() {\n this.commands = new Map();\n this.builtInCommands = new Set();\n }\n\n static getInstance() {\n return new CommandRegistry();\n }\n\n static setCommandsPattern(pattern: string) {\n this.commandsPattern = pattern;\n }\n\n getCommand(name: string): typeof Command | null {\n return this.commands.get(name) ?? null;\n }\n\n getCommands(): (typeof Command)[] {\n return Array.from(this.commands.values());\n }\n\n getBuiltInCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter((cmd) =>\n this.builtInCommands.has(cmd.commandName),\n );\n }\n\n getUserDefinedCommands(): (typeof Command)[] {\n return Array.from(this.commands.values()).filter(\n (cmd) => !this.builtInCommands.has(cmd.commandName),\n );\n }\n\n isBuiltInCommand(commandName: string): boolean {\n return this.builtInCommands.has(commandName);\n }\n\n async loadCommands(commandsPattern: string) {\n CommandRegistry.logger.info(`Loading commands from ${commandsPattern}`);\n\n const commandFiles = await glob(commandsPattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n // if even one file is ts check if ts-node is installed\n if (commandFiles.some((file) => file.endsWith(\".ts\"))) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n } catch {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n }\n\n for (const commandFile of commandFiles) {\n const command = await import(commandFile)\n .then((module) => {\n if (module.default) {\n return module.default;\n }\n\n return module;\n })\n .catch((error) => {\n CommandRegistry.logger.error(\n `Error loading command ${commandFile}: ${error}`,\n );\n return null;\n });\n\n if (command) {\n this.commands.set(command.commandName, command);\n }\n }\n\n for (const command of baseCommands) {\n this.commands.set(command.commandName, command);\n this.builtInCommands.add(command.commandName);\n }\n }\n}\n\nexport const commandRegistry = CommandRegistry.getInstance();\n","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"]}
|