2019-04-10 23:50:07 +02:00
|
|
|
#!/usr/bin/env node
|
|
|
|
const { resolve } = require('path')
|
2021-01-21 19:05:58 +01:00
|
|
|
let esm = global.esm = {
|
|
|
|
parseArgs( args, opt = esm.argsopt )
|
|
|
|
{
|
|
|
|
for( let [ reg, fn ] of opt.entries() )
|
|
|
|
args = args.filter( s=> reg.test(s) )
|
|
|
|
.map( s=> reg.exec(s) )
|
|
|
|
// .reduce( fn, Object.assign(args.filter( s=> !reg.test(s) ),args))
|
|
|
|
.reduce( fn,
|
|
|
|
Object.assign(
|
|
|
|
args.filter( s=> !reg.test(s) ),
|
|
|
|
esm.getArgsKV(args)
|
|
|
|
)
|
|
|
|
)
|
|
|
|
return args
|
|
|
|
},
|
|
|
|
argsopt: new Map()
|
|
|
|
.set( /^-{1,2}(?<key>.*?)([:=](?<value>.*?))?$/
|
|
|
|
, (args,{groups:{key,value}})=>
|
|
|
|
Object.assign( args, {[key]: value || true} )
|
|
|
|
)
|
|
|
|
.set( /^\+(?<module>.*?)$/
|
|
|
|
, (args,{groups:{module}})=>
|
|
|
|
(( args.imports = args.imports || [] ).push( module ), args )
|
|
|
|
)
|
|
|
|
.set( /^=(?<key>.*?)([:=](?<value>.*?))?$/
|
|
|
|
, (args,{groups:{key,value}})=>
|
|
|
|
(Object.assign( args.flags = args.flags || {}, {[key]: value || true} )
|
|
|
|
, args)
|
|
|
|
),
|
|
|
|
getArgsKV: args=> Object.keys(args)
|
|
|
|
.filter(isNaN)
|
|
|
|
.reduce((o,k)=>({...o,[k]:args[k]}),{})
|
2021-01-17 23:56:49 +01:00
|
|
|
|
2021-01-21 19:05:58 +01:00
|
|
|
}
|
2019-04-10 23:50:07 +02:00
|
|
|
|
2021-01-21 19:05:58 +01:00
|
|
|
process.arguments = esm.parseArgs( process.argv.slice(2) )
|
|
|
|
process.arguments.flags = Object.assign( { json: false }, process.arguments.flags )
|
2019-04-10 23:50:07 +02:00
|
|
|
|
2021-01-21 19:05:58 +01:00
|
|
|
const splitted = (process.arguments.shift() || '').split(':')
|
|
|
|
const exported = splitted.pop()
|
|
|
|
const esmodule = splitted.join(':')
|
|
|
|
, package = resolve('./package.json')
|
|
|
|
, modulo = resolve( esmodule )
|
2019-04-10 23:50:07 +02:00
|
|
|
|
|
|
|
//console.log( process.cwd(), package, modulo )
|
|
|
|
//console.log( process.argv, esmodule, exported, args )
|
|
|
|
|
2021-01-17 23:56:49 +01:00
|
|
|
require = require('esm')( module, {await: true} )
|
2019-04-10 23:50:07 +02:00
|
|
|
|
2020-08-16 12:20:41 +02:00
|
|
|
|
2021-01-21 19:05:58 +01:00
|
|
|
const render = esm.render = obj=>
|
|
|
|
process.arguments.flags.json
|
|
|
|
? render.json( obj )
|
|
|
|
: render.log( obj )
|
|
|
|
// ? process.stdout.write( obj&& JSON.stringify(obj,null,'\t') || '' )
|
|
|
|
// : console.log( obj || '' )
|
|
|
|
render.json = obj=> process.stdout.write( obj && JSON.stringify(obj,null,'\t') || '' )
|
|
|
|
render.log = obj=> console.log( obj || '' )
|
2021-01-17 23:56:49 +01:00
|
|
|
|
|
|
|
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'
|
2021-01-21 19:05:58 +01:00
|
|
|
? toCall( process.arguments )
|
2021-01-17 23:56:49 +01:00
|
|
|
: toCall
|
2020-08-16 12:20:41 +02:00
|
|
|
|
2019-04-10 23:50:07 +02:00
|
|
|
//console.log( 'type' , typeof returned, returned instanceof Promise )
|
|
|
|
returned instanceof Promise
|
2021-01-17 23:56:49 +01:00
|
|
|
? returned.then( render, e=>console.error(e) )
|
|
|
|
: render(returned)
|
2019-04-10 23:50:07 +02:00
|
|
|
|
|
|
|
module.exports = mod
|
2021-01-17 23:56:49 +01:00
|
|
|
|