{"version":3,"sources":["../src/command-decorators.ts"],"names":["command","name","description","target","app","createCommand","_metaArguments","Reflect","getMetadata","prototype","map","a","kebabCase","arg","createArgument","default","variadic","required","addArgument","_metaOptions","Object","entries","o","_flags","short","push","long","join","argWraps","type","flags","opt","createOption","implies","choices","conflicts","mandatory","hidden","envVar","negate","addOption","injections","action","instance","forEach","propertyKey","bindingName","_args","pop","args","i","val","isFunction","apply","process","env","RCLI_NO_PARSE","undefined","parseAsync","argv","argument","config","parameterIndex","defaults","toString","key","_arguments","regex","RegExp","declaration","match","split","trim","startsWith","slice","includes","defaultValue","part","paramTypes","returnType","keys","getMetadataKeys","defineMetadata","console","log","option","Boolean","descriptor","getOwnPropertyDescriptor","value","toLowerCase","length","options","merge","optional","set","global","dir","_inject","inject","Proxy","get","p","receiver","files","run","numberValue","withDefaultValue","paths","out","dump"],"mappings":"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","file":"command-decorators.mjs","sourcesContent":["import 'reflect-metadata'\nimport { defaults, isFunction, kebabCase, merge, set } from '@radicjs/utils';\nimport { app } from './app';\n\nimport { App } from './Application';\nimport type { Command } from './base/Command.js';\n\n\nexport interface ArgumentOptions {\n    name?: string;\n    type?: any;\n    usage?: string;\n    description?: string;\n    choices?: string[];\n    optional?: boolean;\n    required?: boolean;\n    default?: any;\n    variadic?: boolean;\n\n}\n\nexport interface OptionOptions {\n    type?: any;\n    flags?: string;\n    description?: string;\n    choices?: string[];\n    implies?: any;\n    conflicts?: string[];\n\n    required?: boolean; // A value must be supplied when the option is specified.\n    optional?: boolean; // A value is optional when the option is specified.\n    variadic?: boolean;\n    mandatory?: boolean; // The option must have a value after parsing, which usually means it must be specified on command line.\n    short?: string;\n    long?: string;\n    negate?: boolean;\n    default?: any;\n    presetArg?: unknown;\n    envVar?: string;\n    parseArg?: <T>(value: string, previous: T) => T;\n    hidden?: boolean;\n    argChoices?: string[];\n}\n\nconst command  = (name: string, description?: string): ClassDecorator => (target) => {\n    const command = app.createCommand(name);\n    command.description(description);\n\n\n    const _metaArguments: ArgumentOptions[] = Reflect.getMetadata('arguments', target.prototype) || [];\n    const args                              = _metaArguments.map(a => {\n        const name = kebabCase(a.name);\n\n        const arg = command.createArgument(name, a.description);\n        arg.default(a.default);\n        arg.variadic = a.variadic;\n        arg.required = a.required;\n\n        command.addArgument(arg);\n        return arg;\n    });\n\n\n    const _metaOptions = Reflect.getMetadata('options', target.prototype) || {};\n    const opts         = Object.entries(_metaOptions).map(([ name, o ]: [ string, OptionOptions ]) => {\n        let _flags = [];\n        if ( o.short ) {\n            _flags.push('-' + o.short);\n        }\n        if ( o.long ) {\n            _flags.push('--' + o.long);\n        }\n        _flags = [ _flags.join(', ') ];\n\n        let argWraps = o.required ? [ '<', '>' ] : [ '[', ']' ];\n        if ( o.type === 'array' ) {\n            _flags.push(`${argWraps[ 0 ]}${name}...${argWraps[ 1 ]}`);\n        } else if ( o.type !== 'boolean' ) {\n            _flags.push(`${argWraps[ 0 ]}${name}${argWraps[ 1 ]}`);\n        }\n        let flags = _flags.join(' ');\n\n        let opt = command.createOption(flags, o.description);\n        if ( o.default ) {\n            opt.default(o.default);\n        }\n        if ( o.implies ) {\n            opt.implies(o.implies);\n        }\n        if ( o.choices ) {\n            opt.choices(o.choices);\n        }\n        if ( o.conflicts ) {\n            opt.conflicts(o.conflicts);\n        }\n        opt.mandatory = o.mandatory;\n        opt.hidden    = o.hidden;\n        opt.envVar    = o.envVar;\n        opt.negate    = o.negate;\n\n        command.addOption(opt);\n\n        return opt;\n    });\n\n    const injections = Reflect.getMetadata('injections', target.prototype) || {};\n\n    const action = Reflect.getMetadata('action', target.prototype);\n\n    const instance = new (target as any)(app);\n    instance.app   = app;\n    Object.entries(injections).forEach(([ propertyKey, bindingName ]) => {\n        instance[ propertyKey ] = instance.app[ bindingName as any ];\n    });\n\n    command.action(async function (this: Command, ..._args) {\n        let cmd  = _args.pop();\n        let opts = _args.pop();\n\n        let args = [];\n\n        _metaArguments.forEach((a, i) => {\n            let val = _args[ i ];\n            if ( isFunction(a.type) ) {\n                val = a.type(val);\n            }\n            if ( a.variadic ) {\n                args.push(...val);\n            } else {\n                args.push(val);\n            }\n\n        });\n\n        return instance[ action ].apply(this, args);\n    });\n    // console.dir({ command, args, _opts, name, target });\n\n    if ( process.env.RCLI_NO_PARSE === undefined ) {\n        command.parseAsync(process.argv);\n    }\n};\nconst argument = (description: string, config: ArgumentOptions = {}): ParameterDecorator => (target, propertyKey, parameterIndex) => {\n    config    = defaults(config, { description, name: propertyKey.toString() });\n    const key = propertyKey.toString();\n\n    const _arguments = Reflect.getMetadata('arguments', target) || [];\n\n\n    const regex       = new RegExp('^' + key + '\\\\((.*?)\\\\)');\n    const declaration = target[ propertyKey ].toString();\n    const match       = declaration.match(regex);\n\n    if ( match && match[ 1 ] ) {\n        // Split the captured arguments by comma and trim spaces\n        const args = match[ 1 ].split(',').map(arg => arg.trim());\n        const arg  = args[ parameterIndex ];\n\n        if ( arg.startsWith('...') ) {\n            config.name     = arg.slice(3).trim();\n            config.variadic = true;\n        } else if ( arg.includes('=') ) {\n            const [ name, defaultValue ] = args[ parameterIndex ].split('=').map(part => part.trim());\n            config.name                  = name;\n            config.default               = defaultValue;\n        } else {\n            config.name = arg.trim();\n        }\n    }\n    const type       = Reflect.getMetadata('design:type', target, propertyKey);\n    const paramTypes = Reflect.getMetadata('design:paramtypes', target, propertyKey);\n    const returnType = Reflect.getMetadata('design:returntype', target, propertyKey);\n    const keys       = Reflect.getMetadataKeys(target, propertyKey);\n\n    config.type = paramTypes[ parameterIndex ];\n\n    _arguments[ parameterIndex ] = config;\n\n\n    Reflect.defineMetadata('arguments', _arguments, target);\n\n    console.log('argument', propertyKey, parameterIndex, { type, paramTypes, returnType, keys }, 'config:', config);\n};\nlet option     = (description: string, config: OptionOptions = {}): PropertyDecorator => (target, propertyKey) => {\n    config     = defaults(config, {\n        description,\n        mandatory: false,\n        negate   : false,\n        hidden   : false,\n        type     : Boolean,\n    });\n    const key  = propertyKey.toString();\n    const name = propertyKey.toString();\n    const type = Reflect.getMetadata('design:type', target, propertyKey);\n\n    const instance   = new (target as any)[ 'constructor' ] as any;\n    const descriptor = Reflect.getOwnPropertyDescriptor(instance, propertyKey);\n    const keys       = Reflect.getMetadataKeys(instance, propertyKey);\n\n    config.default = descriptor.value || config.default;\n    config.type    = type || config.type;\n\n    if ( config.type && config.type.name ) {\n        config.type     = config.type.name.toLowerCase();\n        config.variadic = true;\n    }\n\n    if ( key.length === 1 ) {\n        config.short = key;\n    } else {\n        config.long = key;\n    }\n\n\n    const options  = Reflect.getMetadata('options', target) || {};\n    options[ key ] = merge({}, options[ key ] || {}, config);\n    Reflect.defineMetadata('options', options, target);\n\n    // console.dir({ type, descriptor, keys });\n};\n\nconst required: PropertyDecorator = (target, propertyKey) => {\n\n};\nconst optional: PropertyDecorator = (target, propertyKey) => {\n    const key     = propertyKey.toString();\n    const options = Reflect.getMetadata('options', target, propertyKey) || {};\n    set(options, key + '.optional', true);\n    set(options, key + '.required', false);\n    Reflect.defineMetadata('options', options, target, propertyKey);\n};\nconst variadic: PropertyDecorator = (target, propertyKey) => {\n\n};\n\nconst global: PropertyDecorator = (target, propertyKey) => {\n\n};\n\nconst action = (): MethodDecorator => (target, propertyKey, descriptor) => {\n    // const descriptor = Reflect.getOwnPropertyDescriptor(instance, propertyKey);\n    const args = Reflect.getMetadata('arguments', target);\n    const keys = Reflect.getMetadataKeys(target, propertyKey);\n    Reflect.defineMetadata('action', propertyKey, target);\n    console.dir({ args, descriptor, keys });\n};\n\nconst _inject = (name: keyof App): PropertyDecorator => {\n    return (target, propertyKey) => {\n        const injections          = Reflect.getMetadata('injections', target) || {};\n        injections[ propertyKey ] = name;\n        Reflect.defineMetadata('injections', injections, target);\n    };\n};\n\ntype inject = {\n    [K in keyof App]:PropertyDecorator\n}\nlet inject: inject = new Proxy({}, {\n    get(target: {}, p: string | symbol, receiver: any): any {\n        return _inject(p.toString() as any);\n    },\n}) as any;\n\nexport { command, argument, option, required, optional, variadic, global, action, inject };\n\n\n\n@command('deco', 'The config command')\nexport default class {\n    app?: App;\n    // @inject.out out: inject['out'];\n    // @inject.in in: inject['in'];\n    // @inject.config config: inject['config'];\n\n\n    @option('The files', { short: 'f' })\n    @optional\n    files: string[];\n\n    @action()\n    run(\n        @argument('a number') numberValue: number,\n        @argument('with default value') withDefaultValue: string = 'asfdsdf',\n        @argument('the path') ...paths: string[]\n    ) {\n        this.app.out.dump({ numberValue, withDefaultValue, paths });\n    }\n\n}\n"]}