spawn-stack
Advanced tools
Comparing version 0.3.1 to 0.4.0
134
index.js
@@ -10,90 +10,90 @@ 'use strict'; | ||
const HASHES = new Map([ | ||
['darwin', 'macos'], | ||
['freebsd', 'freebsd'], | ||
['linux', 'linux'], | ||
['win32', 'windows'] | ||
['darwin', 'macos'], | ||
['freebsd', 'freebsd'], | ||
['linux', 'linux'], | ||
['win32', 'windows'] | ||
]); | ||
module.exports = function spawnStack(stackArgs, options) { | ||
if (!Array.isArray(stackArgs)) { | ||
return Promise.reject(new TypeError(`Expected arguments of \`stack\` command (Array<string>), but got a non-array value ${ | ||
inspect(stackArgs) | ||
}.`)); | ||
} | ||
if (!Array.isArray(stackArgs)) { | ||
return Promise.reject(new TypeError(`Expected arguments of \`stack\` command (Array<string>), but got a non-array value ${ | ||
inspect(stackArgs) | ||
}.`)); | ||
} | ||
if ( | ||
process.platform !== 'win32' && | ||
if ( | ||
process.platform !== 'win32' && | ||
stackArgs.indexOf('--allow-different-user') === -1 && | ||
stackArgs.indexOf('--no-allow-different-user') === -1 | ||
) { | ||
stackArgs = ['--allow-different-user'].concat(stackArgs); | ||
} | ||
) { | ||
stackArgs = ['--allow-different-user'].concat(stackArgs); | ||
} | ||
const lines = []; | ||
let completed = false; | ||
let error; | ||
const lines = []; | ||
let completed = false; | ||
let error; | ||
let observer = { | ||
next(line) { | ||
lines.push(line); | ||
}, | ||
error(err) { | ||
error = err; | ||
}, | ||
complete() { | ||
completed = true; | ||
} | ||
}; | ||
let observer = { | ||
next(line) { | ||
lines.push(line); | ||
}, | ||
error(err) { | ||
error = err; | ||
}, | ||
complete() { | ||
completed = true; | ||
} | ||
}; | ||
const cp = execa('stack', stackArgs, Object.assign({preferLocal: false}, options)); | ||
cp.stderr.setEncoding('utf8'); | ||
const cp = execa('stack', stackArgs, Object.assign({preferLocal: false}, options)); | ||
cp.stderr.setEncoding('utf8'); | ||
byline(cp.stderr).on('data', line => observer.next(line)); | ||
byline(cp.stderr).on('data', line => observer.next(line)); | ||
cp.then(data => { | ||
observer.complete(); | ||
return data; | ||
}, err => { | ||
if (err.code === 'ENOENT') { | ||
const hash = HASHES.get(process.platform); | ||
cp.then(data => { | ||
observer.complete(); | ||
return data; | ||
}, err => { | ||
if (err.code === 'ENOENT') { | ||
const hash = HASHES.get(process.platform); | ||
err.INSTALL_URL = `https://docs.haskellstack.org/en/stable/install_and_upgrade/${ | ||
hash ? `#${hash}` : '' | ||
}`; | ||
err.INSTALL_URL = `https://docs.haskellstack.org/en/stable/install_and_upgrade/${ | ||
hash ? `#${hash}` : '' | ||
}`; | ||
err.message = `\`stack\` command is not found in your PATH. Make sure you have installed Stack. ${ | ||
err.INSTALL_URL | ||
}`; | ||
} | ||
err.message = `\`stack\` command is not found in your PATH. Make sure you have installed Stack. ${ | ||
err.INSTALL_URL | ||
}`; | ||
} | ||
if (err.killed) { | ||
return; | ||
} | ||
if (err.killed) { | ||
return; | ||
} | ||
observer.error(err); | ||
}); | ||
observer.error(err); | ||
}); | ||
cp[Symbol.observable] = () => new Observable(observerArg => { // eslint-disable-line no-use-extend-native/no-use-extend-native | ||
observer = observerArg; | ||
cp[Symbol.observable] = () => new Observable(observerArg => { // eslint-disable-line no-use-extend-native/no-use-extend-native | ||
observer = observerArg; | ||
for (const line of lines) { | ||
observer.next(line); | ||
} | ||
for (const line of lines) { | ||
observer.next(line); | ||
} | ||
if (error !== undefined) { | ||
observer.error(error); | ||
} else if (completed) { | ||
observer.complete(); | ||
} | ||
if (error !== undefined) { | ||
observer.error(error); | ||
} else if (completed) { | ||
observer.complete(); | ||
} | ||
return function killStack() { | ||
if (completed) { | ||
return; | ||
} | ||
return function killStack() { | ||
if (completed) { | ||
return; | ||
} | ||
cp.kill(); | ||
}; | ||
}); | ||
cp.kill(); | ||
}; | ||
}); | ||
return cp; | ||
return cp; | ||
}; |
{ | ||
"name": "spawn-stack", | ||
"version": "0.3.1", | ||
"version": "0.4.0", | ||
"description": "Spawn a new process using `stack` command with the given arguments", | ||
"repository": "shinnn/spawn-stack", | ||
"author": { | ||
"name": "Shinnosuke Watanabe", | ||
"url": "https://github.com/shinnn" | ||
}, | ||
"author": "Shinnosuke Watanabe (https://github.com/shinnn)", | ||
"scripts": { | ||
@@ -31,12 +28,12 @@ "pretest": "eslint --fix --format=codeframe index.js test.js", | ||
"byline": "^5.0.0", | ||
"execa": "^0.8.0", | ||
"zen-observable": "^0.6.0" | ||
"execa": "^0.10.0", | ||
"zen-observable": "^0.6.1" | ||
}, | ||
"devDependencies": { | ||
"@shinnn/eslint-config-node": "^4.0.2", | ||
"eslint": "^4.11.0", | ||
"nyc": "^11.3.0", | ||
"@shinnn/eslint-config-node": "^5.0.0", | ||
"eslint": "^4.19.1", | ||
"nyc": "^11.7.3", | ||
"pretend-platform": "^2.0.0", | ||
"rmfr": "^1.0.3", | ||
"tape": "^4.8.0" | ||
"rmfr": "^2.0.0", | ||
"tape": "^4.9.0" | ||
}, | ||
@@ -43,0 +40,0 @@ "eslintConfig": { |
@@ -14,3 +14,3 @@ # spawn-stack | ||
spawnStack(['--version']).then(result => { | ||
result.output; //=> 'Version 1.5.1 x86_64 hpack-0.17.1' | ||
result.output; //=> 'Version 1.7.1 x86_64 ...' | ||
}); | ||
@@ -78,2 +78,2 @@ ``` | ||
[ISC License](./LICENSE) © 2017 Shinnosuke Watanabe | ||
[ISC License](./LICENSE) © 2017 - 2018 Shinnosuke Watanabe |
7186
+ Addedcross-spawn@6.0.5(transitive)
+ Addedexeca@0.10.0(transitive)
+ Addednice-try@1.0.5(transitive)
+ Addedsemver@5.7.2(transitive)
- Removedcross-spawn@5.1.0(transitive)
- Removedexeca@0.8.0(transitive)
- Removedlru-cache@4.1.5(transitive)
- Removedpseudomap@1.0.2(transitive)
- Removedyallist@2.1.2(transitive)
Updatedexeca@^0.10.0
Updatedzen-observable@^0.6.1