esm-cli/bin/esm-cli.js

101 lines
2.9 KiB
JavaScript
Executable File

#!/usr/bin/env node
const { resolve } = require('path')
const { exec, spawn } = require('child_process')
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 || '' )
const install = module=> {
process.stderr.write(`Module missing: ${module}
npm install ${module}\n`)
let npm = exec(`npm install ${module}`)
npm.stdout.pipe( process.stderr )
return npm
}
// const reTry = ()=> {
try {
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
}
catch(e)
{
// console.log('error')
// console.log('error')
// console.log('error')
// console.log( e.code == 'MODULE_NOT_FOUND' )
// console.log( e.message )
if( e.code == 'MODULE_NOT_FOUND' )
{
let toLoad = e.message.match(/module\s+['"](?<module>.*)['"]/)?.groups?.module
toLoad && install( toLoad )
// console.log(`Module missing: ${toLoad}
// process.stderr.write(`Module missing: ${toLoad}
// npm install ${toLoad}\n`)
// let npm = exec(`npm install ${toLoad}`)
// npm.on('message', e=> console.log('message:', e))
// npm.stdout.pipe(process.stdout)//on('data', e=> console.log('data:', e))
.on('close', e=> {
process.stderr.write(` esm ${process.argv.slice(2).join(' ')}\n`)
// reTry()
let reTry = exec(//'esm',process.argv.slice(2),
`esm ${process.argv.slice(2).join(' ')}`,
{
detached: true,
stdio: 'inherit'
// stdio: [ 'ignore', process.stdout, process.stderr ]
})
reTry.unref()
// reTry.stderr.pipe( process.stderr )
// reTry.stdout.pipe( process.stderr )
// process.stdin.pipe( reTry.stdin )
// process.exit()
})
}
}
// }
// reTry() // 1st time