diff --git a/bin/esm-cli.js b/bin/esm-cli.js new file mode 100755 index 0000000..5766cca --- /dev/null +++ b/bin/esm-cli.js @@ -0,0 +1,40 @@ +#!/usr/bin/env node + +const { resolve } = require('path') +let params = process.argv.slice(2) + +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 ) + +let mod = +require('esm')( module, {await: true} ) +( modulo || require(package).module ) + +let toCall = mod[ exported || 'default' ] +let returned = + typeof toCall == 'function' + ? toCall( args ) + : toCall +//console.log( 'type' , typeof returned, returned instanceof Promise ) +returned instanceof Promise + ? returned.then( ret=> console.log(ret||''), e=>console.error(e) ) + : console.log( returned || '' ) + +module.exports = mod diff --git a/package.json b/package.json new file mode 100644 index 0000000..8d0b30b --- /dev/null +++ b/package.json @@ -0,0 +1,19 @@ +{ + "name": "esm-cli", + "version": "1.0.0", + "description": "EcmaScript Module launcher", + "main": "esm.js", + "bin": { + "esm": "./bin/esm-cli.js" + }, + "preferGlobal": true, + "dependencies": { + "esm": "^3.2.18" + }, + "devDependencies": {}, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "MIT" +}