download-or-build-purescript v0.3.4
download-or-build-purescript
First try to download a prebuilt PureScript binary, then build from a source if the prebuilt one is unavailable
const {readdir} = require('fs').promise;
const {execFile} = require('child_process');
const downloadOrBuildPurescript = require('download-or-build-purescript');
downloadOrBuildPurescript({version: '0.12.3'}).subscribe({
next(event) {
if (event.id === 'head:complete') {
console.log('✓ Prebuilt binary exists.');
return;
}
if (event.id === 'download-binary:complete') {
console.log('✓ Binary downloaded.');
return;
}
if (event.id === 'check-binary:complete') {
console.log('✓ Binary works correctly.');
return;
}
}
async complete() {
await readdirSync('.').includes('purs'); //=> true
execFile('./purs', ['--version'], (err, stdout) => {
stdout.toString(); //=> '0.12.3\n'
});
}
});Installation
npm install download-or-build-purescriptAPI
const downloadOrBuildPurescript = require('download-or-build-purescript');downloadOrBuildPurescript(options)
options: Object
Return: Observable (Kevin Smith's implementation)
When the Observable is subscribed,
- it downloads a prebuilt PureScript binary from the PureScript release page
- if a prebuilt binary is not available, it downloads the PureScript source code and builds a binary form it
- it puts the binary at the current working directory
while successively sending events to its Observer.
Events
Each event object has id property with one of these values:
headhead:failhead:completedownload-binarydownload-binary:faildownload-binary:completecheck-binarycheck-binary:failcheck-binary:completecheck-stackcheck-stack:completedownload-sourcedownload-source:completesetupsetup:completebuildbuild:complete
head ------------ x -+- check-stack ----- x -+
| | | |
o | o |
| | | |
download-binary - x -+ download-source - x -+
| | | |
o | o |
| | | |
check-binary ---- x -+ setup ----------- x -+
| | |
| o |
| | |
| build ----------- x -+
| | |
o o |
| | |
***************** ***************** ^^^^^^^
Downloaded a Built a binary Error
prebuilt binary from the source ^^^^^^^
***************** *****************head
Fires when it starts to check if a prebuilt binary is provided for the current platform.
{
id: 'head'
}head:fail
Fires when it cannot start downloading the binary, for example no prebuilt ones are provided for the current platform.
{
id: 'head:fail',
error: <Error>
}head:complete
Fires when it confirms that a prebuilt binary is provided for the current platform.
{
id: 'head:complete'
}download-binary
Fires many times while downloading and extracting the prebuilt binary.
entry and response properties are derived from dl-tar.
{
id: 'download-binary',
entry: <ReadEntry>,
response: {
bytes: <number>,
headers: <Object>,
url: <string>
}
}download-binary:fail
Fires when it fails to download the binary somehow.
{
id: 'download-binary:fail',
error: <Error>
}download-binary:complete
Fires when the prebuilt binary is successfully downloaded.
{
id: 'download-binary:complete'
}check-binary
Fires when it starts to verify the downloaded prebuilt binary works correctly, by running purs --version.
{
id: 'check-binary'
}check-binary:fail
Fires when the downloaded binary doesn't work correctly.
{
id: 'check-binary:fail',
error: <Error>
}check-binary:complete
Fires when it verifies the downloaded binary works correctly.
{
id: 'check-binary:complete'
}check-stack
Fires after one of these events: head:fail download-binary:fail check-binary:fail.
path property is the absolute path of the stack command, and version property is its version.
{
id: 'check-stack',
path: <string>,
version: <string>
}check-stack:complete
Fires after making sure the stack command is installed in your $PATH.
{
id: 'check-binary:complete'
}download-source
Fires many times while downloading and extracting the PureScript source code.
entry and response properties are derived from dl-tar.
{
id: 'download-source',
entry: <ReadEntry>,
response: {
bytes: <number>,
headers: <Object>,
url: <string>
}
}download-source:complete
Fires when the source code is successfully downloaded.
{
id: 'download-source'
}setup setup:complete build build:complete
Inherited from build-purescript.
Errors
Every error passed to the Observer has id property that indicates which step the error occurred at.
// When the `stack` command is not installed
downloadOrBuildPureScript().subscribe({
error(err) {
err.message; //=> '`stack` command is not found in your PATH ...'
err.id; //=> 'check-stack'
}
});
// When your machine lose the internet connection while downloading the source
downloadOrBuildPureScript().subscribe({
error(err) {
err.message; //=> 'socket hang up'
err.id; //=> 'download-source'
}
});Options
Options are directly passed to download-purescript and build-purescript. Note that,
filteroption is not supported.revisionoption is not supported. Useversionoption instead.
Additionally, you can use the following:
rename
Type: Function
Default: v => v
Receives the original binary name (purs on POSIX, purs.exe on Windows) and modifies the binary name to its return value.
const {extname} = require('path');
downloadOrBuildPurescript('./dest', {
rename(originalName) {
const ext = extname(originalName); //=> '' on POSIX, '.exe' on Windows
return `foo${ext}`;
}
}).subscribe({
complete() {
// Creates a binary to './dest/foo' on POSIX, './dest/foo.exe' on Windows
}
});License
ISC License © 2017 - 2019 Shinnosuke Watanabe
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago