#!/usr/bin/env node const { resolve } = require('path') const switches = { json: false }, switchReg = /^=/ let params = process.argv.slice(2) params = params.map( p=> switchReg.test(p) ? (switches[p.slice(1)] = true, null) : p ) .filter( o=>o ) const moduleStr = params.shift() const [ esmodule, exported ] = (moduleStr || '').split(':') const optionReg = /^-{1,2}(.*?)([:=](.*?))?$/ const args = params.filter( s=> optionReg.test(s) ) .reduce( (opt,str)=> { let [ , prop, , value ] = optionReg.exec(str) return Object.assign( opt, {[prop]: value || true} ) // return hasValue ? { ...opt, [prop]: value || true } // : opt }, params.filter( s=> !optionReg.test(s) ) ) const package = resolve('./package.json') , modulo = resolve(esmodule) //console.log( process.cwd(), package, modulo ) //console.log( process.argv, esmodule, exported, args ) require = require('esm')( module, {await: true} ) const render = obj=> switches.json ? process.stdout.write( obj&& JSON.stringify(obj,null,'\t') || '' ) : console.log( obj || '' ) let mod = require( modulo || require(package).module ) // console.log(mod) let toCall = mod[ exported || 'default' ] // console.log(mod, exported, toCall) let returned = typeof toCall == 'function' ? toCall( args ) : toCall //console.log( 'type' , typeof returned, returned instanceof Promise ) returned instanceof Promise ? returned.then( render, e=>console.error(e) ) : render(returned) module.exports = mod