{"version":3,"sources":["../src/args/index.js"],"sourcesContent":["// Arguments discovery and parsing module\n// This module provides utilities for parsing CLI arguments and detecting flags\n\nimport { readFileSync, existsSync } from \"fs\";\nimport { resolve, dirname, basename, extname, join, isAbsolute } from \"path\";\nimport { config } from \"dotenv\";\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n/**\n * Parse command line arguments with support for aliases, overrides, and defaults\n *\n * Precedence order (highest to lowest):\n * 1. Overrides (constructor config)\n * 2. CLI args (command line)\n * 3. Config files (loaded from files)\n * 4. Environment variables (process.env)\n * 5. Defaults (constructor config)\n */\nexport class Args {\n    args = {};\n    flags = {};\n    options = {};\n    commands = [];\n    usedKeys = new Set();\n    aliases = {};\n    overrides = {};\n    defaults = {};\n    prefixes = [];\n    nots = [];\n    configValues = {};\n    configsLoaded = [];\n    env = \"local\";\n\n    constructor(contextOrConfig = {}, config) {\n        // Support (context, config) or (config) for backward compatibility\n        const hasContext = config !== undefined;\n        const configToUse = hasContext ? (config ?? {}) : (contextOrConfig ?? {});\n        const context = hasContext ? contextOrConfig : undefined;\n\n        // Set defaults first\n        this.aliases = {};\n        this.overrides = {};\n        this.defaults = {};\n        this.prefixes = [\"not\", \"no\"];\n\n        // Apply configuration\n        if (Object.keys(configToUse).length > 0) {\n            this.configure(configToUse);\n        }\n\n        // Parse arguments first to get environment\n        const args = configToUse.args || process.argv.slice(2);\n        this.parseArgs(args);\n\n        // Runtime environment selector (--env / ENV / NODE_ENV). Default \"local\".\n        // Prefer process env before .env (pm2 ecosystem / ensure-env.cjs). After\n        // loadDotEnv, re-resolve so a late ENV (or .env ENV=) still applies —\n        // pm2 has been observed to omit ecosystem env on the first start after\n        // a kill_timeout SIGKILL.\n        this.env = this.get(\"env\")?.toLowerCase() || \"local\";\n\n        // Load .env file (single file with LOCAL / PRODUCTION / STAGE variants)\n        this.loadDotEnv();\n\n        const envAfterDotEnv = this.get(\"env\")?.toLowerCase();\n        if (envAfterDotEnv) {\n            this.env = envAfterDotEnv;\n        }\n\n        // Load configuration files\n        this.loadConfigFiles();\n\n        // Check for conflicts (short + long form of same option)\n        this.checkConflicts();\n\n        // Register cleanup to warn about unused CLI args on exit (when context has registerCleanup)\n        if (context && typeof context.registerCleanup === \"function\") {\n            context.registerCleanup((ctx) => {\n                const unusedArgs = ctx.args.getUnused();\n                if (unusedArgs.length > 0) {\n                    ctx.logger.warn(\"Unused CLI args:\", unusedArgs.join(\", \"));\n                }\n            });\n        }\n    }\n\n    /**\n     * Configure Args options\n     * Only parameters present in config are updated\n     * Note: Args is special - it's initialized first, so it can't take context\n     */\n    configure(config) {\n        if (config.aliases !== undefined) {\n            this.aliases = config.aliases;\n        }\n        if (config.overrides !== undefined) {\n            this.overrides = config.overrides;\n        }\n        if (config.defaults !== undefined) {\n            this.defaults = config.defaults;\n        }\n        if (config.prefixes !== undefined) {\n            this.prefixes = config.prefixes;\n        }\n        // Note: args array can't be reconfigured after construction\n    }\n\n    /**\n     * Initialize Args instance.\n     * Args.init(context, config) when used from init/setup: context has registerCleanup, Args registers unused-args cleanup.\n     * Args.init(config) for standalone use (no cleanup).\n     */\n    static init(contextOrConfig, config) {\n        if (config !== undefined) {\n            return new Args(contextOrConfig, config);\n        }\n        return new Args(contextOrConfig ?? {});\n    }\n\n    /**\n     * Parse command line arguments\n     */\n    parseArgs(args) {\n        let i = 0;\n        while (i < args.length) {\n            const arg = args[i];\n\n            if (arg.startsWith(\"--\")) {\n                // Long option: --key=value or --key\n                const [key, value] = this.parseLongOption(arg);\n                this.setValue(key, value);\n                i++;\n            } else if (arg.startsWith(\"-\")) {\n                // Short option: -k=value, -k, or bundled -vsd\n                const result = this.parseShortOption(arg, args, i);\n                if (result.consumed > 0) {\n                    i += result.consumed;\n                } else {\n                    i++;\n                }\n            } else {\n                // Command (no prefix)\n                this.commands.push(arg);\n                i++;\n            }\n        }\n    }\n\n    /**\n     * Parse long option (--key=value or --key)\n     */\n    parseLongOption(arg) {\n        const key = arg.slice(2); // Remove '--'\n\n        // Check for negative flags (--no-debug, --not-verbose)\n        const prefix = this.prefixes.find((p) => key.startsWith(p));\n        if (prefix) {\n            let strippedKey = key.slice(prefix.length);\n            // Remove leading dash if present\n            if (strippedKey.startsWith(\"-\")) {\n                strippedKey = strippedKey.slice(1);\n            }\n            this.nots.push(key);\n            return [strippedKey, false];\n        }\n\n        if (key.includes(\"=\")) {\n            // --key=value - need to handle quoted values properly\n            const eqIndex = key.indexOf(\"=\");\n            const optionKey = key.slice(0, eqIndex);\n            const value = key.slice(eqIndex + 1);\n            return [optionKey, this.parseValue(value)];\n        } else {\n            // --key (boolean flag)\n            return [key, true];\n        }\n    }\n\n    /**\n     * Parse short option (-k=value, -k, or bundled -vsd)\n     */\n    parseShortOption(arg, args, index) {\n        const key = arg.slice(1); // Remove '-'\n\n        // Check if it's a single short flag with value (like -vo file.txt)\n        if (key.length === 1 && index + 1 < args.length && !args[index + 1].startsWith(\"-\")) {\n            // Single short flag with separate value\n            const value = args[index + 1];\n            this.setValue(key, this.parseValue(value));\n            return { consumed: 2 }; // Consumed this flag and the next argument\n        }\n\n        // Check if it's a bundled short flags (like -vsd)\n        if (key.length > 1 && !key.includes(\"=\")) {\n            // Handle bundled flags: -vsd = -v -s -d\n            // Process each character, valid ones become flags, invalid ones become unused\n            for (let i = 0; i < key.length; i++) {\n                const shortKey = key[i];\n                if (shortKey in this.aliases) {\n                    this.setValue(shortKey, true);\n                } else {\n                    // Invalid short flag - add to unused keys\n                    this.args[shortKey] = true;\n                }\n            }\n            return { consumed: 1 };\n        }\n\n        if (key.includes(\"=\")) {\n            // -k=value or -vsdk=4 - need to handle quoted values properly\n            const eqIndex = key.indexOf(\"=\");\n            const optionKey = key.slice(0, eqIndex);\n            const value = key.slice(eqIndex + 1);\n\n            // Check if this is a bundled flag with value on the last one (like -vsdk=4)\n            if (optionKey.length > 1) {\n                // Handle bundled flags with value on the last one: -vsdk=4 = -v -s -d -k=4\n                for (let i = 0; i < optionKey.length - 1; i++) {\n                    const shortKey = optionKey[i];\n                    if (shortKey in this.aliases) {\n                        this.setValue(shortKey, true);\n                    } else {\n                        this.args[shortKey] = true;\n                    }\n                }\n                // Handle the last flag with value\n                const lastKey = optionKey[optionKey.length - 1];\n                if (lastKey in this.aliases) {\n                    this.setValue(lastKey, this.parseValue(value));\n                } else {\n                    this.args[lastKey] = this.parseValue(value);\n                }\n            } else {\n                // Single flag with value: -k=value\n                this.setValue(optionKey, this.parseValue(value));\n            }\n            return { consumed: 1 };\n        } else {\n            // -k (boolean flag)\n            this.setValue(key, true);\n            return { consumed: 1 };\n        }\n    }\n\n    /**\n     * Parse value (handle quotes)\n     */\n    parseValue(value) {\n        // Remove surrounding quotes if present\n        if (\n            (value.startsWith(\"\\\"\") && value.endsWith(\"\\\"\")) ||\n            (value.startsWith(\"'\") && value.endsWith(\"'\"))\n        ) {\n            return value.slice(1, -1);\n        }\n        return value;\n    }\n\n    /**\n     * Set a value with proper categorization\n     */\n    setValue(key, value) {\n        // Resolve alias if it's a short form\n        const resolvedKey = this.aliases[key] || key;\n\n        if (typeof value === \"boolean\") {\n            this.flags[resolvedKey] = value;\n        } else {\n            this.options[resolvedKey] = value;\n        }\n\n        // Always set the value in lowercase (for case-insensitive lookup, like legacy)\n        this.args[resolvedKey.toLowerCase()] = value;\n    }\n\n    /**\n     * Check for conflicts (short + long form of same option)\n     */\n    checkConflicts() {\n        const conflicts = [];\n\n        for (const [shortKey, longKey] of Object.entries(this.aliases)) {\n            const hasShort = this.args[shortKey] !== undefined;\n            const hasLong = this.args[longKey] !== undefined;\n\n            if (hasShort && hasLong) {\n                conflicts.push(`Both -${shortKey} and --${longKey} specified`);\n            }\n        }\n\n        if (conflicts.length > 0) {\n            throw new Error(`Argument conflicts: ${conflicts.join(\", \")}`);\n        }\n    }\n\n    /**\n     * Get a value with precedence order\n     */\n    get(key) {\n        const resolvedKey = this.aliases[key] || key;\n        // Normalize key to lowercase for case-insensitive lookups\n        // This ensures that params.get(\"showAuthRequest\") works regardless of how\n        // the key was provided (CLI: --showAuthRequest, --showauthrequest, env: SHOW_AUTH_REQUEST)\n        const lcKey = resolvedKey.toLowerCase();\n        this.usedKeys.add(lcKey);\n\n        // Precedence order: overrides > CLI args > config files > env vars > defaults\n        // All lookups are case-insensitive using lcKey\n        \n        // Case-insensitive lookup for overrides\n        const overrideKey = Object.keys(this.overrides).find(k => k.toLowerCase() === lcKey);\n        if (overrideKey !== undefined) {\n            return this.overrides[overrideKey];\n        }\n\n        // Case-insensitive lookup for CLI args\n        // Try environment-specific CLI args first (e.g., --silent_local, --debug_production)\n        const lcKeyWithEnv = `${lcKey}${this.env ? `_${this.env.toLowerCase()}` : \"\"}`;\n        if (this.env && this.args[lcKeyWithEnv] !== undefined) {\n            return this.args[lcKeyWithEnv];\n        } else if (this.args[lcKey] !== undefined) {\n            return this.args[lcKey];\n        }\n\n        // Case-insensitive lookup for config file values\n        const configKey = Object.keys(this.configValues).find(k => k.toLowerCase() === lcKey);\n        if (configKey !== undefined) {\n            return this.configValues[configKey];\n        }\n\n        // Environment variable (convert key to ENV_VAR format)\n        // Use resolvedKey (original case) for env var conversion to preserve camelCase -> SNAKE_CASE\n        const envKey = this.toEnvKey(resolvedKey);\n        const envKeyWithEnv = `${envKey}${this.env ? `_${this.env.toUpperCase()}` : \"\"}`;\n\n        // Try environment-specific env vars first (e.g., SILENT_LOCAL, DEBUG_PRODUCTION)\n        const envSpecificKey = Object.keys(process.env).find(\n            (k) => this.env && k.toUpperCase() === envKeyWithEnv\n        );\n        \n        // Try exact match first (case-insensitive)\n        const envKeyFound = Object.keys(process.env).find((k) => k.toUpperCase() === envKey);\n        \n        // If not found, try alternative formats (e.g., TRESTLE_IDXPLUS_2_ID -> TRESTLE_IDXPLUS2_ID)\n        // This handles cases where env var names don't follow standard camelCase->SNAKE_CASE conversion\n        const envKeyAlt = envKey.replace(/_([0-9])/g, \"$1\"); // Remove underscore before numbers\n        const envKeyAltFound = !envKeyFound ? Object.keys(process.env).find((k) => k.toUpperCase() === envKeyAlt) : null;\n\n        if (envSpecificKey) {\n            return process.env[envSpecificKey];\n        } else if (envKeyFound) {\n            return process.env[envKeyFound];\n        } else if (envKeyAltFound) {\n            return process.env[envKeyAltFound];\n        }\n\n        // Case-insensitive lookup for defaults\n        const defaultKey = Object.keys(this.defaults).find(k => k.toLowerCase() === lcKey);\n        if (defaultKey !== undefined) {\n            return this.defaults[defaultKey];\n        }\n\n        // NODE_ENV fallback for 'env' key (like legacy)\n        if (lcKey === \"env\" && process.env.NODE_ENV !== undefined) {\n            return process.env.NODE_ENV;\n        }\n\n        return undefined;\n    }\n\n    /**\n     * Return which layer provided the value for get(key): overrides, cli, config, env, or default.\n     * Does not add key to usedKeys. Use after get(key) when you need the origin.\n     */\n    getSource(key) {\n        const resolvedKey = this.aliases[key] || key;\n        const lcKey = resolvedKey.toLowerCase();\n\n        const overrideKey = Object.keys(this.overrides).find(k => k.toLowerCase() === lcKey);\n        if (overrideKey !== undefined) return \"overrides\";\n\n        const lcKeyWithEnv = `${lcKey}${this.env ? `_${this.env.toLowerCase()}` : \"\"}`;\n        if (this.env && this.args[lcKeyWithEnv] !== undefined) return \"cli\";\n        if (this.args[lcKey] !== undefined) return \"cli\";\n\n        const configKey = Object.keys(this.configValues).find(k => k.toLowerCase() === lcKey);\n        if (configKey !== undefined) return \"config\";\n\n        const envKey = this.toEnvKey(resolvedKey);\n        const envKeyWithEnv = `${envKey}${this.env ? `_${this.env.toUpperCase()}` : \"\"}`;\n        const envSpecificKey = Object.keys(process.env).find(k => this.env && k.toUpperCase() === envKeyWithEnv);\n        const envKeyFound = Object.keys(process.env).find(k => k.toUpperCase() === envKey);\n        const envKeyAlt = envKey.replace(/_([0-9])/g, \"$1\");\n        const envKeyAltFound = !envKeyFound ? Object.keys(process.env).find(k => k.toUpperCase() === envKeyAlt) : null;\n        if (envSpecificKey || envKeyFound || envKeyAltFound) return \"env\";\n\n        const defaultKey = Object.keys(this.defaults).find(k => k.toLowerCase() === lcKey);\n        if (defaultKey !== undefined) return \"default\";\n        if (lcKey === \"env\" && process.env.NODE_ENV !== undefined) return \"env\";\n\n        return undefined;\n    }\n\n    /**\n     * Set a value (for testing/internal use)\n     */\n    set(key, value) {\n        this.args[key] = value;\n    }\n\n    /**\n     * Check if a command exists (case-insensitive)\n     */\n    hasCommand(cmd) {\n        return this.commands.some((command) => command.toLowerCase() === cmd.toLowerCase());\n    }\n\n    /**\n     * Get all commands\n     */\n    getCommands() {\n        return [...this.commands];\n    }\n\n    /**\n     * Get used keys (as array)\n     */\n    getUsed() {\n        return Array.from(this.usedKeys);\n    }\n\n    /**\n     * Get unused keys (as array)\n     */\n    getUnused() {\n        const unused = [];\n\n        for (const key of Object.keys(this.args)) {\n            if (!this.usedKeys.has(key) && !this.nots.includes(key)) {\n                unused.push(key);\n            }\n        }\n\n        return unused;\n    }\n\n    /**\n     * Convert key to environment variable format\n     * Converts camelCase to SNAKE_CASE\n     */\n    toEnvKey(key) {\n        // If already in SNAKE_CASE (contains underscores and is uppercase), return as-is\n        if (key.includes(\"_\") && key === key.toUpperCase()) {\n            return key;\n        }\n\n        // Convert camelCase to SNAKE_CASE\n        // Standard conversion: add underscore before capitals and numbers\n        return key\n            .replace(/[A-Z0-9]/g, (match, offset) =>\n                offset === 0 ? match : \"_\" + match.toLowerCase()\n            )\n            .toUpperCase();\n    }\n\n    /**\n     * Load .env file\n     */\n    loadDotEnv() {\n        const dotEnvPath = this.get(\"dotEnvPath\") || process.cwd();\n        const dotEnvFile = this.get(\"dotEnvFile\") || \".env\";\n\n        // If custom dotEnvFile is specified, use it as-is\n        if (this.get(\"dotEnvFile\")) {\n            const customPath = resolve(dotEnvPath, dotEnvFile);\n            if (existsSync(customPath)) {\n                config({ path: customPath, quiet: true });\n            }\n            return;\n        }\n\n        // Prefer a single .env that holds all env-suffixed keys (KEY_LOCAL,\n        // KEY_PRODUCTION, …). Optional `.env.<env>` overlay is still supported\n        // for examples / one-off overrides, but only after the base .env.\n        let dotEnvPathFile = resolve(dotEnvPath, dotEnvFile);\n\n        if (!existsSync(dotEnvPathFile) && !this.get(\"dotEnvPath\")) {\n            const examplesPath = resolve(dotEnvPath, \"examples\");\n            const examplesEnvFile = resolve(examplesPath, dotEnvFile);\n            if (existsSync(examplesEnvFile)) {\n                dotEnvPathFile = examplesEnvFile;\n            } else {\n                dotEnvPathFile = resolve(dotEnvPath, \"..\", dotEnvFile);\n            }\n        }\n\n        if (dotEnvPathFile && existsSync(dotEnvPathFile)) {\n            config({ path: dotEnvPathFile, quiet: true });\n        }\n\n        // Optional overlay: .env.production / .env.local (does not replace base .env)\n        const envSpecificFile = `.env.${this.env}`;\n        const envSpecificPath = resolve(dotEnvPath, envSpecificFile);\n        if (existsSync(envSpecificPath) && envSpecificPath !== dotEnvPathFile) {\n            config({ path: envSpecificPath, quiet: true });\n        } else if (!this.get(\"dotEnvPath\")) {\n            const examplesOverlay = resolve(dotEnvPath, \"examples\", envSpecificFile);\n            if (existsSync(examplesOverlay)) {\n                config({ path: examplesOverlay, quiet: true });\n            }\n        }\n    }\n\n    /**\n     * Load configuration files\n     */\n    loadConfigFiles() {\n        this.configsLoaded = [];\n        this.configValues = {};\n\n        const _defaultConfigExtension = this.get(\"defaultConfigExtension\") || \"js\";\n        const optConfigFiles = this.get(\"config\") || this.get(\"configs\") || \"\";\n        const configFiles = optConfigFiles ? optConfigFiles.split(/,\\s*/) : [];\n        const optConfigFilePath = this.get(\"configPath\");\n\n        if (configFiles.length > 0) {\n            for (const cfgFile of configFiles) {\n                let notLoaded = false;\n                let notLoadedEnvSpecific = false;\n\n                const cfgFileWithPath = this.resolveFileWithPath(optConfigFilePath, cfgFile);\n                try {\n                    const cfgContents = this.requireConfigFile(cfgFileWithPath);\n                    this.configValues = { ...this.configValues, ...cfgContents };\n                    this.configsLoaded.push(cfgFileWithPath);\n                } catch {\n                    notLoaded = true;\n                }\n\n                const cfgEnvFileWithPath = this.resolveFileWithPath(\n                    optConfigFilePath,\n                    cfgFile,\n                    this.env\n                );\n                if (cfgEnvFileWithPath !== cfgFileWithPath) {\n                    try {\n                        const cfgContents = this.requireConfigFile(cfgEnvFileWithPath);\n                        this.configValues = { ...this.configValues, ...cfgContents };\n                        this.configsLoaded.push(cfgEnvFileWithPath);\n                    } catch {\n                        notLoadedEnvSpecific = true;\n                    }\n                } else {\n                    notLoadedEnvSpecific = true;\n                }\n\n                if (notLoaded && notLoadedEnvSpecific) {\n                    throw new Error(`can't load config file \"${cfgFileWithPath}\"`);\n                }\n            }\n        }\n    }\n\n    /**\n     * Resolve file path with environment-specific naming\n     */\n    resolveFileWithPath(\n        optConfigFilePath,\n        cfgFile,\n        env\n    ) {\n        let cfgFileWithPath = optConfigFilePath\n            ? isAbsolute(optConfigFilePath)\n                ? resolve(optConfigFilePath, cfgFile)\n                : resolve(process.cwd(), optConfigFilePath, cfgFile)\n            : isAbsolute(cfgFile)\n                ? cfgFile\n                : resolve(process.cwd(), cfgFile);\n\n        const { basePathWithName, extension } = this.splitPath(cfgFileWithPath);\n        if (env) {\n            cfgFileWithPath = `${basePathWithName}.${env}.${extension || \"js\"}`;\n        } else {\n            cfgFileWithPath = `${basePathWithName}.${extension || \"js\"}`;\n        }\n        return cfgFileWithPath;\n    }\n\n    /**\n     * Split file path into base path and extension\n     */\n    splitPath(filePath) {\n        const basePathWithName = join(dirname(filePath), basename(filePath, extname(filePath)));\n        const extension = extname(filePath).slice(1);\n        return { basePathWithName, extension };\n    }\n\n    /**\n     * Require a configuration file (supports .js and .json)\n     */\n    requireConfigFile(filePath) {\n        if (!existsSync(filePath)) {\n            throw new Error(`Config file not found: ${filePath}`);\n        }\n\n        const ext = extname(filePath).toLowerCase();\n        if (ext === \".json\") {\n            const content = readFileSync(filePath, \"utf8\");\n            return JSON.parse(content);\n        } else if (ext === \".js\") {\n            // For .js files, use require() which is safer than eval\n            try {\n                // Clear require cache to ensure fresh load\n                delete require.cache[require.resolve(filePath)];\n                return require(filePath);\n            } catch (error) {\n                throw new Error(`Failed to load JS config file: ${error instanceof Error ? error.message : String(error)}`);\n            }\n        } else {\n            throw new Error(`Unsupported file extension: ${ext}`);\n        }\n    }\n\n    /**\n     * Get all parsed data\n     */\n    getParsed() {\n        return {\n            command: this.commands[0] || \"\",\n            flags: { ...this.flags },\n            options: { ...this.options },\n            usedKeys: Array.from(this.usedKeys)\n        };\n    }\n\n    /**\n     * Set prefixes dynamically and re-parse arguments (like legacy)\n     */\n    setPrefixes(prefixes) {\n        const arr = Array.isArray(prefixes) ? prefixes : prefixes.split(/,\\s*/);\n        const sortedArr = arr.sort((a, b) =>\n            a.length < b.length ? 1 : a.length > b.length ? -1 : 0\n        );\n        this.prefixes = sortedArr.map((el) => el.toLowerCase());\n        // Re-parse arguments with new prefixes\n        const args = process.argv.slice(2);\n        this.parseArgs(args);\n    }\n}\n\n// Singleton pattern (like legacy)\nlet instance = null;\n\n/**\n * Initialize Args instance (singleton pattern)\n */\nexport function init(args) {\n    instance = new Args({ args });\n    return instance;\n}\n\n/**\n * Get the current Args instance (singleton pattern)\n */\nexport function getArgsInstance() {\n    return instance;\n}\n\n\n"],"mappings":"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","names":["config"]}