| #!/usr/bin/env node |
| |
| 'use strict' |
| |
| const fs = require('fs') |
| const vm = require('vm') |
| const minimist = require('minimist') |
| const composer = require('../composer') |
| |
| const argv = minimist(process.argv.slice(2), { |
| string: ['apihost', 'auth', 'deploy', 'lower'], |
| boolean: ['insecure', 'encode', 'json', 'version'], |
| alias: { auth: 'u', insecure: 'i', version: 'v' } |
| }) |
| |
| if (argv.version) { |
| console.log(composer.version) |
| return |
| } |
| |
| let count = 0 |
| if (argv.json) count++ |
| if (argv.encode) count++ |
| if (typeof argv.deploy !== 'undefined') count++ |
| |
| if (argv._.length !== 1 || count > 1 || argv.deploy === '') { |
| console.error('Usage:') |
| console.error(' compose composition.js[on] command [flags]') |
| console.error('Commands:') |
| console.error(' --json output the json representation for the composition (default command)') |
| console.error(' --deploy NAME deploy the composition with name NAME') |
| console.error(' --encode output the conductor action code for the composition') |
| console.error('Flags:') |
| console.error(' --lower [VERSION] lower to primitive combinators or specific composer version') |
| console.error(' --apihost HOST API HOST') |
| console.error(' -u, --auth KEY authorization KEY') |
| console.error(' -i, --insecure bypass certificate checking') |
| console.error(' -v, --version output the composer version') |
| return |
| } |
| |
| const filename = argv._[0] |
| const source = fs.readFileSync(filename, { encoding: 'utf8' }) |
| let composition = filename.slice(filename.lastIndexOf('.')) === '.js' ? vm.runInNewContext(source, { composer, require, console, process }) : composer.deserialize(JSON.parse(source)) |
| const lower = typeof argv.lower === 'string' ? argv.lower : false |
| if (argv.deploy) { |
| const options = { ignore_certs: argv.insecure } |
| if (argv.apihost) options.apihost = argv.apihost |
| if (argv.auth) options.api_key = argv.auth |
| composer.openwhisk(options).compositions.deploy(composer.composition(argv.deploy, composition), lower) |
| .then(obj => { |
| const names = obj.actions.map(action => action.name) |
| console.log(`ok: created action${names.length > 1 ? 's' : ''} ${names}`) |
| }, console.error) |
| } else if (argv.encode) { |
| console.log(composer.encode(composer.composition('anonymous', composition), lower).actions.slice(-1)[0].action.exec.code) |
| } else { |
| console.log(JSON.stringify(composer.lower(composition, lower), null, 4)) |
| } |