balda 0.0.21 → 0.0.22
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/README.md +15 -5
- package/bun.lock +2918 -0
- package/package.json +14 -11
- package/lib/cli.js +0 -596
- package/lib/cli.js.map +0 -1
- package/lib/index.cjs +0 -730
- package/lib/index.cjs.map +0 -1
- package/lib/index.d.cts +0 -4049
- package/lib/index.d.ts +0 -4049
- package/lib/index.js +0 -730
- package/lib/index.js.map +0 -1
package/lib/cli.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
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/errors/balda_error.ts","../src/cron/cron.ts","../src/commands/base_commands/cron_start_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_mailer_command.ts","../src/commands/base_commands/init_queue_command.ts","../src/commands/base_commands/key_generate_command.ts","../src/commands/base_commands/list_command.ts","../src/errors/client_not_found_error.ts","../src/runtime/native_crypto.ts","../src/queue/providers/bullmq/bullmq_configuration.ts","../src/queue/providers/bullmq/bullmq.ts","../src/queue/providers/memory/memory.ts","../src/queue/providers/pgboss/pgboss_configuration.ts","../src/queue/providers/pgboss/pgboss.ts","../src/queue/providers/sqs/sqs_configuration.ts","../src/queue/providers/sqs/sqs.ts","../src/queue/queue.ts","../src/queue/queue_service.ts","../src/commands/base_commands/queue_work_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","BaldaError","message","CronService","nodeCronModule","context","cronJobPatterns","allFiles","pattern","files","glob","file","CronStartCommand","patterns","jobCount","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","uninstalledGraphql","ext","serverTemplate","indexTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","graphqlDir","graphqlConfigTemplate","imports","services","importsBlock","servicesBlock","InitMailerCommand","uninstalledDeps","configTemplate","fullPath","hasTemplate","InitQueueCommand","KeyGenerateCommand","keyType","publicKey","privateKey","crypto","publicKeyName","privateKeyName","keyName","key","envPath","keyLine","envContent","keyRegex","updatedContent","ListCommand","builtInCommands","userCommands","categorizedCommands","sortedCommands","a","b","maxNameLength","desc","deprecatedTag","commands","map","category","sortedCategories","color","ClientNotFoundError","libraries","NativeCrypto","nativeCrypto","BullMQConfiguration","BullMQPubSub","topic","payload","queue","jobId","handler","errorHandler","rest","bullmqClient","worker","job","queueConfig","mergedOptions","workerKey","globalConfig","workerOptions","queueKey","mergedConfig","MemoryPubSub","maxQueueSize","_options","id","typedHandler","handlers","PGBossConfiguration","PGBossPubSub","boss","sendOptions","workId","jobs","mod","Ctor","connectionString","instance","pgBoss","globalOptions","configKey","SQSConfiguration","SQSPubSub","sqs","SendMessageCommand","queueUrl","consumerModule","consumerOptions","consumer","SQSClient","config","url","clientConfig","QueueManager","provider","pubsub","QueueService","ctor","queueOptions","hasTyped","hasCustom","registration","queueHandlerPatterns","QueueWorkCommand","typedCount","customCount","totalCount","ServeCommand","denoCommand","initCommand","SetupStorageCommand","validTypes","missingDeps","installCommand","storageType","packageJsonPath","missing","dep","depPath","outputPath","resolvedPath","configFile","template","baseCommands","CommandRegistry","_CommandRegistry","commandsPattern","commandFiles","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","CommandClass","replacement","retryErr"],"mappings":"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","file":"cli.js","sourcesContent":["export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import { 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 | symbol, 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 | symbol): 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);\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 { MetadataStore } from \"../../metadata_store.js\";\nimport { VALIDATION_ERROR_SYMBOL } from \"./arg.js\";\nimport type {\n FlagOptions,\n FlagType,\n InferFlagType,\n} from \"./command_decorator_types.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 ? Array.isArray(options.aliases)\n ? options.aliases\n : [options.aliases]\n : [];\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 } else if (options.type === \"string\") {\n resolvedFlagValue = String(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/** @alias for array */\nflagDecorator.list = (options: Omit<FlagOptions<\"list\">, \"type\">) => {\n return flagDecorator({ ...options, type: \"list\" });\n};\n\n/** Shorthand decorator for array flags (can be specified multiple times) */\nflagDecorator.array = (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","export class BaldaError extends Error {\n constructor(message: string) {\n super(message);\n }\n}\n","import { glob } from \"glob\";\nimport type { TaskContext } from \"node-cron\";\nimport { BaldaError } from \"../errors/balda_error.js\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { CronSchedule, CronScheduleParams } from \"./cron.types.js\";\n\nexport class CronService {\n static scheduledJobs: CronSchedule[] = [];\n\n /**\n * @description Schedule a cron job.\n * @internal\n * @example\n * CronService.register('test', '0 0 * * *', () => {\n * console.log('test');\n * }, {\n * timezone: 'Europe/Istanbul',\n * });\n */\n static register(name: string, ...args: CronScheduleParams): void {\n args[2] = {\n name,\n ...args[2],\n };\n\n this.scheduledJobs.push({ name, args });\n }\n\n /**\n * @description Start the cron scheduler.\n */\n static async run() {\n const nodeCronModule = (\n await import(\"node-cron\").catch(() => {\n throw new BaldaError(\n \"node-cron not installed as a dependency, it is required in order to run cron jobs with the @cron decorator\",\n );\n })\n ).default;\n\n logger.info(\"Scheduling cron jobs\");\n if (!this.scheduledJobs.length) {\n logger.info(\"No cron jobs to schedule\");\n return;\n }\n\n for (const { name, args } of this.scheduledJobs) {\n logger.info(`Scheduling cron job: ${name}`);\n const scheduledJob = nodeCronModule.schedule(...args);\n scheduledJob.on(\"execution:failed\", (context) =>\n this.globalErrorHandler(context),\n );\n }\n\n logger.info(\"Cron jobs scheduled\");\n }\n\n /**\n * @description Main error handler for cron jobs. You can write your own error handler by overriding this static method for example with sentry.\n */\n static globalErrorHandler(context: TaskContext) {\n logger.error(context.execution?.error);\n }\n\n /**\n * @description Import all cron jobs from the app/cron/schedules directory\n */\n static async massiveImportCronJobs(cronJobPatterns: string[]) {\n const allFiles: string[] = [];\n\n for (const pattern of cronJobPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n allFiles.push(...files);\n }\n\n await Promise.all(\n allFiles.map(async (file) => {\n await import(file).catch((error) => {\n logger.error(`Error importing cron job: ${file}`);\n logger.error(error);\n });\n }),\n );\n }\n}\n\nexport const setCronGlobalErrorHandler = (\n globalErrorHandler: (\n ...args: Parameters<(typeof CronService)[\"globalErrorHandler\"]>\n ) => void,\n) => {\n CronService.globalErrorHandler = globalErrorHandler.bind(CronService);\n};\n","import { CronService } from \"../../cron/cron.js\";\nimport { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { Command } from \"../base_command.js\";\nimport type { CommandOptions } from \"../command_types.js\";\n\nexport default class CronStartCommand extends Command {\n static commandName = \"cron-start\";\n static description = \"Start cron job scheduler\";\n static help = [\n \"Start the cron job scheduler to run scheduled tasks\",\n \"Loads cron jobs from specified patterns and starts scheduling\",\n \"Example: npx balda cron-start\",\n \"Example: npx balda cron-start src/crons/**/*.ts --patterns src/schedules/**/*.ts\",\n ];\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @arg({\n required: false,\n defaultValue: \"src/crons/**/*.{ts,js}\",\n description:\n \"Primary glob pattern for cron jobs (default: src/crons/**/*.{ts,js})\",\n })\n static pattern: string;\n\n @flag.array({\n aliases: [\"p\"],\n name: \"patterns\",\n required: false,\n description: \"Additional glob patterns for cron jobs\",\n })\n static additionalPatterns?: string[];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Starting cron scheduler...\");\n\n const patterns = [this.pattern];\n\n if (this.additionalPatterns && this.additionalPatterns.length > 0) {\n patterns.push(...this.additionalPatterns);\n }\n\n this.logger.info(`Loading cron jobs from patterns: ${patterns.join(\", \")}`);\n\n await CronService.massiveImportCronJobs(patterns);\n\n const jobCount = CronService.scheduledJobs.length;\n if (jobCount === 0) {\n this.logger.warn(\n \"No cron jobs found. Make sure your cron jobs are decorated with @cron decorator\",\n );\n return;\n }\n\n this.logger.info(`Found ${jobCount} cron job(s)`);\n\n CronService.run()\n .then(() => {\n this.logger.info(\n \"Cron scheduler started successfully. Press Ctrl+C to stop.\",\n );\n })\n .catch((error) => {\n this.logger.error(\"Error starting cron scheduler\", error);\n });\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 @flag.boolean({\n description: \"Initialize GraphQL service\",\n aliases: \"g\",\n name: \"graphql\",\n required: false,\n defaultValue: false,\n })\n static graphql: 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 if (this.graphql && [\"npm\", \"yarn\", \"pnpm\"].includes(packageManager)) {\n const uninstalledGraphql = await getUninstalledPackages([\n \"@apollo/server\",\n \"@graphql-tools/schema\",\n \"graphql\",\n ]);\n\n if (uninstalledGraphql.length > 0) {\n const graphqlInstalled = await execWithPrompt(\n `${packageManager} ${packageManagerCommand} ${uninstalledGraphql.join(\" \")}`,\n packageManager,\n uninstalledGraphql,\n {\n stdio: \"inherit\",\n },\n false,\n );\n\n if (!graphqlInstalled) {\n this.logger.info(\n \"GraphQL installation cancelled by user. Skipping GraphQL scaffolding.\",\n );\n this.graphql = false;\n }\n }\n\n if (!uninstalledGraphql.length) {\n this.logger.info(\"GraphQL packages are 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 // Create GraphQL configuration if requested\n if (this.graphql) {\n const graphqlDir = nativePath.join(this.srcPath, \"graphql\");\n if (!(await nativeFs.exists(graphqlDir))) {\n await nativeFs.mkdir(graphqlDir, { recursive: true });\n }\n\n const graphqlConfigTemplate = this.getGraphqlConfigTemplate();\n this.logger.info(`Creating graphql/graphql.config.${ext} file...`);\n await nativeFs.writeFile(\n nativePath.join(graphqlDir, `graphql.config.${ext}`),\n new TextEncoder().encode(graphqlConfigTemplate),\n );\n }\n\n this.logger.info(`Project initialized successfully!`);\n }\n\n static getServerTemplate() {\n const graphqlConfig = this.graphql\n ? `,\n graphql: {\n schema: {\n typeDefs: \\`\n type Query {\n hello: String\n }\n \\`,\n resolvers: {\n Query: {\n hello: () => \"Hello from GraphQL!\"\n }\n }\n }\n }`\n : \"\";\n\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 }${graphqlConfig}\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 if (this.graphql) {\n imports.push('import \"./graphql/graphql.config.js\";');\n services.push(`\n // GraphQL endpoint available at /graphql\n console.log(\"GraphQL service configured\");`);\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 static getGraphqlConfigTemplate() {\n return `// GraphQL Configuration\n// This file is imported to set up GraphQL schema and resolvers\n// Add your GraphQL type definitions and resolvers in separate files within this directory\n// The GraphQL endpoint is automatically available at /graphql\n// You can extend the schema using server.graphql.addTypeDef() and server.graphql.addResolver()\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 InitMailerCommand extends Command {\n static commandName = \"init-mailer\";\n static description =\n \"Initialize mailer configuration with required dependencies\";\n static help = [\n \"Initialize a mailer configuration file with basic setup\",\n \"Automatically installs required packages for nodemailer and optional template engines\",\n \"Supports Handlebars, EJS, Edge.js, Mustache, or custom adapters\",\n \"Example: npx balda init-mailer -t handlebars -o src/mailer\",\n ];\n\n @flag.string({\n description:\n \"Template engine (handlebars, ejs, edge, mustache, custom, none) - optional\",\n aliases: \"t\",\n name: \"template\",\n required: false,\n defaultValue: \"none\",\n })\n static templateEngine:\n | \"handlebars\"\n | \"ejs\"\n | \"edge\"\n | \"mustache\"\n | \"custom\"\n | \"none\";\n\n @flag.string({\n description:\n \"Output directory for mailer configuration, default is src/mailer\",\n aliases: \"o\",\n name: \"output\",\n required: false,\n defaultValue: \"src/mailer\",\n })\n static outputPath: string;\n\n static mailerDependencies: Record<string, string[]> = {\n base: [\"nodemailer\", \"@types/nodemailer\"],\n handlebars: [\"handlebars\", \"@types/handlebars\"],\n ejs: [\"ejs\", \"@types/ejs\"],\n edge: [\"edge.js\"],\n mustache: [\"mustache\", \"@types/mustache\"],\n };\n\n static async handle(): Promise<void> {\n this.logger.info(\"Initializing mailer configuration...\");\n\n if (\n ![\"handlebars\", \"ejs\", \"edge\", \"mustache\", \"custom\", \"none\"].includes(\n this.templateEngine,\n )\n ) {\n this.logger.error(\n `Invalid template engine: ${this.templateEngine}. Must be one of: handlebars, ejs, edge, mustache, custom, none`,\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 = [\n ...this.mailerDependencies.base,\n ...(this.templateEngine !== \"none\" && this.templateEngine !== \"custom\"\n ? this.mailerDependencies[this.templateEngine] || []\n : []),\n ];\n\n const uninstalledDeps = await getUninstalledPackages(dependencies);\n\n if (uninstalledDeps.length > 0) {\n this.logger.info(\n `Found ${uninstalledDeps.length} missing dependencies for mailer`,\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. Mailer initialization aborted.\",\n );\n return;\n }\n }\n\n if (uninstalledDeps.length === 0) {\n this.logger.info(\"All mailer dependencies are already installed\");\n }\n }\n\n const configTemplate = this.getConfigTemplate();\n const fileName = \"mailer.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 `Mailer configuration initialized successfully at ${fullPath}`,\n );\n this.logger.info(\n \"Remember to update the configuration with your actual SMTP credentials\",\n );\n\n if (this.templateEngine !== \"none\") {\n this.logger.info(\n `Template engine '${this.templateEngine}' configured and ready to use`,\n );\n }\n }\n\n static getConfigTemplate(): string {\n const hasTemplate = this.templateEngine !== \"none\";\n\n return `import { createTransport } from \"nodemailer\";\nimport { Mailer${hasTemplate ? `, ${this.getAdapterImport()}` : \"\"} } from \"balda\";\n\n/**\n * Configure your email transporter\n * For development, you can use MailCatcher (docker-compose up mailcatcher)\n * For production, use your SMTP service (Gmail, SendGrid, AWS SES, etc.)\n */\nconst transporter = createTransport({\n host: process.env.SMTP_HOST || \"localhost\",\n port: parseInt(process.env.SMTP_PORT || \"1025\", 10),\n secure: process.env.SMTP_SECURE === \"true\", // true for 465, false for other ports\n auth: process.env.SMTP_USER && process.env.SMTP_PASSWORD\n ? {\n user: process.env.SMTP_USER,\n pass: process.env.SMTP_PASSWORD,\n }\n : undefined,\n});\n${this.getTemplateAdapterSetup()}\n/**\n * Initialize the Mailer with multiple providers (optional)\n * You can define different providers for different purposes\n */\nexport const mailer = new Mailer(\n {\n default: {\n transporter,${hasTemplate ? \"\\n templateAdapter: adapter,\" : \"\"}\n from: process.env.DEFAULT_FROM_EMAIL || \"noreply@example.com\",\n },\n // Add more providers as needed\n // transactional: { transporter: transactionalTransporter, from: \"...\" },\n // marketing: { transporter: marketingTransporter, from: \"...\" },\n },\n {\n defaultProvider: \"default\",\n }\n);\n\n/**\n * Example usage:\n *\n * // Send a simple email\n * await mailer.send({\n * to: \"user@example.com\",\n * subject: \"Welcome!\",\n * text: \"Hello from Balda!\",\n * html: \"<h1>Hello from Balda!</h1>\",\n * });\n${this.getTemplateExample()}\n * // Use a different provider\n * await mailer.use(\"transactional\").send({\n * to: \"user@example.com\",\n * subject: \"Transaction Complete\",\n * text: \"Your order has been processed\",\n * });\n *\n * // Verify connection\n * const isValid = await mailer.verify();\n * console.log(\"Mail provider connection:\", isValid ? \"OK\" : \"Failed\");\n */\n`;\n }\n\n static getAdapterImport(): string {\n const adapterMap: Record<string, string> = {\n handlebars: \"HandlebarsAdapter\",\n ejs: \"EjsAdapter\",\n edge: \"EdgeAdapter\",\n mustache: \"MustacheAdapter\",\n custom: \"CustomAdapter\",\n };\n\n return adapterMap[this.templateEngine] || \"\";\n }\n\n static getTemplateAdapterSetup(): string {\n if (this.templateEngine === \"none\") {\n return \"\";\n }\n\n if (this.templateEngine === \"handlebars\") {\n return `\n/**\n * Configure Handlebars template adapter\n * Supports helpers, partials, and custom compilation options\n */\nconst adapter = new HandlebarsAdapter();\n\n// Register custom helpers (optional)\n// await adapter.registerHelper(\"uppercase\", (str: string) => str.toUpperCase());\n\n// Register partials (optional)\n// await adapter.registerPartial(\"header\", \"<header>{{title}}</header>\");\n`;\n }\n\n if (this.templateEngine === \"ejs\") {\n return `\n/**\n * Configure EJS template adapter\n * Pass custom options to the EJS compiler\n */\nconst adapter = new EjsAdapter({\n // Custom EJS options (optional)\n // cache: true,\n // delimiter: \"%\",\n});\n`;\n }\n\n if (this.templateEngine === \"edge\") {\n return `\n/**\n * Configure Edge.js template adapter\n * Supports global helpers and custom tags\n */\nconst adapter = new EdgeAdapter();\n\n// Register globals (optional)\n// await adapter.global(\"appName\", \"My App\");\n\n// Register custom tags (optional)\n// await adapter.registerTag(myCustomTag);\n`;\n }\n\n if (this.templateEngine === \"mustache\") {\n return `\n/**\n * Configure Mustache template adapter\n * Supports partials for template composition\n */\nconst adapter = new MustacheAdapter();\n\n// Register partials (optional)\n// adapter.registerPartial(\"header\", \"<header>{{title}}</header>\");\n`;\n }\n\n if (this.templateEngine === \"custom\") {\n return `\n/**\n * Configure Custom template adapter\n * Simple {{variable}} interpolation with helper support\n */\nconst adapter = new CustomAdapter();\n\n// Register custom helpers (optional)\n// adapter.registerHelper(\"uppercase\", (value: unknown) =>\n// String(value).toUpperCase()\n// );\n`;\n }\n\n return \"\";\n }\n\n static getTemplateExample(): string {\n if (this.templateEngine === \"none\") {\n return \"\";\n }\n\n return `\n * // Send email with template\n * await mailer.sendWithTemplate({\n * to: \"user@example.com\",\n * subject: \"Welcome {{name}}!\",\n * template: \"<h1>Hello {{name}}</h1><p>Welcome to {{appName}}!</p>\",\n * data: {\n * name: \"John Doe\",\n * appName: \"My App\",\n * },\n * });\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 crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { nativeCwd } from \"../../runtime/native_cwd.js\";\nimport { Command } from \"../base_command.js\";\n\ntype KeyType = \"sync\" | \"async\";\n\nexport default class KeyGenerateCommand extends Command {\n static commandName = \"key-generate\";\n static description = \"Generate application encryption key pairs\";\n static help = [\n \"Generate secure RSA public/private key pairs for application encryption\",\n \"Keys are automatically saved to .env file\",\n \"Example: npx balda key-generate\",\n \"Example: npx balda key-generate --type async\",\n ];\n\n @flag.string({\n aliases: [\"t\"],\n name: \"type\",\n required: false,\n defaultValue: \"sync\",\n description: \"Key type: sync or async (default: sync)\",\n })\n static type?: string;\n\n static async handle(): Promise<void> {\n const keyType = (this.type ?? \"sync\") as KeyType;\n\n if (![\"sync\", \"async\"].includes(keyType)) {\n this.logger.error(`Invalid key type: ${keyType}. Must be sync or async`);\n return;\n }\n\n const { publicKey, privateKey } = crypto.generateKeyPairSync(\"rsa\", {\n modulusLength: 2048,\n publicKeyEncoding: {\n type: \"spki\",\n format: \"pem\",\n },\n privateKeyEncoding: {\n type: \"pkcs8\",\n format: \"pem\",\n },\n });\n\n const publicKeyName =\n keyType === \"sync\" ? \"APP_PUBLIC_KEY\" : \"APP_PUBLIC_KEY_ASYNC\";\n const privateKeyName =\n keyType === \"sync\" ? \"APP_PRIVATE_KEY\" : \"APP_PRIVATE_KEY_ASYNC\";\n const label = keyType === \"sync\" ? \"Sync\" : \"Async\";\n\n console.log(`\\n✨ Generated ${label} Key Pair:\\n`);\n console.log(`\\x1b[33mPublic Key (${publicKeyName}):\\x1b[0m`);\n console.log(`\\x1b[32m${publicKey}\\x1b[0m`);\n console.log(`\\x1b[33mPrivate Key (${privateKeyName}):\\x1b[0m`);\n console.log(`\\x1b[32m${privateKey}\\x1b[0m`);\n\n await this.saveKeyToEnvFile(publicKeyName, publicKey);\n await this.saveKeyToEnvFile(privateKeyName, privateKey);\n\n console.log(\n `\\x1b[90m💡 Keys saved to .env file as ${publicKeyName} and ${privateKeyName}\\x1b[0m\\n`,\n );\n }\n\n private static async saveKeyToEnvFile(\n keyName: string,\n key: string,\n ): Promise<void> {\n const envPath = path.join(nativeCwd.getCwd(), \".env\");\n const keyLine = `${keyName}=\"${key}\"`;\n\n if (fs.existsSync(envPath)) {\n const envContent = fs.readFileSync(envPath, \"utf-8\");\n const keyRegex = new RegExp(`^${keyName}=.*$`, \"m\");\n\n if (keyRegex.test(envContent)) {\n const updatedContent = envContent.replace(keyRegex, keyLine);\n fs.writeFileSync(envPath, updatedContent);\n this.logger.info(`Updated ${keyName} in .env file`);\n return;\n }\n\n fs.appendFileSync(envPath, `\\n${keyLine}\\n`);\n this.logger.info(`Added ${keyName} to .env file`);\n return;\n }\n\n fs.writeFileSync(envPath, `${keyLine}\\n`);\n this.logger.info(`Created .env file with ${keyName}`);\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 sortedCommands = builtInCommands.sort((a, b) =>\n a.commandName.localeCompare(b.commandName),\n );\n\n const maxNameLength = Math.max(\n ...sortedCommands.map((cmd) => cmd.commandName.length),\n );\n\n for (const command of sortedCommands) {\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 .sort((a, b) => a.commandName.localeCompare(b.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 { BaldaError } from \"./balda_error.js\";\n\nexport class ClientNotFoundError extends BaldaError {\n constructor(...libraries: string[]) {\n super(\n `Library not installed: ${libraries.join(\", \")}, try run npm install ${libraries.join(\" \")}`,\n );\n }\n}\n","class NativeCrypto {\n randomUUID(): string {\n return crypto.randomUUID();\n }\n}\n\nexport const nativeCrypto = new NativeCrypto();\n","import type { Job, Queue } from \"bullmq\";\nimport { SyncOrAsync } from \"../../../type_util.js\";\n\n/**\n * Options for BullMQ configuration\n * @param options - The options for BullMQ\n * @param errorHandler - Custom error handler that will be triggered when a job fails, for logging or debug purposes\n */\nexport type BullMQConfigurationOptions = ConstructorParameters<\n typeof Queue\n>[1] & { errorHandler?: (job: Job, error: Error) => SyncOrAsync };\n\nexport class BullMQConfiguration {\n static options: BullMQConfigurationOptions = {\n connection: {},\n };\n}\n\n/**\n * Define globally custom BullMQ configuration\n * @param options - The BullMQ configuration options\n */\nexport const defineBullMQConfiguration = (\n options: BullMQConfigurationOptions,\n): void => {\n BullMQConfiguration.options = options ?? {\n connection: {},\n };\n};\n","import type { Job, Queue, Worker } from \"bullmq\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport { nativeCrypto } from \"../../../runtime/native_crypto.js\";\nimport type {\n BullMQQueueOptions,\n GenericPubSub,\n PublishOptions,\n} from \"../../queue_types.js\";\nimport { BullMQConfiguration } from \"./bullmq_configuration.js\";\n\nexport class BullMQPubSub implements GenericPubSub {\n private queues: Map<string, Queue> = new Map();\n private workers: Map<string, Worker> = new Map();\n declare private bullmqClient: typeof import(\"bullmq\");\n\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"bullmq\">,\n ): Promise<{ id: string }> {\n const queue = await this.getQueue(topic);\n const jobId = nativeCrypto.randomUUID();\n await queue.add(topic, payload, {\n jobId: jobId,\n ...BullMQConfiguration.options?.defaultJobOptions,\n ...options,\n });\n\n return { id: jobId };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n if (this.workers.has(topic)) {\n throw new Error(`[BullMQ] Already subscribed to topic \"${topic}\"`);\n }\n\n const { errorHandler, ...rest } = BullMQConfiguration.options ?? {};\n const bullmqClient = await this.getBullMQClient();\n const worker = new bullmqClient.Worker(\n topic,\n async (job: Job) => {\n try {\n await handler(job.data);\n } catch (error) {\n (await errorHandler?.(job, error as Error)) ?? Promise.reject(error);\n }\n },\n {\n ...rest,\n },\n );\n\n this.workers.set(topic, worker);\n }\n\n async unsubscribe(topic: string): Promise<void> {\n const worker = this.workers.get(topic);\n if (worker) {\n await worker.close();\n this.workers.delete(topic);\n }\n }\n\n private async getQueue(topic: string): Promise<Queue> {\n if (!this.queues.has(topic)) {\n const bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n\n const queue = new bullmqClient.Queue(topic, {\n ...(BullMQConfiguration.options || { connection: {} }),\n });\n\n this.queues.set(topic, queue);\n }\n\n return this.queues.get(topic)!;\n }\n\n private async getBullMQClient(): Promise<typeof import(\"bullmq\")> {\n if (!this.bullmqClient) {\n this.bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n }\n\n return this.bullmqClient;\n }\n\n // Methods for TypedQueue with per-queue config\n async publishWithConfig<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"bullmq\">,\n queueConfig?: BullMQQueueOptions,\n ): Promise<{ id: string }> {\n const queue = await this.getQueueWithConfig(topic, queueConfig);\n const jobId = nativeCrypto.randomUUID();\n\n // Merge global default job options with queue-specific and call-time options\n const mergedOptions = {\n jobId,\n ...BullMQConfiguration.options?.defaultJobOptions,\n ...queueConfig?.defaultJobOptions,\n ...options,\n };\n\n await queue.add(topic, payload, mergedOptions);\n return { id: jobId };\n }\n\n async subscribeWithConfig<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig?: BullMQQueueOptions,\n ): Promise<void> {\n const workerKey = this.getWorkerKey(topic, queueConfig);\n if (this.workers.has(workerKey)) {\n throw new Error(`[BullMQ] Already subscribed to topic \"${topic}\"`);\n }\n\n const globalConfig = BullMQConfiguration.options ?? {};\n const { errorHandler } = globalConfig;\n const bullmqClient = await this.getBullMQClient();\n\n const workerOptions = {\n ...globalConfig,\n ...queueConfig,\n };\n\n delete (workerOptions as Record<string, unknown>).errorHandler;\n delete (workerOptions as Record<string, unknown>).defaultJobOptions;\n\n const worker = new bullmqClient.Worker(\n topic,\n async (job: Job) => {\n try {\n await handler(job.data);\n } catch (error) {\n (await errorHandler?.(job, error as Error)) ?? Promise.reject(error);\n }\n },\n workerOptions,\n );\n\n this.workers.set(workerKey, worker);\n }\n\n private async getQueueWithConfig(\n topic: string,\n queueConfig?: BullMQQueueOptions,\n ): Promise<Queue> {\n const queueKey = this.getQueueKey(topic, queueConfig);\n\n if (!this.queues.has(queueKey)) {\n const bullmqClient = await import(\"bullmq\").catch(() => {\n throw new ClientNotFoundError(\"bullmq\", \"ioredis\");\n });\n\n // Merge global config with queue-specific config\n const mergedConfig = {\n ...(BullMQConfiguration.options || { connection: {} }),\n ...queueConfig,\n };\n\n const queue = new bullmqClient.Queue(topic, mergedConfig);\n this.queues.set(queueKey, queue);\n }\n\n return this.queues.get(queueKey)!;\n }\n\n private getQueueKey(topic: string, queueConfig?: BullMQQueueOptions): string {\n // Create a unique key based on topic and connection config\n if (queueConfig?.connection) {\n return `${topic}:${JSON.stringify(queueConfig.connection)}`;\n }\n return topic;\n }\n\n private getWorkerKey(\n topic: string,\n queueConfig?: BullMQQueueOptions,\n ): string {\n return this.getQueueKey(topic, queueConfig);\n }\n}\n","import { nativeCrypto } from \"../../../runtime/native_crypto.js\";\nimport type { GenericPubSub } from \"../../queue_types.js\";\n\ntype QueueHandler<T = unknown> = (payload: T) => Promise<void>;\n\nexport class MemoryPubSub implements GenericPubSub {\n private subscribers: Map<string, Set<QueueHandler>> = new Map();\n private messageQueue: Array<{ topic: string; payload: unknown }> = [];\n private readonly maxQueueSize: number;\n private processingPromise: Promise<void> | null = null;\n\n constructor(maxQueueSize = 10000) {\n this.maxQueueSize = maxQueueSize;\n }\n\n /**\n * Clear all subscribers and pending messages\n * @internal Used for test cleanup\n */\n clear(): void {\n this.subscribers.clear();\n this.messageQueue = [];\n this.processingPromise = null;\n }\n\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n _options?: Record<string, unknown>,\n ): Promise<{ id: string }> {\n // Backpressure: reject if queue is full\n if (this.messageQueue.length >= this.maxQueueSize) {\n throw new Error(`Queue full: ${this.maxQueueSize} messages pending`);\n }\n\n const id = nativeCrypto.randomUUID();\n this.messageQueue.push({ topic, payload });\n\n // Start processing if not already running\n if (!this.processingPromise) {\n this.processingPromise = this.processQueue()\n .catch((err) => {\n console.error(\"[MemoryPubSub] Fatal queue processing error:\", err);\n })\n .finally(() => {\n this.processingPromise = null;\n });\n }\n\n return { id };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n if (!this.subscribers.has(topic)) {\n this.subscribers.set(topic, new Set());\n }\n\n const typedHandler = handler as QueueHandler;\n this.subscribers.get(topic)!.add(typedHandler);\n }\n\n async unsubscribe(topic: string): Promise<void> {\n this.subscribers.delete(topic);\n }\n\n private async processQueue(): Promise<void> {\n while (this.messageQueue.length > 0) {\n const message = this.messageQueue.shift();\n if (!message) {\n break;\n }\n\n const handlers = this.subscribers.get(message.topic);\n if (handlers && handlers.size > 0) {\n await Promise.allSettled(\n Array.from(handlers).map((handler) =>\n handler(message.payload).catch((error) => {\n console.error(\n `[MemoryPubSub] Handler error for topic \"${message.topic}\":`,\n error,\n );\n }),\n ),\n );\n }\n }\n }\n}\n","import type { SyncOrAsync } from \"../../../type_util.js\";\n\nexport type PGBossConfigurationOptions = {\n connectionString?: string;\n boss?: unknown;\n errorHandler?: (error: Error) => SyncOrAsync;\n};\n\nexport class PGBossConfiguration {\n static options: PGBossConfigurationOptions = {};\n}\n\nexport const definePGBossConfiguration = (\n options: PGBossConfigurationOptions,\n): void => {\n PGBossConfiguration.options = options ?? {};\n};\n","import type { Job, PgBoss } from \"pg-boss\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport type {\n GenericPubSub,\n PGBossQueueOptions,\n PGBossSendOptions,\n PublishOptions,\n} from \"../../queue_types.js\";\nimport { PGBossConfiguration } from \"./pgboss_configuration.js\";\n\nexport class PGBossPubSub implements GenericPubSub {\n declare private boss: PgBoss;\n private createdQueues: Set<string> = new Set();\n private workers: Map<string, string> = new Map();\n\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"pgboss\">,\n ): Promise<{ id: string }> {\n const boss = await this.getBoss();\n await this.ensureQueue(topic);\n const sendOptions = (options || {}) as PGBossSendOptions;\n const id = await boss.send(topic, payload as object, sendOptions);\n return { id: String(id ?? \"\") };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n const boss = await this.getBoss();\n await this.ensureQueue(topic);\n const options = PGBossConfiguration.options;\n if (options.errorHandler) {\n boss.on(\"error\", options.errorHandler);\n }\n\n const workId = await boss.work(\n topic,\n async (job: Job<unknown> | Job<unknown>[]) => {\n const jobs = Array.isArray(job) ? job : [job];\n for (const j of jobs) {\n await handler(j.data as TPayload);\n }\n },\n );\n\n this.workers.set(topic, workId);\n }\n\n async unsubscribe(topic: string): Promise<void> {\n const boss = await this.getBoss();\n const workId = this.workers.get(topic);\n if (workId) {\n await boss.offWork(workId);\n this.workers.delete(topic);\n }\n }\n\n private async getBoss(): Promise<PgBoss> {\n if (this.boss) {\n return this.boss;\n }\n\n const mod = await import(\"pg-boss\").catch(() => {\n throw new ClientNotFoundError(\"pg-boss\", \"pg\");\n });\n\n type PGBossCtor = new (config?: unknown) => PgBoss;\n const maybeDefault = (mod.PgBoss as { default?: PGBossCtor }).default;\n const Ctor: PGBossCtor =\n maybeDefault ?? (mod.PgBoss as unknown as PGBossCtor);\n\n const { connectionString, boss } = PGBossConfiguration.options;\n const arg = connectionString ?? boss;\n const instance = new Ctor(arg);\n\n if (PGBossConfiguration.options?.errorHandler) {\n instance.on(\"error\", PGBossConfiguration.options.errorHandler);\n }\n\n await instance.start();\n this.boss = instance;\n return this.boss;\n }\n\n private async ensureQueue(topic: string): Promise<void> {\n if (this.createdQueues.has(topic)) {\n return;\n }\n\n const pgBoss = await this.getBoss();\n if (typeof pgBoss.createQueue === \"function\") {\n await pgBoss.createQueue(topic);\n }\n\n this.createdQueues.add(topic);\n }\n\n // Methods for TypedQueue with per-queue config\n async publishWithConfig<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"pgboss\">,\n queueConfig?: PGBossQueueOptions,\n ): Promise<{ id: string }> {\n const boss = await this.getBossWithConfig(queueConfig);\n await this.ensureQueueWithBoss(topic, boss);\n const sendOptions = (options || {}) as PGBossSendOptions;\n const id = await boss.send(topic, payload as object, sendOptions);\n return { id: String(id ?? \"\") };\n }\n\n async subscribeWithConfig<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig?: PGBossQueueOptions,\n ): Promise<void> {\n const boss = await this.getBossWithConfig(queueConfig);\n await this.ensureQueueWithBoss(topic, boss);\n const globalOptions = PGBossConfiguration.options;\n if (globalOptions.errorHandler) {\n boss.on(\"error\", globalOptions.errorHandler);\n }\n\n const workerKey = `${topic}:${queueConfig?.connectionString ?? \"default\"}`;\n const workId = await boss.work(\n topic,\n async (job: Job<unknown> | Job<unknown>[]) => {\n const jobs = Array.isArray(job) ? job : [job];\n for (const j of jobs) {\n await handler(j.data as TPayload);\n }\n },\n );\n\n this.workers.set(workerKey, workId);\n }\n\n private bossInstances: Map<string, PgBoss> = new Map();\n\n private async getBossWithConfig(\n queueConfig?: PGBossQueueOptions,\n ): Promise<PgBoss> {\n // If no custom config, use the default boss\n if (!queueConfig?.connectionString) {\n return this.getBoss();\n }\n\n const configKey = queueConfig.connectionString;\n if (this.bossInstances.has(configKey)) {\n return this.bossInstances.get(configKey)!;\n }\n\n const mod = await import(\"pg-boss\").catch(() => {\n throw new ClientNotFoundError(\"pg-boss\", \"pg\");\n });\n\n type PGBossCtor = new (config?: unknown) => PgBoss;\n const maybeDefault = (mod.PgBoss as { default?: PGBossCtor }).default;\n const Ctor: PGBossCtor =\n maybeDefault ?? (mod.PgBoss as unknown as PGBossCtor);\n\n const instance = new Ctor(queueConfig.connectionString);\n\n if (PGBossConfiguration.options?.errorHandler) {\n instance.on(\"error\", PGBossConfiguration.options.errorHandler);\n }\n\n await instance.start();\n this.bossInstances.set(configKey, instance);\n return instance;\n }\n\n private async ensureQueueWithBoss(\n topic: string,\n boss: PgBoss,\n ): Promise<void> {\n if (this.createdQueues.has(topic)) {\n return;\n }\n\n if (typeof boss.createQueue === \"function\") {\n await boss.createQueue(topic);\n }\n\n this.createdQueues.add(topic);\n }\n}\n","import type { SQSClientConfig } from \"@aws-sdk/client-sqs\";\nimport type { SyncOrAsync } from \"../../../type_util.js\";\n\nexport type SQSConfigurationOptions = {\n client?: SQSClientConfig;\n consumer?: {\n batchSize?: number;\n visibilityTimeout?: number;\n waitTimeSeconds?: number;\n queueUrlMap: Record<string, string>;\n };\n errorHandler?: (error: Error) => SyncOrAsync;\n};\n\nexport class SQSConfiguration {\n static options: SQSConfigurationOptions = {};\n}\n\nexport const defineSQSConfiguration = (\n options: SQSConfigurationOptions,\n): void => {\n SQSConfiguration.options = options ?? {};\n};\n","import type { Message, SQSClient, SQSClientConfig } from \"@aws-sdk/client-sqs\";\nimport type { Consumer, ConsumerOptions } from \"sqs-consumer\";\nimport { ClientNotFoundError } from \"../../../errors/client_not_found_error.js\";\nimport type {\n GenericPubSub,\n PublishOptions,\n SQSPublishOptions,\n SQSQueueOptions,\n} from \"../../queue_types.js\";\nimport { SQSConfiguration } from \"./sqs_configuration.js\";\n\nexport class SQSPubSub implements GenericPubSub {\n private consumers: Map<string, Consumer> = new Map();\n private client?: SQSClient;\n declare private sqsLib: typeof import(\"@aws-sdk/client-sqs\");\n declare private sqsConsumerLib: typeof import(\"sqs-consumer\");\n\n // @ts-ignore\n async publish<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"sqs\">,\n ): Promise<{ id: string }> {\n const sqs = await this.getClient();\n const { SendMessageCommand } = await this.getSqsLib();\n const queueUrl = await this.resolveQueueUrl(topic);\n if (!queueUrl) {\n throw new Error(`[SQS] Queue url not configured for topic \"${topic}\"`);\n }\n\n const command = new SendMessageCommand({\n MessageBody: JSON.stringify(payload),\n MessageAttributes: {\n topic: { DataType: \"String\", StringValue: topic },\n },\n QueueUrl: queueUrl,\n ...(options ?? {}),\n });\n\n const response = await sqs.send(command);\n return { id: response.MessageId ?? \"\" };\n }\n\n async subscribe<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n ): Promise<void> {\n if (this.consumers.has(topic)) {\n throw new Error(`[SQS] Already subscribed to topic \"${topic}\"`);\n }\n\n const options = SQSConfiguration.options;\n const consumerModule = await this.getSqsConsumerLib();\n const consumerOptions: ConsumerOptions & { queueUrl: string } = {\n ...(options.consumer || {}),\n sqs: await this.getClient(),\n queueUrl: await this.resolveQueueUrl(topic),\n handleMessage: async (message: Message) => {\n const payload = JSON.parse(message.Body || \"{}\");\n await handler(payload);\n },\n } as ConsumerOptions & { queueUrl: string };\n\n const consumer = consumerModule.Consumer.create(consumerOptions);\n const errorHandler = options.errorHandler;\n if (errorHandler) {\n consumer.on(\"error\", errorHandler);\n consumer.on(\"processing_error\", errorHandler);\n }\n\n consumer.start();\n this.consumers.set(topic, consumer);\n }\n\n async unsubscribe(topic: string): Promise<void> {\n const consumer = this.consumers.get(topic);\n if (consumer) {\n consumer.stop();\n this.consumers.delete(topic);\n }\n }\n\n private async getClient(): Promise<SQSClient> {\n if (this.client) {\n return this.client;\n }\n\n const { SQSClient } = await this.getSqsLib();\n const config: SQSClientConfig | undefined = SQSConfiguration.options.client;\n this.client = new SQSClient(config ?? {});\n return this.client;\n }\n\n private async getSqsLib(): Promise<typeof import(\"@aws-sdk/client-sqs\")> {\n if (!this.sqsLib) {\n this.sqsLib = await import(\"@aws-sdk/client-sqs\").catch(() => {\n throw new ClientNotFoundError(\"@aws-sdk/client-sqs\", \"sqs-consumer\");\n });\n }\n\n return this.sqsLib;\n }\n\n private async getSqsConsumerLib(): Promise<typeof import(\"sqs-consumer\")> {\n if (!this.sqsConsumerLib) {\n this.sqsConsumerLib = await import(\"sqs-consumer\").catch(() => {\n throw new ClientNotFoundError(\"sqs-consumer\");\n });\n }\n\n return this.sqsConsumerLib;\n }\n\n private async resolveQueueUrl(topic: string): Promise<string> {\n const attrs = SQSConfiguration.options.consumer;\n const url = (attrs as Record<string, unknown> | undefined)?.queueUrlMap as\n | Record<string, string>\n | undefined;\n if (!url?.[topic]) {\n throw new Error(`[SQS] Queue url not configured for topic \"${topic}\"`);\n }\n return url[topic];\n }\n\n // Methods for TypedQueue with per-queue config\n async publishWithConfig<TPayload>(\n topic: string,\n payload: TPayload,\n options?: PublishOptions<\"sqs\">,\n queueConfig?: SQSQueueOptions,\n ): Promise<{ id: string }> {\n const { ...rest } = options ?? {};\n\n const sqs = await this.getClientWithConfig(queueConfig?.client);\n const { SendMessageCommand } = await this.getSqsLib();\n\n // Use queueConfig.queueUrl if provided, otherwise fall back to global config\n const queueUrl =\n queueConfig?.queueUrl ?? (await this.resolveQueueUrl(topic));\n\n const command = new SendMessageCommand({\n ...(rest as SQSPublishOptions),\n MessageBody: JSON.stringify(payload),\n MessageAttributes: {\n topic: { DataType: \"String\", StringValue: topic },\n },\n QueueUrl: queueUrl,\n });\n\n const response = await sqs.send(command);\n return { id: response.MessageId ?? \"\" };\n }\n\n async subscribeWithConfig<TPayload>(\n topic: string,\n handler: (payload: TPayload) => Promise<void>,\n queueConfig?: SQSQueueOptions,\n ): Promise<void> {\n if (this.consumers.has(topic)) {\n throw new Error(`[SQS] Already subscribed to topic \"${topic}\"`);\n }\n\n const globalOptions = SQSConfiguration.options;\n const consumerModule = await this.getSqsConsumerLib();\n\n const queueUrl =\n queueConfig?.queueUrl ?? (await this.resolveQueueUrl(topic));\n\n const consumerOptions: ConsumerOptions & { queueUrl: string } = {\n ...(globalOptions.consumer || {}),\n sqs: await this.getClientWithConfig(queueConfig?.client),\n queueUrl,\n handleMessage: async (message: Message) => {\n const payload = JSON.parse(message.Body || \"{}\");\n await handler(payload);\n },\n } as ConsumerOptions & { queueUrl: string };\n\n const consumer = consumerModule.Consumer.create(consumerOptions);\n const errorHandler = globalOptions.errorHandler;\n if (errorHandler) {\n consumer.on(\"error\", errorHandler);\n consumer.on(\"processing_error\", errorHandler);\n }\n\n consumer.start();\n this.consumers.set(topic, consumer);\n }\n\n private async getClientWithConfig(\n clientConfig?: SQSClientConfig,\n ): Promise<SQSClient> {\n // If custom client config is provided, create a new client\n if (clientConfig) {\n const { SQSClient } = await this.getSqsLib();\n return new SQSClient(clientConfig);\n }\n\n // Otherwise use the shared client\n return this.getClient();\n }\n}\n","import { BullMQPubSub } from \"./providers/bullmq/bullmq.js\";\nimport { MemoryPubSub } from \"./providers/memory/memory.js\";\nimport { PGBossPubSub } from \"./providers/pgboss/pgboss.js\";\nimport { SQSPubSub } from \"./providers/sqs/sqs.js\";\nimport type { GenericPubSub, QueueProviderKey } from \"./queue_types.js\";\n\nexport class QueueManager {\n static map: Map<QueueProviderKey, GenericPubSub> = new Map();\n\n static {\n this.map.set(\"bullmq\", new BullMQPubSub() as GenericPubSub<\"bullmq\">);\n this.map.set(\"sqs\", new SQSPubSub() as GenericPubSub<\"sqs\">);\n this.map.set(\"pgboss\", new PGBossPubSub() as GenericPubSub<\"pgboss\">);\n this.map.set(\"memory\", new MemoryPubSub() as GenericPubSub<\"memory\">);\n }\n\n static getProvider<P extends QueueProviderKey>(\n provider: P,\n ): GenericPubSub<P> {\n if (!this.map.has(provider)) {\n throw new Error(`[QueueSubscriber] Provider ${provider} not found`);\n }\n\n return this.map.get(provider)! as GenericPubSub<P>;\n }\n\n static setProvider(\n provider: QueueProviderKey,\n pubsub: GenericPubSub<QueueProviderKey>,\n ) {\n this.map.set(provider, pubsub);\n }\n\n /**\n * Clear the memory provider state\n * @internal Used for test cleanup\n */\n static clearMemoryProvider(): void {\n const provider = this.map.get(\"memory\") as MemoryPubSub;\n if (provider && \"clear\" in provider) {\n provider.clear();\n }\n }\n}\n","import { glob } from \"glob\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { QueueManager } from \"./queue.js\";\nimport type { BuiltInProviderKey, GenericPubSub } from \"./queue_types.js\";\n\ntype QueueHandler = (payload: unknown) => Promise<void>;\n\n// Built-in provider queue registration\ntype TypedQueueRegistration = {\n name: string;\n topic: string;\n handler: QueueHandler;\n provider: BuiltInProviderKey;\n queueOptions?: unknown;\n};\n\n// Custom provider queue registration\ntype CustomQueueRegistration = {\n name: string;\n topic: string;\n handler: QueueHandler;\n pubsub: GenericPubSub;\n};\n\nexport class QueueService {\n static typedQueueSubscribers: Map<string, TypedQueueRegistration> = new Map();\n static customQueueSubscribers: Map<string, CustomQueueRegistration> =\n new Map();\n\n /**\n * Factory function for creating handler instances.\n * Can be overridden to provide custom dependency injection.\n * @default Creates new instance using constructor\n */\n static instanceFactory: (ctor: Function) => object = (ctor) =>\n new (ctor as new () => object)();\n\n static registerTypedQueue(\n name: string,\n topic: string,\n handler: QueueHandler,\n provider: BuiltInProviderKey,\n queueOptions?: unknown,\n ): void {\n const key = `${provider}:${topic}:${name}`;\n if (this.typedQueueSubscribers.has(key)) {\n logger.warn(\n `Queue handler for ${key} already registered, overwriting previous handler`,\n );\n }\n\n this.typedQueueSubscribers.set(key, {\n name,\n topic,\n handler,\n provider,\n queueOptions,\n });\n }\n\n static registerCustomQueue(\n name: string,\n topic: string,\n handler: QueueHandler,\n pubsub: GenericPubSub,\n ): void {\n const key = `${pubsub.constructor.name}:${topic}:${name}`;\n if (this.customQueueSubscribers.has(key)) {\n logger.warn(\n `Custom queue handler for ${key} already registered, overwriting previous handler`,\n );\n }\n\n this.customQueueSubscribers.set(key, {\n name,\n topic,\n handler,\n pubsub,\n });\n }\n\n static async run() {\n logger.info(\"Subscribing queue handlers\");\n const hasTyped = this.typedQueueSubscribers.size > 0;\n const hasCustom = this.customQueueSubscribers.size > 0;\n\n if (!hasTyped && !hasCustom) {\n logger.info(\"No queue handlers to subscribe\");\n return;\n }\n\n // Subscribe typed queue handlers (built-in providers)\n for (const registration of this.typedQueueSubscribers.values()) {\n const { topic, handler, provider, queueOptions } = registration;\n logger.info(`Subscribing to queue: ${topic}`);\n\n const pubsub = QueueManager.getProvider(provider);\n\n // Use subscribeWithConfig if queueOptions are provided\n if (\n queueOptions &&\n \"subscribeWithConfig\" in pubsub &&\n typeof pubsub.subscribeWithConfig === \"function\"\n ) {\n await pubsub.subscribeWithConfig(topic, handler, queueOptions);\n } else {\n await (\n pubsub as typeof pubsub & {\n subscribe(\n topic: string,\n handler: (payload: unknown) => Promise<void>,\n ): Promise<void>;\n }\n ).subscribe(topic, handler);\n }\n }\n\n // Subscribe custom queue handlers\n for (const {\n topic,\n handler,\n pubsub,\n } of this.customQueueSubscribers.values()) {\n logger.info(`Subscribing to custom queue: ${topic}`);\n await pubsub.subscribe(topic, handler);\n }\n\n logger.info(\"Queue handlers subscribed\");\n }\n\n static async massiveImportQueues(\n queueHandlerPatterns: string[],\n options: { throwOnError?: boolean } = {},\n ) {\n const allFiles: string[] = [];\n\n for (const pattern of queueHandlerPatterns) {\n const files = await glob(pattern, {\n absolute: true,\n cwd: nativeCwd.getCwd(),\n });\n\n logger.info(`Pattern \"${pattern}\" matched ${files.length} file(s)`);\n allFiles.push(...files);\n }\n\n if (allFiles.length === 0) {\n logger.warn(\"No files matched the provided patterns\");\n return;\n }\n\n logger.info(`Importing ${allFiles.length} queue handler file(s)`);\n\n await Promise.all(\n allFiles.map(async (file) => {\n logger.debug(`Importing: ${file}`);\n await import(file).catch((error) => {\n logger.error(`Error importing queue handler: ${file}`);\n logger.error(error);\n if (options.throwOnError) {\n throw error;\n }\n });\n }),\n );\n\n logger.info(`Successfully imported ${allFiles.length} file(s)`);\n }\n}\n","import { arg } from \"../../decorators/command/arg.js\";\nimport { flag } from \"../../decorators/command/flag.js\";\nimport { QueueService } from \"../../queue/queue_service.js\";\nimport { Command } from \"../base_command.js\";\nimport type { CommandOptions } from \"../command_types.js\";\n\nexport default class QueueWorkCommand extends Command {\n static commandName = \"queue-start\";\n static description = \"Start queue workers to process jobs\";\n static help = [\n \"Start queue workers to process jobs from registered queues\",\n \"Loads queue handlers from specified patterns and starts processing\",\n \"Example: npx balda queue-start\",\n \"Example: npx balda queue-start src/queues/**/*.ts --patterns src/jobs/**/*.ts\",\n ];\n\n static options: CommandOptions = {\n keepAlive: true,\n };\n\n @arg({\n required: false,\n defaultValue: \"src/queues/**/*.{ts,js}\",\n description:\n \"Primary glob pattern for queue handlers (default: src/queues/**/*.{ts,js})\",\n })\n static pattern: string;\n\n @flag.list({\n aliases: [\"p\"],\n name: \"patterns\",\n required: false,\n description: \"Additional glob patterns for queue handlers\",\n })\n static additionalPatterns?: string[];\n\n static async handle(): Promise<void> {\n this.logger.info(\"Starting queue workers...\");\n\n const patterns = [this.pattern];\n\n if (this.additionalPatterns && this.additionalPatterns.length > 0) {\n patterns.push(...this.additionalPatterns);\n }\n\n this.logger.info(\n `Loading queue handlers from patterns: ${patterns.join(\", \")}`,\n );\n\n await QueueService.massiveImportQueues(patterns, {\n throwOnError: false,\n });\n\n const typedCount = QueueService.typedQueueSubscribers.size;\n const customCount = QueueService.customQueueSubscribers.size;\n const totalCount = typedCount + customCount;\n\n if (totalCount === 0) {\n this.logger.warn(\n \"No queue handlers found. Make sure your queue handlers are decorated with @queue decorator\",\n );\n return;\n }\n\n this.logger.info(\n `Found ${totalCount} queue handler(s) (${typedCount} typed, ${customCount} custom)`,\n );\n\n QueueService.run()\n .then(() => {\n this.logger.info(\n \"Queue workers started successfully. Press Ctrl+C to stop.\",\n );\n })\n .catch((error) => {\n this.logger.error(\"Error starting queue workers\", error);\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 = \"init-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 CronStartCommand from \"./base_commands/cron_start_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 InitMailerCommand from \"./base_commands/init_mailer_command.js\";\nimport InitQueueCommand from \"./base_commands/init_queue_command.js\";\nimport KeyGenerateCommand from \"./base_commands/key_generate_command.js\";\nimport ListCommand from \"./base_commands/list_command.js\";\nimport QueueWorkCommand from \"./base_commands/queue_work_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 InitMailerCommand,\n InitQueueCommand,\n ListCommand,\n BuildCommand,\n ServeCommand,\n SetupStorageCommand,\n KeyGenerateCommand,\n QueueWorkCommand,\n CronStartCommand,\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"]}
|