From 917e7b18b28b85a1db7eb3e529e406793499759d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Di=20Gr=C3=A9gorio?= Date: Wed, 10 Apr 2019 23:50:07 +0200 Subject: [PATCH] Add awesome esm dependency and a simple launcher used as global npm install --- bin/esm-cli.js | 40 ++++++++++++++++++++++++++++++++++++++++ package.json | 19 +++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100755 bin/esm-cli.js create mode 100644 package.json 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" +}