{"version":3,"sources":["../../src/Application.ts"],"names":["init_cjs_shims","dirname","fileURLToPath","importMetaUrl","Application","get","serviceIdentifier","container","has","isBound","set","value","bind","toDynamicValue","undefined","toConstantValue","testRun","target","fn","start","args","log","debug","process","argv","slice","map","a","out","color","bold","yellow","join","result","startFn","e","error","ExitCode","ERROR","exit","exitCode","OK","CommanderError","Error","toString","key","serviceProviderId","Object","defineProperty","__name","init","options","initialized","addListener","origin","_dirname","startsWith","getDirName","pkgFilePath","findPackageJSON","pkg","getPackageJSON","name","version","initGlobalOptions","initLog","initPaths","initCache","initCommander","applyMacros","ensureDirSync","path","cache","Cache","namespace","pretty","ttl","prettyOptions","merge","level","globalOptions","logLevel","customLevels","verbose","transport","colorize","colorizeObjects","mixin","mergeObject","logger","program","pid","pino","appRootPath","env","envPaths","suffix","commands","parts","resolve","commandsDir","app","data","config","tmp","temp","gopts","parse","opts","override","Command","GlobalOptionsCommand","BaseCommand","Help","Option","Argument","createHelp","help","createCommand","command","createGlobalOptionsCommand","createOption","flags","description","option","createArgument","arg","argument","passThroughOptions","showHelpAfterError","showSuggestionAfterError","setGlobalOptionsCommand","in","Input","interaction","Output","colors","silent","stdout","err","stderr","parseAsync","__publicField","Container","autoBindInjectable","skipBaseClassChecks"],"mappings":"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","file":"chunk-3M3QB4O3.cjs","sourcesContent":["import { merge } from '@radicjs/utils';\nimport { CommanderError } from 'commander';\nimport envPaths from 'env-paths';\nimport { ensureDirSync } from 'fs-extra';\nimport { Container, interfaces } from 'inversify';\nimport { dirname, resolve } from 'path';\nimport pino from 'pino';\nimport type { PrettyOptions } from 'pino-pretty';\nimport type { Constructor } from 'type-fest';\nimport { fileURLToPath } from 'url';\nimport { Argument } from './base/Argument.js';\nimport { BaseCommand } from './base/BaseCommand.js';\nimport { Command } from './base/Command.js';\nimport { GlobalOptionsCommand } from './base/GlobalOptionsCommand.js';\nimport { type GlobalOptionsValues, gopts } from './base/gopts.js';\nimport { Help } from './base/Help.js';\nimport { Option } from './base/Option.js';\nimport { Cache } from './Cache.js';\nimport { Input } from './helpers/Input.js';\nimport { applyMacros } from './helpers/macros.js';\nimport { Output } from './helpers/Output.js';\nimport {\n    type ApplicationBindings,\n    ExitCode,\n    type InputMacros,\n    type Logger,\n    type LoggerOptions,\n    type OutputMacros,\n    type Path,\n    type Paths,\n    type StartFn,\n} from './types';\nimport { findPackageJSON, getDirName, getPackageJSON, type Macroable, type PackageJson } from './utils';\nimport { debug } from './utils/debug.js';\nimport './base/gopts.js';\n\nconst _dirname = dirname(fileURLToPath(import.meta.url));\n\n/**\n * The `Application` class serves as the main entry point for the command-line application.\n * It provides static methods and properties to create and manage commands, options, arguments, and help documentation.\n *\n * @example\n * // Initialize the application\n * Application.init();\n *\n * // Create a new command\n * const myCommand = Application.createCommand('myCommand');\n * myCommand.description('This is my custom command');\n *\n * // Add an option to the command\n * const myOption = Application.createOption('-f, --flag', 'A custom flag');\n * myCommand.addOption(myOption);\n *\n * // Add an argument to the command\n * const myArgument = Application.createArgument('<arg>', 'A custom argument');\n * myCommand.addArgument(myArgument);\n *\n * // Add the command to the program\n * Application.program.addCommand(myCommand);\n *\n * // Parse the command-line arguments\n * Application.program.parse(process.argv);\n */\nexport class Application {\n    static globalOptions?: GlobalOptionsValues;\n    static container: Container = new Container({ autoBindInjectable: true, skipBaseClassChecks: true });\n\n    static get<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): T {\n        return this.container.get(serviceIdentifier) as any;\n    }\n\n    static has<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): boolean {\n        return this.container.isBound(serviceIdentifier) as any;\n    }\n\n    static set<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>): interfaces.BindingToSyntax<T>\n    static set<T>(\n        serviceIdentifier: interfaces.ServiceIdentifier<T>,\n        value: interfaces.DynamicValue<T>,\n    ): interfaces.BindingInWhenOnSyntax<T>\n    static set<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, value: T): interfaces.BindingToSyntax<T>\n    static set<T>(serviceIdentifier: interfaces.ServiceIdentifier<T>, value?: any): any {\n        if ( typeof value === 'function' ) {\n            return this.container.bind(serviceIdentifier).toDynamicValue(value);\n        } else if ( value !== undefined ) {\n            return this.container.bind(serviceIdentifier).toConstantValue(value);\n        }\n        return this.container.bind(serviceIdentifier);\n    }\n\n    // static get:typeof Container.get = (...args:[any]) => Container.get(...args)\n    // static set:typeof Container.set = (...args:[any,any?]) => Container.set(...args)\n    // static has:typeof Container.has = (...args:[any]) => Container.has(...args)\n\n    /**\n     * Constructor for the `Help` class.\n     */\n    static Help: Constructor<Help>;\n\n    /**\n     * Constructor for the `Command` class.\n     */\n    static Command: Constructor<Command>;\n\n    static GlobalOptionsCommand: Constructor<GlobalOptionsCommand>;\n\n    /**\n     * Constructor for the `Option` class.\n     */\n    static Option: Constructor<Option>;\n\n    /**\n     * Constructor for the `Argument` class.\n     */\n    static Argument: Constructor<Argument>;\n\n    /**\n     * The main command program.\n     */\n    static program: Command;\n\n    /**\n     * Creates a new `Help` instance.\n     *\n     * @returns {Help} A new `Help` instance.\n     */\n    static createHelp: () => Help;\n\n    /**\n     * Creates a new `Command` instance.\n     *\n     * @param {string} [name] - The name of the command.\n     * @returns {Command} A new `Command` instance.\n     */\n    static createCommand: (name?: string) => Command;\n    static createGlobalOptionsCommand: () => GlobalOptionsCommand;\n\n    /**\n     * Creates a new `Option` instance.\n     *\n     * @param {string} flags - The flags for the option.\n     * @param {string} [description] - The description of the option.\n     * @returns {Option} A new `Option` instance.\n     */\n    static createOption: (flags: string, description?: string) => Option;\n\n    /**\n     * Creates a new `Argument` instance.\n     *\n     * @param {any} arg - The argument.\n     * @param {string} [description] - The description of the argument.\n     * @returns {Argument} A new `Argument` instance.\n     */\n    static createArgument: (arg: any, description?: string) => Argument;\n\n    /**\n     * Output handler for the application.\n     */\n    static out: Macroable<Output, OutputMacros>;\n\n    /**\n     * Input handler for the application.\n     */\n    static in: Macroable<Input, InputMacros>;\n\n    static cache: Cache;\n    static pkg: PackageJson;\n\n    /**\n     * Indicates whether the application has been initialized.\n     */\n    static initialized: boolean;\n    static name: string;\n    static version: string;\n    static commandsDir: string;\n    static path: Path;\n    static log: Logger;\n    static startFn: StartFn;\n\n    /**\n     * Starts the application with the specified arguments.\n     * This method should be called after initializing the application.\n     * If an error occurs during execution, the error will be logged and the application will exit with an error code.\n     *\n     * @param {string | Paths} target - The target path or object.\n     * @param {{(paths: Paths): void}} fn - The function to run.\n     * @returns {boolean}\n     * @example\n     * // With string param\n     * Application.testRun('data', (paths) => {\n     *    console.log(paths.data);\n     * });\n     * With object param\n     * Application.testRun(Application.paths, (paths) => {\n     *    console.log(paths.data);\n     * });\n     */\n    static testRun(target: string | Paths, fn: (paths: Paths) => void): boolean {\n\n        return false;\n    }\n\n    static async start<T>(args: any[]): Promise<T> {\n        // let { NODE_OPTIONS = '' } = process.env;\n        // // console.dir(module)\n        // let tsx              = Object.values(module[ '_pathCache' ]).find((item: string) => item.includes('tsx/dist/loader.cjs'));\n        // if ( tsx ) {\n        //     NODE_OPTIONS += ` --import ${tsx}`;\n        // }\n        // process.env[ 'NODE_OPTIONS' ] = NODE_OPTIONS;\n        // if(NODE_OPTIONS) {\n        //     this.log.debug(`Starting application with NODE_OPTIONS: ${this.out.color.bold.blue(NODE_OPTIONS)}`);\n        // }\n        this.log.debug(`Starting application with args: ${process.argv.slice(2)\n                                                                 .map(a => this.out.color.bold.yellow(a))\n                                                                 .join(' ')}`);\n        try {\n            const result = await this.startFn(args);\n            return result;\n        } catch (e) {\n            this.error(e);\n            return ExitCode.ERROR as any;\n        }\n    };\n\n\n    static exit(exitCode: ExitCode = ExitCode.OK) {\n        return process.exit(exitCode);\n    }\n\n    static error(error: string | Error, exit?: true | ExitCode) {\n        debug('Error: %', error);\n        let exitCode = exit === true ? ExitCode.ERROR : exit;\n        if ( error instanceof CommanderError ) {\n            exitCode = error.exitCode;\n        } else if ( error instanceof Error ) {\n            // let parentError = error;\n            // throw parentError;\n            // error           = new CommanderError(exitCode, 'generic', error.message);\n        } else {\n            error = new CommanderError(exitCode, 'generic', error.toString());\n        }\n        if ( 'exitCode' in error ) {\n            exitCode = error[ 'exitCode' ] as any;\n        }\n        this.log.error(error);\n        // this.out.error(error.message);\n        if ( exitCode ) {\n            this.exit(exitCode as ExitCode);\n        }\n        return this;\n    }\n\n    static bind(key: string, serviceProviderId?: any) {\n        serviceProviderId = serviceProviderId || key;\n        Object.defineProperty(this, key, {\n            get: () => this.get(serviceProviderId),\n        });\n    }\n\n    /**\n     * Initializes the application. This method should be called before using any other methods.\n     *\n     * @returns {App} The `Application` class.\n     */\n    static init(options: AppInitOptions): App {\n        debug('Initializing application');\n        if ( this.initialized ) {\n            return this;\n        }\n        this.initialized = true;\n        process.addListener('uncaughtException', (error, origin) => {\n            if ( origin === 'uncaughtException' || origin === 'unhandledRejection' ) {\n                throw error;\n                // this.error(error);\n            }\n        });\n        this.set('app').toConstantValue(this);\n\n        let _dirname = options.dirname;\n        if ( _dirname.startsWith('file://') ) {\n            _dirname = getDirName(_dirname);\n        }\n        const pkgFilePath = findPackageJSON(_dirname);\n        this.pkg          = getPackageJSON(pkgFilePath);\n        this.name         = this.pkg.name;\n        this.version      = this.pkg.version;\n\n        this\n        .initGlobalOptions()\n        .initLog()\n        .initPaths(dirname(pkgFilePath))\n        .initCache()\n        .initCommander();\n\n        applyMacros(this);\n\n        this.log.debug(`Initialized application with `);\n        return this;\n    }\n\n    static initCache() {\n        ensureDirSync(this.path.cache());\n        this.cache = new Cache({\n            namespace: this.name,\n            path: this.path.cache('cache.json'),\n            pretty: true,\n            ttl: 60 * 60, // 1 hour\n        });\n        return this;\n    }\n\n    static initLog(options: LoggerOptions = {}, prettyOptions: PrettyOptions = {}): App {\n        options                   = merge({}, <LoggerOptions>{\n            level: this.globalOptions?.logLevel || 'info',\n            customLevels: {\n                verbose: 35,\n            },\n\n            transport: {\n                // target: './utils/pino-pretty-transport',\n                target: 'pino-pretty',\n                options: <PrettyOptions>{\n                    colorize: true,\n                    colorizeObjects: true,\n\n                },\n            },\n            mixin: (mergeObject: object, level: number, logger: Logger) => {\n                mergeObject = {\n                    ...mergeObject,\n                    name: this.program.name,\n                    pid: process.pid,\n                };\n                return mergeObject;\n            },\n        }, options);\n        options.transport.options = merge({}, options.transport.options, prettyOptions);\n        this.log                  = pino(options);\n\n        this.set('log', this.log);\n        return this;\n    }\n\n    static initPaths(appRootPath: string) {\n        const env: () => Paths['env'] = () => envPaths(this.name, { suffix: null });\n        this.path                     = {\n            commands: (...parts) => resolve(this.commandsDir, ...parts),\n            app: (...parts) => resolve(appRootPath, ...parts),\n            data: (...parts) => resolve(env().data, ...parts),\n            config: (...parts) => resolve(env().config, ...parts),\n            cache: (...parts) => resolve(env().cache, ...parts),\n            log: (...parts) => resolve(env().log, ...parts),\n            tmp: (...parts) => resolve(env().temp, ...parts),\n        };\n        return this;\n    }\n\n    static initGlobalOptions() {\n        this.globalOptions = gopts.parse(process.argv).opts();\n        return this;\n    }\n\n    /**\n     * Initializes the commander library and sets up the application.\n     */\n    static initCommander(override = false) {\n        Command.Application              = this;\n        GlobalOptionsCommand.Application = this;\n        BaseCommand.Application          = this;\n        Help.Application                 = this;\n\n        this.Help                 = Help;\n        this.Command              = Command;\n        this.GlobalOptionsCommand = GlobalOptionsCommand;\n        this.Option               = Option;\n        this.Argument             = Argument;\n\n        this.createHelp                 = () => {\n            const help = new this.Help();\n            return help;\n        };\n        this.createCommand              = (name?: string) => {\n            const command = new this.Command(name);\n            if ( name ) {\n                command.name(name);\n            }\n            return command;\n        };\n        this.createGlobalOptionsCommand = () => {\n            const command = new this.GlobalOptionsCommand();\n            return command;\n        };\n        this.createOption               = (flags?: string, description?: string) => {\n            const option = new this.Option(flags, description);\n            return option;\n        };\n        this.createArgument             = (arg?: string, description?: string) => {\n            const argument = new this.Argument(arg, description);\n            return argument;\n        };\n\n        if ( !this.program || override ) {\n            this.program = this.createCommand(this.name)\n                               .passThroughOptions(true)\n                               .showHelpAfterError(false)\n                               .showSuggestionAfterError(true)\n                               .setGlobalOptionsCommand(gopts);\n        }\n\n        if ( !this.in || override ) {\n            this.in = new Input({\n                interaction: this.globalOptions.interaction,\n            }) as any;\n            this.set('in', this.in);\n        }\n        if ( !this.out || override ) {\n            this.out = new Output({\n                colors: () => this.globalOptions?.color === true || true,\n                silent: () => this.globalOptions?.silent === true || false,\n                out: process.stdout,\n                err: process.stderr,\n            }) as any;\n            this.set('out', this.out);\n        }\n        if ( !this.startFn || override ) {\n            this.startFn = async (args) => {\n                try {\n                    return this.program.parseAsync(args);\n                } catch (e) {\n                    this.error(e);\n                    return ExitCode.ERROR;\n                }\n            };\n        }\n        return this;\n    }\n}\n\nexport interface AppInitOptions {\n    dirname: string;\n}\n\nexport type App = ApplicationBindings & typeof Application\n"]}