balda 0.0.36 → 0.0.39
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cli.js +26 -26
- package/lib/cli.js.map +1 -1
- package/lib/index.cjs +52 -52
- package/lib/index.cjs.map +1 -1
- package/lib/index.d.cts +95 -119
- package/lib/index.d.ts +95 -119
- package/lib/index.js +52 -52
- package/lib/index.js.map +1 -1
- package/package.json +1 -1
package/lib/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../node_modules/cronstrue/dist/cronstrue.js","../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/runtime/native_path.ts","../src/metadata_store.ts","../src/decorators/command/arg.ts","../src/runtime/native_exit.ts","../src/commands/base_command.ts","../src/decorators/command/flag.ts","../src/runtime/native_fs.ts","../src/package.ts","../src/commands/base_commands/build_command.ts","../src/errors/balda_error.ts","../src/errors/zod4_not_installed_error.ts","../src/errors/zod3_schema_used.ts","../src/validator/zod_loader.ts","../src/errors/typebox_not_installed_error.ts","../src/validator/typebox_loader.ts","../src/ajv/ajv.ts","../src/ajv/schema_compiler.ts","../src/server/router/validation_wrapper.ts","../src/server/router/router.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","NativePath","inputPath","path","paths","nativePath","MetadataStore","target","propertyKey","VALIDATION_ERROR_SYMBOL","options","currentCommandName","argName","argValue","errorChain","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","alwaysAllowed","knownFlags","alias","unknownFlags","error","index","errorNumber","errorType","errorName","flagDecorator","primaryFlagName","flagAliases","allFlagVariants","resolvedFlagValue","flagVariant","possibleNames","flagName","rawValue","val","stringVal","NativeFs","fs","cwd","cwdPath","p","data","arrayBuffer","denoBuffer","stats","bunStats","denoStats","Readable","nodeStream","entries","entry","nativeFs","requireFn","createRequire","__require","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","Zod4NotInstalledError","Zod3SchemaUsedError","ZodLoader","isZod","zodModule","schema","TypeBoxNotInstalledError","TypeBoxLoader","isTypeBox","sym","AjvStateManager","Ajv","ajv","prefix","prefixMap","key","jsonSchema","cached","compiled","serializer","fastJson","schemas","resolved","statusCode","status","schemaObject","compileAndCacheValidator","cacheKey","primitiveSchema","compileRequestValidator","compileRequestSchemas","requestBody","query","compileResponseSchemas","responses","responseSchemas","wrapHandlerWithValidation","handler","req","res","newArgs","validatedBody","validatedQuery","validatedAll","Node","Router","_Router","basePath","middlewares","method","middleware","validationSchemas","swaggerOptions","clean","hasValidation","finalHandler","finalValidationSchemas","root","trimmed","segments","isStaticRoute","paramNames","node","seg","normalizedPath","idx","r","rawPath","pathWithoutQuery","queryIndex","cachedRoute","params","optionsOrHandler","maybeHandler","fullPath","body","all","combined","middlewareOrCb","maybeCb","groupMiddlewares","cb","childBase","child","route","updatedMiddleware","normalized","joined","v","CronService","nodeCronModule","context","cronJobPatterns","allFiles","pattern","files","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","rej","swaggerPath","swaggerJsonUrl","openApiSpec","response","serverWithClose","tempSpecPath","outputDir","commandParts","InitCommand","devDependenciesCommand","uninstalledDevDeps","uninstalledMqtt","uninstalledCron","uninstalledGraphql","ext","serverTemplate","indexTemplate","loggerTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","graphqlDir","graphqlConfigTemplate","imports","services","importsBlock","servicesBlock","InitMailerCommand","uninstalledDeps","configTemplate","hasTemplate","InitQueueCommand","KeyGenerateCommand","keyType","publicKey","privateKey","crypto","publicKeyName","privateKeyName","keyName","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","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","customLogger","overridePath","loggerPath","commandsPattern","commandFiles","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","CommandClass","replacement","retryErr"],"mappings":"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","file":"cli.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cronstrue\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cronstrue\"] = factory();\n\telse\n\t\troot[\"cronstrue\"] = factory();\n})(globalThis, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 949:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CronParser = void 0;\nvar rangeValidator_1 = __webpack_require__(515);\nvar CronParser = (function () {\n function CronParser(expression, dayOfWeekStartIndexZero, monthStartIndexZero) {\n if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; }\n if (monthStartIndexZero === void 0) { monthStartIndexZero = false; }\n this.expression = expression;\n this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;\n this.monthStartIndexZero = monthStartIndexZero;\n }\n CronParser.prototype.parse = function () {\n var _a;\n var parsed;\n var expression = (_a = this.expression) !== null && _a !== void 0 ? _a : '';\n if (expression === \"@reboot\") {\n parsed = [\"@reboot\", \"\", \"\", \"\", \"\", \"\", \"\"];\n return parsed;\n }\n else if (expression.startsWith('@')) {\n var special = this.parseSpecial(this.expression);\n parsed = this.extractParts(special);\n }\n else {\n parsed = this.extractParts(this.expression);\n }\n this.normalize(parsed);\n this.validate(parsed);\n return parsed;\n };\n CronParser.prototype.parseSpecial = function (expression) {\n var specialExpressions = {\n '@yearly': '0 0 1 1 *',\n '@annually': '0 0 1 1 *',\n '@monthly': '0 0 1 * *',\n '@weekly': '0 0 * * 0',\n '@daily': '0 0 * * *',\n '@midnight': '0 0 * * *',\n '@hourly': '0 * * * *',\n '@reboot': '@reboot'\n };\n var special = specialExpressions[expression];\n if (!special) {\n throw new Error('Unknown special expression.');\n }\n return special;\n };\n CronParser.prototype.extractParts = function (expression) {\n if (!this.expression) {\n throw new Error(\"cron expression is empty\");\n }\n var parsed = expression.trim().split(/[ ]+/);\n for (var i = 0; i < parsed.length; i++) {\n if (parsed[i].includes(\",\")) {\n var arrayElement = parsed[i]\n .split(\",\")\n .map(function (item) { return item.trim(); })\n .filter(function (item) { return item !== \"\"; })\n .map(function (item) { return (!isNaN(Number(item)) ? Number(item) : item); })\n .filter(function (item) { return item !== null && item !== \"\"; });\n if (arrayElement.length === 0) {\n arrayElement.push(\"*\");\n }\n arrayElement.sort(function (a, b) { return (a !== null && b !== null ? a - b : 0); });\n parsed[i] = arrayElement.map(function (item) { return (item !== null ? item.toString() : \"\"); }).join(\",\");\n }\n }\n if (parsed.length < 5) {\n throw new Error(\"Expression has only \".concat(parsed.length, \" part\").concat(parsed.length == 1 ? \"\" : \"s\", \". At least 5 parts are required.\"));\n }\n else if (parsed.length == 5) {\n parsed.unshift(\"\");\n parsed.push(\"\");\n }\n else if (parsed.length == 6) {\n var isYearWithNoSecondsPart = /\\d{4}$/.test(parsed[5]) || parsed[4] == \"?\" || parsed[2] == \"?\";\n if (isYearWithNoSecondsPart) {\n parsed.unshift(\"\");\n }\n else {\n parsed.push(\"\");\n }\n }\n else if (parsed.length > 7) {\n throw new Error(\"Expression has \".concat(parsed.length, \" parts; too many!\"));\n }\n return parsed;\n };\n CronParser.prototype.normalize = function (expressionParts) {\n var _this = this;\n expressionParts[3] = expressionParts[3].replace(\"?\", \"*\");\n expressionParts[5] = expressionParts[5].replace(\"?\", \"*\");\n expressionParts[2] = expressionParts[2].replace(\"?\", \"*\");\n if (expressionParts[0].indexOf(\"0/\") == 0) {\n expressionParts[0] = expressionParts[0].replace(\"0/\", \"*/\");\n }\n if (expressionParts[1].indexOf(\"0/\") == 0) {\n expressionParts[1] = expressionParts[1].replace(\"0/\", \"*/\");\n }\n if (expressionParts[2].indexOf(\"0/\") == 0) {\n expressionParts[2] = expressionParts[2].replace(\"0/\", \"*/\");\n }\n if (expressionParts[3].indexOf(\"1/\") == 0) {\n expressionParts[3] = expressionParts[3].replace(\"1/\", \"*/\");\n }\n if (expressionParts[4].indexOf(\"1/\") == 0) {\n expressionParts[4] = expressionParts[4].replace(\"1/\", \"*/\");\n }\n if (expressionParts[6].indexOf(\"1/\") == 0) {\n expressionParts[6] = expressionParts[6].replace(\"1/\", \"*/\");\n }\n expressionParts[5] = expressionParts[5].replace(/(^\\d)|([^#/\\s]\\d)/g, function (t) {\n var dowDigits = t.replace(/\\D/, \"\");\n var dowDigitsAdjusted = dowDigits;\n if (_this.dayOfWeekStartIndexZero) {\n if (dowDigits == \"7\") {\n dowDigitsAdjusted = \"0\";\n }\n }\n else {\n dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString();\n }\n return t.replace(dowDigits, dowDigitsAdjusted);\n });\n if (expressionParts[5] == \"L\") {\n expressionParts[5] = \"6\";\n }\n if (expressionParts[3] == \"?\") {\n expressionParts[3] = \"*\";\n }\n if (expressionParts[3].indexOf(\"W\") > -1 &&\n (expressionParts[3].indexOf(\",\") > -1 || expressionParts[3].indexOf(\"-\") > -1)) {\n throw new Error(\"The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.\");\n }\n var days = {\n SUN: 0,\n MON: 1,\n TUE: 2,\n WED: 3,\n THU: 4,\n FRI: 5,\n SAT: 6,\n };\n for (var day in days) {\n expressionParts[5] = expressionParts[5].replace(new RegExp(day, \"gi\"), days[day].toString());\n }\n expressionParts[4] = expressionParts[4].replace(/(^\\d{1,2})|([^#/\\s]\\d{1,2})/g, function (t) {\n var dowDigits = t.replace(/\\D/, \"\");\n var dowDigitsAdjusted = dowDigits;\n if (_this.monthStartIndexZero) {\n dowDigitsAdjusted = (parseInt(dowDigits) + 1).toString();\n }\n return t.replace(dowDigits, dowDigitsAdjusted);\n });\n var months = {\n JAN: 1,\n FEB: 2,\n MAR: 3,\n APR: 4,\n MAY: 5,\n JUN: 6,\n JUL: 7,\n AUG: 8,\n SEP: 9,\n OCT: 10,\n NOV: 11,\n DEC: 12,\n };\n for (var month in months) {\n expressionParts[4] = expressionParts[4].replace(new RegExp(month, \"gi\"), months[month].toString());\n }\n if (expressionParts[0] == \"0\") {\n expressionParts[0] = \"\";\n }\n if (!/\\*|\\-|\\,|\\//.test(expressionParts[2]) &&\n (/\\*|\\//.test(expressionParts[1]) || /\\*|\\//.test(expressionParts[0]))) {\n expressionParts[2] += \"-\".concat(expressionParts[2]);\n }\n for (var i = 0; i < expressionParts.length; i++) {\n if (expressionParts[i].indexOf(\",\") != -1) {\n expressionParts[i] =\n expressionParts[i]\n .split(\",\")\n .filter(function (str) { return str !== \"\"; })\n .join(\",\") || \"*\";\n }\n if (expressionParts[i] == \"*/1\") {\n expressionParts[i] = \"*\";\n }\n if (expressionParts[i].indexOf(\"/\") > -1 && !/^\\*|\\-|\\,/.test(expressionParts[i])) {\n var stepRangeThrough = null;\n switch (i) {\n case 4:\n stepRangeThrough = \"12\";\n break;\n case 5:\n stepRangeThrough = \"6\";\n break;\n case 6:\n stepRangeThrough = \"9999\";\n break;\n default:\n stepRangeThrough = null;\n break;\n }\n if (stepRangeThrough !== null) {\n var parts = expressionParts[i].split(\"/\");\n expressionParts[i] = \"\".concat(parts[0], \"-\").concat(stepRangeThrough, \"/\").concat(parts[1]);\n }\n }\n }\n };\n CronParser.prototype.validate = function (parsed) {\n var standardCronPartCharacters = \"0-9,\\\\-*\\/\";\n this.validateOnlyExpectedCharactersFound(parsed[0], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[1], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[2], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[3], \"0-9,\\\\-*\\/LW\");\n this.validateOnlyExpectedCharactersFound(parsed[4], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[5], \"0-9,\\\\-*\\/L#\");\n this.validateOnlyExpectedCharactersFound(parsed[6], standardCronPartCharacters);\n this.validateAnyRanges(parsed);\n };\n CronParser.prototype.validateAnyRanges = function (parsed) {\n rangeValidator_1.default.secondRange(parsed[0]);\n rangeValidator_1.default.minuteRange(parsed[1]);\n rangeValidator_1.default.hourRange(parsed[2]);\n rangeValidator_1.default.dayOfMonthRange(parsed[3]);\n rangeValidator_1.default.monthRange(parsed[4], this.monthStartIndexZero);\n rangeValidator_1.default.dayOfWeekRange(parsed[5], this.dayOfWeekStartIndexZero);\n };\n CronParser.prototype.validateOnlyExpectedCharactersFound = function (cronPart, allowedCharsExpression) {\n var invalidChars = cronPart.match(new RegExp(\"[^\".concat(allowedCharsExpression, \"]+\"), \"gi\"));\n if (invalidChars && invalidChars.length) {\n throw new Error(\"Expression contains invalid values: '\".concat(invalidChars.toString(), \"'\"));\n }\n };\n return CronParser;\n}());\nexports.CronParser = CronParser;\n\n\n/***/ }),\n\n/***/ 333:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ExpressionDescriptor = void 0;\nvar stringUtilities_1 = __webpack_require__(823);\nvar cronParser_1 = __webpack_require__(949);\nvar ExpressionDescriptor = (function () {\n function ExpressionDescriptor(expression, options) {\n this.expression = expression;\n this.options = options;\n this.expressionParts = new Array(5);\n if (!this.options.locale && ExpressionDescriptor.defaultLocale) {\n this.options.locale = ExpressionDescriptor.defaultLocale;\n }\n if (!ExpressionDescriptor.locales[this.options.locale]) {\n var fallBackLocale = Object.keys(ExpressionDescriptor.locales)[0];\n console.warn(\"Locale '\".concat(this.options.locale, \"' could not be found; falling back to '\").concat(fallBackLocale, \"'.\"));\n this.options.locale = fallBackLocale;\n }\n this.i18n = ExpressionDescriptor.locales[this.options.locale];\n if (options.use24HourTimeFormat === undefined) {\n options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault();\n }\n }\n ExpressionDescriptor.toString = function (expression, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.throwExceptionOnParseError, throwExceptionOnParseError = _c === void 0 ? true : _c, _d = _b.verbose, verbose = _d === void 0 ? false : _d, _e = _b.dayOfWeekStartIndexZero, dayOfWeekStartIndexZero = _e === void 0 ? true : _e, _f = _b.monthStartIndexZero, monthStartIndexZero = _f === void 0 ? false : _f, use24HourTimeFormat = _b.use24HourTimeFormat, _g = _b.locale, locale = _g === void 0 ? null : _g, _h = _b.logicalAndDayFields, logicalAndDayFields = _h === void 0 ? false : _h;\n var options = {\n throwExceptionOnParseError: throwExceptionOnParseError,\n verbose: verbose,\n dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,\n monthStartIndexZero: monthStartIndexZero,\n use24HourTimeFormat: use24HourTimeFormat,\n locale: locale,\n logicalAndDayFields: logicalAndDayFields,\n };\n if (options.tzOffset) {\n console.warn(\"'tzOffset' option has been deprecated and is no longer supported.\");\n }\n var descripter = new ExpressionDescriptor(expression, options);\n return descripter.getFullDescription();\n };\n ExpressionDescriptor.initialize = function (localesLoader, defaultLocale) {\n if (defaultLocale === void 0) { defaultLocale = \"en\"; }\n ExpressionDescriptor.specialCharacters = [\"/\", \"-\", \",\", \"*\"];\n ExpressionDescriptor.defaultLocale = defaultLocale;\n localesLoader.load(ExpressionDescriptor.locales);\n };\n ExpressionDescriptor.prototype.getFullDescription = function () {\n var _a, _b;\n var description = \"\";\n try {\n var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero, this.options.monthStartIndexZero);\n this.expressionParts = parser.parse();\n if (this.expressionParts[0] === \"@reboot\") {\n return ((_b = (_a = this.i18n).atReboot) === null || _b === void 0 ? void 0 : _b.call(_a)) || \"Run once, at startup\";\n }\n var timeSegment = this.getTimeOfDayDescription();\n var dayOfMonthDesc = this.getDayOfMonthDescription();\n var monthDesc = this.getMonthDescription();\n var dayOfWeekDesc = this.getDayOfWeekDescription();\n var yearDesc = this.getYearDescription();\n description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc;\n description = this.transformVerbosity(description, !!this.options.verbose);\n description = description.charAt(0).toLocaleUpperCase() + description.substr(1);\n }\n catch (ex) {\n if (!this.options.throwExceptionOnParseError) {\n description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();\n }\n else {\n throw \"\".concat(ex);\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getTimeOfDayDescription = function () {\n var secondsExpression = this.expressionParts[0];\n var minuteExpression = this.expressionParts[1];\n var hourExpression = this.expressionParts[2];\n var description = \"\";\n if (!stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)) {\n description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression);\n }\n else if (!secondsExpression &&\n minuteExpression.indexOf(\"-\") > -1 &&\n !(minuteExpression.indexOf(\",\") > -1) &&\n !(minuteExpression.indexOf(\"/\") > -1) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)) {\n var minuteParts = minuteExpression.split(\"-\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(), this.formatTime(hourExpression, minuteParts[0], \"\"), this.formatTime(hourExpression, minuteParts[1], \"\"));\n }\n else if (!secondsExpression &&\n hourExpression.indexOf(\",\") > -1 &&\n hourExpression.indexOf(\"-\") == -1 &&\n hourExpression.indexOf(\"/\") == -1 &&\n !stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)) {\n var hourParts = hourExpression.split(\",\");\n description += this.i18n.at();\n for (var i = 0; i < hourParts.length; i++) {\n description += \" \";\n description += this.formatTime(hourParts[i], minuteExpression, \"\");\n if (i < hourParts.length - 2) {\n description += \",\";\n }\n if (i == hourParts.length - 2) {\n description += this.i18n.spaceAnd();\n }\n }\n }\n else {\n var secondsDescription = this.getSecondsDescription();\n var minutesDescription = this.getMinutesDescription();\n var hoursDescription = this.getHoursDescription();\n description += secondsDescription;\n if (description && minutesDescription) {\n description += \", \";\n }\n description += minutesDescription;\n if (minutesDescription === hoursDescription) {\n return description;\n }\n if (description && hoursDescription) {\n description += \", \";\n }\n description += hoursDescription;\n }\n return description;\n };\n ExpressionDescriptor.prototype.getSecondsDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[0], this.i18n.everySecond(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Seconds(s), s);\n }, function (s) {\n return _this.i18n.secondsX0ThroughX1PastTheMinute();\n }, function (s) {\n return s == \"0\"\n ? \"\"\n : parseInt(s) < 20\n ? _this.i18n.atX0SecondsPastTheMinute(s)\n : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute(s);\n });\n return description;\n };\n ExpressionDescriptor.prototype.getMinutesDescription = function () {\n var _this = this;\n var secondsExpression = this.expressionParts[0];\n var hourExpression = this.expressionParts[2];\n var description = this.getSegmentDescription(this.expressionParts[1], this.i18n.everyMinute(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Minutes(s), s);\n }, function (s) {\n return _this.i18n.minutesX0ThroughX1PastTheHour();\n }, function (s) {\n try {\n return s == \"0\" && hourExpression.indexOf(\"/\") == -1 && secondsExpression == \"\"\n ? _this.i18n.everyHour()\n : parseInt(s) < 20\n ? _this.i18n.atX0MinutesPastTheHour(s)\n : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour(s);\n }\n catch (e) {\n return _this.i18n.atX0MinutesPastTheHour(s);\n }\n });\n return description;\n };\n ExpressionDescriptor.prototype.getHoursDescription = function () {\n var _this = this;\n var expression = this.expressionParts[2];\n var hourIndex = 0;\n var rangeEndValues = [];\n expression\n .split(\"/\")[0]\n .split(\",\")\n .forEach(function (range) {\n var rangeParts = range.split(\"-\");\n if (rangeParts.length === 2) {\n rangeEndValues.push({ value: rangeParts[1], index: hourIndex + 1 });\n }\n hourIndex += rangeParts.length;\n });\n var evaluationIndex = 0;\n var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) {\n var match = rangeEndValues.find(function (r) { return r.value === s && r.index === evaluationIndex; });\n var isRangeEndWithNonZeroMinute = match && _this.expressionParts[1] !== \"0\";\n evaluationIndex++;\n return isRangeEndWithNonZeroMinute ? _this.formatTime(s, \"59\", \"\") : _this.formatTime(s, \"0\", \"\");\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(s), s);\n }, function (s) {\n return _this.i18n.betweenX0AndX1();\n }, function (s) {\n return _this.i18n.atX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfWeekDescription = function () {\n var _this = this;\n var daysOfWeekNames = this.i18n.daysOfTheWeek();\n var description = null;\n if (this.expressionParts[5] == \"*\") {\n description = \"\";\n }\n else {\n description = this.getSegmentDescription(this.expressionParts[5], this.i18n.commaEveryDay(), function (s, form) {\n var exp = s;\n if (s.indexOf(\"#\") > -1) {\n exp = s.substring(0, s.indexOf(\"#\"));\n }\n else if (s.indexOf(\"L\") > -1) {\n exp = exp.replace(\"L\", \"\");\n }\n var parsedExp = parseInt(exp);\n var description = _this.i18n.daysOfTheWeekInCase\n ? _this.i18n.daysOfTheWeekInCase(form)[parsedExp]\n : daysOfWeekNames[parsedExp];\n if (s.indexOf(\"#\") > -1) {\n var dayOfWeekOfMonthDescription = null;\n var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n var dayOfWeekNumber = s.substring(0, s.indexOf(\"#\"));\n switch (dayOfWeekOfMonthNumber) {\n case \"1\":\n dayOfWeekOfMonthDescription = _this.i18n.first(dayOfWeekNumber);\n break;\n case \"2\":\n dayOfWeekOfMonthDescription = _this.i18n.second(dayOfWeekNumber);\n break;\n case \"3\":\n dayOfWeekOfMonthDescription = _this.i18n.third(dayOfWeekNumber);\n break;\n case \"4\":\n dayOfWeekOfMonthDescription = _this.i18n.fourth(dayOfWeekNumber);\n break;\n case \"5\":\n dayOfWeekOfMonthDescription = _this.i18n.fifth(dayOfWeekNumber);\n break;\n }\n description = dayOfWeekOfMonthDescription + \" \" + description;\n }\n return description;\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(s), s);\n }\n }, function (s) {\n var beginFrom = s.substring(0, s.indexOf(\"-\"));\n var domSpecified = _this.expressionParts[3] != \"*\";\n return domSpecified ? _this.i18n.commaAndX0ThroughX1(beginFrom) : _this.i18n.commaX0ThroughX1(beginFrom);\n }, function (s) {\n var format = null;\n if (s.indexOf(\"#\") > -1) {\n var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n var dayOfWeek = s.substring(0, s.indexOf(\"#\"));\n format = _this.i18n.commaOnThe(dayOfWeekOfMonthNumber, dayOfWeek).trim() + _this.i18n.spaceX0OfTheMonth();\n }\n else if (s.indexOf(\"L\") > -1) {\n format = _this.i18n.commaOnTheLastX0OfTheMonth(s.replace(\"L\", \"\"));\n }\n else {\n var domSpecified = _this.expressionParts[3] != \"*\";\n if (!domSpecified) {\n format = _this.i18n.commaOnlyOnX0(s);\n }\n else if (_this.options.logicalAndDayFields) {\n format = _this.i18n.commaOnlyOnX0(s);\n }\n else {\n format = _this.i18n.commaAndOnX0();\n }\n }\n return format;\n });\n }\n return description;\n };\n ExpressionDescriptor.prototype.getMonthDescription = function () {\n var _this = this;\n var monthNames = this.i18n.monthsOfTheYear();\n var description = this.getSegmentDescription(this.expressionParts[4], \"\", function (s, form) {\n return form && _this.i18n.monthsOfTheYearInCase\n ? _this.i18n.monthsOfTheYearInCase(form)[parseInt(s) - 1]\n : monthNames[parseInt(s) - 1];\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(s), s);\n }\n }, function (s) {\n return _this.i18n.commaMonthX0ThroughMonthX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInMonthX0 ? _this.i18n.commaOnlyInMonthX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfMonthDescription = function () {\n var _this = this;\n var description = null;\n var expression = this.expressionParts[3];\n switch (expression) {\n case \"L\":\n description = this.i18n.commaOnTheLastDayOfTheMonth();\n break;\n case \"WL\":\n case \"LW\":\n description = this.i18n.commaOnTheLastWeekdayOfTheMonth();\n break;\n default:\n var weekDayNumberMatches = expression.match(/(\\d{1,2}W)|(W\\d{1,2})/);\n if (weekDayNumberMatches) {\n var dayNumber = parseInt(weekDayNumberMatches[0].replace(\"W\", \"\"));\n var dayString = dayNumber == 1\n ? this.i18n.firstWeekday()\n : stringUtilities_1.StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString());\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString);\n break;\n }\n else {\n var lastDayOffSetMatches = expression.match(/L-(\\d{1,2})/);\n if (lastDayOffSetMatches) {\n var offSetDays = lastDayOffSetMatches[1];\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(offSetDays), offSetDays);\n break;\n }\n else if (expression == \"*\" && this.expressionParts[5] != \"*\") {\n return \"\";\n }\n else {\n description = this.getSegmentDescription(expression, this.i18n.commaEveryDay(), function (s) {\n return s == \"L\"\n ? _this.i18n.lastDay()\n : _this.i18n.dayX0\n ? stringUtilities_1.StringUtilities.format(_this.i18n.dayX0(), s)\n : s;\n }, function (s) {\n return s == \"1\" ? _this.i18n.commaEveryDay() : _this.i18n.commaEveryX0Days(s);\n }, function (s) {\n return _this.i18n.commaBetweenDayX0AndX1OfTheMonth(s);\n }, function (s) {\n return _this.i18n.commaOnDayX0OfTheMonth(s);\n });\n }\n break;\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getYearDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[6], \"\", function (s) {\n return /^\\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Years(s), s);\n }, function (s) {\n return _this.i18n.commaYearX0ThroughYearX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInYearX0 ? _this.i18n.commaOnlyInYearX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getSegmentDescription = function (expression, allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat) {\n var description = null;\n var doesExpressionContainIncrement = expression.indexOf(\"/\") > -1;\n var doesExpressionContainRange = expression.indexOf(\"-\") > -1;\n var doesExpressionContainMultipleValues = expression.indexOf(\",\") > -1;\n if (!expression) {\n description = \"\";\n }\n else if (expression === \"*\") {\n description = allDescription;\n }\n else if (!doesExpressionContainIncrement && !doesExpressionContainRange && !doesExpressionContainMultipleValues) {\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression));\n }\n else if (doesExpressionContainMultipleValues) {\n var segments = expression.split(\",\");\n var descriptionContent = \"\";\n for (var i = 0; i < segments.length; i++) {\n if (i > 0 && segments.length > 2) {\n descriptionContent += \",\";\n if (i < segments.length - 1) {\n descriptionContent += \" \";\n }\n }\n if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) {\n descriptionContent += \"\".concat(this.i18n.spaceAnd(), \" \");\n }\n if (segments[i].indexOf(\"/\") > -1 || segments[i].indexOf(\"-\") > -1) {\n var isSegmentRangeWithoutIncrement = segments[i].indexOf(\"-\") > -1 && segments[i].indexOf(\"/\") == -1;\n var currentDescriptionContent = this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, isSegmentRangeWithoutIncrement ? this.i18n.commaX0ThroughX1 : getRangeDescriptionFormat, getDescriptionFormat);\n if (isSegmentRangeWithoutIncrement) {\n currentDescriptionContent = currentDescriptionContent.replace(\", \", \"\");\n }\n descriptionContent += currentDescriptionContent;\n }\n else if (!doesExpressionContainIncrement) {\n descriptionContent += getSingleItemDescription(segments[i]);\n }\n else {\n descriptionContent += this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat);\n }\n }\n if (!doesExpressionContainIncrement) {\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), descriptionContent);\n }\n else {\n description = descriptionContent;\n }\n }\n else if (doesExpressionContainIncrement) {\n var segments = expression.split(\"/\");\n description = stringUtilities_1.StringUtilities.format(getIncrementDescriptionFormat(segments[1]), segments[1]);\n if (segments[0].indexOf(\"-\") > -1) {\n var rangeSegmentDescription = this.generateRangeSegmentDescription(segments[0], getRangeDescriptionFormat, getSingleItemDescription);\n if (rangeSegmentDescription.indexOf(\", \") != 0) {\n description += \", \";\n }\n description += rangeSegmentDescription;\n }\n else if (segments[0].indexOf(\"*\") == -1) {\n var rangeItemDescription = stringUtilities_1.StringUtilities.format(getDescriptionFormat(segments[0]), getSingleItemDescription(segments[0]));\n rangeItemDescription = rangeItemDescription.replace(\", \", \"\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription);\n }\n }\n else if (doesExpressionContainRange) {\n description = this.generateRangeSegmentDescription(expression, getRangeDescriptionFormat, getSingleItemDescription);\n }\n return description;\n };\n ExpressionDescriptor.prototype.generateRangeSegmentDescription = function (rangeExpression, getRangeDescriptionFormat, getSingleItemDescription) {\n var description = \"\";\n var rangeSegments = rangeExpression.split(\"-\");\n var rangeSegment1Description = getSingleItemDescription(rangeSegments[0], 1);\n var rangeSegment2Description = getSingleItemDescription(rangeSegments[1], 2);\n var rangeDescriptionFormat = getRangeDescriptionFormat(rangeExpression);\n description += stringUtilities_1.StringUtilities.format(rangeDescriptionFormat, rangeSegment1Description, rangeSegment2Description);\n return description;\n };\n ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) {\n var hourOffset = 0;\n var minuteOffset = 0;\n var hour = parseInt(hourExpression) + hourOffset;\n var minute = parseInt(minuteExpression) + minuteOffset;\n if (minute >= 60) {\n minute -= 60;\n hour += 1;\n }\n else if (minute < 0) {\n minute += 60;\n hour -= 1;\n }\n if (hour >= 24) {\n hour = hour - 24;\n }\n else if (hour < 0) {\n hour = 24 + hour;\n }\n var period = \"\";\n var setPeriodBeforeTime = false;\n if (!this.options.use24HourTimeFormat) {\n setPeriodBeforeTime = !!(this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime());\n period = setPeriodBeforeTime ? \"\".concat(this.getPeriod(hour), \" \") : \" \".concat(this.getPeriod(hour));\n if (hour > 12) {\n hour -= 12;\n }\n if (hour === 0) {\n hour = 12;\n }\n }\n var second = \"\";\n if (secondExpression) {\n second = \":\".concat((\"00\" + secondExpression).substring(secondExpression.length));\n }\n return \"\".concat(setPeriodBeforeTime ? period : \"\").concat((\"00\" + hour.toString()).substring(hour.toString().length), \":\").concat((\"00\" + minute.toString()).substring(minute.toString().length)).concat(second).concat(!setPeriodBeforeTime ? period : \"\");\n };\n ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) {\n if (!useVerboseFormat) {\n description = description.replace(new RegExp(\", \".concat(this.i18n.everyMinute()), \"g\"), \"\");\n description = description.replace(new RegExp(\", \".concat(this.i18n.everyHour()), \"g\"), \"\");\n description = description.replace(new RegExp(this.i18n.commaEveryDay(), \"g\"), \"\");\n description = description.replace(/\\, ?$/, \"\");\n if (this.i18n.conciseVerbosityReplacements) {\n for (var _i = 0, _a = Object.entries(this.i18n.conciseVerbosityReplacements()); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n description = description.replace(new RegExp(key, \"g\"), value);\n }\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getPeriod = function (hour) {\n return hour >= 12 ? (this.i18n.pm && this.i18n.pm()) || \"PM\" : (this.i18n.am && this.i18n.am()) || \"AM\";\n };\n ExpressionDescriptor.locales = {};\n return ExpressionDescriptor;\n}());\nexports.ExpressionDescriptor = ExpressionDescriptor;\n\n\n/***/ }),\n\n/***/ 747:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.enLocaleLoader = void 0;\nvar en_1 = __webpack_require__(486);\nvar enLocaleLoader = (function () {\n function enLocaleLoader() {\n }\n enLocaleLoader.prototype.load = function (availableLocales) {\n availableLocales[\"en\"] = new en_1.en();\n };\n return enLocaleLoader;\n}());\nexports.enLocaleLoader = enLocaleLoader;\n\n\n/***/ }),\n\n/***/ 486:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.en = void 0;\nvar en = (function () {\n function en() {\n }\n en.prototype.atX0SecondsPastTheMinuteGt20 = function () {\n return null;\n };\n en.prototype.atX0MinutesPastTheHourGt20 = function () {\n return null;\n };\n en.prototype.commaMonthX0ThroughMonthX1 = function () {\n return null;\n };\n en.prototype.commaYearX0ThroughYearX1 = function () {\n return null;\n };\n en.prototype.use24HourTimeFormatByDefault = function () {\n return false;\n };\n en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = function () {\n return \"An error occurred when generating the expression description. Check the cron expression syntax.\";\n };\n en.prototype.everyMinute = function () {\n return \"every minute\";\n };\n en.prototype.everyHour = function () {\n return \"every hour\";\n };\n en.prototype.atSpace = function () {\n return \"At \";\n };\n en.prototype.everyMinuteBetweenX0AndX1 = function () {\n return \"Every minute between %s and %s\";\n };\n en.prototype.at = function () {\n return \"At\";\n };\n en.prototype.spaceAnd = function () {\n return \" and\";\n };\n en.prototype.everySecond = function () {\n return \"every second\";\n };\n en.prototype.everyX0Seconds = function () {\n return \"every %s seconds\";\n };\n en.prototype.secondsX0ThroughX1PastTheMinute = function () {\n return \"seconds %s through %s past the minute\";\n };\n en.prototype.atX0SecondsPastTheMinute = function () {\n return \"at %s seconds past the minute\";\n };\n en.prototype.everyX0Minutes = function () {\n return \"every %s minutes\";\n };\n en.prototype.minutesX0ThroughX1PastTheHour = function () {\n return \"minutes %s through %s past the hour\";\n };\n en.prototype.atX0MinutesPastTheHour = function () {\n return \"at %s minutes past the hour\";\n };\n en.prototype.everyX0Hours = function () {\n return \"every %s hours\";\n };\n en.prototype.betweenX0AndX1 = function () {\n return \"between %s and %s\";\n };\n en.prototype.atX0 = function () {\n return \"at %s\";\n };\n en.prototype.commaEveryDay = function () {\n return \", every day\";\n };\n en.prototype.commaEveryX0DaysOfTheWeek = function () {\n return \", every %s days of the week\";\n };\n en.prototype.commaX0ThroughX1 = function () {\n return \", %s through %s\";\n };\n en.prototype.commaAndX0ThroughX1 = function () {\n return \", %s through %s\";\n };\n en.prototype.first = function () {\n return \"first\";\n };\n en.prototype.second = function () {\n return \"second\";\n };\n en.prototype.third = function () {\n return \"third\";\n };\n en.prototype.fourth = function () {\n return \"fourth\";\n };\n en.prototype.fifth = function () {\n return \"fifth\";\n };\n en.prototype.commaOnThe = function () {\n return \", on the \";\n };\n en.prototype.spaceX0OfTheMonth = function () {\n return \" %s of the month\";\n };\n en.prototype.lastDay = function () {\n return \"the last day\";\n };\n en.prototype.commaOnTheLastX0OfTheMonth = function () {\n return \", on the last %s of the month\";\n };\n en.prototype.commaOnlyOnX0 = function () {\n return \", only on %s\";\n };\n en.prototype.commaAndOnX0 = function () {\n return \", and on %s\";\n };\n en.prototype.commaEveryX0Months = function () {\n return \", every %s months\";\n };\n en.prototype.commaOnlyInX0 = function () {\n return \", only in %s\";\n };\n en.prototype.commaOnTheLastDayOfTheMonth = function () {\n return \", on the last day of the month\";\n };\n en.prototype.commaOnTheLastWeekdayOfTheMonth = function () {\n return \", on the last weekday of the month\";\n };\n en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () {\n return \", %s days before the last day of the month\";\n };\n en.prototype.firstWeekday = function () {\n return \"first weekday\";\n };\n en.prototype.weekdayNearestDayX0 = function () {\n return \"weekday nearest day %s\";\n };\n en.prototype.commaOnTheX0OfTheMonth = function () {\n return \", on the %s of the month\";\n };\n en.prototype.commaEveryX0Days = function () {\n return \", every %s days\";\n };\n en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () {\n return \", between day %s and %s of the month\";\n };\n en.prototype.commaOnDayX0OfTheMonth = function () {\n return \", on day %s of the month\";\n };\n en.prototype.commaEveryHour = function () {\n return \", every hour\";\n };\n en.prototype.commaEveryX0Years = function () {\n return \", every %s years\";\n };\n en.prototype.commaStartingX0 = function () {\n return \", starting %s\";\n };\n en.prototype.daysOfTheWeek = function () {\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n };\n en.prototype.monthsOfTheYear = function () {\n return [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n };\n en.prototype.atReboot = function () {\n return \"Run once, at startup\";\n };\n return en;\n}());\nexports.en = en;\n\n\n/***/ }),\n\n/***/ 515:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction assert(value, message) {\n if (!value) {\n throw new Error(message);\n }\n}\nvar RangeValidator = (function () {\n function RangeValidator() {\n }\n RangeValidator.secondRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var second = parseInt(parsed[i], 10);\n assert(second >= 0 && second <= 59, 'seconds part must be >= 0 and <= 59');\n }\n }\n };\n RangeValidator.minuteRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var minute = parseInt(parsed[i], 10);\n assert(minute >= 0 && minute <= 59, 'minutes part must be >= 0 and <= 59');\n }\n }\n };\n RangeValidator.hourRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var hour = parseInt(parsed[i], 10);\n assert(hour >= 0 && hour <= 23, 'hours part must be >= 0 and <= 23');\n }\n }\n };\n RangeValidator.dayOfMonthRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var dayOfMonth = parseInt(parsed[i], 10);\n assert(dayOfMonth >= 1 && dayOfMonth <= 31, 'DOM part must be >= 1 and <= 31');\n }\n }\n };\n RangeValidator.monthRange = function (parse, monthStartIndexZero) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var month = parseInt(parsed[i], 10);\n assert(month >= 1 && month <= 12, monthStartIndexZero ? 'month part must be >= 0 and <= 11' : 'month part must be >= 1 and <= 12');\n }\n }\n };\n RangeValidator.dayOfWeekRange = function (parse, dayOfWeekStartIndexZero) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var dayOfWeek = parseInt(parsed[i], 10);\n assert(dayOfWeek >= 0 && dayOfWeek <= 6, dayOfWeekStartIndexZero ? 'DOW part must be >= 0 and <= 6' : 'DOW part must be >= 1 and <= 7');\n }\n }\n };\n return RangeValidator;\n}());\nexports[\"default\"] = RangeValidator;\n\n\n/***/ }),\n\n/***/ 823:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.StringUtilities = void 0;\nvar StringUtilities = (function () {\n function StringUtilities() {\n }\n StringUtilities.format = function (template) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n return template.replace(/%s/g, function (substring) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return values.shift();\n });\n };\n StringUtilities.containsAny = function (text, searchStrings) {\n return searchStrings.some(function (c) {\n return text.indexOf(c) > -1;\n });\n };\n return StringUtilities;\n}());\nexports.StringUtilities = StringUtilities;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it uses a non-standard name for the exports (exports).\n(() => {\nvar exports = __webpack_exports__;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.toString = void 0;\nvar expressionDescriptor_1 = __webpack_require__(333);\nvar enLocaleLoader_1 = __webpack_require__(747);\nexpressionDescriptor_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader());\nexports[\"default\"] = expressionDescriptor_1.ExpressionDescriptor;\nvar toString = expressionDescriptor_1.ExpressionDescriptor.toString;\nexports.toString = toString;\n\n})();\n\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","import pino from \"pino\";\nimport type { LoggerOptions } from \"./logger_types.js\";\n\nconst createBaseLogger = () => {\n const baseOptions: LoggerOptions = {\n level: \"info\",\n formatters: {\n level: (label) => {\n return { level: label };\n },\n },\n };\n\n return pino(baseOptions);\n};\n\n/**\n * The default logger instance used internally by Balda.\n * To use a custom logger, pass a pino instance to `new Server({ logger })` or `CommandRegistry.setLogger()`.\n */\nexport const logger = createBaseLogger();\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","// 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","/**\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 * Returns undefined if no metadata exists for the target.\n * Use getOrCreateAll() if you want to ensure a Map is returned.\n */\n static getAll(target: any): Map<string | symbol, any> | undefined {\n return this.metadata.get(target);\n }\n\n /**\n * Get all the metadata for the given target, creating an empty Map if none exists.\n * This is useful when you want to iterate over metadata or add new entries.\n */\n static getOrCreateAll(target: any): Map<string | symbol, any> {\n if (!this.metadata.has(target)) {\n this.metadata.set(target, new Map());\n }\n return this.metadata.get(target)!;\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 { 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: ${runtime.type}`);\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 { CommandFlagsAndArgs, CommandOptions } from \"./command_types.js\";\n\n/**\n * Base class for all cli commands.\n * @abstract\n */\nexport abstract class Command {\n private static readonly flagsAndArgs: CommandFlagsAndArgs = {\n flags: parseCliArgsAndFlags().flags,\n args: parseCliArgsAndFlags().args.slice(1),\n };\n\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 loggerPath: \"src/logger.ts\",\n allowUnknownFlags: true,\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[] = this.flagsAndArgs.args;\n\n /**\n * Static flags in order to be validated by decorators. Will be fetched in the command instance.\n */\n static flags: FlagSchema = this.flagsAndArgs.flags;\n\n static logger = logger.child({ scope: this.constructor.name });\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 ` ${colors.flag}loggerPath${colors.reset} ${options?.loggerPath ?? \"src/logger.ts\"}`,\n ` ${colors.flag}allowUnknownFlags${colors.reset} ${(options?.allowUnknownFlags ?? true) ? 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 = allMeta\n ? Array.from(allMeta.values()).filter((meta) => meta.type === \"arg\")\n : [];\n const flagsMeta = allMeta\n ? Array.from(allMeta.values()).filter((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 /**\n * Validates that no unknown flags were provided when allowUnknownFlags is false.\n */\n static readonly validateUnknownFlags = (target: any): void => {\n if (target.options?.allowUnknownFlags !== false) {\n return;\n }\n\n const alwaysAllowed = new Set([\"-h\", \"--help\"]);\n const knownFlags = new Set<string>();\n\n const allMeta = MetadataStore.getAll(target);\n if (allMeta) {\n for (const meta of allMeta.values()) {\n if (meta.type === \"flag\") {\n knownFlags.add(`--${meta.name}`);\n knownFlags.add(`-${meta.name}`);\n knownFlags.add(meta.name);\n if (meta.aliases) {\n const aliases = Array.isArray(meta.aliases)\n ? meta.aliases\n : [meta.aliases];\n for (const alias of aliases) {\n knownFlags.add(`--${alias}`);\n knownFlags.add(`-${alias}`);\n knownFlags.add(alias);\n }\n }\n }\n }\n }\n\n const unknownFlags = Object.keys(target.flags).filter(\n (flag) => !alwaysAllowed.has(flag) && !knownFlags.has(flag),\n );\n\n if (unknownFlags.length) {\n const colors = {\n error: \"\\x1b[0;31m\",\n title: \"\\x1b[1;31m\",\n reset: \"\\x1b[0m\",\n info: \"\\x1b[0;34m\",\n flag: \"\\x1b[0;35m\",\n };\n\n console.error(`${colors.title}❌ Unknown Flags:${colors.reset}`);\n console.error(\"\");\n unknownFlags.forEach((flag) => {\n console.error(\n ` ${colors.error}•${colors.reset} ${colors.flag}${flag}${colors.reset}`,\n );\n });\n console.error(\"\");\n console.error(\n `${colors.info}💡 Tip: Use --help for available flags${colors.reset}`,\n );\n nativeExit.exit(1);\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 {\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\";\nimport type { glob } from \"node:fs/promises\";\nimport { nativeCwd } from \"./native_cwd.js\";\nimport { nativePath } from \"./native_path.js\";\n\nclass NativeFs {\n async glob(...args: Parameters<typeof glob>): Promise<string[]> {\n const fs = await import(\"node:fs/promises\");\n const cwd = nativeCwd.getCwd();\n const cwdPath = nativePath.resolve(\n cwd,\n (args[1] as { cwd?: string })?.cwd ?? \"\",\n );\n const paths: string[] = [];\n for await (const p of fs.glob(...args)) {\n if (typeof p === \"string\") {\n paths.push(nativePath.resolve(cwdPath, p));\n continue;\n }\n\n if (p.isFile()) {\n paths.push(nativePath.resolve(cwdPath, p.name));\n }\n }\n\n return paths;\n }\n\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n const bunFs = await import(\"fs\");\n return bunFs.existsSync(path);\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(\n path: string,\n options?: { encoding?: \"utf8\" },\n ): Promise<Uint8Array | string> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const data = await fs.readFile(path, {\n encoding: options?.encoding ?? null,\n });\n\n if (options?.encoding === \"utf8\") {\n return data as string;\n }\n\n return new Uint8Array(data as Buffer);\n case \"bun\":\n const arrayBuffer = Bun.file(path);\n if (options?.encoding === \"utf8\") {\n return arrayBuffer.text();\n }\n\n return new Uint8Array(await arrayBuffer.arrayBuffer());\n case \"deno\":\n const denoBuffer = await Deno.readFile(path);\n if (options?.encoding === \"utf8\") {\n return new TextDecoder().decode(denoBuffer);\n }\n\n return new Uint8Array(denoBuffer);\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunFs = await import(\"fs/promises\");\n const bunStats = await bunFs.stat(path);\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async streamFile(path: string): Promise<ReadableStream> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n const { Readable } = await import(\"stream\");\n const nodeStream = fs.createReadStream(path);\n return Readable.toWeb(nodeStream) as unknown as ReadableStream;\n\n case \"bun\":\n return Bun.file(path).stream();\n case \"deno\":\n const denoFile = await Deno.open(path);\n return denoFile.readable;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readdir(path: string): Promise<string[]> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"fs/promises\");\n return fs.readdir(path);\n case \"deno\":\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n\n return entries;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","import { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\nimport { createRequire } from \"node:module\";\n\n// Create a require function that works in both ES and CommonJS modules\nexport const requireFn =\n typeof import.meta !== \"undefined\"\n ? createRequire(import.meta.url)\n : (require(\"node:module\").createRequire?.(import.meta?.url ?? __filename) ??\n require);\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 { BaldaError } from \"./balda_error.js\";\n\nexport class Zod4NotInstalledError extends BaldaError {\n constructor() {\n super(\n \"Zod v4 is required with the toJSONSchema() method. Install it with: npm install zod@^4.0.0\",\n );\n }\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class Zod3SchemaUsedError extends BaldaError {\n constructor(error: Error) {\n super(\n \"Failed to convert Zod schema to JSON Schema. \" +\n \"This usually happens when using Zod v3 schemas with Zod v4. \" +\n \"Make sure you're importing from 'zod' (v4) and not 'zod/v3'. \" +\n `Original error: ${error.message}`,\n );\n }\n}\n","/**\n * Manages synchronous loading of the Zod library at runtime.\n * Zod is a peer dependency and only loaded if Zod schemas are used.\n */\nimport type { ZodAny } from \"zod\";\nimport { Zod4NotInstalledError } from \"../errors/zod4_not_installed_error.js\";\nimport { requireFn } from \"../package.js\";\nimport type { JSONSchema } from \"../plugins/swagger/swagger_types.js\";\nimport { Zod3SchemaUsedError } from \"../errors/zod3_schema_used.js\";\n\nexport class ZodLoader {\n private static zodModule: typeof import(\"zod\") | null = null;\n\n /**\n * Cache of objects confirmed as Zod schemas to avoid repeated property checks.\n */\n private static zodSchemaCache = new WeakSet<object>();\n\n /**\n * Synchronously loads the Zod library at runtime.\n * @throws Error if Zod is not installed\n */\n private static load(): typeof import(\"zod\") {\n if (this.zodModule) {\n return this.zodModule;\n }\n\n try {\n this.zodModule = requireFn(\"zod\") as typeof import(\"zod\");\n this.ensureZodV4();\n return this.zodModule;\n } catch (error) {\n throw new Error(\n \"Zod is not installed. Install it with: npm install zod\\n\" +\n \"Zod is a peer dependency required when using Zod schemas for validation.\",\n );\n }\n }\n\n /**\n * Gets the loaded Zod module synchronously.\n * @throws Error if Zod is not installed\n */\n static get(): typeof import(\"zod\") {\n return this.load();\n }\n\n /**\n * Checks if a value is a Zod schema\n * Results are cached in a WeakSet to avoid repeated property lookups\n */\n static isZodSchema(value: any): value is ZodAny {\n try {\n this.load();\n } catch {\n return false;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n // Fast path: check cache first\n if (this.zodSchemaCache.has(value)) {\n return true;\n }\n\n // Slow path: perform full type detection\n const isZod =\n \"_def\" in value &&\n typeof value.parse === \"function\" &&\n typeof value.safeParse === \"function\";\n\n // Cache positive results to avoid repeated property checks\n if (isZod) {\n this.zodSchemaCache.add(value);\n }\n\n return isZod;\n }\n\n /**\n * Ensures that Zod v4 is installed with toJSONSchema support\n * @throws Zod4NotInstalledError if Zod v4 is not installed\n */\n static ensureZodV4(): void {\n const zodModule = this.zodModule?.z;\n if (!zodModule) {\n throw new Zod4NotInstalledError();\n }\n\n if (!(\"toJSONSchema\" in zodModule)) {\n throw new Zod4NotInstalledError();\n }\n }\n\n /**\n * Converts a Zod schema to JSON Schema using Zod v4's toJSONSchema method\n * @param schema - The Zod schema to convert\n * @returns The JSON Schema representation\n * @throws Zod4NotInstalledError if Zod v4 is not installed or toJSONSchema is not available\n * @throws Error if the schema is invalid or incompatible (Example using zod/v3)\n */\n static toJSONSchema(schema: ZodAny): JSONSchema {\n this.load();\n this.ensureZodV4();\n\n const zodModule = this.zodModule?.z;\n if (!zodModule?.toJSONSchema) {\n throw new Zod4NotInstalledError();\n }\n\n if (!schema || typeof schema !== \"object\" || !(\"_def\" in schema)) {\n throw new Error(\n \"Invalid Zod schema provided. Make sure you're using Zod v4 schemas. \" +\n \"If you're importing from 'zod/v3', change to 'zod' or '{ z } from \\\"zod\\\"'.\",\n );\n }\n\n try {\n return zodModule.toJSONSchema(schema) as JSONSchema;\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Cannot read properties of undefined\")\n ) {\n throw new Zod3SchemaUsedError(error);\n }\n throw error;\n }\n }\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class TypeBoxNotInstalledError extends BaldaError {\n constructor() {\n super(\n \"TypeBox is not installed. Install it with: npm install @sinclair/typebox\",\n );\n }\n}\n","/**\n * Manages synchronous loading of the TypeBox library at runtime.\n * TypeBox is a peer dependency and only loaded if TypeBox schemas are used.\n */\nimport type { TSchema } from \"@sinclair/typebox\";\nimport { TypeBoxNotInstalledError } from \"../errors/typebox_not_installed_error.js\";\nimport { requireFn } from \"../package.js\";\n\nexport class TypeBoxLoader {\n private static typeboxModule: typeof import(\"@sinclair/typebox\") | null =\n null;\n\n /**\n * Cache of objects confirmed as TypeBox schemas to avoid repeated symbol lookups.\n */\n private static typeboxSchemaCache = new WeakSet<object>();\n\n /**\n * Synchronously loads the TypeBox library at runtime.\n * @throws TypeBoxNotInstalledError if TypeBox is not installed\n */\n private static load(): typeof import(\"@sinclair/typebox\") {\n if (this.typeboxModule) {\n return this.typeboxModule;\n }\n\n try {\n this.typeboxModule = requireFn(\n \"@sinclair/typebox\",\n ) as typeof import(\"@sinclair/typebox\");\n return this.typeboxModule;\n } catch (error) {\n throw new TypeBoxNotInstalledError();\n }\n }\n\n /**\n * Gets the loaded TypeBox module synchronously.\n * @throws TypeBoxNotInstalledError if TypeBox is not installed\n */\n static get(): typeof import(\"@sinclair/typebox\") {\n return this.load();\n }\n\n /**\n * Checks if a value is a TypeBox schema\n * TypeBox schemas have a [Kind] symbol property\n * Results are cached in a WeakSet to avoid repeated Object.getOwnPropertySymbols calls\n */\n static isTypeBoxSchema(value: any): value is TSchema {\n try {\n this.load();\n } catch {\n return false;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n // Fast path: check cache first\n if (this.typeboxSchemaCache.has(value)) {\n return true;\n }\n\n // Slow path: perform full type detection\n const isTypeBox =\n \"type\" in value &&\n Object.getOwnPropertySymbols(value).some(\n (sym) => sym.toString() === \"Symbol(TypeBox.Kind)\",\n );\n\n // Cache positive results to avoid repeated symbol lookups\n if (isTypeBox) {\n this.typeboxSchemaCache.add(value);\n }\n\n return isTypeBox;\n }\n}\n","import { Ajv } from \"ajv\";\nimport fastJson, { AnySchema } from \"fast-json-stringify\";\nimport type { JSONSchema } from \"../plugins/swagger/swagger_types.js\";\nimport type { AjvCompileReturnType } from \"./ajv_types.js\";\nimport type {\n FastJsonStringifyFunction,\n SerializerFunction,\n} from \"./fast_json_stringify_types.js\";\nimport type { RequestSchema } from \"../decorators/validation/validate_types.js\";\nimport { ZodLoader } from \"../validator/zod_loader.js\";\nimport { TypeBoxLoader } from \"../validator/typebox_loader.js\";\n\n/**\n * Global state for the AJV instance used for JSON Schema validation.\n *\n * ## Custom AJV Instance\n *\n * You can provide your own AJV instance with custom configuration:\n *\n * ```typescript\n * import { Ajv } from 'ajv';\n * import { Server } from 'balda';\n *\n * const customAjv = new Ajv({\n * validateSchema: false, // Required - must be false and will be ignored if provided\n * strict: false, // Required - must be false and will be ignored if provided\n * allErrors: true, // Optional - your custom config\n * // ... other custom options\n * });\n *\n * // Add custom formats, keywords, etc.\n * customAjv.addFormat('custom-format', /regex/);\n *\n * // Pass the custom AJV instance to the server constructor\n * new Server({\n * ajvInstance: customAjv,\n * });\n * ```\n *\n * **IMPORTANT:** The following options are required and must not be changed:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n */\nexport class AjvStateManager {\n static ajv: Ajv = new Ajv({\n validateSchema: false, // Required - do not change\n strict: false, // Required - do not change\n });\n\n /**\n * WeakMap to store fast-json-stringify serializers.\n * Keyed by schema object reference for automatic garbage collection.\n */\n private static serializerCache = new WeakMap<\n object,\n Map<string, FastJsonStringifyFunction>\n >();\n\n /**\n * WeakMap to cache complete route response serializers.\n * Avoids per-request iteration and type detection.\n */\n private static responseSerializersCache = new WeakMap<\n Record<number, RequestSchema>,\n Map<number, FastJsonStringifyFunction>\n >();\n\n /**\n * Counter for generating unique symbol-based keys.\n */\n private static refCounter = 0;\n\n /**\n * WeakMap to track schema objects and their generated keys.\n * Prevents duplicate key generation for the same schema object.\n */\n private static schemaKeyCache = new WeakMap<object, Map<string, string>>();\n\n /**\n * Sets the global AJV instance to use for JSON Schema validation.\n * @param ajv - The AJV instance to set as global.\n * @warning The AJV instance must be configured with the following options:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n * Changing these values will cause validation errors and break Zod schema support.\n */\n static setGlobalInstance(ajv: Ajv) {\n this.ajv = ajv;\n this.ajv.opts.strict = false;\n this.ajv.opts.validateSchema = false;\n }\n\n /**\n * Generates a stable key for a schema object with a specific prefix.\n * Same schema + prefix combination always returns the same key.\n *\n * @param schema - The schema object\n * @param prefix - Context prefix (e.g., \"validator\", \"serializer\", \"json_schema\")\n * @returns A string key for use with Ajv\n */\n private static getSchemaKey(schema: object, prefix: string): string {\n let prefixMap = this.schemaKeyCache.get(schema);\n if (!prefixMap) {\n prefixMap = new Map<string, string>();\n this.schemaKeyCache.set(schema, prefixMap);\n }\n\n let key = prefixMap.get(prefix);\n if (!key) {\n key = `${prefix}_${++this.refCounter}`;\n prefixMap.set(prefix, key);\n }\n return key;\n }\n\n /**\n * Gets or compiles a validator from a JSON schema.\n * Uses Ajv's internal caching via addSchema/getSchema.\n *\n * @param jsonSchema - The JSON Schema to compile\n * @param prefix - Context prefix for cache key generation\n * @returns Compiled Ajv validator function\n */\n static getOrCompileValidator(\n jsonSchema: JSONSchema,\n prefix: string,\n ): AjvCompileReturnType {\n const key = this.getSchemaKey(jsonSchema, prefix);\n\n const cached = this.ajv.getSchema(key);\n if (cached) {\n return cached;\n }\n\n this.ajv.addSchema(jsonSchema, key);\n const compiled = this.ajv.getSchema(key);\n if (!compiled) {\n throw new Error(`Failed to compile schema with key: ${key}`);\n }\n return compiled;\n }\n\n /**\n * Gets or creates a fast-json-stringify serializer for a schema.\n * Uses WeakMap for caching to allow garbage collection.\n *\n * @param jsonSchema - The JSON Schema to compile\n * @param prefix - Context prefix for cache key generation\n * @returns Compiled serializer function or null\n */\n static getOrCreateSerializer(\n jsonSchema: JSONSchema,\n prefix: string,\n ): SerializerFunction {\n if (!jsonSchema || typeof jsonSchema !== \"object\") {\n return null;\n }\n\n let prefixMap = this.serializerCache.get(jsonSchema);\n if (!prefixMap) {\n prefixMap = new Map<string, FastJsonStringifyFunction>();\n this.serializerCache.set(jsonSchema, prefixMap);\n }\n\n const cached = prefixMap.get(prefix);\n if (cached) {\n return cached;\n }\n\n try {\n const serializer = fastJson(jsonSchema as AnySchema, {\n ajv: this.ajv.opts,\n });\n\n prefixMap.set(prefix, serializer);\n return serializer;\n } catch {\n return null;\n }\n }\n\n /**\n * Gets or creates serializers for all response schemas.\n */\n static getOrCreateResponseSerializers(\n schemas?: Record<number, RequestSchema>,\n ): Map<number, FastJsonStringifyFunction> | null {\n if (!schemas) {\n return null;\n }\n\n // Check cache first\n const cached = this.responseSerializersCache.get(schemas);\n if (cached) {\n return cached;\n }\n\n // Cache miss: resolve all serializers\n const resolved = new Map<number, FastJsonStringifyFunction>();\n for (const [statusCode, schema] of Object.entries(schemas)) {\n const status = Number(statusCode);\n\n // Determine schema type and get serializer\n let serializer: FastJsonStringifyFunction | null = null;\n\n if (ZodLoader.isZodSchema(schema)) {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n serializer = this.getOrCreateSerializer(\n jsonSchema,\n \"fast_stringify_zod\",\n );\n } else if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n serializer = this.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_typebox\",\n );\n } else if (typeof schema === \"object\" && schema !== null) {\n serializer = this.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_json\",\n );\n }\n\n if (serializer) {\n resolved.set(status, serializer);\n }\n }\n\n // Cache for future requests\n this.responseSerializersCache.set(schemas, resolved);\n return resolved;\n }\n\n /**\n * Stores a JSON schema in Ajv for later retrieval.\n * Used primarily for Swagger documentation.\n *\n * @param jsonSchema - The JSON Schema to store\n * @param prefix - Context prefix for cache key generation\n */\n static storeJsonSchema(jsonSchema: JSONSchema, prefix: string): void {\n const key = this.getSchemaKey(jsonSchema, prefix);\n if (!this.ajv.getSchema(key)) {\n this.ajv.addSchema(jsonSchema, key);\n }\n }\n\n /**\n * Retrieves a stored JSON schema from Ajv.\n *\n * @param schemaObject - The original schema object used as reference\n * @param prefix - Context prefix used when storing\n * @returns The JSON schema if found, undefined otherwise\n */\n static getJsonSchema(\n schemaObject: object,\n prefix: string,\n ): JSONSchema | undefined {\n const prefixMap = this.schemaKeyCache.get(schemaObject);\n if (!prefixMap) {\n return undefined;\n }\n\n const key = prefixMap.get(prefix);\n if (!key) {\n return undefined;\n }\n\n const schema = this.ajv.getSchema(key);\n return schema?.schema as JSONSchema | undefined;\n }\n\n /**\n * Clears all cached schemas and serializers.\n * Useful for testing or memory management.\n */\n static clearAllCaches(): void {\n this.ajv = new Ajv({\n validateSchema: false,\n strict: false,\n });\n this.serializerCache = new WeakMap<\n object,\n Map<string, FastJsonStringifyFunction>\n >();\n this.schemaKeyCache = new WeakMap<object, Map<string, string>>();\n this.refCounter = 0;\n }\n\n /**\n * Gets the total number of schemas stored in Ajv.\n * @returns Count of stored schemas\n */\n static getSchemaCount(): number {\n return Object.keys(this.ajv.schemas).length;\n }\n\n /**\n * Gets statistics about the schema cache.\n * @returns Cache statistics including schema count\n */\n static getCacheStats(): {\n schemaCount: number;\n totalRefsCreated: number;\n } {\n return {\n schemaCount: this.getSchemaCount(),\n totalRefsCreated: this.refCounter,\n };\n }\n}\n","import { AjvStateManager } from \"./ajv.js\";\nimport { TypeBoxLoader } from \"../validator/typebox_loader.js\";\nimport { ZodLoader } from \"../validator/zod_loader.js\";\nimport type { RequestSchema } from \"../decorators/validation/validate_types.js\";\nimport type { RouteResponseSchemas } from \"../server/router/router_type.js\";\nimport type { JSONSchema } from \"../plugins/swagger/swagger_types.js\";\nimport { logger } from \"../logger/logger.js\";\n\n/**\n * Compiles and caches a schema validator using Ajv's internal storage.\n * Handles Zod, TypeBox, and plain JSON schemas.\n * Also caches the JSON Schema (OpenAPI format) and fast-json-stringify serializer.\n *\n * This is the single source of truth for schema compilation used by:\n * - Inline routes (server.get() with swagger.responses)\n * - Decorator routes (@serialize decorator)\n *\n * @param schema - The schema to compile (Zod, TypeBox, or plain JSON schema)\n */\nexport const compileAndCacheValidator = (schema: RequestSchema): void => {\n if (ZodLoader.isZodSchema(schema)) {\n try {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n AjvStateManager.storeJsonSchema(jsonSchema, \"serialize_zod\");\n AjvStateManager.getOrCompileValidator(jsonSchema, \"serialize_zod\");\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"zod\",\n context: \"serialize_decorator\",\n },\n \"Failed to compile Zod schema for validation. Schema may contain unsupported types (e.g., z.instanceof). Runtime validation will still work, but Swagger documentation may be incomplete.\",\n );\n return;\n }\n return;\n }\n\n if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n try {\n AjvStateManager.storeJsonSchema(\n schema as JSONSchema,\n \"serialize_typebox\",\n );\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"serialize_typebox\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"typebox\",\n context: \"serialize_decorator\",\n },\n \"Failed to compile TypeBox schema for validation. Schema may be invalid or use unsupported features.\",\n );\n return;\n }\n return;\n }\n\n if (typeof schema === \"object\" && schema !== null) {\n try {\n AjvStateManager.storeJsonSchema(schema as JSONSchema, \"serialize_json\");\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"serialize_json\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"json\",\n context: \"serialize_decorator\",\n },\n \"Failed to compile JSON schema for validation. Schema may be invalid or malformed.\",\n );\n return;\n }\n return;\n }\n\n // Fallback for primitives or edge cases\n const cacheKey = JSON.stringify(schema);\n try {\n const primitiveSchema = { type: typeof schema };\n AjvStateManager.storeJsonSchema(\n primitiveSchema as JSONSchema,\n `serialize_primitive_${cacheKey}`,\n );\n AjvStateManager.getOrCompileValidator(\n primitiveSchema as JSONSchema,\n `serialize_primitive_${cacheKey}`,\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"primitive\",\n cacheKey,\n context: \"serialize_decorator\",\n },\n \"Failed to compile schema for validation. Schema format may be unsupported.\",\n );\n }\n};\n\n/**\n * Compiles and caches a request schema validator using runtime validation cache keys.\n * Uses the same cache keys as Request.validate() for consistency.\n * Does NOT compile serializers (those are for output only).\n * Also caches the JSON Schema (OpenAPI format) for Swagger documentation.\n *\n * @param schema - The schema to compile (Zod, TypeBox, or plain JSON schema)\n */\nexport const compileRequestValidator = (schema: RequestSchema): void => {\n if (ZodLoader.isZodSchema(schema)) {\n try {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n AjvStateManager.storeJsonSchema(jsonSchema, \"zod_schema\");\n AjvStateManager.getOrCompileValidator(jsonSchema, \"zod_schema\");\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"zod\",\n context: \"request_validation\",\n },\n \"Failed to compile Zod schema for request validation. Schema may contain unsupported types (e.g., z.instanceof). Swagger documentation may be incomplete.\",\n );\n return;\n }\n return;\n }\n\n if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n try {\n AjvStateManager.storeJsonSchema(schema as JSONSchema, \"typebox_schema\");\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"typebox_schema\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"typebox\",\n context: \"request_validation\",\n },\n \"Failed to compile TypeBox schema for request validation. Schema may be invalid or use unsupported features.\",\n );\n return;\n }\n return;\n }\n\n if (typeof schema === \"object\" && schema !== null) {\n try {\n AjvStateManager.storeJsonSchema(schema as JSONSchema, \"json_schema\");\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"json_schema\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"json\",\n context: \"request_validation\",\n },\n \"Failed to compile JSON schema for request validation. Schema may be invalid or malformed.\",\n );\n return;\n }\n return;\n }\n\n // Fallback for primitives or edge cases\n const cacheKey = JSON.stringify(schema);\n try {\n const primitiveSchema = { type: typeof schema };\n AjvStateManager.storeJsonSchema(\n primitiveSchema as JSONSchema,\n `primitive_${cacheKey}`,\n );\n AjvStateManager.getOrCompileValidator(\n primitiveSchema as JSONSchema,\n `primitive_${cacheKey}`,\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"primitive\",\n cacheKey,\n context: \"request_validation\",\n },\n \"Failed to compile schema for request validation. Schema format may be unsupported.\",\n );\n }\n};\n\n/**\n * Compiles and caches request body and query validators.\n * Uses the same cache keys as Request.validate() for consistency.\n * This allows runtime validation to hit the pre-compiled cache.\n *\n * This function is called during route registration to pre-compile\n * request schemas defined in swagger options.\n *\n * @param requestBody - Optional request body schema\n * @param query - Optional query parameters schema\n */\nexport const compileRequestSchemas = (\n requestBody?: RequestSchema,\n query?: RequestSchema,\n): void => {\n if (requestBody) {\n compileRequestValidator(requestBody);\n }\n\n if (query) {\n compileRequestValidator(query);\n }\n};\n\n/**\n * Compiles and caches response schemas for a route.\n * Stores both validators and serializers using Ajv's storage.\n *\n * This function is called:\n * - During inline route registration (server.get() with swagger.responses)\n * - During decorator route registration (@controller with @serialize)\n *\n * @param responses - Map of status codes to schemas\n * @returns A map of status codes to schemas, or undefined if no responses\n */\nexport const compileResponseSchemas = (\n responses?: Record<number, RequestSchema>,\n): RouteResponseSchemas | undefined => {\n if (!responses || Object.keys(responses).length === 0) {\n return undefined;\n }\n\n const responseSchemas: RouteResponseSchemas = {};\n\n for (const [statusCode, schema] of Object.entries(responses)) {\n const status = Number(statusCode);\n responseSchemas[status] = schema as RequestSchema;\n\n // Compile and cache validator using Ajv\n compileAndCacheValidator(schema as RequestSchema);\n\n // Pre-compile serializer for this response schema\n if (ZodLoader.isZodSchema(schema)) {\n try {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n AjvStateManager.getOrCreateSerializer(jsonSchema, \"fast_stringify_zod\");\n } catch {\n // Silently skip serializer compilation if schema conversion fails\n }\n } else if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n AjvStateManager.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_typebox\",\n );\n } else if (typeof schema === \"object\" && schema !== null) {\n AjvStateManager.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_json\",\n );\n }\n }\n\n return responseSchemas;\n};\n","import type { RequestSchema } from \"../../decorators/validation/validate_types.js\";\nimport type { ServerRouteHandler } from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\n\n/**\n * Wraps a route handler with validation logic for body, query, or all request data.\n * Similar to the @validate decorator but for inline route definitions.\n *\n * @param handler - The original route handler\n * @param options - Validation schemas for body, query, or all\n * @returns Wrapped handler that validates and injects typed parameters\n */\nexport const wrapHandlerWithValidation = (\n handler: ServerRouteHandler,\n options: {\n body?: RequestSchema;\n query?: RequestSchema;\n all?: RequestSchema;\n },\n): ServerRouteHandler => {\n return async function (req: Request, res: Response, ...args: any[]) {\n try {\n const newArgs: any[] = [req, res, ...args];\n\n if (options.body) {\n const validatedBody = req.validate(options.body, true);\n newArgs.push(validatedBody);\n }\n\n if (options.query) {\n const validatedQuery = req.validateQuery(options.query, true);\n newArgs.push(validatedQuery);\n }\n\n if (options.all) {\n const validatedAll = req.validateAll(options.all, true);\n newArgs.push(validatedAll);\n }\n\n return handler(...(newArgs as Parameters<typeof handler>));\n } catch (error) {\n return res.badRequest(error);\n }\n };\n};\n","import type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\nimport type { Params, Route, RouteResponseSchemas } from \"./router_type.js\";\nimport type { ExtractParams } from \"./path_types.js\";\nimport {\n compileResponseSchemas,\n compileRequestSchemas,\n} from \"../../ajv/schema_compiler.js\";\nimport type {\n ControllerHandler,\n ServerHandlerReturnType,\n StandardMethodOptions,\n} from \"../server_types.js\";\nimport type { RequestSchema } from \"../../decorators/validation/validate_types.js\";\nimport { wrapHandlerWithValidation } from \"./validation_wrapper.js\";\n\nclass Node {\n staticChildren: Map<string, Node>;\n paramChild: { node: Node; name: string } | null;\n wildcardChild: Node | null;\n middleware: ServerRouteMiddleware[] | null;\n handler: ((req: Request, res: Response) => void) | null;\n paramName: string | null;\n\n constructor() {\n this.staticChildren = new Map();\n this.paramChild = null;\n this.wildcardChild = null;\n this.middleware = null;\n this.handler = null;\n this.paramName = null;\n }\n}\n\ntype CachedRoute = {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n responseSchemas?: RouteResponseSchemas;\n};\n\n/**\n * Singleton that handles the routing of requests to the appropriate handler(s).\n */\nexport class Router {\n private trees: Map<string, Node>;\n private routes: Route[];\n private middlewares: ServerRouteMiddleware[];\n private basePath: string;\n private staticRouteCache: Map<string, CachedRoute>;\n private handlerResponseSchemas: Map<ServerRouteHandler, RouteResponseSchemas>;\n\n /**\n * Create a new router with an optional base path and default middlewares.\n * Base path is normalized so it never produces duplicate slashes and never ends with a trailing slash (except root).\n * @param basePath - The base path for all routes in this router\n * @param middlewares - Default middlewares to apply to all routes\n * @param options - Router configuration options\n */\n constructor(\n basePath: string = \"\",\n middlewares: ServerRouteMiddleware[] = [],\n ) {\n this.trees = new Map();\n this.routes = [];\n this.middlewares = middlewares;\n this.basePath = this.normalizeBasePath(basePath);\n this.staticRouteCache = new Map();\n this.handlerResponseSchemas = new Map();\n }\n\n /** Returns a shallow copy of all registered routes. */\n getRoutes(): Route[] {\n return this.routes.slice();\n }\n\n /**\n * Add or update a route\n * @internal\n */\n addOrUpdate(\n method: HttpMethod,\n path: string,\n middleware: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n validationSchemas?: {\n body?: RequestSchema;\n query?: RequestSchema;\n all?: RequestSchema;\n },\n swaggerOptions?: SwaggerRouteOptions,\n ): void {\n method = method.toUpperCase() as HttpMethod;\n const clean = path.split(\"?\")[0];\n\n // Pre-compile request schemas (body and query) for faster validation\n compileRequestSchemas(validationSchemas?.body, validationSchemas?.query);\n\n // Compile and cache response schemas from swagger options\n const responseSchemas = compileResponseSchemas(swaggerOptions?.responses);\n\n // Wrap handler with validation logic if schemas are provided\n const hasValidation =\n validationSchemas &&\n (validationSchemas.body ||\n validationSchemas.query ||\n validationSchemas.all);\n const finalHandler = hasValidation\n ? wrapHandlerWithValidation(handler, validationSchemas!)\n : handler;\n\n // Only store validationSchemas if at least one schema is defined\n const finalValidationSchemas = hasValidation\n ? validationSchemas\n : undefined;\n\n // ensure root exists\n let root = this.trees.get(method);\n if (!root) {\n root = new Node();\n this.trees.set(method, root);\n }\n\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n\n let isStaticRoute = true;\n const paramNames: string[] = [];\n\n let node = root;\n for (const seg of segments) {\n if (seg === \"*\") {\n isStaticRoute = false;\n if (!node.wildcardChild) {\n node.wildcardChild = new Node();\n }\n node = node.wildcardChild;\n break;\n }\n\n if (seg.startsWith(\":\")) {\n isStaticRoute = false;\n const name = seg.slice(1);\n paramNames.push(name);\n if (!node.paramChild) {\n node.paramChild = { node: new Node(), name };\n }\n node = node.paramChild.node;\n continue;\n }\n\n // static segment\n if (!node.staticChildren.has(seg)) {\n node.staticChildren.set(seg, new Node());\n }\n node = node.staticChildren.get(seg)!;\n }\n\n // assign middleware & handler (use wrapped handler if validation is enabled)\n node.middleware = middleware;\n node.handler = finalHandler;\n\n if (paramNames.length > 0) {\n node.paramName = paramNames.join(\",\");\n }\n\n // Store response schemas in O(1) lookup map for dynamic routes\n // Use the original handler as key (before wrapping) for consistency\n if (responseSchemas) {\n this.handlerResponseSchemas.set(handler, responseSchemas);\n }\n\n if (isStaticRoute) {\n const normalizedPath = \"/\" + trimmed;\n const cacheKey = `${method}:${normalizedPath}`;\n this.staticRouteCache.set(cacheKey, {\n middleware,\n handler: finalHandler,\n params: {},\n responseSchemas,\n });\n } else {\n // If updating a route that was previously static, clear old cache entry\n const normalizedPath =\n \"/\" + trimmed.replace(/:[^/]+/g, \"\").replace(/\\/+/g, \"/\");\n const cacheKey = `${method}:${normalizedPath}`;\n this.staticRouteCache.delete(cacheKey);\n }\n\n // upsert in registry\n const idx = this.routes.findIndex(\n (r) => r.method === method && r.path === path,\n );\n if (idx !== -1) {\n this.routes[idx].middleware = middleware;\n this.routes[idx].handler = finalHandler;\n this.routes[idx].swaggerOptions = swaggerOptions;\n this.routes[idx].responseSchemas = responseSchemas;\n this.routes[idx].validationSchemas = finalValidationSchemas;\n return;\n }\n\n this.routes.push({\n method,\n path,\n middleware,\n handler: finalHandler,\n swaggerOptions,\n responseSchemas,\n validationSchemas: finalValidationSchemas,\n });\n }\n\n /**\n * Find the matching route for the given HTTP method and path.\n * Returns the resolved middleware chain, handler, extracted params, and response schemas; or null if not found.\n * Uses O(1) cache lookup for static routes, falls back to O(k) tree traversal for dynamic routes.\n */\n find(\n method: string,\n rawPath: string,\n ): {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n responseSchemas?: RouteResponseSchemas;\n } | null {\n method = method.toUpperCase();\n\n // O(1) lookup for static routes\n let pathWithoutQuery = rawPath;\n const queryIndex = rawPath.indexOf(\"?\");\n if (queryIndex !== -1) {\n pathWithoutQuery = rawPath.substring(0, queryIndex);\n }\n const cacheKey = `${method}:${pathWithoutQuery}`;\n const cachedRoute = this.staticRouteCache.get(cacheKey);\n if (cachedRoute) {\n return cachedRoute;\n }\n\n // fall back to O(k) tree traversal for dynamic routes\n const root = this.trees.get(method);\n if (!root) {\n return null;\n }\n\n const trimmed = pathWithoutQuery.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n const params: Params = {};\n\n let node = root;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n\n if (node.staticChildren.has(seg)) {\n node = node.staticChildren.get(seg)!;\n continue;\n }\n\n if (node.paramChild) {\n params[node.paramChild.name] = seg;\n node = node.paramChild.node;\n continue;\n }\n\n if (node.wildcardChild) {\n params[\"*\"] = segments.slice(i).join(\"/\");\n node = node.wildcardChild;\n break;\n }\n\n return null;\n }\n\n if (!node.handler || !node.middleware) {\n return null;\n }\n\n // O(1) lookup for response schemas using handler map\n const responseSchemas = this.handlerResponseSchemas.get(node.handler);\n\n return {\n middleware: node.middleware,\n handler: node.handler,\n params,\n responseSchemas,\n };\n }\n\n /**\n * Private helper method to register a route with the given HTTP method.\n * Handles middleware detection, path joining, and swagger options merging.\n * @internal\n */\n private extractOptionsAndHandler(\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): {\n middlewares: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n body?: RequestSchema;\n query?: RequestSchema;\n all?: RequestSchema;\n swaggerOptions?: SwaggerRouteOptions;\n } {\n if (typeof optionsOrHandler === \"function\") {\n return {\n middlewares: [],\n handler: optionsOrHandler as ServerRouteHandler,\n swaggerOptions: undefined,\n };\n }\n\n const options = optionsOrHandler as StandardMethodOptions;\n const middlewares = Array.isArray(options.middlewares)\n ? options.middlewares\n : options.middlewares\n ? [options.middlewares]\n : [];\n\n return {\n middlewares,\n handler: maybeHandler!,\n body: options.body,\n query: options.query,\n all: options.all,\n swaggerOptions: options.swagger,\n };\n }\n\n /**\n * Register a GET route under this router's base path with type-safe path parameters.\n */\n get<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n get<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: ControllerHandler<TPath>,\n ): void;\n get<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"GET\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a POST route under this router's base path with type-safe path parameters.\n */\n post<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n post<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: ControllerHandler<TPath>,\n ): void;\n post<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"POST\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a PATCH route under this router's base path with type-safe path parameters.\n */\n patch<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n patch<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: ControllerHandler<TPath>,\n ): void;\n patch<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"PATCH\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a PUT route under this router's base path with type-safe path parameters.\n */\n put<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n put<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: ControllerHandler<TPath>,\n ): void;\n put<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"PUT\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a DELETE route under this router's base path with type-safe path parameters.\n */\n delete<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n delete<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: ControllerHandler<TPath>,\n ): void;\n delete<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"DELETE\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register an OPTIONS route under this router's base path with type-safe path parameters.\n */\n options<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n options<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: ControllerHandler<TPath>,\n ): void;\n options<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"OPTIONS\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register an HEAD route under this router's base path with type-safe path parameters.\n */\n head<TPath extends string = string>(\n path: TPath,\n handler: (\n req: Request<ExtractParams<TPath>>,\n res: Response,\n ...args: any[]\n ) => ServerHandlerReturnType,\n ): void;\n head<TPath extends string = string>(\n path: TPath,\n options: StandardMethodOptions,\n handler: (\n req: Request<ExtractParams<TPath>>,\n res: Response,\n ...args: any[]\n ) => ServerHandlerReturnType,\n ): void;\n head<TPath extends string = string>(\n path: TPath,\n optionsOrHandler:\n | StandardMethodOptions\n | ((\n req: Request<ExtractParams<TPath>>,\n res: Response,\n ...args: any[]\n ) => ServerHandlerReturnType),\n maybeHandler?: (\n req: Request<ExtractParams<TPath>>,\n res: Response,\n ...args: any[]\n ) => ServerHandlerReturnType,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"HEAD\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Create a grouped router that shares a base path and middlewares.\n * The callback receives a child router where routes are defined; routes\n * are then merged back into the parent with the composed base path and middlewares.\n */\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: Router) => void,\n ): void;\n group(path: string, cb: (router: Router) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: Router) => void),\n maybeCb?: (router: Router) => void,\n ): void {\n const groupMiddlewares = Array.isArray(middlewareOrCb)\n ? middlewareOrCb\n : typeof middlewareOrCb === \"function\"\n ? []\n : middlewareOrCb\n ? [middlewareOrCb]\n : [];\n const cb = (\n Array.isArray(middlewareOrCb)\n ? maybeCb\n : typeof middlewareOrCb === \"function\"\n ? (middlewareOrCb as (router: Router) => void)\n : undefined\n ) as ((router: Router) => void) | undefined;\n\n const childBase = this.joinPath(path);\n const child = new Router(childBase, [\n ...this.middlewares,\n ...groupMiddlewares,\n ]);\n cb?.(child);\n for (const r of child.getRoutes()) {\n this.addOrUpdate(\n r.method as HttpMethod,\n r.path,\n r.middleware,\n r.handler,\n r.validationSchemas,\n r.swaggerOptions,\n );\n }\n }\n\n /**\n * Apply global middlewares to all routes\n * @param middlewares - The middlewares to apply\n * @internal\n */\n applyGlobalMiddlewaresToAllRoutes(\n middlewares: ServerRouteMiddleware[],\n ): void {\n for (const route of this.routes) {\n const updatedMiddleware = [...middlewares, ...(route.middleware || [])];\n this.addOrUpdate(\n route.method as HttpMethod,\n route.path,\n updatedMiddleware,\n route.handler,\n );\n }\n }\n\n private normalizeBasePath(path: string): string {\n if (!path) {\n return \"\";\n }\n\n let normalized = path.replace(/\\s+/g, \"\");\n normalized = normalized.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n\n if (normalized.length > 1) {\n normalized = normalized.replace(/\\/+$/g, \"\");\n }\n\n return normalized;\n }\n\n private joinPath(path: string): string {\n const parts = [this.basePath, path].filter(\n (v) => typeof v === \"string\" && v.length > 0,\n ) as string[];\n let joined = parts.join(\"/\");\n joined = joined.replace(/\\/+/g, \"/\");\n if (!joined.startsWith(\"/\")) {\n joined = \"/\" + joined;\n }\n if (joined.length > 1) {\n joined = joined.replace(/\\/+$/g, \"\");\n }\n return joined;\n }\n\n /**\n * Clears all registered routes (useful for testing or hot reload scenarios)\n * @internal\n */\n clearRoutes(): void {\n this.routes = [];\n this.staticRouteCache.clear();\n this.handlerResponseSchemas.clear();\n this.trees.clear();\n }\n}\n\n/** Main singleton router instance */\nexport const router = new Router();\n","import { nativeFs } from \"../runtime/native_fs.js\";\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 { router } from \"../server/router/router.js\";\nimport { cronUIInstance } from \"./cron-ui.js\";\nimport {\n CronSchedule,\n CronScheduleParams,\n CronUIOptions,\n} from \"./cron.types.js\";\n\nexport class CronService {\n static scheduledJobs: CronSchedule[] = [];\n static logger = logger.child({ scope: \"CronService\" });\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 this.logger.info(\"Scheduling cron jobs\");\n if (!this.scheduledJobs.length) {\n this.logger.info(\"No cron jobs to schedule\");\n return;\n }\n\n for (const { name, args } of this.scheduledJobs) {\n this.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 this.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 this.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 nativeFs.glob(pattern, {\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 this.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\nexport const cronUi = async (cronUIOptions?: CronUIOptions) => {\n if (!cronUIOptions || cronUIOptions.path.length === 0) {\n throw new BaldaError(\"Cron UI path is required\");\n }\n\n const html = await cronUIInstance.generate();\n\n router.addOrUpdate(\"GET\", cronUIOptions.path, [], (_req, res) => {\n res.html(html);\n });\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 const loggerTemplate = this.getLoggerTemplate();\n this.logger.info(`Creating logger.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/logger.${ext}`,\n new TextEncoder().encode(loggerTemplate),\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\";\nimport { logger } from \"./logger.js\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n logger,\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 imports.push('import { logger } from \"./logger.js\";');\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 logger.info(\\`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 static getLoggerTemplate() {\n return `import pino from \"pino\";\nimport { CommandRegistry } from \"../command_registry.js\";\n\nexport const logger = pino({ level: \"info\" });\nCommandRegistry.setLogger(logger);\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 { 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\";\nimport { nativeFs } from \"../runtime/native_fs.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 static logger = logger.child({ scope: \"QueueService\" });\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 this.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 this.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 this.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 this.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 this.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 this.logger.info(`Subscribing to custom queue: ${topic}`);\n await pubsub.subscribe(topic, handler);\n }\n\n this.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 nativeFs.glob(pattern, {\n cwd: nativeCwd.getCwd(),\n });\n\n this.logger.info(`Pattern \"${pattern}\" matched ${files.length} file(s)`);\n allFiles.push(...files);\n }\n\n if (allFiles.length === 0) {\n this.logger.warn(\"No files matched the provided patterns\");\n return;\n }\n\n this.logger.info(`Importing ${allFiles.length} queue handler file(s)`);\n\n await Promise.all(\n allFiles.map(async (file) => {\n this.logger.debug(`Importing: ${file}`);\n await import(file).catch((error) => {\n this.logger.error(`Error importing queue handler: ${file}`);\n this.logger.error(error);\n if (options.throwOnError) {\n throw error;\n }\n });\n }),\n );\n\n this.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 type { Logger } from \"pino\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { nativePath } from \"../runtime/native_path.js\";\nimport { 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\";\nimport { nativeFs } from \"../runtime/native_fs.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 loggerPath = \"src/logger.ts\";\n static logger = logger.child({ scope: \"CommandRegistry\" });\n\n /**\n * Override the default logger used by CommandRegistry and all Command subclasses.\n * @param customLogger - A pino Logger instance\n */\n static setLogger(customLogger: Logger) {\n CommandRegistry.logger = customLogger.child({ scope: \"CommandRegistry\" });\n Command.logger = customLogger.child({ scope: \"Command\" });\n }\n\n /**\n * Dynamically imports the logger file and sets it as the logger for all commands.\n * The file must export a named `logger` that is a pino Logger instance.\n * @param overridePath - Optional path override (e.g. from CommandOptions.loggerPath). Falls back to CommandRegistry.loggerPath.\n */\n static async loadLogger(overridePath?: string): Promise<void> {\n const loggerPath = overridePath || CommandRegistry.loggerPath;\n try {\n const mod = await import(nativePath.join(nativeCwd.getCwd(), loggerPath));\n if (mod.logger) {\n CommandRegistry.setLogger(mod.logger);\n }\n } catch {\n CommandRegistry.logger.debug(\n `Could not load logger from ${loggerPath}, using default logger`,\n );\n }\n }\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 getLogger() {\n return CommandRegistry.logger;\n }\n\n setLogger(logger: Logger) {\n CommandRegistry.logger = logger.child({ scope: \"CommandRegistry\" });\n Command.logger = logger.child({ scope: \"Command\" });\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 nativeFs.glob(commandsPattern, {\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 // Load user's logger from loggerPath\n await CommandRegistry.loadLogger(commandClass.options?.loggerPath);\n\n // Check if the command has the help flag\n commandClass.handleHelpFlag(commandClass.flags);\n\n // Validate unknown flags\n commandClass.validateUnknownFlags(commandClass);\n\n // Validate the command context\n commandClass.validateContext(commandClass);\n\n // Run custom validation if provided\n if (commandClass.options?.validate) {\n const isValid = await commandClass.options.validate(commandClass);\n if (!isValid) {\n console.error(\"Command validation failed\");\n nativeExit.exit(1);\n return;\n }\n }\n\n // Handle the command\n await commandClass.handle();\n\n // Exit the process if the command is not keepAlive\n const keepAlive =\n (CommandClass as unknown as typeof Command).options?.keepAlive ?? false;\n if (!keepAlive) {\n nativeExit.exit(0);\n }\n};\n\nif (typeof process !== \"undefined\") {\n // Try to run CLI without ts-node first (for js files)\n cli().catch(async (err) => {\n if (\n err?.message?.includes(\"SyntaxError\") ||\n err?.code === \"ERR_UNKNOWN_FILE_EXTENSION\"\n ) {\n try {\n const { register } = await import(\"node:module\");\n register(\"ts-node/esm\", import.meta.url);\n cli().catch((retryErr) => {\n CommandRegistry.logger.error(retryErr);\n process.exit(1);\n });\n } catch (registerErr) {\n CommandRegistry.logger.error(\n `Failed to register ts-node/esm, you need to install it in your project in order to use typescript in the cli\\ntry running: \\`npm install -D ts-node\\``,\n );\n process.exit(1);\n }\n } else {\n CommandRegistry.logger.error(err);\n process.exit(1);\n }\n });\n} else {\n cli().catch((err) => {\n CommandRegistry.logger.error(err);\n nativeExit.exit(1);\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../node_modules/cronstrue/dist/cronstrue.js","../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/runtime/native_path.ts","../src/metadata_store.ts","../src/decorators/command/arg.ts","../src/runtime/native_exit.ts","../src/commands/base_command.ts","../src/decorators/command/flag.ts","../src/runtime/native_fs.ts","../src/package.ts","../src/commands/base_commands/build_command.ts","../src/errors/balda_error.ts","../src/errors/zod3_schema_used.ts","../src/errors/zod4_not_installed_error.ts","../src/validator/zod_loader.ts","../src/errors/typebox_not_installed_error.ts","../src/validator/typebox_loader.ts","../src/ajv/ajv.ts","../src/ajv/schema_compiler.ts","../src/server/router/validation_wrapper.ts","../src/server/router/router.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","NativePath","inputPath","path","paths","nativePath","MetadataStore","target","propertyKey","VALIDATION_ERROR_SYMBOL","options","currentCommandName","argName","argValue","errorChain","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","alwaysAllowed","knownFlags","alias","unknownFlags","error","index","errorNumber","errorType","errorName","flagDecorator","primaryFlagName","flagAliases","allFlagVariants","resolvedFlagValue","flagVariant","possibleNames","flagName","rawValue","val","stringVal","NativeFs","fs","cwd","cwdPath","p","data","arrayBuffer","denoBuffer","stats","bunStats","denoStats","Readable","nodeStream","entries","entry","nativeFs","requireFn","createRequire","__require","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","Zod3SchemaUsedError","Zod4NotInstalledError","ZodLoader","isZod","zodModule","schema","TypeBoxNotInstalledError","TypeBoxLoader","isTypeBox","sym","AjvStateManager","Ajv","ajv","prefix","prefixMap","key","jsonSchema","cached","compiled","serializer","fastJson","schemas","resolved","statusCode","status","schemaObject","compileAndCacheValidator","cacheKey","primitiveSchema","compileRequestValidator","compileRequestSchemas","requestBody","query","compileResponseSchemas","responses","responseSchemas","wrapHandlerWithValidation","handler","req","res","newArgs","validatedBody","validatedQuery","validatedAll","Node","Router","_Router","basePath","middlewares","method","middleware","validationSchemas","swaggerOptions","clean","hasValidation","finalHandler","finalValidationSchemas","root","trimmed","segments","isStaticRoute","paramNames","node","seg","normalizedPath","idx","r","rawPath","pathWithoutQuery","queryIndex","cachedRoute","params","optionsOrHandler","maybeHandler","fullPath","body","all","combined","middlewareOrCb","maybeCb","groupMiddlewares","cb","childBase","child","route","updatedMiddleware","normalized","joined","v","CronService","nodeCronModule","context","cronJobPatterns","allFiles","pattern","files","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","rej","swaggerPath","swaggerJsonUrl","openApiSpec","response","serverWithClose","tempSpecPath","outputDir","commandParts","InitCommand","devDependenciesCommand","uninstalledDevDeps","uninstalledMqtt","uninstalledCron","uninstalledGraphql","ext","serverTemplate","indexTemplate","loggerTemplate","mqttDir","mqttConfigTemplate","cronDir","cronConfigTemplate","graphqlDir","graphqlConfigTemplate","imports","services","importsBlock","servicesBlock","InitMailerCommand","uninstalledDeps","configTemplate","hasTemplate","InitQueueCommand","KeyGenerateCommand","keyType","publicKey","privateKey","crypto","publicKeyName","privateKeyName","keyName","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","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","customLogger","overridePath","loggerPath","commandsPattern","commandFiles","register","commandFile","module","groupByCategory","displayCategorizedCommands","cli","CommandClass","replacement","retryErr"],"mappings":"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","file":"cli.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"cronstrue\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"cronstrue\"] = factory();\n\telse\n\t\troot[\"cronstrue\"] = factory();\n})(globalThis, () => {\nreturn /******/ (() => { // webpackBootstrap\n/******/ \t\"use strict\";\n/******/ \tvar __webpack_modules__ = ({\n\n/***/ 949:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.CronParser = void 0;\nvar rangeValidator_1 = __webpack_require__(515);\nvar CronParser = (function () {\n function CronParser(expression, dayOfWeekStartIndexZero, monthStartIndexZero) {\n if (dayOfWeekStartIndexZero === void 0) { dayOfWeekStartIndexZero = true; }\n if (monthStartIndexZero === void 0) { monthStartIndexZero = false; }\n this.expression = expression;\n this.dayOfWeekStartIndexZero = dayOfWeekStartIndexZero;\n this.monthStartIndexZero = monthStartIndexZero;\n }\n CronParser.prototype.parse = function () {\n var _a;\n var parsed;\n var expression = (_a = this.expression) !== null && _a !== void 0 ? _a : '';\n if (expression === \"@reboot\") {\n parsed = [\"@reboot\", \"\", \"\", \"\", \"\", \"\", \"\"];\n return parsed;\n }\n else if (expression.startsWith('@')) {\n var special = this.parseSpecial(this.expression);\n parsed = this.extractParts(special);\n }\n else {\n parsed = this.extractParts(this.expression);\n }\n this.normalize(parsed);\n this.validate(parsed);\n return parsed;\n };\n CronParser.prototype.parseSpecial = function (expression) {\n var specialExpressions = {\n '@yearly': '0 0 1 1 *',\n '@annually': '0 0 1 1 *',\n '@monthly': '0 0 1 * *',\n '@weekly': '0 0 * * 0',\n '@daily': '0 0 * * *',\n '@midnight': '0 0 * * *',\n '@hourly': '0 * * * *',\n '@reboot': '@reboot'\n };\n var special = specialExpressions[expression];\n if (!special) {\n throw new Error('Unknown special expression.');\n }\n return special;\n };\n CronParser.prototype.extractParts = function (expression) {\n if (!this.expression) {\n throw new Error(\"cron expression is empty\");\n }\n var parsed = expression.trim().split(/[ ]+/);\n for (var i = 0; i < parsed.length; i++) {\n if (parsed[i].includes(\",\")) {\n var arrayElement = parsed[i]\n .split(\",\")\n .map(function (item) { return item.trim(); })\n .filter(function (item) { return item !== \"\"; })\n .map(function (item) { return (!isNaN(Number(item)) ? Number(item) : item); })\n .filter(function (item) { return item !== null && item !== \"\"; });\n if (arrayElement.length === 0) {\n arrayElement.push(\"*\");\n }\n arrayElement.sort(function (a, b) { return (a !== null && b !== null ? a - b : 0); });\n parsed[i] = arrayElement.map(function (item) { return (item !== null ? item.toString() : \"\"); }).join(\",\");\n }\n }\n if (parsed.length < 5) {\n throw new Error(\"Expression has only \".concat(parsed.length, \" part\").concat(parsed.length == 1 ? \"\" : \"s\", \". At least 5 parts are required.\"));\n }\n else if (parsed.length == 5) {\n parsed.unshift(\"\");\n parsed.push(\"\");\n }\n else if (parsed.length == 6) {\n var isYearWithNoSecondsPart = /\\d{4}$/.test(parsed[5]) || parsed[4] == \"?\" || parsed[2] == \"?\";\n if (isYearWithNoSecondsPart) {\n parsed.unshift(\"\");\n }\n else {\n parsed.push(\"\");\n }\n }\n else if (parsed.length > 7) {\n throw new Error(\"Expression has \".concat(parsed.length, \" parts; too many!\"));\n }\n return parsed;\n };\n CronParser.prototype.normalize = function (expressionParts) {\n var _this = this;\n expressionParts[3] = expressionParts[3].replace(\"?\", \"*\");\n expressionParts[5] = expressionParts[5].replace(\"?\", \"*\");\n expressionParts[2] = expressionParts[2].replace(\"?\", \"*\");\n if (expressionParts[0].indexOf(\"0/\") == 0) {\n expressionParts[0] = expressionParts[0].replace(\"0/\", \"*/\");\n }\n if (expressionParts[1].indexOf(\"0/\") == 0) {\n expressionParts[1] = expressionParts[1].replace(\"0/\", \"*/\");\n }\n if (expressionParts[2].indexOf(\"0/\") == 0) {\n expressionParts[2] = expressionParts[2].replace(\"0/\", \"*/\");\n }\n if (expressionParts[3].indexOf(\"1/\") == 0) {\n expressionParts[3] = expressionParts[3].replace(\"1/\", \"*/\");\n }\n if (expressionParts[4].indexOf(\"1/\") == 0) {\n expressionParts[4] = expressionParts[4].replace(\"1/\", \"*/\");\n }\n if (expressionParts[6].indexOf(\"1/\") == 0) {\n expressionParts[6] = expressionParts[6].replace(\"1/\", \"*/\");\n }\n expressionParts[5] = expressionParts[5].replace(/(^\\d)|([^#/\\s]\\d)/g, function (t) {\n var dowDigits = t.replace(/\\D/, \"\");\n var dowDigitsAdjusted = dowDigits;\n if (_this.dayOfWeekStartIndexZero) {\n if (dowDigits == \"7\") {\n dowDigitsAdjusted = \"0\";\n }\n }\n else {\n dowDigitsAdjusted = (parseInt(dowDigits) - 1).toString();\n }\n return t.replace(dowDigits, dowDigitsAdjusted);\n });\n if (expressionParts[5] == \"L\") {\n expressionParts[5] = \"6\";\n }\n if (expressionParts[3] == \"?\") {\n expressionParts[3] = \"*\";\n }\n if (expressionParts[3].indexOf(\"W\") > -1 &&\n (expressionParts[3].indexOf(\",\") > -1 || expressionParts[3].indexOf(\"-\") > -1)) {\n throw new Error(\"The 'W' character can be specified only when the day-of-month is a single day, not a range or list of days.\");\n }\n var days = {\n SUN: 0,\n MON: 1,\n TUE: 2,\n WED: 3,\n THU: 4,\n FRI: 5,\n SAT: 6,\n };\n for (var day in days) {\n expressionParts[5] = expressionParts[5].replace(new RegExp(day, \"gi\"), days[day].toString());\n }\n expressionParts[4] = expressionParts[4].replace(/(^\\d{1,2})|([^#/\\s]\\d{1,2})/g, function (t) {\n var dowDigits = t.replace(/\\D/, \"\");\n var dowDigitsAdjusted = dowDigits;\n if (_this.monthStartIndexZero) {\n dowDigitsAdjusted = (parseInt(dowDigits) + 1).toString();\n }\n return t.replace(dowDigits, dowDigitsAdjusted);\n });\n var months = {\n JAN: 1,\n FEB: 2,\n MAR: 3,\n APR: 4,\n MAY: 5,\n JUN: 6,\n JUL: 7,\n AUG: 8,\n SEP: 9,\n OCT: 10,\n NOV: 11,\n DEC: 12,\n };\n for (var month in months) {\n expressionParts[4] = expressionParts[4].replace(new RegExp(month, \"gi\"), months[month].toString());\n }\n if (expressionParts[0] == \"0\") {\n expressionParts[0] = \"\";\n }\n if (!/\\*|\\-|\\,|\\//.test(expressionParts[2]) &&\n (/\\*|\\//.test(expressionParts[1]) || /\\*|\\//.test(expressionParts[0]))) {\n expressionParts[2] += \"-\".concat(expressionParts[2]);\n }\n for (var i = 0; i < expressionParts.length; i++) {\n if (expressionParts[i].indexOf(\",\") != -1) {\n expressionParts[i] =\n expressionParts[i]\n .split(\",\")\n .filter(function (str) { return str !== \"\"; })\n .join(\",\") || \"*\";\n }\n if (expressionParts[i] == \"*/1\") {\n expressionParts[i] = \"*\";\n }\n if (expressionParts[i].indexOf(\"/\") > -1 && !/^\\*|\\-|\\,/.test(expressionParts[i])) {\n var stepRangeThrough = null;\n switch (i) {\n case 4:\n stepRangeThrough = \"12\";\n break;\n case 5:\n stepRangeThrough = \"6\";\n break;\n case 6:\n stepRangeThrough = \"9999\";\n break;\n default:\n stepRangeThrough = null;\n break;\n }\n if (stepRangeThrough !== null) {\n var parts = expressionParts[i].split(\"/\");\n expressionParts[i] = \"\".concat(parts[0], \"-\").concat(stepRangeThrough, \"/\").concat(parts[1]);\n }\n }\n }\n };\n CronParser.prototype.validate = function (parsed) {\n var standardCronPartCharacters = \"0-9,\\\\-*\\/\";\n this.validateOnlyExpectedCharactersFound(parsed[0], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[1], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[2], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[3], \"0-9,\\\\-*\\/LW\");\n this.validateOnlyExpectedCharactersFound(parsed[4], standardCronPartCharacters);\n this.validateOnlyExpectedCharactersFound(parsed[5], \"0-9,\\\\-*\\/L#\");\n this.validateOnlyExpectedCharactersFound(parsed[6], standardCronPartCharacters);\n this.validateAnyRanges(parsed);\n };\n CronParser.prototype.validateAnyRanges = function (parsed) {\n rangeValidator_1.default.secondRange(parsed[0]);\n rangeValidator_1.default.minuteRange(parsed[1]);\n rangeValidator_1.default.hourRange(parsed[2]);\n rangeValidator_1.default.dayOfMonthRange(parsed[3]);\n rangeValidator_1.default.monthRange(parsed[4], this.monthStartIndexZero);\n rangeValidator_1.default.dayOfWeekRange(parsed[5], this.dayOfWeekStartIndexZero);\n };\n CronParser.prototype.validateOnlyExpectedCharactersFound = function (cronPart, allowedCharsExpression) {\n var invalidChars = cronPart.match(new RegExp(\"[^\".concat(allowedCharsExpression, \"]+\"), \"gi\"));\n if (invalidChars && invalidChars.length) {\n throw new Error(\"Expression contains invalid values: '\".concat(invalidChars.toString(), \"'\"));\n }\n };\n return CronParser;\n}());\nexports.CronParser = CronParser;\n\n\n/***/ }),\n\n/***/ 333:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ExpressionDescriptor = void 0;\nvar stringUtilities_1 = __webpack_require__(823);\nvar cronParser_1 = __webpack_require__(949);\nvar ExpressionDescriptor = (function () {\n function ExpressionDescriptor(expression, options) {\n this.expression = expression;\n this.options = options;\n this.expressionParts = new Array(5);\n if (!this.options.locale && ExpressionDescriptor.defaultLocale) {\n this.options.locale = ExpressionDescriptor.defaultLocale;\n }\n if (!ExpressionDescriptor.locales[this.options.locale]) {\n var fallBackLocale = Object.keys(ExpressionDescriptor.locales)[0];\n console.warn(\"Locale '\".concat(this.options.locale, \"' could not be found; falling back to '\").concat(fallBackLocale, \"'.\"));\n this.options.locale = fallBackLocale;\n }\n this.i18n = ExpressionDescriptor.locales[this.options.locale];\n if (options.use24HourTimeFormat === undefined) {\n options.use24HourTimeFormat = this.i18n.use24HourTimeFormatByDefault();\n }\n }\n ExpressionDescriptor.toString = function (expression, _a) {\n var _b = _a === void 0 ? {} : _a, _c = _b.throwExceptionOnParseError, throwExceptionOnParseError = _c === void 0 ? true : _c, _d = _b.verbose, verbose = _d === void 0 ? false : _d, _e = _b.dayOfWeekStartIndexZero, dayOfWeekStartIndexZero = _e === void 0 ? true : _e, _f = _b.monthStartIndexZero, monthStartIndexZero = _f === void 0 ? false : _f, use24HourTimeFormat = _b.use24HourTimeFormat, _g = _b.locale, locale = _g === void 0 ? null : _g, _h = _b.logicalAndDayFields, logicalAndDayFields = _h === void 0 ? false : _h;\n var options = {\n throwExceptionOnParseError: throwExceptionOnParseError,\n verbose: verbose,\n dayOfWeekStartIndexZero: dayOfWeekStartIndexZero,\n monthStartIndexZero: monthStartIndexZero,\n use24HourTimeFormat: use24HourTimeFormat,\n locale: locale,\n logicalAndDayFields: logicalAndDayFields,\n };\n if (options.tzOffset) {\n console.warn(\"'tzOffset' option has been deprecated and is no longer supported.\");\n }\n var descripter = new ExpressionDescriptor(expression, options);\n return descripter.getFullDescription();\n };\n ExpressionDescriptor.initialize = function (localesLoader, defaultLocale) {\n if (defaultLocale === void 0) { defaultLocale = \"en\"; }\n ExpressionDescriptor.specialCharacters = [\"/\", \"-\", \",\", \"*\"];\n ExpressionDescriptor.defaultLocale = defaultLocale;\n localesLoader.load(ExpressionDescriptor.locales);\n };\n ExpressionDescriptor.prototype.getFullDescription = function () {\n var _a, _b;\n var description = \"\";\n try {\n var parser = new cronParser_1.CronParser(this.expression, this.options.dayOfWeekStartIndexZero, this.options.monthStartIndexZero);\n this.expressionParts = parser.parse();\n if (this.expressionParts[0] === \"@reboot\") {\n return ((_b = (_a = this.i18n).atReboot) === null || _b === void 0 ? void 0 : _b.call(_a)) || \"Run once, at startup\";\n }\n var timeSegment = this.getTimeOfDayDescription();\n var dayOfMonthDesc = this.getDayOfMonthDescription();\n var monthDesc = this.getMonthDescription();\n var dayOfWeekDesc = this.getDayOfWeekDescription();\n var yearDesc = this.getYearDescription();\n description += timeSegment + dayOfMonthDesc + dayOfWeekDesc + monthDesc + yearDesc;\n description = this.transformVerbosity(description, !!this.options.verbose);\n description = description.charAt(0).toLocaleUpperCase() + description.substr(1);\n }\n catch (ex) {\n if (!this.options.throwExceptionOnParseError) {\n description = this.i18n.anErrorOccuredWhenGeneratingTheExpressionD();\n }\n else {\n throw \"\".concat(ex);\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getTimeOfDayDescription = function () {\n var secondsExpression = this.expressionParts[0];\n var minuteExpression = this.expressionParts[1];\n var hourExpression = this.expressionParts[2];\n var description = \"\";\n if (!stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters) &&\n !stringUtilities_1.StringUtilities.containsAny(secondsExpression, ExpressionDescriptor.specialCharacters)) {\n description += this.i18n.atSpace() + this.formatTime(hourExpression, minuteExpression, secondsExpression);\n }\n else if (!secondsExpression &&\n minuteExpression.indexOf(\"-\") > -1 &&\n !(minuteExpression.indexOf(\",\") > -1) &&\n !(minuteExpression.indexOf(\"/\") > -1) &&\n !stringUtilities_1.StringUtilities.containsAny(hourExpression, ExpressionDescriptor.specialCharacters)) {\n var minuteParts = minuteExpression.split(\"-\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.everyMinuteBetweenX0AndX1(), this.formatTime(hourExpression, minuteParts[0], \"\"), this.formatTime(hourExpression, minuteParts[1], \"\"));\n }\n else if (!secondsExpression &&\n hourExpression.indexOf(\",\") > -1 &&\n hourExpression.indexOf(\"-\") == -1 &&\n hourExpression.indexOf(\"/\") == -1 &&\n !stringUtilities_1.StringUtilities.containsAny(minuteExpression, ExpressionDescriptor.specialCharacters)) {\n var hourParts = hourExpression.split(\",\");\n description += this.i18n.at();\n for (var i = 0; i < hourParts.length; i++) {\n description += \" \";\n description += this.formatTime(hourParts[i], minuteExpression, \"\");\n if (i < hourParts.length - 2) {\n description += \",\";\n }\n if (i == hourParts.length - 2) {\n description += this.i18n.spaceAnd();\n }\n }\n }\n else {\n var secondsDescription = this.getSecondsDescription();\n var minutesDescription = this.getMinutesDescription();\n var hoursDescription = this.getHoursDescription();\n description += secondsDescription;\n if (description && minutesDescription) {\n description += \", \";\n }\n description += minutesDescription;\n if (minutesDescription === hoursDescription) {\n return description;\n }\n if (description && hoursDescription) {\n description += \", \";\n }\n description += hoursDescription;\n }\n return description;\n };\n ExpressionDescriptor.prototype.getSecondsDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[0], this.i18n.everySecond(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Seconds(s), s);\n }, function (s) {\n return _this.i18n.secondsX0ThroughX1PastTheMinute();\n }, function (s) {\n return s == \"0\"\n ? \"\"\n : parseInt(s) < 20\n ? _this.i18n.atX0SecondsPastTheMinute(s)\n : _this.i18n.atX0SecondsPastTheMinuteGt20() || _this.i18n.atX0SecondsPastTheMinute(s);\n });\n return description;\n };\n ExpressionDescriptor.prototype.getMinutesDescription = function () {\n var _this = this;\n var secondsExpression = this.expressionParts[0];\n var hourExpression = this.expressionParts[2];\n var description = this.getSegmentDescription(this.expressionParts[1], this.i18n.everyMinute(), function (s) {\n return s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Minutes(s), s);\n }, function (s) {\n return _this.i18n.minutesX0ThroughX1PastTheHour();\n }, function (s) {\n try {\n return s == \"0\" && hourExpression.indexOf(\"/\") == -1 && secondsExpression == \"\"\n ? _this.i18n.everyHour()\n : parseInt(s) < 20\n ? _this.i18n.atX0MinutesPastTheHour(s)\n : _this.i18n.atX0MinutesPastTheHourGt20() || _this.i18n.atX0MinutesPastTheHour(s);\n }\n catch (e) {\n return _this.i18n.atX0MinutesPastTheHour(s);\n }\n });\n return description;\n };\n ExpressionDescriptor.prototype.getHoursDescription = function () {\n var _this = this;\n var expression = this.expressionParts[2];\n var hourIndex = 0;\n var rangeEndValues = [];\n expression\n .split(\"/\")[0]\n .split(\",\")\n .forEach(function (range) {\n var rangeParts = range.split(\"-\");\n if (rangeParts.length === 2) {\n rangeEndValues.push({ value: rangeParts[1], index: hourIndex + 1 });\n }\n hourIndex += rangeParts.length;\n });\n var evaluationIndex = 0;\n var description = this.getSegmentDescription(expression, this.i18n.everyHour(), function (s) {\n var match = rangeEndValues.find(function (r) { return r.value === s && r.index === evaluationIndex; });\n var isRangeEndWithNonZeroMinute = match && _this.expressionParts[1] !== \"0\";\n evaluationIndex++;\n return isRangeEndWithNonZeroMinute ? _this.formatTime(s, \"59\", \"\") : _this.formatTime(s, \"0\", \"\");\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.everyX0Hours(s), s);\n }, function (s) {\n return _this.i18n.betweenX0AndX1();\n }, function (s) {\n return _this.i18n.atX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfWeekDescription = function () {\n var _this = this;\n var daysOfWeekNames = this.i18n.daysOfTheWeek();\n var description = null;\n if (this.expressionParts[5] == \"*\") {\n description = \"\";\n }\n else {\n description = this.getSegmentDescription(this.expressionParts[5], this.i18n.commaEveryDay(), function (s, form) {\n var exp = s;\n if (s.indexOf(\"#\") > -1) {\n exp = s.substring(0, s.indexOf(\"#\"));\n }\n else if (s.indexOf(\"L\") > -1) {\n exp = exp.replace(\"L\", \"\");\n }\n var parsedExp = parseInt(exp);\n var description = _this.i18n.daysOfTheWeekInCase\n ? _this.i18n.daysOfTheWeekInCase(form)[parsedExp]\n : daysOfWeekNames[parsedExp];\n if (s.indexOf(\"#\") > -1) {\n var dayOfWeekOfMonthDescription = null;\n var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n var dayOfWeekNumber = s.substring(0, s.indexOf(\"#\"));\n switch (dayOfWeekOfMonthNumber) {\n case \"1\":\n dayOfWeekOfMonthDescription = _this.i18n.first(dayOfWeekNumber);\n break;\n case \"2\":\n dayOfWeekOfMonthDescription = _this.i18n.second(dayOfWeekNumber);\n break;\n case \"3\":\n dayOfWeekOfMonthDescription = _this.i18n.third(dayOfWeekNumber);\n break;\n case \"4\":\n dayOfWeekOfMonthDescription = _this.i18n.fourth(dayOfWeekNumber);\n break;\n case \"5\":\n dayOfWeekOfMonthDescription = _this.i18n.fifth(dayOfWeekNumber);\n break;\n }\n description = dayOfWeekOfMonthDescription + \" \" + description;\n }\n return description;\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0DaysOfTheWeek(s), s);\n }\n }, function (s) {\n var beginFrom = s.substring(0, s.indexOf(\"-\"));\n var domSpecified = _this.expressionParts[3] != \"*\";\n return domSpecified ? _this.i18n.commaAndX0ThroughX1(beginFrom) : _this.i18n.commaX0ThroughX1(beginFrom);\n }, function (s) {\n var format = null;\n if (s.indexOf(\"#\") > -1) {\n var dayOfWeekOfMonthNumber = s.substring(s.indexOf(\"#\") + 1);\n var dayOfWeek = s.substring(0, s.indexOf(\"#\"));\n format = _this.i18n.commaOnThe(dayOfWeekOfMonthNumber, dayOfWeek).trim() + _this.i18n.spaceX0OfTheMonth();\n }\n else if (s.indexOf(\"L\") > -1) {\n format = _this.i18n.commaOnTheLastX0OfTheMonth(s.replace(\"L\", \"\"));\n }\n else {\n var domSpecified = _this.expressionParts[3] != \"*\";\n if (!domSpecified) {\n format = _this.i18n.commaOnlyOnX0(s);\n }\n else if (_this.options.logicalAndDayFields) {\n format = _this.i18n.commaOnlyOnX0(s);\n }\n else {\n format = _this.i18n.commaAndOnX0();\n }\n }\n return format;\n });\n }\n return description;\n };\n ExpressionDescriptor.prototype.getMonthDescription = function () {\n var _this = this;\n var monthNames = this.i18n.monthsOfTheYear();\n var description = this.getSegmentDescription(this.expressionParts[4], \"\", function (s, form) {\n return form && _this.i18n.monthsOfTheYearInCase\n ? _this.i18n.monthsOfTheYearInCase(form)[parseInt(s) - 1]\n : monthNames[parseInt(s) - 1];\n }, function (s) {\n if (parseInt(s) == 1) {\n return \"\";\n }\n else {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Months(s), s);\n }\n }, function (s) {\n return _this.i18n.commaMonthX0ThroughMonthX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInMonthX0 ? _this.i18n.commaOnlyInMonthX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getDayOfMonthDescription = function () {\n var _this = this;\n var description = null;\n var expression = this.expressionParts[3];\n switch (expression) {\n case \"L\":\n description = this.i18n.commaOnTheLastDayOfTheMonth();\n break;\n case \"WL\":\n case \"LW\":\n description = this.i18n.commaOnTheLastWeekdayOfTheMonth();\n break;\n default:\n var weekDayNumberMatches = expression.match(/(\\d{1,2}W)|(W\\d{1,2})/);\n if (weekDayNumberMatches) {\n var dayNumber = parseInt(weekDayNumberMatches[0].replace(\"W\", \"\"));\n var dayString = dayNumber == 1\n ? this.i18n.firstWeekday()\n : stringUtilities_1.StringUtilities.format(this.i18n.weekdayNearestDayX0(), dayNumber.toString());\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaOnTheX0OfTheMonth(), dayString);\n break;\n }\n else {\n var lastDayOffSetMatches = expression.match(/L-(\\d{1,2})/);\n if (lastDayOffSetMatches) {\n var offSetDays = lastDayOffSetMatches[1];\n description = stringUtilities_1.StringUtilities.format(this.i18n.commaDaysBeforeTheLastDayOfTheMonth(offSetDays), offSetDays);\n break;\n }\n else if (expression == \"*\" && this.expressionParts[5] != \"*\") {\n return \"\";\n }\n else {\n description = this.getSegmentDescription(expression, this.i18n.commaEveryDay(), function (s) {\n return s == \"L\"\n ? _this.i18n.lastDay()\n : _this.i18n.dayX0\n ? stringUtilities_1.StringUtilities.format(_this.i18n.dayX0(), s)\n : s;\n }, function (s) {\n return s == \"1\" ? _this.i18n.commaEveryDay() : _this.i18n.commaEveryX0Days(s);\n }, function (s) {\n return _this.i18n.commaBetweenDayX0AndX1OfTheMonth(s);\n }, function (s) {\n return _this.i18n.commaOnDayX0OfTheMonth(s);\n });\n }\n break;\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getYearDescription = function () {\n var _this = this;\n var description = this.getSegmentDescription(this.expressionParts[6], \"\", function (s) {\n return /^\\d+$/.test(s) ? new Date(parseInt(s), 1).getFullYear().toString() : s;\n }, function (s) {\n return stringUtilities_1.StringUtilities.format(_this.i18n.commaEveryX0Years(s), s);\n }, function (s) {\n return _this.i18n.commaYearX0ThroughYearX1() || _this.i18n.commaX0ThroughX1();\n }, function (s) {\n return _this.i18n.commaOnlyInYearX0 ? _this.i18n.commaOnlyInYearX0() : _this.i18n.commaOnlyInX0();\n });\n return description;\n };\n ExpressionDescriptor.prototype.getSegmentDescription = function (expression, allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat) {\n var description = null;\n var doesExpressionContainIncrement = expression.indexOf(\"/\") > -1;\n var doesExpressionContainRange = expression.indexOf(\"-\") > -1;\n var doesExpressionContainMultipleValues = expression.indexOf(\",\") > -1;\n if (!expression) {\n description = \"\";\n }\n else if (expression === \"*\") {\n description = allDescription;\n }\n else if (!doesExpressionContainIncrement && !doesExpressionContainRange && !doesExpressionContainMultipleValues) {\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), getSingleItemDescription(expression));\n }\n else if (doesExpressionContainMultipleValues) {\n var segments = expression.split(\",\");\n var descriptionContent = \"\";\n for (var i = 0; i < segments.length; i++) {\n if (i > 0 && segments.length > 2) {\n descriptionContent += \",\";\n if (i < segments.length - 1) {\n descriptionContent += \" \";\n }\n }\n if (i > 0 && segments.length > 1 && (i == segments.length - 1 || segments.length == 2)) {\n descriptionContent += \"\".concat(this.i18n.spaceAnd(), \" \");\n }\n if (segments[i].indexOf(\"/\") > -1 || segments[i].indexOf(\"-\") > -1) {\n var isSegmentRangeWithoutIncrement = segments[i].indexOf(\"-\") > -1 && segments[i].indexOf(\"/\") == -1;\n var currentDescriptionContent = this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, isSegmentRangeWithoutIncrement ? this.i18n.commaX0ThroughX1 : getRangeDescriptionFormat, getDescriptionFormat);\n if (isSegmentRangeWithoutIncrement) {\n currentDescriptionContent = currentDescriptionContent.replace(\", \", \"\");\n }\n descriptionContent += currentDescriptionContent;\n }\n else if (!doesExpressionContainIncrement) {\n descriptionContent += getSingleItemDescription(segments[i]);\n }\n else {\n descriptionContent += this.getSegmentDescription(segments[i], allDescription, getSingleItemDescription, getIncrementDescriptionFormat, getRangeDescriptionFormat, getDescriptionFormat);\n }\n }\n if (!doesExpressionContainIncrement) {\n description = stringUtilities_1.StringUtilities.format(getDescriptionFormat(expression), descriptionContent);\n }\n else {\n description = descriptionContent;\n }\n }\n else if (doesExpressionContainIncrement) {\n var segments = expression.split(\"/\");\n description = stringUtilities_1.StringUtilities.format(getIncrementDescriptionFormat(segments[1]), segments[1]);\n if (segments[0].indexOf(\"-\") > -1) {\n var rangeSegmentDescription = this.generateRangeSegmentDescription(segments[0], getRangeDescriptionFormat, getSingleItemDescription);\n if (rangeSegmentDescription.indexOf(\", \") != 0) {\n description += \", \";\n }\n description += rangeSegmentDescription;\n }\n else if (segments[0].indexOf(\"*\") == -1) {\n var rangeItemDescription = stringUtilities_1.StringUtilities.format(getDescriptionFormat(segments[0]), getSingleItemDescription(segments[0]));\n rangeItemDescription = rangeItemDescription.replace(\", \", \"\");\n description += stringUtilities_1.StringUtilities.format(this.i18n.commaStartingX0(), rangeItemDescription);\n }\n }\n else if (doesExpressionContainRange) {\n description = this.generateRangeSegmentDescription(expression, getRangeDescriptionFormat, getSingleItemDescription);\n }\n return description;\n };\n ExpressionDescriptor.prototype.generateRangeSegmentDescription = function (rangeExpression, getRangeDescriptionFormat, getSingleItemDescription) {\n var description = \"\";\n var rangeSegments = rangeExpression.split(\"-\");\n var rangeSegment1Description = getSingleItemDescription(rangeSegments[0], 1);\n var rangeSegment2Description = getSingleItemDescription(rangeSegments[1], 2);\n var rangeDescriptionFormat = getRangeDescriptionFormat(rangeExpression);\n description += stringUtilities_1.StringUtilities.format(rangeDescriptionFormat, rangeSegment1Description, rangeSegment2Description);\n return description;\n };\n ExpressionDescriptor.prototype.formatTime = function (hourExpression, minuteExpression, secondExpression) {\n var hourOffset = 0;\n var minuteOffset = 0;\n var hour = parseInt(hourExpression) + hourOffset;\n var minute = parseInt(minuteExpression) + minuteOffset;\n if (minute >= 60) {\n minute -= 60;\n hour += 1;\n }\n else if (minute < 0) {\n minute += 60;\n hour -= 1;\n }\n if (hour >= 24) {\n hour = hour - 24;\n }\n else if (hour < 0) {\n hour = 24 + hour;\n }\n var period = \"\";\n var setPeriodBeforeTime = false;\n if (!this.options.use24HourTimeFormat) {\n setPeriodBeforeTime = !!(this.i18n.setPeriodBeforeTime && this.i18n.setPeriodBeforeTime());\n period = setPeriodBeforeTime ? \"\".concat(this.getPeriod(hour), \" \") : \" \".concat(this.getPeriod(hour));\n if (hour > 12) {\n hour -= 12;\n }\n if (hour === 0) {\n hour = 12;\n }\n }\n var second = \"\";\n if (secondExpression) {\n second = \":\".concat((\"00\" + secondExpression).substring(secondExpression.length));\n }\n return \"\".concat(setPeriodBeforeTime ? period : \"\").concat((\"00\" + hour.toString()).substring(hour.toString().length), \":\").concat((\"00\" + minute.toString()).substring(minute.toString().length)).concat(second).concat(!setPeriodBeforeTime ? period : \"\");\n };\n ExpressionDescriptor.prototype.transformVerbosity = function (description, useVerboseFormat) {\n if (!useVerboseFormat) {\n description = description.replace(new RegExp(\", \".concat(this.i18n.everyMinute()), \"g\"), \"\");\n description = description.replace(new RegExp(\", \".concat(this.i18n.everyHour()), \"g\"), \"\");\n description = description.replace(new RegExp(this.i18n.commaEveryDay(), \"g\"), \"\");\n description = description.replace(/\\, ?$/, \"\");\n if (this.i18n.conciseVerbosityReplacements) {\n for (var _i = 0, _a = Object.entries(this.i18n.conciseVerbosityReplacements()); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n description = description.replace(new RegExp(key, \"g\"), value);\n }\n }\n }\n return description;\n };\n ExpressionDescriptor.prototype.getPeriod = function (hour) {\n return hour >= 12 ? (this.i18n.pm && this.i18n.pm()) || \"PM\" : (this.i18n.am && this.i18n.am()) || \"AM\";\n };\n ExpressionDescriptor.locales = {};\n return ExpressionDescriptor;\n}());\nexports.ExpressionDescriptor = ExpressionDescriptor;\n\n\n/***/ }),\n\n/***/ 747:\n/***/ ((__unused_webpack_module, exports, __webpack_require__) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.enLocaleLoader = void 0;\nvar en_1 = __webpack_require__(486);\nvar enLocaleLoader = (function () {\n function enLocaleLoader() {\n }\n enLocaleLoader.prototype.load = function (availableLocales) {\n availableLocales[\"en\"] = new en_1.en();\n };\n return enLocaleLoader;\n}());\nexports.enLocaleLoader = enLocaleLoader;\n\n\n/***/ }),\n\n/***/ 486:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.en = void 0;\nvar en = (function () {\n function en() {\n }\n en.prototype.atX0SecondsPastTheMinuteGt20 = function () {\n return null;\n };\n en.prototype.atX0MinutesPastTheHourGt20 = function () {\n return null;\n };\n en.prototype.commaMonthX0ThroughMonthX1 = function () {\n return null;\n };\n en.prototype.commaYearX0ThroughYearX1 = function () {\n return null;\n };\n en.prototype.use24HourTimeFormatByDefault = function () {\n return false;\n };\n en.prototype.anErrorOccuredWhenGeneratingTheExpressionD = function () {\n return \"An error occurred when generating the expression description. Check the cron expression syntax.\";\n };\n en.prototype.everyMinute = function () {\n return \"every minute\";\n };\n en.prototype.everyHour = function () {\n return \"every hour\";\n };\n en.prototype.atSpace = function () {\n return \"At \";\n };\n en.prototype.everyMinuteBetweenX0AndX1 = function () {\n return \"Every minute between %s and %s\";\n };\n en.prototype.at = function () {\n return \"At\";\n };\n en.prototype.spaceAnd = function () {\n return \" and\";\n };\n en.prototype.everySecond = function () {\n return \"every second\";\n };\n en.prototype.everyX0Seconds = function () {\n return \"every %s seconds\";\n };\n en.prototype.secondsX0ThroughX1PastTheMinute = function () {\n return \"seconds %s through %s past the minute\";\n };\n en.prototype.atX0SecondsPastTheMinute = function () {\n return \"at %s seconds past the minute\";\n };\n en.prototype.everyX0Minutes = function () {\n return \"every %s minutes\";\n };\n en.prototype.minutesX0ThroughX1PastTheHour = function () {\n return \"minutes %s through %s past the hour\";\n };\n en.prototype.atX0MinutesPastTheHour = function () {\n return \"at %s minutes past the hour\";\n };\n en.prototype.everyX0Hours = function () {\n return \"every %s hours\";\n };\n en.prototype.betweenX0AndX1 = function () {\n return \"between %s and %s\";\n };\n en.prototype.atX0 = function () {\n return \"at %s\";\n };\n en.prototype.commaEveryDay = function () {\n return \", every day\";\n };\n en.prototype.commaEveryX0DaysOfTheWeek = function () {\n return \", every %s days of the week\";\n };\n en.prototype.commaX0ThroughX1 = function () {\n return \", %s through %s\";\n };\n en.prototype.commaAndX0ThroughX1 = function () {\n return \", %s through %s\";\n };\n en.prototype.first = function () {\n return \"first\";\n };\n en.prototype.second = function () {\n return \"second\";\n };\n en.prototype.third = function () {\n return \"third\";\n };\n en.prototype.fourth = function () {\n return \"fourth\";\n };\n en.prototype.fifth = function () {\n return \"fifth\";\n };\n en.prototype.commaOnThe = function () {\n return \", on the \";\n };\n en.prototype.spaceX0OfTheMonth = function () {\n return \" %s of the month\";\n };\n en.prototype.lastDay = function () {\n return \"the last day\";\n };\n en.prototype.commaOnTheLastX0OfTheMonth = function () {\n return \", on the last %s of the month\";\n };\n en.prototype.commaOnlyOnX0 = function () {\n return \", only on %s\";\n };\n en.prototype.commaAndOnX0 = function () {\n return \", and on %s\";\n };\n en.prototype.commaEveryX0Months = function () {\n return \", every %s months\";\n };\n en.prototype.commaOnlyInX0 = function () {\n return \", only in %s\";\n };\n en.prototype.commaOnTheLastDayOfTheMonth = function () {\n return \", on the last day of the month\";\n };\n en.prototype.commaOnTheLastWeekdayOfTheMonth = function () {\n return \", on the last weekday of the month\";\n };\n en.prototype.commaDaysBeforeTheLastDayOfTheMonth = function () {\n return \", %s days before the last day of the month\";\n };\n en.prototype.firstWeekday = function () {\n return \"first weekday\";\n };\n en.prototype.weekdayNearestDayX0 = function () {\n return \"weekday nearest day %s\";\n };\n en.prototype.commaOnTheX0OfTheMonth = function () {\n return \", on the %s of the month\";\n };\n en.prototype.commaEveryX0Days = function () {\n return \", every %s days\";\n };\n en.prototype.commaBetweenDayX0AndX1OfTheMonth = function () {\n return \", between day %s and %s of the month\";\n };\n en.prototype.commaOnDayX0OfTheMonth = function () {\n return \", on day %s of the month\";\n };\n en.prototype.commaEveryHour = function () {\n return \", every hour\";\n };\n en.prototype.commaEveryX0Years = function () {\n return \", every %s years\";\n };\n en.prototype.commaStartingX0 = function () {\n return \", starting %s\";\n };\n en.prototype.daysOfTheWeek = function () {\n return [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"];\n };\n en.prototype.monthsOfTheYear = function () {\n return [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ];\n };\n en.prototype.atReboot = function () {\n return \"Run once, at startup\";\n };\n return en;\n}());\nexports.en = en;\n\n\n/***/ }),\n\n/***/ 515:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nfunction assert(value, message) {\n if (!value) {\n throw new Error(message);\n }\n}\nvar RangeValidator = (function () {\n function RangeValidator() {\n }\n RangeValidator.secondRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var second = parseInt(parsed[i], 10);\n assert(second >= 0 && second <= 59, 'seconds part must be >= 0 and <= 59');\n }\n }\n };\n RangeValidator.minuteRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var minute = parseInt(parsed[i], 10);\n assert(minute >= 0 && minute <= 59, 'minutes part must be >= 0 and <= 59');\n }\n }\n };\n RangeValidator.hourRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var hour = parseInt(parsed[i], 10);\n assert(hour >= 0 && hour <= 23, 'hours part must be >= 0 and <= 23');\n }\n }\n };\n RangeValidator.dayOfMonthRange = function (parse) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var dayOfMonth = parseInt(parsed[i], 10);\n assert(dayOfMonth >= 1 && dayOfMonth <= 31, 'DOM part must be >= 1 and <= 31');\n }\n }\n };\n RangeValidator.monthRange = function (parse, monthStartIndexZero) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var month = parseInt(parsed[i], 10);\n assert(month >= 1 && month <= 12, monthStartIndexZero ? 'month part must be >= 0 and <= 11' : 'month part must be >= 1 and <= 12');\n }\n }\n };\n RangeValidator.dayOfWeekRange = function (parse, dayOfWeekStartIndexZero) {\n var parsed = parse.split(',');\n for (var i = 0; i < parsed.length; i++) {\n if (!isNaN(parseInt(parsed[i], 10))) {\n var dayOfWeek = parseInt(parsed[i], 10);\n assert(dayOfWeek >= 0 && dayOfWeek <= 6, dayOfWeekStartIndexZero ? 'DOW part must be >= 0 and <= 6' : 'DOW part must be >= 1 and <= 7');\n }\n }\n };\n return RangeValidator;\n}());\nexports[\"default\"] = RangeValidator;\n\n\n/***/ }),\n\n/***/ 823:\n/***/ ((__unused_webpack_module, exports) => {\n\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.StringUtilities = void 0;\nvar StringUtilities = (function () {\n function StringUtilities() {\n }\n StringUtilities.format = function (template) {\n var values = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n values[_i - 1] = arguments[_i];\n }\n return template.replace(/%s/g, function (substring) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n return values.shift();\n });\n };\n StringUtilities.containsAny = function (text, searchStrings) {\n return searchStrings.some(function (c) {\n return text.indexOf(c) > -1;\n });\n };\n return StringUtilities;\n}());\nexports.StringUtilities = StringUtilities;\n\n\n/***/ })\n\n/******/ \t});\n/************************************************************************/\n/******/ \t// The module cache\n/******/ \tvar __webpack_module_cache__ = {};\n/******/ \t\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/ \t\t// Check if module is in cache\n/******/ \t\tvar cachedModule = __webpack_module_cache__[moduleId];\n/******/ \t\tif (cachedModule !== undefined) {\n/******/ \t\t\treturn cachedModule.exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = __webpack_module_cache__[moduleId] = {\n/******/ \t\t\t// no module.id needed\n/******/ \t\t\t// no module.loaded needed\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/ \t\n/******/ \t\t// Execute the module function\n/******/ \t\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n/******/ \t\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/ \t\n/************************************************************************/\nvar __webpack_exports__ = {};\n// This entry need to be wrapped in an IIFE because it uses a non-standard name for the exports (exports).\n(() => {\nvar exports = __webpack_exports__;\n\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.toString = void 0;\nvar expressionDescriptor_1 = __webpack_require__(333);\nvar enLocaleLoader_1 = __webpack_require__(747);\nexpressionDescriptor_1.ExpressionDescriptor.initialize(new enLocaleLoader_1.enLocaleLoader());\nexports[\"default\"] = expressionDescriptor_1.ExpressionDescriptor;\nvar toString = expressionDescriptor_1.ExpressionDescriptor.toString;\nexports.toString = toString;\n\n})();\n\n/******/ \treturn __webpack_exports__;\n/******/ })()\n;\n});","export type RunTimeType = \"bun\" | \"node\" | \"deno\";\n\nclass RunTime {\n type: RunTimeType;\n\n constructor() {\n this.type = this.getRunTime();\n }\n\n private getRunTime(): RunTimeType {\n if (typeof Bun !== \"undefined\") {\n return \"bun\";\n } else if (typeof Deno !== \"undefined\") {\n return \"deno\";\n } else if (typeof process !== \"undefined\") {\n return \"node\";\n }\n\n throw new Error(\"No environment detected\");\n }\n}\n\nexport const runtime = new RunTime();\n","import { runtime } from \"./runtime.js\";\n\nclass NativeArgs {\n /**\n * Gets CLI arguments, dynamically determining where they start\n * Handles different execution contexts (direct execution, tsx, ts-node, etc.)\n */\n getCliArgs(): string[] {\n switch (runtime.type) {\n case \"bun\":\n return this.getBunArgs();\n case \"node\":\n return this.getNodeArgs();\n case \"deno\":\n return Deno.args;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n getCliCaller(): string {\n switch (runtime.type) {\n case \"bun\":\n return \"bun\";\n case \"node\":\n return process.argv[0];\n case \"deno\":\n return \"deno\";\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n /**\n * Gets Bun arguments, handling different execution contexts\n */\n private getBunArgs(): string[] {\n const args = Bun.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n /**\n * Gets Node.js arguments, handling different execution contexts\n */\n private getNodeArgs(): string[] {\n const args = process.argv;\n const scriptIndex = this.findScriptIndex(args);\n return args.slice(scriptIndex + 1);\n }\n\n private findScriptIndex(args: string[]): number {\n if (args.length >= 3 && args[1].includes(\".bin/\")) {\n return 1;\n }\n\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n const argBasename = arg.split(\"/\").pop() || arg;\n\n if (arg.startsWith(\"-\")) {\n continue;\n }\n\n if (\n argBasename === \"yarn\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (argBasename === \"npx\" && i + 1 < args.length) {\n return i + 1;\n }\n\n if (argBasename === \"yarn\" || argBasename === \"pnpm\") {\n return i;\n }\n\n if (\n argBasename === \"npm\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (\n argBasename === \"bun\" &&\n i + 1 < args.length &&\n args[i + 1] === \"run\"\n ) {\n return i + 1;\n }\n\n if (/\\.(js|ts|mjs|cjs)$/.test(arg)) {\n return i;\n }\n\n if (/^(tsx|ts-node|node|bun)$/.test(argBasename)) {\n for (let j = i + 1; j < args.length; j++) {\n if (!args[j].startsWith(\"-\") && /\\.(js|ts|mjs|cjs)$/.test(args[j])) {\n return j;\n }\n }\n return i;\n }\n }\n\n for (let i = args.length - 1; i >= 0; i--) {\n const arg = args[i];\n if (!arg.startsWith(\"-\")) {\n return i;\n }\n }\n\n return 1;\n }\n}\n\nexport const nativeArgs = new NativeArgs();\n","import type { Command } from \"./commands/base_command.js\";\n\n/**\n * Calculates Levenshtein distance between two strings for fuzzy matching\n * @param str1 - First string\n * @param str2 - Second string\n * @returns Distance between the strings\n */\nexport const levenshteinDistance = (str1: string, str2: string): number => {\n const matrix = Array(str2.length + 1)\n .fill(null)\n .map(() => Array(str1.length + 1).fill(null));\n\n for (let i = 0; i <= str1.length; i++) {\n matrix[0][i] = i;\n }\n\n for (let j = 0; j <= str2.length; j++) {\n matrix[j][0] = j;\n }\n\n for (let j = 1; j <= str2.length; j++) {\n for (let i = 1; i <= str1.length; i++) {\n const indicator = str1[i - 1] === str2[j - 1] ? 0 : 1;\n matrix[j][i] = Math.min(\n matrix[j][i - 1] + 1,\n matrix[j - 1][i] + 1,\n matrix[j - 1][i - 1] + indicator,\n );\n }\n }\n\n return matrix[str2.length][str1.length];\n};\n\nexport const toLowerSnakeCase = (str: string): string => {\n return str\n .toLowerCase()\n .replace(/[-_.]/g, \"_\")\n .replace(/([A-Z])/g, \"_$1\")\n .replace(/^_+/, \"\")\n .replace(/_+$/, \"\")\n .toLowerCase();\n};\n\nexport const toPascalCase = (input: string): string => {\n return input\n .split(/[-_.]/g)\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\"\");\n};\n\nexport const toDashCase = (str: string): string => {\n return str\n .split(/[-_.]/g)\n .map((word) => word.toLowerCase())\n .join(\"-\");\n};\n\n/**\n * Groups commands by their category\n * @param commands - Array of command classes\n * @returns Map of category to command arrays\n */\nexport const groupCommandsByCategory = (\n commands: (typeof Command)[],\n): Map<string, (typeof Command)[]> => {\n const map = new Map<string, (typeof Command)[]>();\n\n for (const command of commands) {\n const category = command.options?.category || \"other\";\n if (!map.has(category)) {\n map.set(category, []);\n }\n map.get(category)!.push(command);\n }\n\n return map;\n};\n\n/**\n * Parses a size limit string and converts it to bytes.\n * Supports formats like \"100kb\", \"50mb\".\n * @param sizeLimit - The size limit string (e.g., \"5mb\", \"100kb\")\n * @param defaultValue - The default value to return if parsing fails or no value provided\n * @returns The size in bytes, or the default value if parsing fails\n */\nexport const parseSizeLimit = (\n sizeLimit?: string,\n defaultValue?: number,\n): number | undefined => {\n if (!sizeLimit || typeof sizeLimit !== \"string\") {\n return defaultValue;\n }\n\n const trimmed = sizeLimit.toLowerCase().trim();\n const kbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)kb$/);\n const mbMatch = trimmed.match(/^(\\d+(?:\\.\\d+)?)mb$/);\n\n if (kbMatch) {\n const value = Number.parseFloat(kbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024);\n }\n\n if (mbMatch) {\n const value = Number.parseFloat(mbMatch[1]);\n if (Number.isNaN(value) || value < 0) {\n return defaultValue;\n }\n return Math.floor(value * 1024 * 1024);\n }\n\n return defaultValue;\n};\n","import { nativeArgs } from \"../runtime/native_args.js\";\nimport { levenshteinDistance } from \"../utils.js\";\n\nexport type Argument = string;\nexport type FlagSchema = Record<\n string,\n string | number | boolean | Array<string | number | boolean>\n>;\n\n/**\n * Parses a single flag argument\n * Supports formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n */\nconst parseFlag = (\n arg: string,\n): { name: string; value: string | number | boolean } | null => {\n if (!arg || arg === \"-\" || arg === \"--\") {\n return null;\n }\n\n const equalIndex = arg.indexOf(\"=\");\n if (equalIndex > 0) {\n const name = arg.substring(0, equalIndex);\n const value = arg.substring(equalIndex + 1);\n return {\n name,\n value: parseFlagValue(value),\n };\n }\n\n return { name: arg, value: true };\n};\n\n/**\n * Parses flag value, attempting to convert to appropriate type\n */\nconst parseFlagValue = (value: string): string | number | boolean => {\n if (value.toLowerCase() === \"true\") {\n return true;\n }\n\n if (value.toLowerCase() === \"false\") {\n return false;\n }\n\n const numValue = Number(value);\n if (!Number.isNaN(numValue) && Number.isFinite(numValue)) {\n return numValue;\n }\n\n return value;\n};\n\n/**\n * Parses CLI arguments and flags from command line input\n * Supports various flag formats: -f, --flag, -f=value, --flag=value, -f value, --flag value\n * @returns Object containing parsed arguments and flags\n */\nexport const parseCliArgsAndFlags = (): {\n args: Argument[];\n flags: FlagSchema;\n} => {\n const cliArgs = nativeArgs.getCliArgs();\n const parsedArgs: Argument[] = [];\n const parsedFlags = {} as FlagSchema;\n\n if (!cliArgs || !cliArgs.length) {\n return { args: parsedArgs, flags: parsedFlags };\n }\n\n for (let i = 0; i < cliArgs.length; i++) {\n const arg = cliArgs[i];\n\n if (!arg || typeof arg !== \"string\") {\n continue;\n }\n\n if (arg.startsWith(\"-\")) {\n const flag = parseFlag(arg);\n if (flag) {\n // Check if this is a boolean flag that might have a value in the next argument\n if (flag.value === true && i + 1 < cliArgs.length) {\n const nextArg = cliArgs[i + 1];\n if (\n nextArg &&\n typeof nextArg === \"string\" &&\n !nextArg.startsWith(\"-\")\n ) {\n flag.value = parseFlagValue(nextArg);\n i++; // Skip the next argument since we consumed it\n }\n }\n\n // If flag already exists, convert to array and append\n if (flag.name in parsedFlags) {\n const existingValue = parsedFlags[flag.name];\n if (Array.isArray(existingValue)) {\n existingValue.push(flag.value);\n } else {\n parsedFlags[flag.name] = [existingValue, flag.value];\n }\n } else {\n parsedFlags[flag.name] = flag.value;\n }\n }\n continue;\n }\n\n parsedArgs.push(arg);\n }\n\n return { args: parsedArgs, flags: parsedFlags };\n};\n\n/**\n * Finds similar commands using fuzzy matching\n * @param notFoundCommand - The command that was not found\n * @param availableCommands - Array of available commands to search through\n * @returns Formatted string with suggestions or empty string if no matches\n */\nexport const findSimilarCommands = (\n notFoundCommand: string,\n availableCommands: string[],\n): string => {\n if (!notFoundCommand || typeof notFoundCommand !== \"string\") {\n return \"\";\n }\n\n if (\n !availableCommands ||\n !Array.isArray(availableCommands) ||\n availableCommands.length === 0\n ) {\n return \"\";\n }\n\n const searchTerm = notFoundCommand.toLowerCase().trim();\n\n const similarCommands = availableCommands.filter((command) => {\n const normalizedCommand = command.toLowerCase();\n\n if (normalizedCommand === searchTerm) {\n return true;\n }\n\n if (\n normalizedCommand.includes(searchTerm) ||\n searchTerm.includes(normalizedCommand)\n ) {\n return true;\n }\n\n const distance = levenshteinDistance(normalizedCommand, searchTerm);\n const maxDistance =\n Math.max(searchTerm.length, normalizedCommand.length) * 0.4; // 40% threshold\n\n return distance <= maxDistance;\n });\n\n if (similarCommands.length === 0) {\n return \"\";\n }\n\n const topSuggestions = similarCommands.slice(0, 3);\n const suggestions = topSuggestions\n .map((cmd) => `\\x1b[36m${cmd}\\x1b[0m`)\n .join(\", \");\n return `\\x1b[31m✗\\x1b[0m Command \\x1b[33m${notFoundCommand}\\x1b[0m not found\\n\\x1b[32m💡\\x1b[0m Did you mean: ${suggestions}?`;\n};\n\nexport const getCalledCommandName = (): string | null => {\n const cliArgs = nativeArgs.getCliArgs();\n return cliArgs[0] || null;\n};\n","import pino from \"pino\";\nimport type { LoggerOptions } from \"./logger_types.js\";\n\nconst createBaseLogger = () => {\n const baseOptions: LoggerOptions = {\n level: \"info\",\n formatters: {\n level: (label) => {\n return { level: label };\n },\n },\n };\n\n return pino(baseOptions);\n};\n\n/**\n * The default logger instance used internally by Balda.\n * To use a custom logger, pass a pino instance to `new Server({ logger })` or `CommandRegistry.setLogger()`.\n */\nexport const logger = createBaseLogger();\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","// 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","/**\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 * Returns undefined if no metadata exists for the target.\n * Use getOrCreateAll() if you want to ensure a Map is returned.\n */\n static getAll(target: any): Map<string | symbol, any> | undefined {\n return this.metadata.get(target);\n }\n\n /**\n * Get all the metadata for the given target, creating an empty Map if none exists.\n * This is useful when you want to iterate over metadata or add new entries.\n */\n static getOrCreateAll(target: any): Map<string | symbol, any> {\n if (!this.metadata.has(target)) {\n this.metadata.set(target, new Map());\n }\n return this.metadata.get(target)!;\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 { 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: ${runtime.type}`);\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 { CommandFlagsAndArgs, CommandOptions } from \"./command_types.js\";\n\n/**\n * Base class for all cli commands.\n * @abstract\n */\nexport abstract class Command {\n private static readonly flagsAndArgs: CommandFlagsAndArgs = {\n flags: parseCliArgsAndFlags().flags,\n args: parseCliArgsAndFlags().args.slice(1),\n };\n\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 loggerPath: \"src/logger.ts\",\n allowUnknownFlags: true,\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[] = this.flagsAndArgs.args;\n\n /**\n * Static flags in order to be validated by decorators. Will be fetched in the command instance.\n */\n static flags: FlagSchema = this.flagsAndArgs.flags;\n\n static logger = logger.child({ scope: this.constructor.name });\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 ` ${colors.flag}loggerPath${colors.reset} ${options?.loggerPath ?? \"src/logger.ts\"}`,\n ` ${colors.flag}allowUnknownFlags${colors.reset} ${(options?.allowUnknownFlags ?? true) ? 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 = allMeta\n ? Array.from(allMeta.values()).filter((meta) => meta.type === \"arg\")\n : [];\n const flagsMeta = allMeta\n ? Array.from(allMeta.values()).filter((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 /**\n * Validates that no unknown flags were provided when allowUnknownFlags is false.\n */\n static readonly validateUnknownFlags = (target: any): void => {\n if (target.options?.allowUnknownFlags !== false) {\n return;\n }\n\n const alwaysAllowed = new Set([\"-h\", \"--help\"]);\n const knownFlags = new Set<string>();\n\n const allMeta = MetadataStore.getAll(target);\n if (allMeta) {\n for (const meta of allMeta.values()) {\n if (meta.type === \"flag\") {\n knownFlags.add(`--${meta.name}`);\n knownFlags.add(`-${meta.name}`);\n knownFlags.add(meta.name);\n if (meta.aliases) {\n const aliases = Array.isArray(meta.aliases)\n ? meta.aliases\n : [meta.aliases];\n for (const alias of aliases) {\n knownFlags.add(`--${alias}`);\n knownFlags.add(`-${alias}`);\n knownFlags.add(alias);\n }\n }\n }\n }\n }\n\n const unknownFlags = Object.keys(target.flags).filter(\n (flag) => !alwaysAllowed.has(flag) && !knownFlags.has(flag),\n );\n\n if (unknownFlags.length) {\n const colors = {\n error: \"\\x1b[0;31m\",\n title: \"\\x1b[1;31m\",\n reset: \"\\x1b[0m\",\n info: \"\\x1b[0;34m\",\n flag: \"\\x1b[0;35m\",\n };\n\n console.error(`${colors.title}❌ Unknown Flags:${colors.reset}`);\n console.error(\"\");\n unknownFlags.forEach((flag) => {\n console.error(\n ` ${colors.error}•${colors.reset} ${colors.flag}${flag}${colors.reset}`,\n );\n });\n console.error(\"\");\n console.error(\n `${colors.info}💡 Tip: Use --help for available flags${colors.reset}`,\n );\n nativeExit.exit(1);\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 {\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\";\nimport type { glob } from \"node:fs/promises\";\nimport { nativeCwd } from \"./native_cwd.js\";\nimport { nativePath } from \"./native_path.js\";\n\nclass NativeFs {\n async glob(...args: Parameters<typeof glob>): Promise<string[]> {\n const fs = await import(\"node:fs/promises\");\n const cwd = nativeCwd.getCwd();\n const cwdPath = nativePath.resolve(\n cwd,\n (args[1] as { cwd?: string })?.cwd ?? \"\",\n );\n const paths: string[] = [];\n for await (const p of fs.glob(...args)) {\n if (typeof p === \"string\") {\n paths.push(nativePath.resolve(cwdPath, p));\n continue;\n }\n\n if (p.isFile()) {\n paths.push(nativePath.resolve(cwdPath, p.name));\n }\n }\n\n return paths;\n }\n\n async mkdir(\n path: string,\n options?: { recursive?: boolean; mode?: number | string },\n ): Promise<void> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"node:fs/promises\");\n await fs.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n case \"deno\":\n if (typeof options?.mode === \"string\") {\n options.mode = Number.parseInt(options.mode);\n }\n\n await Deno.mkdir(path, {\n recursive: options?.recursive ?? false,\n mode: options?.mode,\n });\n break;\n }\n }\n\n async exists(path: string): Promise<boolean> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n return fs.existsSync(path);\n case \"bun\":\n const bunFs = await import(\"fs\");\n return bunFs.existsSync(path);\n case \"deno\":\n return Deno.stat(path)\n .then(() => true)\n .catch(() => false);\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readFile(\n path: string,\n options?: { encoding?: \"utf8\" },\n ): Promise<Uint8Array | string> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const data = await fs.readFile(path, {\n encoding: options?.encoding ?? null,\n });\n\n if (options?.encoding === \"utf8\") {\n return data as string;\n }\n\n return new Uint8Array(data as Buffer);\n case \"bun\":\n const arrayBuffer = Bun.file(path);\n if (options?.encoding === \"utf8\") {\n return arrayBuffer.text();\n }\n\n return new Uint8Array(await arrayBuffer.arrayBuffer());\n case \"deno\":\n const denoBuffer = await Deno.readFile(path);\n if (options?.encoding === \"utf8\") {\n return new TextDecoder().decode(denoBuffer);\n }\n\n return new Uint8Array(denoBuffer);\n }\n }\n\n async writeFile(path: string, data: Uint8Array): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.writeFile(path, data);\n break;\n case \"bun\":\n await Bun.write(path, data);\n break;\n case \"deno\":\n await Deno.writeFile(path, data);\n break;\n }\n }\n\n async stat(path: string): Promise<{\n isDirectory: boolean;\n isFile: boolean;\n isSymbolicLink: boolean;\n size: number;\n }> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n const stats = await fs.stat(path);\n return {\n isDirectory: stats.isDirectory(),\n isFile: stats.isFile(),\n isSymbolicLink: stats.isSymbolicLink(),\n size: stats.size,\n };\n case \"bun\":\n const bunFs = await import(\"fs/promises\");\n const bunStats = await bunFs.stat(path);\n return {\n isDirectory: bunStats.isDirectory(),\n isFile: bunStats.isFile(),\n isSymbolicLink: bunStats.isSymbolicLink(),\n size: bunStats.size,\n };\n case \"deno\":\n const denoStats = await Deno.stat(path);\n return {\n isDirectory: denoStats.isDirectory,\n isFile: denoStats.isFile,\n isSymbolicLink: false,\n size: denoStats.size,\n };\n }\n }\n\n async unlink(path: string): Promise<void> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs/promises\");\n await fs.unlink(path);\n break;\n case \"bun\":\n await Bun.file(path).delete();\n break;\n case \"deno\":\n await Deno.remove(path);\n break;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async streamFile(path: string): Promise<ReadableStream> {\n switch (runtime.type) {\n case \"node\":\n const fs = await import(\"fs\");\n const { Readable } = await import(\"stream\");\n const nodeStream = fs.createReadStream(path);\n return Readable.toWeb(nodeStream) as unknown as ReadableStream;\n\n case \"bun\":\n return Bun.file(path).stream();\n case \"deno\":\n const denoFile = await Deno.open(path);\n return denoFile.readable;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n\n async readdir(path: string): Promise<string[]> {\n switch (runtime.type) {\n case \"bun\":\n case \"node\":\n const fs = await import(\"fs/promises\");\n return fs.readdir(path);\n case \"deno\":\n const entries: string[] = [];\n for await (const entry of Deno.readDir(path)) {\n entries.push(entry.name);\n }\n\n return entries;\n default:\n throw new Error(\"Unsupported runtime\");\n }\n }\n}\n\nexport const nativeFs = new NativeFs();\n","import { execSync } from \"node:child_process\";\nimport * as readline from \"node:readline\";\nimport { nativeFs } from \"./runtime/native_fs.js\";\nimport { nativePath } from \"./runtime/native_path.js\";\nimport { createRequire } from \"node:module\";\n\n// Create a require function that works in both ES and CommonJS modules\nexport const requireFn =\n typeof import.meta !== \"undefined\"\n ? createRequire(import.meta.url)\n : (require(\"node:module\").createRequire?.(import.meta?.url ?? __filename) ??\n require);\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 { BaldaError } from \"./balda_error.js\";\n\nexport class Zod3SchemaUsedError extends BaldaError {\n constructor(error: Error) {\n super(\n \"Failed to convert Zod schema to JSON Schema. \" +\n \"This usually happens when using Zod v3 schemas with Zod v4. \" +\n \"Make sure you're importing from 'zod' (v4) and not 'zod/v3'. \" +\n `Original error: ${error.message}`,\n );\n }\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class Zod4NotInstalledError extends BaldaError {\n constructor() {\n super(\n \"Zod v4 is required with the toJSONSchema() method. Install it with: npm install zod@^4.0.0\",\n );\n }\n}\n","/**\n * Manages synchronous loading of the Zod library at runtime.\n * Zod is a peer dependency and only loaded if Zod schemas are used.\n */\nimport type { ZodType } from \"zod\";\nimport { Zod3SchemaUsedError } from \"../errors/zod3_schema_used.js\";\nimport { Zod4NotInstalledError } from \"../errors/zod4_not_installed_error.js\";\nimport { requireFn } from \"../package.js\";\nimport type { JSONSchema } from \"../plugins/swagger/swagger_types.js\";\n\nexport class ZodLoader {\n private static zodModule: typeof import(\"zod\") | null = null;\n\n /**\n * Cache of objects confirmed as Zod schemas to avoid repeated property checks.\n */\n private static zodSchemaCache = new WeakSet<object>();\n\n /**\n * Synchronously loads the Zod library at runtime.\n * @throws Error if Zod is not installed\n */\n private static load(): typeof import(\"zod\") {\n if (this.zodModule) {\n return this.zodModule;\n }\n\n try {\n this.zodModule = requireFn(\"zod\") as typeof import(\"zod\");\n this.ensureZodV4();\n return this.zodModule;\n } catch (error) {\n throw new Error(\n \"Zod is not installed. Install it with: npm install zod\\n\" +\n \"Zod is a peer dependency required when using Zod schemas for validation.\",\n );\n }\n }\n\n /**\n * Gets the loaded Zod module synchronously.\n * @throws Error if Zod is not installed\n */\n static get(): typeof import(\"zod\") {\n return this.load();\n }\n\n /**\n * Checks if a value is a Zod schema\n * Results are cached in a WeakSet to avoid repeated property lookups\n */\n static isZodSchema(value: any): value is ZodType {\n try {\n this.load();\n } catch {\n return false;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n // Fast path: check cache first\n if (this.zodSchemaCache.has(value)) {\n return true;\n }\n\n // Slow path: perform full type detection\n const isZod =\n \"_def\" in value &&\n typeof value.parse === \"function\" &&\n typeof value.safeParse === \"function\";\n\n // Cache positive results to avoid repeated property checks\n if (isZod) {\n this.zodSchemaCache.add(value);\n }\n\n return isZod;\n }\n\n /**\n * Ensures that Zod v4 is installed with toJSONSchema support\n * @throws Zod4NotInstalledError if Zod v4 is not installed\n */\n static ensureZodV4(): void {\n const zodModule = this.zodModule?.z;\n if (!zodModule) {\n throw new Zod4NotInstalledError();\n }\n\n if (!(\"toJSONSchema\" in zodModule)) {\n throw new Zod4NotInstalledError();\n }\n }\n\n /**\n * Converts a Zod schema to JSON Schema using Zod v4's toJSONSchema method\n * @param schema - The Zod schema to convert\n * @returns The JSON Schema representation\n * @throws Zod4NotInstalledError if Zod v4 is not installed or toJSONSchema is not available\n * @throws Error if the schema is invalid or incompatible (Example using zod/v3)\n */\n static toJSONSchema(schema: ZodType): JSONSchema {\n this.load();\n this.ensureZodV4();\n\n const zodModule = this.zodModule?.z;\n if (!zodModule?.toJSONSchema) {\n throw new Zod4NotInstalledError();\n }\n\n if (!schema || typeof schema !== \"object\" || !(\"_def\" in schema)) {\n throw new Error(\n \"Invalid Zod schema provided. Make sure you're using Zod v4 schemas. \" +\n \"If you're importing from 'zod/v3', change to 'zod' or '{ z } from \\\"zod\\\"'.\",\n );\n }\n\n try {\n return zodModule.toJSONSchema(schema) as JSONSchema;\n } catch (error) {\n if (\n error instanceof Error &&\n error.message.includes(\"Cannot read properties of undefined\")\n ) {\n throw new Zod3SchemaUsedError(error);\n }\n throw error;\n }\n }\n}\n","import { BaldaError } from \"./balda_error.js\";\n\nexport class TypeBoxNotInstalledError extends BaldaError {\n constructor() {\n super(\n \"TypeBox is not installed. Install it with: npm install @sinclair/typebox\",\n );\n }\n}\n","/**\n * Manages synchronous loading of the TypeBox library at runtime.\n * TypeBox is a peer dependency and only loaded if TypeBox schemas are used.\n */\nimport type { TSchema } from \"@sinclair/typebox\";\nimport { TypeBoxNotInstalledError } from \"../errors/typebox_not_installed_error.js\";\nimport { requireFn } from \"../package.js\";\n\nexport class TypeBoxLoader {\n private static typeboxModule: typeof import(\"@sinclair/typebox\") | null =\n null;\n\n /**\n * Cache of objects confirmed as TypeBox schemas to avoid repeated symbol lookups.\n */\n private static typeboxSchemaCache = new WeakSet<object>();\n\n /**\n * Synchronously loads the TypeBox library at runtime.\n * @throws TypeBoxNotInstalledError if TypeBox is not installed\n */\n private static load(): typeof import(\"@sinclair/typebox\") {\n if (this.typeboxModule) {\n return this.typeboxModule;\n }\n\n try {\n this.typeboxModule = requireFn(\n \"@sinclair/typebox\",\n ) as typeof import(\"@sinclair/typebox\");\n return this.typeboxModule;\n } catch (error) {\n throw new TypeBoxNotInstalledError();\n }\n }\n\n /**\n * Gets the loaded TypeBox module synchronously.\n * @throws TypeBoxNotInstalledError if TypeBox is not installed\n */\n static get(): typeof import(\"@sinclair/typebox\") {\n return this.load();\n }\n\n /**\n * Checks if a value is a TypeBox schema\n * TypeBox schemas have a [Kind] symbol property\n * Results are cached in a WeakSet to avoid repeated Object.getOwnPropertySymbols calls\n */\n static isTypeBoxSchema(value: any): value is TSchema {\n try {\n this.load();\n } catch {\n return false;\n }\n\n if (typeof value !== \"object\" || value === null) {\n return false;\n }\n\n // Fast path: check cache first\n if (this.typeboxSchemaCache.has(value)) {\n return true;\n }\n\n // Slow path: perform full type detection\n const isTypeBox =\n \"type\" in value &&\n Object.getOwnPropertySymbols(value).some(\n (sym) => sym.toString() === \"Symbol(TypeBox.Kind)\",\n );\n\n // Cache positive results to avoid repeated symbol lookups\n if (isTypeBox) {\n this.typeboxSchemaCache.add(value);\n }\n\n return isTypeBox;\n }\n}\n","import { Ajv } from \"ajv\";\nimport fastJson, { AnySchema } from \"fast-json-stringify\";\nimport type { JSONSchema } from \"../plugins/swagger/swagger_types.js\";\nimport type { AjvCompileReturnType } from \"./ajv_types.js\";\nimport type {\n FastJsonStringifyFunction,\n SerializerFunction,\n} from \"./fast_json_stringify_types.js\";\nimport type { RequestSchema } from \"../decorators/validation/validate_types.js\";\nimport { ZodLoader } from \"../validator/zod_loader.js\";\nimport { TypeBoxLoader } from \"../validator/typebox_loader.js\";\n\n/**\n * Global state for the AJV instance used for JSON Schema validation.\n *\n * ## Custom AJV Instance\n *\n * You can provide your own AJV instance with custom configuration:\n *\n * ```typescript\n * import { Ajv } from 'ajv';\n * import { Server } from 'balda';\n *\n * const customAjv = new Ajv({\n * validateSchema: false, // Required - must be false and will be ignored if provided\n * strict: false, // Required - must be false and will be ignored if provided\n * allErrors: true, // Optional - your custom config\n * // ... other custom options\n * });\n *\n * // Add custom formats, keywords, etc.\n * customAjv.addFormat('custom-format', /regex/);\n *\n * // Pass the custom AJV instance to the server constructor\n * new Server({\n * ajvInstance: customAjv,\n * });\n * ```\n *\n * **IMPORTANT:** The following options are required and must not be changed:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n */\nexport class AjvStateManager {\n static ajv: Ajv = new Ajv({\n validateSchema: false, // Required - do not change\n strict: false, // Required - do not change\n });\n\n /**\n * WeakMap to store fast-json-stringify serializers.\n * Keyed by schema object reference for automatic garbage collection.\n */\n private static serializerCache = new WeakMap<\n object,\n Map<string, FastJsonStringifyFunction>\n >();\n\n /**\n * WeakMap to cache complete route response serializers.\n * Avoids per-request iteration and type detection.\n */\n private static responseSerializersCache = new WeakMap<\n Record<number, RequestSchema>,\n Map<number, FastJsonStringifyFunction>\n >();\n\n /**\n * Counter for generating unique symbol-based keys.\n */\n private static refCounter = 0;\n\n /**\n * WeakMap to track schema objects and their generated keys.\n * Prevents duplicate key generation for the same schema object.\n */\n private static schemaKeyCache = new WeakMap<object, Map<string, string>>();\n\n /**\n * Sets the global AJV instance to use for JSON Schema validation.\n * @param ajv - The AJV instance to set as global.\n * @warning The AJV instance must be configured with the following options:\n * - `validateSchema: false` - Required for proper Zod schema compilation\n * - `strict: false` - Required for proper Zod schema compilation\n * Changing these values will cause validation errors and break Zod schema support.\n */\n static setGlobalInstance(ajv: Ajv) {\n this.ajv = ajv;\n this.ajv.opts.strict = false;\n this.ajv.opts.validateSchema = false;\n }\n\n /**\n * Generates a stable key for a schema object with a specific prefix.\n * Same schema + prefix combination always returns the same key.\n *\n * @param schema - The schema object\n * @param prefix - Context prefix (e.g., \"validator\", \"serializer\", \"json_schema\")\n * @returns A string key for use with Ajv\n */\n private static getSchemaKey(schema: object, prefix: string): string {\n let prefixMap = this.schemaKeyCache.get(schema);\n if (!prefixMap) {\n prefixMap = new Map<string, string>();\n this.schemaKeyCache.set(schema, prefixMap);\n }\n\n let key = prefixMap.get(prefix);\n if (!key) {\n key = `${prefix}_${++this.refCounter}`;\n prefixMap.set(prefix, key);\n }\n return key;\n }\n\n /**\n * Gets or compiles a validator from a JSON schema.\n * Uses Ajv's internal caching via addSchema/getSchema.\n *\n * @param jsonSchema - The JSON Schema to compile\n * @param prefix - Context prefix for cache key generation\n * @returns Compiled Ajv validator function\n */\n static getOrCompileValidator(\n jsonSchema: JSONSchema,\n prefix: string,\n ): AjvCompileReturnType {\n const key = this.getSchemaKey(jsonSchema, prefix);\n\n const cached = this.ajv.getSchema(key);\n if (cached) {\n return cached;\n }\n\n this.ajv.addSchema(jsonSchema, key);\n const compiled = this.ajv.getSchema(key);\n if (!compiled) {\n throw new Error(`Failed to compile schema with key: ${key}`);\n }\n return compiled;\n }\n\n /**\n * Gets or creates a fast-json-stringify serializer for a schema.\n * Uses WeakMap for caching to allow garbage collection.\n *\n * @param jsonSchema - The JSON Schema to compile\n * @param prefix - Context prefix for cache key generation\n * @returns Compiled serializer function or null\n */\n static getOrCreateSerializer(\n jsonSchema: JSONSchema,\n prefix: string,\n ): SerializerFunction {\n if (!jsonSchema || typeof jsonSchema !== \"object\") {\n return null;\n }\n\n let prefixMap = this.serializerCache.get(jsonSchema);\n if (!prefixMap) {\n prefixMap = new Map<string, FastJsonStringifyFunction>();\n this.serializerCache.set(jsonSchema, prefixMap);\n }\n\n const cached = prefixMap.get(prefix);\n if (cached) {\n return cached;\n }\n\n try {\n const serializer = fastJson(jsonSchema as AnySchema, {\n ajv: this.ajv.opts,\n });\n\n prefixMap.set(prefix, serializer);\n return serializer;\n } catch {\n return null;\n }\n }\n\n /**\n * Gets or creates serializers for all response schemas.\n */\n static getOrCreateResponseSerializers(\n schemas?: Record<number, RequestSchema>,\n ): Map<number, FastJsonStringifyFunction> | null {\n if (!schemas) {\n return null;\n }\n\n // Check cache first\n const cached = this.responseSerializersCache.get(schemas);\n if (cached) {\n return cached;\n }\n\n // Cache miss: resolve all serializers\n const resolved = new Map<number, FastJsonStringifyFunction>();\n for (const [statusCode, schema] of Object.entries(schemas)) {\n const status = Number(statusCode);\n\n // Determine schema type and get serializer\n let serializer: FastJsonStringifyFunction | null = null;\n\n if (ZodLoader.isZodSchema(schema)) {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n serializer = this.getOrCreateSerializer(\n jsonSchema,\n \"fast_stringify_zod\",\n );\n } else if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n serializer = this.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_typebox\",\n );\n } else if (typeof schema === \"object\" && schema !== null) {\n serializer = this.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_json\",\n );\n }\n\n if (serializer) {\n resolved.set(status, serializer);\n }\n }\n\n // Cache for future requests\n this.responseSerializersCache.set(schemas, resolved);\n return resolved;\n }\n\n /**\n * Stores a JSON schema in Ajv for later retrieval.\n * Used primarily for Swagger documentation.\n *\n * @param jsonSchema - The JSON Schema to store\n * @param prefix - Context prefix for cache key generation\n */\n static storeJsonSchema(jsonSchema: JSONSchema, prefix: string): void {\n const key = this.getSchemaKey(jsonSchema, prefix);\n if (!this.ajv.getSchema(key)) {\n this.ajv.addSchema(jsonSchema, key);\n }\n }\n\n /**\n * Retrieves a stored JSON schema from Ajv.\n *\n * @param schemaObject - The original schema object used as reference\n * @param prefix - Context prefix used when storing\n * @returns The JSON schema if found, undefined otherwise\n */\n static getJsonSchema(\n schemaObject: object,\n prefix: string,\n ): JSONSchema | undefined {\n const prefixMap = this.schemaKeyCache.get(schemaObject);\n if (!prefixMap) {\n return undefined;\n }\n\n const key = prefixMap.get(prefix);\n if (!key) {\n return undefined;\n }\n\n const schema = this.ajv.getSchema(key);\n return schema?.schema as JSONSchema | undefined;\n }\n\n /**\n * Clears all cached schemas and serializers.\n * Useful for testing or memory management.\n */\n static clearAllCaches(): void {\n this.ajv = new Ajv({\n validateSchema: false,\n strict: false,\n });\n this.serializerCache = new WeakMap<\n object,\n Map<string, FastJsonStringifyFunction>\n >();\n this.schemaKeyCache = new WeakMap<object, Map<string, string>>();\n this.refCounter = 0;\n }\n\n /**\n * Gets the total number of schemas stored in Ajv.\n * @returns Count of stored schemas\n */\n static getSchemaCount(): number {\n return Object.keys(this.ajv.schemas).length;\n }\n\n /**\n * Gets statistics about the schema cache.\n * @returns Cache statistics including schema count\n */\n static getCacheStats(): {\n schemaCount: number;\n totalRefsCreated: number;\n } {\n return {\n schemaCount: this.getSchemaCount(),\n totalRefsCreated: this.refCounter,\n };\n }\n}\n","import { AjvStateManager } from \"./ajv.js\";\nimport { TypeBoxLoader } from \"../validator/typebox_loader.js\";\nimport { ZodLoader } from \"../validator/zod_loader.js\";\nimport type { RequestSchema } from \"../decorators/validation/validate_types.js\";\nimport type { RouteResponseSchemas } from \"../server/router/router_type.js\";\nimport type { JSONSchema } from \"../plugins/swagger/swagger_types.js\";\nimport { logger } from \"../logger/logger.js\";\n\n/**\n * Compiles and caches a schema validator using Ajv's internal storage.\n * Handles Zod, TypeBox, and plain JSON schemas.\n * Also caches the JSON Schema (OpenAPI format) and fast-json-stringify serializer.\n *\n * This is the single source of truth for schema compilation used by:\n * - Inline routes (server.router.get() with swagger.responses)\n * - Decorator routes (@serialize decorator)\n *\n * @param schema - The schema to compile (Zod, TypeBox, or plain JSON schema)\n */\nexport const compileAndCacheValidator = (schema: RequestSchema): void => {\n if (ZodLoader.isZodSchema(schema)) {\n try {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n AjvStateManager.storeJsonSchema(jsonSchema, \"serialize_zod\");\n AjvStateManager.getOrCompileValidator(jsonSchema, \"serialize_zod\");\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"zod\",\n context: \"serialize_decorator\",\n },\n \"Failed to compile Zod schema for validation. Schema may contain unsupported types (e.g., z.instanceof). Runtime validation will still work, but Swagger documentation may be incomplete.\",\n );\n return;\n }\n return;\n }\n\n if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n try {\n AjvStateManager.storeJsonSchema(\n schema as JSONSchema,\n \"serialize_typebox\",\n );\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"serialize_typebox\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"typebox\",\n context: \"serialize_decorator\",\n },\n \"Failed to compile TypeBox schema for validation. Schema may be invalid or use unsupported features.\",\n );\n return;\n }\n return;\n }\n\n if (typeof schema === \"object\" && schema !== null) {\n try {\n AjvStateManager.storeJsonSchema(schema as JSONSchema, \"serialize_json\");\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"serialize_json\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"json\",\n context: \"serialize_decorator\",\n },\n \"Failed to compile JSON schema for validation. Schema may be invalid or malformed.\",\n );\n return;\n }\n return;\n }\n\n // Fallback for primitives or edge cases\n const cacheKey = JSON.stringify(schema);\n try {\n const primitiveSchema = { type: typeof schema };\n AjvStateManager.storeJsonSchema(\n primitiveSchema as JSONSchema,\n `serialize_primitive_${cacheKey}`,\n );\n AjvStateManager.getOrCompileValidator(\n primitiveSchema as JSONSchema,\n `serialize_primitive_${cacheKey}`,\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"primitive\",\n cacheKey,\n context: \"serialize_decorator\",\n },\n \"Failed to compile schema for validation. Schema format may be unsupported.\",\n );\n }\n};\n\n/**\n * Compiles and caches a request schema validator using runtime validation cache keys.\n * Uses the same cache keys as Request.validate() for consistency.\n * Does NOT compile serializers (those are for output only).\n * Also caches the JSON Schema (OpenAPI format) for Swagger documentation.\n *\n * @param schema - The schema to compile (Zod, TypeBox, or plain JSON schema)\n */\nexport const compileRequestValidator = (schema: RequestSchema): void => {\n if (ZodLoader.isZodSchema(schema)) {\n try {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n AjvStateManager.storeJsonSchema(jsonSchema, \"zod_schema\");\n AjvStateManager.getOrCompileValidator(jsonSchema, \"zod_schema\");\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"zod\",\n context: \"request_validation\",\n },\n \"Failed to compile Zod schema for request validation. Schema may contain unsupported types (e.g., z.instanceof). Swagger documentation may be incomplete.\",\n );\n return;\n }\n return;\n }\n\n if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n try {\n AjvStateManager.storeJsonSchema(schema as JSONSchema, \"typebox_schema\");\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"typebox_schema\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"typebox\",\n context: \"request_validation\",\n },\n \"Failed to compile TypeBox schema for request validation. Schema may be invalid or use unsupported features.\",\n );\n return;\n }\n return;\n }\n\n if (typeof schema === \"object\" && schema !== null) {\n try {\n AjvStateManager.storeJsonSchema(schema as JSONSchema, \"json_schema\");\n AjvStateManager.getOrCompileValidator(\n schema as JSONSchema,\n \"json_schema\",\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"json\",\n context: \"request_validation\",\n },\n \"Failed to compile JSON schema for request validation. Schema may be invalid or malformed.\",\n );\n return;\n }\n return;\n }\n\n // Fallback for primitives or edge cases\n const cacheKey = JSON.stringify(schema);\n try {\n const primitiveSchema = { type: typeof schema };\n AjvStateManager.storeJsonSchema(\n primitiveSchema as JSONSchema,\n `primitive_${cacheKey}`,\n );\n AjvStateManager.getOrCompileValidator(\n primitiveSchema as JSONSchema,\n `primitive_${cacheKey}`,\n );\n } catch (error) {\n logger.warn(\n {\n error,\n schemaType: \"primitive\",\n cacheKey,\n context: \"request_validation\",\n },\n \"Failed to compile schema for request validation. Schema format may be unsupported.\",\n );\n }\n};\n\n/**\n * Compiles and caches request body and query validators.\n * Uses the same cache keys as Request.validate() for consistency.\n * This allows runtime validation to hit the pre-compiled cache.\n *\n * This function is called during route registration to pre-compile\n * request schemas defined in swagger options.\n *\n * @param requestBody - Optional request body schema\n * @param query - Optional query parameters schema\n */\nexport const compileRequestSchemas = (\n requestBody?: RequestSchema,\n query?: RequestSchema,\n): void => {\n if (requestBody) {\n compileRequestValidator(requestBody);\n }\n\n if (query) {\n compileRequestValidator(query);\n }\n};\n\n/**\n * Compiles and caches response schemas for a route.\n * Stores both validators and serializers using Ajv's storage.\n *\n * This function is called:\n * - During inline route registration (server.router.get() with swagger.responses)\n * - During decorator route registration (@controller with @serialize)\n *\n * @param responses - Map of status codes to schemas\n * @returns A map of status codes to schemas, or undefined if no responses\n */\nexport const compileResponseSchemas = (\n responses?: Record<number, RequestSchema>,\n): RouteResponseSchemas | undefined => {\n if (!responses || Object.keys(responses).length === 0) {\n return undefined;\n }\n\n const responseSchemas: RouteResponseSchemas = {};\n\n for (const [statusCode, schema] of Object.entries(responses)) {\n const status = Number(statusCode);\n responseSchemas[status] = schema as RequestSchema;\n\n // Compile and cache validator using Ajv\n compileAndCacheValidator(schema as RequestSchema);\n\n // Pre-compile serializer for this response schema\n if (ZodLoader.isZodSchema(schema)) {\n try {\n const jsonSchema = ZodLoader.toJSONSchema(schema);\n AjvStateManager.getOrCreateSerializer(jsonSchema, \"fast_stringify_zod\");\n } catch {\n // Silently skip serializer compilation if schema conversion fails\n }\n } else if (TypeBoxLoader.isTypeBoxSchema(schema)) {\n AjvStateManager.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_typebox\",\n );\n } else if (typeof schema === \"object\" && schema !== null) {\n AjvStateManager.getOrCreateSerializer(\n schema as JSONSchema,\n \"fast_stringify_json\",\n );\n }\n }\n\n return responseSchemas;\n};\n","import type { RequestSchema } from \"../../decorators/validation/validate_types.js\";\nimport type { ServerRouteHandler } from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\n\n/**\n * Wraps a route handler with validation logic for body, query, or all request data.\n * Similar to the @validate decorator but for inline route definitions.\n *\n * @param handler - The original route handler\n * @param options - Validation schemas for body, query, or all\n * @returns Wrapped handler that validates and injects typed parameters\n */\nexport const wrapHandlerWithValidation = (\n handler: ServerRouteHandler,\n options: {\n body?: RequestSchema;\n query?: RequestSchema;\n all?: RequestSchema;\n },\n): ServerRouteHandler => {\n return async function (req: Request, res: Response, ...args: any[]) {\n try {\n const newArgs: any[] = [req, res, ...args];\n\n if (options.body) {\n const validatedBody = req.validate(options.body, true);\n newArgs.push(validatedBody);\n }\n\n if (options.query) {\n const validatedQuery = req.validateQuery(options.query, true);\n newArgs.push(validatedQuery);\n }\n\n if (options.all) {\n const validatedAll = req.validateAll(options.all, true);\n newArgs.push(validatedAll);\n }\n\n return handler(...(newArgs as Parameters<typeof handler>));\n } catch (error) {\n return res.badRequest(error);\n }\n };\n};\n","import type { SwaggerRouteOptions } from \"../../plugins/swagger/swagger_types.js\";\nimport type {\n HttpMethod,\n ServerRouteHandler,\n ServerRouteMiddleware,\n} from \"../../runtime/native_server/server_types.js\";\nimport type { Request } from \"../http/request.js\";\nimport type { Response } from \"../http/response.js\";\nimport type { Params, Route, RouteResponseSchemas } from \"./router_type.js\";\n\nimport {\n compileResponseSchemas,\n compileRequestSchemas,\n} from \"../../ajv/schema_compiler.js\";\nimport type {\n ControllerHandler,\n StandardMethodOptions,\n} from \"../server_types.js\";\nimport type { RequestSchema } from \"../../decorators/validation/validate_types.js\";\nimport { wrapHandlerWithValidation } from \"./validation_wrapper.js\";\n\nclass Node {\n staticChildren: Map<string, Node>;\n paramChild: { node: Node; name: string } | null;\n wildcardChild: Node | null;\n middleware: ServerRouteMiddleware[] | null;\n handler: ((req: Request, res: Response) => void) | null;\n paramName: string | null;\n\n constructor() {\n this.staticChildren = new Map();\n this.paramChild = null;\n this.wildcardChild = null;\n this.middleware = null;\n this.handler = null;\n this.paramName = null;\n }\n}\n\ntype CachedRoute = {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n responseSchemas?: RouteResponseSchemas;\n};\n\n/**\n * Singleton that handles the routing of requests to the appropriate handler(s).\n */\nexport class Router {\n private trees: Map<string, Node>;\n private routes: Route[];\n private middlewares: ServerRouteMiddleware[];\n private basePath: string;\n private staticRouteCache: Map<string, CachedRoute>;\n private handlerResponseSchemas: Map<ServerRouteHandler, RouteResponseSchemas>;\n\n /**\n * Create a new router with an optional base path and default middlewares.\n * Base path is normalized so it never produces duplicate slashes and never ends with a trailing slash (except root).\n * @param basePath - The base path for all routes in this router\n * @param middlewares - Default middlewares to apply to all routes\n * @param options - Router configuration options\n */\n constructor(\n basePath: string = \"\",\n middlewares: ServerRouteMiddleware[] = [],\n ) {\n this.trees = new Map();\n this.routes = [];\n this.middlewares = middlewares;\n this.basePath = this.normalizeBasePath(basePath);\n this.staticRouteCache = new Map();\n this.handlerResponseSchemas = new Map();\n }\n\n /** Returns a shallow copy of all registered routes. */\n getRoutes(): Route[] {\n return this.routes.slice();\n }\n\n /**\n * Add or update a route\n * @internal\n */\n addOrUpdate(\n method: HttpMethod,\n path: string,\n middleware: ServerRouteMiddleware[],\n handler: ServerRouteHandler,\n validationSchemas?: {\n body?: RequestSchema;\n query?: RequestSchema;\n all?: RequestSchema;\n },\n swaggerOptions?: SwaggerRouteOptions,\n ): void {\n method = method.toUpperCase() as HttpMethod;\n const clean = path.split(\"?\")[0];\n\n // Pre-compile request schemas (body and query) for faster validation\n compileRequestSchemas(validationSchemas?.body, validationSchemas?.query);\n\n // Compile and cache response schemas from swagger options\n const responseSchemas = compileResponseSchemas(swaggerOptions?.responses);\n\n // Wrap handler with validation logic if schemas are provided\n const hasValidation =\n validationSchemas &&\n (validationSchemas.body ||\n validationSchemas.query ||\n validationSchemas.all);\n const finalHandler = hasValidation\n ? wrapHandlerWithValidation(handler, validationSchemas!)\n : handler;\n\n // Only store validationSchemas if at least one schema is defined\n const finalValidationSchemas = hasValidation\n ? validationSchemas\n : undefined;\n\n // ensure root exists\n let root = this.trees.get(method);\n if (!root) {\n root = new Node();\n this.trees.set(method, root);\n }\n\n const trimmed = clean.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n\n let isStaticRoute = true;\n const paramNames: string[] = [];\n\n let node = root;\n for (const seg of segments) {\n if (seg === \"*\") {\n isStaticRoute = false;\n if (!node.wildcardChild) {\n node.wildcardChild = new Node();\n }\n node = node.wildcardChild;\n break;\n }\n\n if (seg.startsWith(\":\")) {\n isStaticRoute = false;\n const name = seg.slice(1);\n paramNames.push(name);\n if (!node.paramChild) {\n node.paramChild = { node: new Node(), name };\n }\n node = node.paramChild.node;\n continue;\n }\n\n // static segment\n if (!node.staticChildren.has(seg)) {\n node.staticChildren.set(seg, new Node());\n }\n node = node.staticChildren.get(seg)!;\n }\n\n // assign middleware & handler (use wrapped handler if validation is enabled)\n node.middleware = middleware;\n node.handler = finalHandler;\n\n if (paramNames.length > 0) {\n node.paramName = paramNames.join(\",\");\n }\n\n // Store response schemas in O(1) lookup map for dynamic routes\n // Use the original handler as key (before wrapping) for consistency\n if (responseSchemas) {\n this.handlerResponseSchemas.set(handler, responseSchemas);\n }\n\n if (isStaticRoute) {\n const normalizedPath = \"/\" + trimmed;\n const cacheKey = `${method}:${normalizedPath}`;\n this.staticRouteCache.set(cacheKey, {\n middleware,\n handler: finalHandler,\n params: {},\n responseSchemas,\n });\n } else {\n // If updating a route that was previously static, clear old cache entry\n const normalizedPath =\n \"/\" + trimmed.replace(/:[^/]+/g, \"\").replace(/\\/+/g, \"/\");\n const cacheKey = `${method}:${normalizedPath}`;\n this.staticRouteCache.delete(cacheKey);\n }\n\n // upsert in registry\n const idx = this.routes.findIndex(\n (r) => r.method === method && r.path === path,\n );\n if (idx !== -1) {\n this.routes[idx].middleware = middleware;\n this.routes[idx].handler = finalHandler;\n this.routes[idx].swaggerOptions = swaggerOptions;\n this.routes[idx].responseSchemas = responseSchemas;\n this.routes[idx].validationSchemas = finalValidationSchemas;\n return;\n }\n\n this.routes.push({\n method,\n path,\n middleware,\n handler: finalHandler,\n swaggerOptions,\n responseSchemas,\n validationSchemas: finalValidationSchemas,\n });\n }\n\n /**\n * Find the matching route for the given HTTP method and path.\n * Returns the resolved middleware chain, handler, extracted params, and response schemas; or null if not found.\n * Uses O(1) cache lookup for static routes, falls back to O(k) tree traversal for dynamic routes.\n */\n find(\n method: string,\n rawPath: string,\n ): {\n middleware: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n params: Params;\n responseSchemas?: RouteResponseSchemas;\n } | null {\n method = method.toUpperCase();\n\n // O(1) lookup for static routes\n let pathWithoutQuery = rawPath;\n const queryIndex = rawPath.indexOf(\"?\");\n if (queryIndex !== -1) {\n pathWithoutQuery = rawPath.substring(0, queryIndex);\n }\n const cacheKey = `${method}:${pathWithoutQuery}`;\n const cachedRoute = this.staticRouteCache.get(cacheKey);\n if (cachedRoute) {\n return cachedRoute;\n }\n\n // fall back to O(k) tree traversal for dynamic routes\n const root = this.trees.get(method);\n if (!root) {\n return null;\n }\n\n const trimmed = pathWithoutQuery.replace(/^\\/+|\\/+$/g, \"\");\n const segments = trimmed.length === 0 ? [] : trimmed.split(\"/\");\n const params: Params = {};\n\n let node = root;\n for (let i = 0; i < segments.length; i++) {\n const seg = segments[i];\n\n if (node.staticChildren.has(seg)) {\n node = node.staticChildren.get(seg)!;\n continue;\n }\n\n if (node.paramChild) {\n params[node.paramChild.name] = seg;\n node = node.paramChild.node;\n continue;\n }\n\n if (node.wildcardChild) {\n params[\"*\"] = segments.slice(i).join(\"/\");\n node = node.wildcardChild;\n break;\n }\n\n return null;\n }\n\n if (!node.handler || !node.middleware) {\n return null;\n }\n\n // O(1) lookup for response schemas using handler map\n const responseSchemas = this.handlerResponseSchemas.get(node.handler);\n\n return {\n middleware: node.middleware,\n handler: node.handler,\n params,\n responseSchemas,\n };\n }\n\n /**\n * Private helper method to register a route with the given HTTP method.\n * Handles middleware detection, path joining, and swagger options merging.\n * @internal\n */\n private extractOptionsAndHandler(\n optionsOrHandler: StandardMethodOptions | ServerRouteHandler,\n maybeHandler?: ServerRouteHandler,\n ): {\n middlewares: ServerRouteMiddleware[];\n handler: ServerRouteHandler;\n body?: RequestSchema;\n query?: RequestSchema;\n all?: RequestSchema;\n swaggerOptions?: SwaggerRouteOptions;\n } {\n if (typeof optionsOrHandler === \"function\") {\n return {\n middlewares: [],\n handler: optionsOrHandler as ServerRouteHandler,\n swaggerOptions: undefined,\n };\n }\n\n const options = optionsOrHandler as StandardMethodOptions;\n const middlewares = Array.isArray(options.middlewares)\n ? options.middlewares\n : options.middlewares\n ? [options.middlewares]\n : [];\n\n return {\n middlewares,\n handler: maybeHandler!,\n body: options.body,\n query: options.query,\n all: options.all,\n swaggerOptions: options.swagger,\n };\n }\n\n /**\n * Register a GET route under this router's base path with type-safe path parameters.\n */\n get<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n get<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n get<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"GET\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a POST route under this router's base path with type-safe path parameters.\n */\n post<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n post<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n post<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"POST\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a PATCH route under this router's base path with type-safe path parameters.\n */\n patch<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n patch<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n patch<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"PATCH\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a PUT route under this router's base path with type-safe path parameters.\n */\n put<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n put<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n put<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"PUT\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register a DELETE route under this router's base path with type-safe path parameters.\n */\n delete<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n delete<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n delete<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"DELETE\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register an OPTIONS route under this router's base path with type-safe path parameters.\n */\n options<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n options<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n options<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"OPTIONS\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Register an HEAD route under this router's base path with type-safe path parameters.\n */\n head<TPath extends string = string>(\n path: TPath,\n handler: ControllerHandler<TPath>,\n ): void;\n head<\n TPath extends string = string,\n TResponses extends Record<number, RequestSchema> = Record<\n number,\n RequestSchema\n >,\n >(\n path: TPath,\n options: StandardMethodOptions<TResponses>,\n handler: ControllerHandler<TPath, TResponses>,\n ): void;\n head<TPath extends string = string>(\n path: TPath,\n optionsOrHandler: StandardMethodOptions | ControllerHandler<TPath>,\n maybeHandler?: ControllerHandler<TPath>,\n ): void {\n const fullPath = this.joinPath(path);\n const { middlewares, handler, body, query, all, swaggerOptions } =\n this.extractOptionsAndHandler(optionsOrHandler, maybeHandler);\n\n const combined = [...this.middlewares, ...middlewares];\n const validationSchemas = { body, query, all };\n\n this.addOrUpdate(\n \"HEAD\",\n fullPath,\n combined,\n handler,\n validationSchemas,\n swaggerOptions,\n );\n }\n\n /**\n * Create a grouped router that shares a base path and middlewares.\n * The callback receives a child router where routes are defined; routes\n * are then merged back into the parent with the composed base path and middlewares.\n */\n group(\n path: string,\n middleware: ServerRouteMiddleware[] | ServerRouteMiddleware,\n cb: (router: Router) => void,\n ): void;\n group(path: string, cb: (router: Router) => void): void;\n group(\n path: string,\n middlewareOrCb:\n | ServerRouteMiddleware[]\n | ServerRouteMiddleware\n | ((router: Router) => void),\n maybeCb?: (router: Router) => void,\n ): void {\n const groupMiddlewares = Array.isArray(middlewareOrCb)\n ? middlewareOrCb\n : typeof middlewareOrCb === \"function\"\n ? []\n : middlewareOrCb\n ? [middlewareOrCb]\n : [];\n const cb = (\n Array.isArray(middlewareOrCb)\n ? maybeCb\n : typeof middlewareOrCb === \"function\"\n ? (middlewareOrCb as (router: Router) => void)\n : undefined\n ) as ((router: Router) => void) | undefined;\n\n const childBase = this.joinPath(path);\n const child = new Router(childBase, [\n ...this.middlewares,\n ...groupMiddlewares,\n ]);\n cb?.(child);\n for (const r of child.getRoutes()) {\n this.addOrUpdate(\n r.method as HttpMethod,\n r.path,\n r.middleware,\n r.handler,\n r.validationSchemas,\n r.swaggerOptions,\n );\n }\n }\n\n /**\n * Apply global middlewares to all routes\n * @param middlewares - The middlewares to apply\n * @internal\n */\n applyGlobalMiddlewaresToAllRoutes(\n middlewares: ServerRouteMiddleware[],\n ): void {\n for (const route of this.routes) {\n const updatedMiddleware = [...middlewares, ...(route.middleware || [])];\n this.addOrUpdate(\n route.method as HttpMethod,\n route.path,\n updatedMiddleware,\n route.handler,\n );\n }\n }\n\n private normalizeBasePath(path: string): string {\n if (!path) {\n return \"\";\n }\n\n let normalized = path.replace(/\\s+/g, \"\");\n normalized = normalized.replace(/\\/+/g, \"/\");\n if (!normalized.startsWith(\"/\")) {\n normalized = \"/\" + normalized;\n }\n\n if (normalized.length > 1) {\n normalized = normalized.replace(/\\/+$/g, \"\");\n }\n\n return normalized;\n }\n\n private joinPath(path: string): string {\n const parts = [this.basePath, path].filter(\n (v) => typeof v === \"string\" && v.length > 0,\n ) as string[];\n let joined = parts.join(\"/\");\n joined = joined.replace(/\\/+/g, \"/\");\n if (!joined.startsWith(\"/\")) {\n joined = \"/\" + joined;\n }\n if (joined.length > 1) {\n joined = joined.replace(/\\/+$/g, \"\");\n }\n return joined;\n }\n\n /**\n * Clears all registered routes (useful for testing or hot reload scenarios)\n * @internal\n */\n clearRoutes(): void {\n this.routes = [];\n this.staticRouteCache.clear();\n this.handlerResponseSchemas.clear();\n this.trees.clear();\n }\n}\n\n/** Main singleton router instance */\nexport const router = new Router();\n","import { nativeFs } from \"../runtime/native_fs.js\";\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 { router } from \"../server/router/router.js\";\nimport { cronUIInstance } from \"./cron-ui.js\";\nimport {\n CronSchedule,\n CronScheduleParams,\n CronUIOptions,\n} from \"./cron.types.js\";\n\nexport class CronService {\n static scheduledJobs: CronSchedule[] = [];\n static logger = logger.child({ scope: \"CronService\" });\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 this.logger.info(\"Scheduling cron jobs\");\n if (!this.scheduledJobs.length) {\n this.logger.info(\"No cron jobs to schedule\");\n return;\n }\n\n for (const { name, args } of this.scheduledJobs) {\n this.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 this.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 this.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 nativeFs.glob(pattern, {\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 this.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\nexport const cronUi = async (cronUIOptions?: CronUIOptions) => {\n if (!cronUIOptions || cronUIOptions.path.length === 0) {\n throw new BaldaError(\"Cron UI path is required\");\n }\n\n const html = await cronUIInstance.generate();\n\n router.addOrUpdate(\"GET\", cronUIOptions.path, [], (_req, res) => {\n res.html(html);\n });\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 const loggerTemplate = this.getLoggerTemplate();\n this.logger.info(`Creating logger.${ext} file...`);\n await nativeFs.writeFile(\n `${this.srcPath}/logger.${ext}`,\n new TextEncoder().encode(loggerTemplate),\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\";\nimport { logger } from \"./logger.js\";\n\nconst serverInstance = new Server({\n port: 80,\n host: \"0.0.0.0\",\n logger,\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 imports.push('import { logger } from \"./logger.js\";');\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 logger.info(\\`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 static getLoggerTemplate() {\n return `import pino from \"pino\";\nimport { CommandRegistry } from \"../command_registry.js\";\n\nexport const logger = pino({ level: \"info\" });\nCommandRegistry.setLogger(logger);\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 { 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\";\nimport { nativeFs } from \"../runtime/native_fs.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 static logger = logger.child({ scope: \"QueueService\" });\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 this.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 this.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 this.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 this.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 this.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 this.logger.info(`Subscribing to custom queue: ${topic}`);\n await pubsub.subscribe(topic, handler);\n }\n\n this.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 nativeFs.glob(pattern, {\n cwd: nativeCwd.getCwd(),\n });\n\n this.logger.info(`Pattern \"${pattern}\" matched ${files.length} file(s)`);\n allFiles.push(...files);\n }\n\n if (allFiles.length === 0) {\n this.logger.warn(\"No files matched the provided patterns\");\n return;\n }\n\n this.logger.info(`Importing ${allFiles.length} queue handler file(s)`);\n\n await Promise.all(\n allFiles.map(async (file) => {\n this.logger.debug(`Importing: ${file}`);\n await import(file).catch((error) => {\n this.logger.error(`Error importing queue handler: ${file}`);\n this.logger.error(error);\n if (options.throwOnError) {\n throw error;\n }\n });\n }),\n );\n\n this.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 type { Logger } from \"pino\";\nimport { logger } from \"../logger/logger.js\";\nimport { nativeCwd } from \"../runtime/native_cwd.js\";\nimport { nativePath } from \"../runtime/native_path.js\";\nimport { 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\";\nimport { nativeFs } from \"../runtime/native_fs.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 loggerPath = \"src/logger.ts\";\n static logger = logger.child({ scope: \"CommandRegistry\" });\n\n /**\n * Override the default logger used by CommandRegistry and all Command subclasses.\n * @param customLogger - A pino Logger instance\n */\n static setLogger(customLogger: Logger) {\n CommandRegistry.logger = customLogger.child({ scope: \"CommandRegistry\" });\n Command.logger = customLogger.child({ scope: \"Command\" });\n }\n\n /**\n * Dynamically imports the logger file and sets it as the logger for all commands.\n * The file must export a named `logger` that is a pino Logger instance.\n * @param overridePath - Optional path override (e.g. from CommandOptions.loggerPath). Falls back to CommandRegistry.loggerPath.\n */\n static async loadLogger(overridePath?: string): Promise<void> {\n const loggerPath = overridePath || CommandRegistry.loggerPath;\n try {\n const mod = await import(nativePath.join(nativeCwd.getCwd(), loggerPath));\n if (mod.logger) {\n CommandRegistry.setLogger(mod.logger);\n }\n } catch {\n CommandRegistry.logger.debug(\n `Could not load logger from ${loggerPath}, using default logger`,\n );\n }\n }\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 getLogger() {\n return CommandRegistry.logger;\n }\n\n setLogger(logger: Logger) {\n CommandRegistry.logger = logger.child({ scope: \"CommandRegistry\" });\n Command.logger = logger.child({ scope: \"Command\" });\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 nativeFs.glob(commandsPattern, {\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 // Load user's logger early so loadCommands logs with the correct logger\n await CommandRegistry.loadLogger();\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 // Load user's logger from loggerPath\n await CommandRegistry.loadLogger(commandClass.options?.loggerPath);\n\n // Check if the command has the help flag\n commandClass.handleHelpFlag(commandClass.flags);\n\n // Validate unknown flags\n commandClass.validateUnknownFlags(commandClass);\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"]}
|