Code reorganisation introducing esm API
This commit is contained in:
parent
ab3740f4f0
commit
480000cfa0
|
@ -1,27 +1,48 @@
|
|||
#!/usr/bin/env node
|
||||
const { resolve } = require('path')
|
||||
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]}),{})
|
||||
|
||||
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(':')
|
||||
process.arguments = esm.parseArgs( process.argv.slice(2) )
|
||||
process.arguments.flags = Object.assign( { json: false }, process.arguments.flags )
|
||||
|
||||
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)
|
||||
const splitted = (process.arguments.shift() || '').split(':')
|
||||
const exported = splitted.pop()
|
||||
const esmodule = splitted.join(':')
|
||||
, package = resolve('./package.json')
|
||||
, modulo = resolve( esmodule )
|
||||
|
||||
//console.log( process.cwd(), package, modulo )
|
||||
//console.log( process.argv, esmodule, exported, args )
|
||||
|
@ -29,10 +50,14 @@ const package = resolve('./package.json')
|
|||
require = require('esm')( module, {await: true} )
|
||||
|
||||
|
||||
const render = obj=> switches.json
|
||||
? process.stdout.write( obj&& JSON.stringify(obj,null,'\t') || '' )
|
||||
: console.log( obj || '' )
|
||||
|
||||
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 || '' )
|
||||
|
||||
let mod = require( modulo || require(package).module )
|
||||
// console.log(mod)
|
||||
|
@ -41,7 +66,7 @@ let toCall = mod[ exported || 'default' ]
|
|||
// console.log(mod, exported, toCall)
|
||||
let returned =
|
||||
typeof toCall == 'function'
|
||||
? toCall( args )
|
||||
? toCall( process.arguments )
|
||||
: toCall
|
||||
|
||||
//console.log( 'type' , typeof returned, returned instanceof Promise )
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
{
|
||||
"name": "esm-cli",
|
||||
"version": "1.1.1",
|
||||
"version": "1.2.0",
|
||||
"description": "ECMAScript modules launcher",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
|
|
Loading…
Reference in New Issue