Skip to content

Commit

Permalink
refactor(cli): Pull things out for testing and bug fixing
Browse files Browse the repository at this point in the history
  • Loading branch information
Kent C. Dodds committed Apr 26, 2016
1 parent 5ba2e0f commit 2e41bd0
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 30 deletions.
32 changes: 2 additions & 30 deletions bin/p-s.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ var remove = require('lodash.remove')
var contains = require('lodash.contains')
var shellEscape = require('shell-escape')
var runPackageScript = require('../dist').default
var getScriptsAndArgs = require('../dist/bin-utils').getScriptsAndArgs
var program = require('commander')

program
Expand All @@ -18,7 +19,7 @@ program
.option('-c, --config <filepath>', 'Config file to use (defaults to nearest package-scripts.js)')
.parse(process.argv)

var scriptsAndArgs = getScriptsAndArgs()
var scriptsAndArgs = getScriptsAndArgs(program)

var psConfigFilename = program.config || findUp.sync('package-scripts.js')
var psConfig = require(psConfigFilename)
Expand All @@ -40,32 +41,3 @@ runPackageScript({
}
process.exit(result.code)
})

function getScriptsAndArgs() {
var scripts, args, parallel
if (!isEmpty(program.parallel)) {
scripts = program.parallel.split(',')
args = getArgs(program.args, program.rawArgs)
parallel = true
} else {
scripts = program.args[0].split(',')
args = getArgs(program.args.slice(1), program.rawArgs)
parallel = false
}
return {scripts: scripts, args: args, parallel: parallel}
}

function getArgs(args, rawArgs) {
var allArgs = rawArgs.slice(2)
var psArgs = ['-p', '--parallel', '-c', '--config']
var psFlags = ['-s', '--silent']
var cleanedArgs = remove(allArgs, function(item, index, arry) {
if (contains(psArgs, item) || contains(psFlags, item)) {
return false
} else if (contains(psArgs, arry[index - 1])) {
return false
}
return true
})
return shellEscape(cleanedArgs)
}
33 changes: 33 additions & 0 deletions src/bin-utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import remove from 'lodash.remove'
import contains from 'lodash.contains'
import shellEscape from 'shell-escape'
import isEmpty from 'lodash.isempty'

export {getScriptsAndArgs}

function getScriptsAndArgs(program) {
let scripts, args, parallel
if (!isEmpty(program.parallel)) {
scripts = program.parallel.split(',')
args = getArgs(program.args, program.rawArgs, scripts)
parallel = true
} else {
scripts = program.args[0].split(',')
args = getArgs(program.args.slice(1), program.rawArgs, scripts)
parallel = false
}
return {scripts, args, parallel}
}

function getArgs(args, rawArgs, scripts) {
const allArgs = rawArgs.slice(2)
const psArgs = ['-p', '--parallel', '-c', '--config']
const psFlags = ['-s', '--silent']
const cleanedArgs = remove(allArgs, (item, index, arry) => {
const isArgOrFlag = contains(psArgs, item) || contains(psFlags, item)
const isArgValue = contains(psArgs, arry[index - 1])
const isScript = contains(scripts, item)
return !isArgOrFlag && !isArgValue && !isScript
})
return shellEscape(cleanedArgs)
}
27 changes: 27 additions & 0 deletions src/bin-utils.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import test from 'ava'
import {getScriptsAndArgs} from './bin-utils'

test('gets scripts', t => {
const {scripts} = getScriptsAndArgs({
args: ['boo'],
rawArgs: ['node', 'p-s', 'boo'],
})
t.deepEqual(scripts, ['boo'])
})

test('gets parallel scripts', t => {
const {scripts} = getScriptsAndArgs({
parallel: 'boo,baz',
rawArgs: ['node', 'p-s', '-p', 'boo,baz'],
})
t.deepEqual(scripts, ['boo', 'baz'])
})

test('passes args to scripts', t => {
const {args, scripts} = getScriptsAndArgs({
args: ['boo'],
rawArgs: ['node', 'p-s', 'boo', '--watch', '--verbose'],
})
t.deepEqual(scripts, ['boo'])
t.is(args, '--watch --verbose')
})

0 comments on commit 2e41bd0

Please sign in to comment.