Skip to content
This repository has been archived by the owner on Jan 6, 2021. It is now read-only.

Commit

Permalink
feat(args): convert embedded and braced variables in command args (#86)
Browse files Browse the repository at this point in the history
* feat(args): convert variables embedded in command args

* feat(args): convert braced variables in command args

* style(args): full test name on one line

* refactor(args): make commandConvert definitly stateless

BREAKING CHANGE: `echo $var2/$var1` would not be changed on windows, now it is. This is kind of a bug, but we're doing a major version bump to be safe.
  • Loading branch information
hgwood authored and Kent C. Dodds committed Mar 31, 2017
1 parent c1a9ed0 commit 1b172fe
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 8 deletions.
11 changes: 3 additions & 8 deletions src/command.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,20 +2,15 @@ import isWindows from 'is-windows'

export default commandConvert

const envUseUnixRegex = /\$(\w+)/ // $my_var
const envUseWinRegex = /%(.*?)%/ // %my_var%

/**
* Converts an environment variable usage to be appropriate for the current OS
* @param {String} command Command to convert
* @returns {String} Converted command
*/
function commandConvert(command) {
const envUseUnixRegex = /\$(\w+)|\${(\w+)}/g // $my_var or ${my_var}
const envUseWinRegex = /%(.*?)%/g // %my_var%
const isWin = isWindows()
const envExtract = isWin ? envUseUnixRegex : envUseWinRegex
const match = envExtract.exec(command)
if (match) {
command = isWin ? `%${match[1]}%` : `$${match[1]}`
}
return command
return command.replace(envExtract, isWin ? '%$1$2%' : '$$$1')
}
26 changes: 26 additions & 0 deletions src/command.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,3 +30,29 @@ test(`is stateless`, () => {
isWindowsMock.__mock.returnValue = true
expect(commandConvert('$test')).toBe(commandConvert('$test'))
})

test(`converts embedded unix-style env variables usage for windows`, () => {
isWindowsMock.__mock.returnValue = true
expect(commandConvert('$test1/$test2/$test3')).toBe(
'%test1%/%test2%/%test3%',
)
})

test(`converts embedded windows-style env variables usage for linux`, () => {
isWindowsMock.__mock.returnValue = false
expect(commandConvert('%test1%/%test2%/%test3%')).toBe(
'$test1/$test2/$test3',
)
})

// eslint-disable-next-line max-len
test(`leaves embedded variables unchanged when using correct operating system`, () => {
isWindowsMock.__mock.returnValue = false
expect(commandConvert('$test1/$test2/$test3')).toBe('$test1/$test2/$test3')
})

test(`converts braced unix-style env variable usage for windows`, () => {
isWindowsMock.__mock.returnValue = true
// eslint-disable-next-line no-template-curly-in-string
expect(commandConvert('${test}')).toBe('%test%')
})

0 comments on commit 1b172fe

Please sign in to comment.