'use strict' const co = require('co') const cli = require('heroku-cli-util') const {FileCompletion} = require('@heroku-cli/command/lib/completions') function * run (context) { if (context.flags.restart) throw new Error('--restart is no longer available\nUse forego instead: https://github.com/ddollar/forego') if (context.flags.concurrency) throw new Error('--concurrency is no longer available\nUse forego instead: https://github.com/ddollar/forego') let execArgv = ['start'] if (context.flags.procfile) execArgv.push('--procfile', context.flags.procfile) if (context.flags.env) execArgv.push('--env', context.flags.env) if (context.flags.port) execArgv.push('--port', context.flags.port) if (context.args.processname) { execArgv.push(context.args.processname) } else { let procfile = context.flags.procfile || 'Procfile' let procHash = require('foreman/lib/procfile.js').loadProc(procfile) let processes = Object.keys(procHash).filter((x) => x !== 'release') execArgv.push(processes.join(',')) } yield require('../../fork_foreman')(execArgv) } module.exports = { aliases: ['local:start'], topic: 'local', description: 'run heroku app locally', help: 'Start the application specified by a Procfile (defaults to ./Procfile)', examples: `$ heroku local $ heroku local web $ heroku local web=2 $ heroku local web=1,worker=2`, args: [{name: 'processname', optional: true}], flags: [ {name: 'procfile', char: 'f', hasValue: true, description: 'use a different Procfile', completion: FileCompletion}, {name: 'env', char: 'e', hasValue: true, description: 'location of env file (defaults to .env)', completion: FileCompletion}, {name: 'port', char: 'p', hasValue: true, description: 'port to listen on'}, {name: 'restart', char: 'r', hasValue: false, hidden: true, description: 'restart process if it dies'}, {name: 'concurrency', char: 'c', hasValue: true, hidden: true, description: 'number of processes to start'} ], run: cli.command(co.wrap(run)) }