Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| cf23147c9c | |||
| 9c1d67b2e6 | |||
| 93e0a021d3 | |||
| 021f50d50f | |||
| bf5ff7d9bd | |||
| 86c3acedb1 | |||
| ecb3d41a97 | |||
| 1eb44797d0 | |||
| 1023b72513 | |||
| 0cf436c9a7 | |||
| 77f49eb07a | |||
| 9bc98bf597 | |||
| 7e9a05675c | |||
| e62d728624 | |||
| a0c8d31f03 | |||
| 472b98d839 | |||
| 9ae6ed8ae8 | |||
| a0c648bc8b | |||
| 463595f502 | |||
| be4ab09745 | |||
| a6ad034336 | |||
| 0afbe3b732 | |||
| 0865fda5ef | |||
| 7bfdc39700 | |||
| 9486399cec | |||
| 75bf6a3dc4 | |||
| 0dca0745ee | |||
| 6fc2ed9519 | |||
| 448f4270ea | |||
| c9c9b5a0a3 | |||
| d2756a5f75 | |||
| 255f3887c7 | |||
| 75ae41b7b9 | |||
| 3692c142fb | |||
| af2e381ed4 | |||
| 44393a22da | |||
| 57a08d2cfd | |||
| 6825cef609 | |||
| b3c2d2e764 |
@@ -1,8 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
export NVS_HOME="$HOME/.nvs"
|
|
||||||
. "$NVS_HOME/nvs.sh" install && nvs link lts && nvs use default
|
|
||||||
|
|
||||||
set -e -x
|
|
||||||
|
|
||||||
npm run asset-compile
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
version: 2
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
macos:
|
|
||||||
xcode: "9.0"
|
|
||||||
steps:
|
|
||||||
- checkout
|
|
||||||
- restore_cache:
|
|
||||||
keys:
|
|
||||||
- package-{{ checksum "package.json" }}-{{ checksum "package-lock.json" }}
|
|
||||||
- package- # Fallback for the latest package.json cache
|
|
||||||
- run:
|
|
||||||
name: setup
|
|
||||||
command: .circleci/setup.sh
|
|
||||||
- save_cache:
|
|
||||||
key: package-{{ checksum "package.json" }}-{{ checksum "package-lock.json" }}
|
|
||||||
paths:
|
|
||||||
- node_modules
|
|
||||||
- run:
|
|
||||||
name: build
|
|
||||||
command: .circleci/build.sh
|
|
||||||
|
|
||||||
workflows:
|
|
||||||
version: 2
|
|
||||||
test:
|
|
||||||
jobs:
|
|
||||||
- build
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
export NVS_HOME="$HOME/.nvs"
|
|
||||||
git clone --depth=1 https://github.com/jasongin/nvs "$NVS_HOME"
|
|
||||||
. "$NVS_HOME/nvs.sh" install
|
|
||||||
nvs add lts && nvs link lts nvs use default
|
|
||||||
node -v
|
|
||||||
npm -v
|
|
||||||
npm i
|
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
temp/
|
temp/
|
||||||
coverage
|
coverage
|
||||||
|
nexe
|
||||||
node_modules
|
node_modules
|
||||||
*.log
|
*.log
|
||||||
*.exe
|
*.exe
|
||||||
|
|||||||
-15
@@ -1,15 +0,0 @@
|
|||||||
dist: xenial
|
|
||||||
language: node_js
|
|
||||||
node_js:
|
|
||||||
- '6'
|
|
||||||
before_install:
|
|
||||||
- sudo apt-get -qq update
|
|
||||||
- sudo apt-get install -y g++-multilib
|
|
||||||
node_js:
|
|
||||||
- '8'
|
|
||||||
script: npm run asset-compile
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- secure: LyC6djYqPfPKz5gHILES9JmSRxQ+ntKOcoaZNM5WID0+gogUoXZBhcmmtvq9RnMpFZN3pYujY6LB5iy7QS2seGjg+feyewNKI30yIK6N9ulJyZZKmrJVDdRx4wvl8YVTkttjcJFkanDGa6zRvFfFDKx/iIdcWLEpnqR/WO1ppf8=
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
Vendored
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
{
|
{
|
||||||
"recommendations": [ "eg2.tslint" ]
|
"recommendations": [ "ms-vscode.vscode-typescript-tslint-plugin" ]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
<p align="center"><img src="https://cloud.githubusercontent.com/assets/2391349/23598327/a17bb68a-01ee-11e7-8f55-88a5fc96e997.png" /></p>
|
<p align="center"><img src="https://cloud.githubusercontent.com/assets/2391349/23598327/a17bb68a-01ee-11e7-8f55-88a5fc96e997.png" /></p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://circleci.com/gh/nexe/nexe"><img src="https://img.shields.io/circleci/project/github/nexe/nexe/master.svg" alt="Mac Build Status"></a>
|
<a href="https://dev.azure.com/nexe-ci/Nexe/_build?definitionId=1"><img src="https://img.shields.io/azure-devops/build/nexe-ci/nexe/1/master.svg" alt="Build Status"></a>
|
||||||
<a href="https://travis-ci.org/nexe/nexe/builds"><img src="https://img.shields.io/travis/nexe/nexe/master.svg" alt="Linux Build Status"></a>
|
|
||||||
<a href="https://ci.appveyor.com/project/calebboyd/nexe/history"><img src="https://img.shields.io/appveyor/ci/calebboyd/nexe/master.svg" alt="Windows Build Status"></a>
|
|
||||||
<a href="https://www.npmjs.com/package/nexe"><img src="https://img.shields.io/npm/dt/nexe.svg" alt="Downloads"></a>
|
<a href="https://www.npmjs.com/package/nexe"><img src="https://img.shields.io/npm/dt/nexe.svg" alt="Downloads"></a>
|
||||||
<a href="https://www.npmjs.com/package/nexe"><img src="https://img.shields.io/npm/v/nexe.svg" alt="Version"></a>
|
<a href="https://www.npmjs.com/package/nexe"><img src="https://img.shields.io/npm/v/nexe.svg" alt="Version"></a>
|
||||||
<a href="https://www.npmjs.com/package/nexe"><img src="https://img.shields.io/npm/l/nexe.svg" alt="License"></a>
|
<a href="https://www.npmjs.com/package/nexe"><img src="https://img.shields.io/npm/l/nexe.svg" alt="License"></a>
|
||||||
@@ -113,8 +111,15 @@ compile({
|
|||||||
- #### `cwd: string`
|
- #### `cwd: string`
|
||||||
- Directory nexe will operate on as though it is the cwd
|
- Directory nexe will operate on as though it is the cwd
|
||||||
- default: process.cwd()
|
- default: process.cwd()
|
||||||
|
- #### `mangle: boolean`
|
||||||
|
- If set to false, nexe will not include the virtual filesystem (your application and resources) on the output.
|
||||||
|
- This will cause the output to error as an "Invalid Binary" unless a userland patch alters the contents of lib/_third_party_main.js in the nodejs source.
|
||||||
|
- default: true
|
||||||
- #### `build: boolean`
|
- #### `build: boolean`
|
||||||
- Build node from source, passing this flag tells nexe to download and build from source. Subsequently using this flag will cause nexe to use the previously built binary. To rebuild, first add [`--clean`](#clean-boolean)
|
- Build node from source, passing this flag tells nexe to download and build from source. Subsequently using this flag will cause nexe to use the previously built binary. To rebuild, first add [`--clean`](#clean-boolean)
|
||||||
|
- #### `asset: string`
|
||||||
|
- Provide a pre-built nexe binary asset, this can either be an http or https URL or a file path.
|
||||||
|
- default: `null`
|
||||||
- #### `python: string`
|
- #### `python: string`
|
||||||
- On Linux this is the path pointing to your python2 executable
|
- On Linux this is the path pointing to your python2 executable
|
||||||
- On Windows this is the directory where `python` can be accessed
|
- On Windows this is the directory where `python` can be accessed
|
||||||
@@ -148,7 +153,7 @@ compile({
|
|||||||
- Path to a user provided icon to be used (Windows only). Requires `--build` to be set.
|
- Path to a user provided icon to be used (Windows only). Requires `--build` to be set.
|
||||||
- #### `rc: object`
|
- #### `rc: object`
|
||||||
- Settings for patching the [node.rc](https://github.com/nodejs/node/blob/master/src/res/node.rc) configuration file (Windows only).
|
- Settings for patching the [node.rc](https://github.com/nodejs/node/blob/master/src/res/node.rc) configuration file (Windows only).
|
||||||
- Example (keys may vary depending ont the version. Reference the file linked above):
|
- Example (keys may vary depending on the version. Reference the file linked above):
|
||||||
```javascript
|
```javascript
|
||||||
{
|
{
|
||||||
CompanyName: "ACME Corp",
|
CompanyName: "ACME Corp",
|
||||||
|
|||||||
@@ -1,25 +0,0 @@
|
|||||||
image:
|
|
||||||
- Visual Studio 2017
|
|
||||||
- Visual Studio 2015
|
|
||||||
environment:
|
|
||||||
CIRCLE_TOKEN:
|
|
||||||
secure: TQKcepXmTzCNt4+tUBtYpwEQkdSPwFr9A8ugtoMhNbKu/SW1WM1EpjEu6kYXxpQ4
|
|
||||||
TRAVIS_TOKEN:
|
|
||||||
secure: 6ni/E6Rbmv6cFWW7QNLkpQY2fVpT7wr7y12GEtektN0=
|
|
||||||
GITHUB_TOKEN:
|
|
||||||
secure: 3wuEGJsppSKFvdwhp3jprUA9Zkc3WINlc/9oFXjhAR6J05lYMXP7Fl7lXTKpkGZx
|
|
||||||
install:
|
|
||||||
- rmdir C:\cygwin /s /q
|
|
||||||
- rmdir C:\QT /s /q
|
|
||||||
- ps: Install-Product node 8
|
|
||||||
- curl -L -o nasm.exe https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/win64/nasm-2.13.03-installer-x64.exe
|
|
||||||
- start /wait nasm.exe /S
|
|
||||||
- ps: $env:path="C:\Program Files\nasm;$($env:path)"
|
|
||||||
- npm i
|
|
||||||
build: off
|
|
||||||
test: off
|
|
||||||
build_script:
|
|
||||||
- npm run asset-compile
|
|
||||||
artifacts:
|
|
||||||
- path: $(HOMEPATH)\.nexe\**\node.exe
|
|
||||||
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
schedules:
|
||||||
|
- cron: "0 8 * * *"
|
||||||
|
displayName: "Daily Build 1"
|
||||||
|
always: true
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- cron: "0 13 * * *"
|
||||||
|
displayName: "Daily Build 2"
|
||||||
|
always: true
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
- cron: "0 19 * * *"
|
||||||
|
displayName: "Daily Build 3"
|
||||||
|
always: true
|
||||||
|
branches:
|
||||||
|
include:
|
||||||
|
- master
|
||||||
|
jobs:
|
||||||
|
- job: BaseBuild
|
||||||
|
timeoutInMinutes: 180
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
linux:
|
||||||
|
imageName: 'ubuntu-16.04'
|
||||||
|
mac:
|
||||||
|
imageName: 'macos-10.13'
|
||||||
|
windows_2017:
|
||||||
|
imageName: 'vs2017-win2016'
|
||||||
|
windows_2015:
|
||||||
|
imageName: 'vs2017-win2016'
|
||||||
|
alpine:
|
||||||
|
imageName: 'ubuntu-16.04'
|
||||||
|
pool:
|
||||||
|
vmImage: $(imageName)
|
||||||
|
steps:
|
||||||
|
- task: UsePythonVersion@0
|
||||||
|
displayName: Setup Python
|
||||||
|
inputs:
|
||||||
|
versionSpec: '2.7'
|
||||||
|
architecture: 'x64'
|
||||||
|
- task: NodeTool@0
|
||||||
|
displayName: Install Node
|
||||||
|
inputs:
|
||||||
|
versionSpec: '10.x'
|
||||||
|
- script: sudo apt-get update && sudo apt-get install -y libc6-dev-i386 gcc-multilib g++-multilib
|
||||||
|
condition: contains(variables['Agent.JobName'], 'linux')
|
||||||
|
displayName: Install Linux build dependencies
|
||||||
|
- script: choco install visualcpp-build-tools --version 14.0.25420.1 -fy && npm config set msvs_version 2015
|
||||||
|
condition: contains(variables['Agent.JobName'], 'windows_2015')
|
||||||
|
displayName: Install Windows build dependencies
|
||||||
|
- script: choco install nasm -fy
|
||||||
|
displayName: Install Windows Assembler (NASM)
|
||||||
|
condition: contains(variables['Agent.JobName'], 'windows')
|
||||||
|
- script: npm install && npm run ci:build
|
||||||
|
displayName: Build Nexe
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: $(PersonalGithubToken)
|
||||||
|
NEXE_VERBOSE: $(NEXE_VERBOSE)
|
||||||
Generated
+205
-263
@@ -1,9 +1,29 @@
|
|||||||
{
|
{
|
||||||
"name": "nexe",
|
"name": "nexe",
|
||||||
"version": "3.0.0",
|
"version": "3.3.2",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@babel/code-frame": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"@babel/highlight": "^7.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"@babel/highlight": {
|
||||||
|
"version": "7.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
|
||||||
|
"integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"chalk": "^2.0.0",
|
||||||
|
"esutils": "^2.0.2",
|
||||||
|
"js-tokens": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"@calebboyd/semaphore": {
|
"@calebboyd/semaphore": {
|
||||||
"version": "1.3.1",
|
"version": "1.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/@calebboyd/semaphore/-/semaphore-1.3.1.tgz",
|
"resolved": "https://registry.npmjs.org/@calebboyd/semaphore/-/semaphore-1.3.1.tgz",
|
||||||
@@ -108,9 +128,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/got": {
|
"@types/got": {
|
||||||
"version": "9.4.1",
|
"version": "9.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/got/-/got-9.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/@types/got/-/got-9.6.0.tgz",
|
||||||
"integrity": "sha512-m7Uc07bG/bZ+Dis7yI3mGssYDcAdUvP4irF3ZmBzf0ig7zEd1FyADfnELVGcf+p1Ol/iPCXbZYwcSNOJA2a+Qg==",
|
"integrity": "sha512-t00QebxBllcawe7uMxi9jsfWfbki4+/zpJEPyoGWjUvnFOy4EkAzoYOI2UJt2+Fx0yIcDX2+us93k6ensKTddA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/node": "*",
|
"@types/node": "*",
|
||||||
@@ -138,9 +158,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/mocha": {
|
"@types/mocha": {
|
||||||
"version": "5.2.6",
|
"version": "5.2.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz",
|
||||||
"integrity": "sha512-1axi39YdtBI7z957vdqXI4Ac25e7YihYQtJa+Clnxg1zTJEaIRbndt71O3sP4GAMgiAm0pY26/b9BrY4MR/PMw==",
|
"integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/multistream": {
|
"@types/multistream": {
|
||||||
@@ -183,9 +203,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"@types/semver": {
|
"@types/semver": {
|
||||||
"version": "5.5.0",
|
"version": "6.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/@types/semver/-/semver-6.0.0.tgz",
|
||||||
"integrity": "sha512-41qEJgBH/TWgo5NFSvBCJ1qkoi3Q6ONSF2avrHq1LVEZfYpdHmj0y9SuTK+u9ZhG1sYQKBL1AWXKyLWP4RaUoQ==",
|
"integrity": "sha512-OO0srjOGH99a4LUN2its3+r6CBYcplhJ466yLqs+zvAWgphCpS8hYZEZ797tRDP/QKcqTdb/YCN6ifASoAWkrQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"@types/tough-cookie": {
|
"@types/tough-cookie": {
|
||||||
@@ -302,59 +322,6 @@
|
|||||||
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
|
||||||
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
|
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
|
||||||
},
|
},
|
||||||
"babel-code-frame": {
|
|
||||||
"version": "6.26.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
|
||||||
"integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"chalk": "^1.1.3",
|
|
||||||
"esutils": "^2.0.2",
|
|
||||||
"js-tokens": "^3.0.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"ansi-styles": {
|
|
||||||
"version": "2.2.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
|
|
||||||
"integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"chalk": {
|
|
||||||
"version": "1.1.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
|
|
||||||
"integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-styles": "^2.2.1",
|
|
||||||
"escape-string-regexp": "^1.0.2",
|
|
||||||
"has-ansi": "^2.0.0",
|
|
||||||
"strip-ansi": "^3.0.0",
|
|
||||||
"supports-color": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"strip-ansi": {
|
|
||||||
"version": "3.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
|
||||||
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"supports-color": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"balanced-match": {
|
"balanced-match": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
|
||||||
@@ -555,9 +522,9 @@
|
|||||||
"integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
|
"integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms="
|
||||||
},
|
},
|
||||||
"camelcase": {
|
"camelcase": {
|
||||||
"version": "5.2.0",
|
"version": "5.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
|
||||||
"integrity": "sha512-IXFsBS2pC+X0j0N/GE7Dm7j3bsEBp+oTpb7F50dwEVX7rf3IgwO9XatnegTsDtniKCUtEJH4fSU6Asw7uoVLfQ==",
|
"integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"caw": {
|
"caw": {
|
||||||
@@ -710,9 +677,9 @@
|
|||||||
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
"integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
|
||||||
},
|
},
|
||||||
"commander": {
|
"commander": {
|
||||||
"version": "2.19.0",
|
"version": "2.20.0",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
|
||||||
"integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
|
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"component-emitter": {
|
"component-emitter": {
|
||||||
@@ -964,12 +931,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"detect-file": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"diff": {
|
"diff": {
|
||||||
"version": "3.5.0",
|
"version": "3.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
|
||||||
@@ -1039,6 +1000,12 @@
|
|||||||
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
|
||||||
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
|
"integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI="
|
||||||
},
|
},
|
||||||
|
"emoji-regex": {
|
||||||
|
"version": "7.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
|
||||||
|
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"end-of-stream": {
|
"end-of-stream": {
|
||||||
"version": "1.4.1",
|
"version": "1.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
|
||||||
@@ -1175,15 +1142,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"expand-tilde": {
|
|
||||||
"version": "2.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
|
|
||||||
"integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"homedir-polyfill": "^1.0.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"ext-list": {
|
"ext-list": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz",
|
||||||
@@ -1356,29 +1314,6 @@
|
|||||||
"locate-path": "^3.0.0"
|
"locate-path": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"findup-sync": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"detect-file": "^1.0.0",
|
|
||||||
"is-glob": "^3.1.0",
|
|
||||||
"micromatch": "^3.0.4",
|
|
||||||
"resolve-dir": "^1.0.1"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"is-glob": {
|
|
||||||
"version": "3.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
|
|
||||||
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"is-extglob": "^2.1.0"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flat": {
|
"flat": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
|
||||||
@@ -1435,9 +1370,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"get-caller-file": {
|
"get-caller-file": {
|
||||||
"version": "1.0.3",
|
"version": "2.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
||||||
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
|
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"get-func-name": {
|
"get-func-name": {
|
||||||
@@ -1501,38 +1436,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz",
|
||||||
"integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
|
"integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs="
|
||||||
},
|
},
|
||||||
"global-modules": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"global-prefix": "^1.0.1",
|
|
||||||
"is-windows": "^1.0.1",
|
|
||||||
"resolve-dir": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"global-prefix": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
|
|
||||||
"integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"expand-tilde": "^2.0.2",
|
|
||||||
"homedir-polyfill": "^1.0.1",
|
|
||||||
"ini": "^1.3.4",
|
|
||||||
"is-windows": "^1.0.1",
|
|
||||||
"which": "^1.2.14"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"globby": {
|
"globby": {
|
||||||
"version": "9.1.0",
|
"version": "9.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/globby/-/globby-9.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz",
|
||||||
"integrity": "sha512-VtYjhHr7ncls724Of5W6Kaahz0ag7dB4G62/2HsN+xEKG6SrPzM1AJMerGxQTwJGnN9reeyxdvXbuZYpfssCvg==",
|
"integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@types/glob": "^7.1.1",
|
"@types/glob": "^7.1.1",
|
||||||
"array-union": "^1.0.2",
|
"array-union": "^1.0.2",
|
||||||
"dir-glob": "^2.2.1",
|
"dir-glob": "^2.2.2",
|
||||||
"fast-glob": "^2.2.6",
|
"fast-glob": "^2.2.6",
|
||||||
"glob": "^7.1.3",
|
"glob": "^7.1.3",
|
||||||
"ignore": "^4.0.3",
|
"ignore": "^4.0.3",
|
||||||
@@ -1639,23 +1550,6 @@
|
|||||||
"function-bind": "^1.1.1"
|
"function-bind": "^1.1.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"has-ansi": {
|
|
||||||
"version": "2.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
|
|
||||||
"integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"ansi-regex": "^2.0.0"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"ansi-regex": {
|
|
||||||
"version": "2.1.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
|
||||||
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
|
|
||||||
"dev": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"has-flag": {
|
"has-flag": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
|
||||||
@@ -1715,15 +1609,6 @@
|
|||||||
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
"integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"homedir-polyfill": {
|
|
||||||
"version": "1.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
|
|
||||||
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"parse-passwd": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"http-cache-semantics": {
|
"http-cache-semantics": {
|
||||||
"version": "3.8.1",
|
"version": "3.8.1",
|
||||||
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
|
"resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
|
||||||
@@ -1973,15 +1858,15 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"js-tokens": {
|
"js-tokens": {
|
||||||
"version": "3.0.2",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
"integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"js-yaml": {
|
"js-yaml": {
|
||||||
"version": "3.12.0",
|
"version": "3.13.1",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
|
||||||
"integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
|
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"argparse": "^1.0.7",
|
"argparse": "^1.0.7",
|
||||||
@@ -2094,9 +1979,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mem": {
|
"mem": {
|
||||||
"version": "4.2.0",
|
"version": "4.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/mem/-/mem-4.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
|
||||||
"integrity": "sha512-5fJxa68urlY0Ir8ijatKa3eRz5lwXnRCTvo9+TbTGAuTFJOwpGcY0X05moBd0nW45965Njt4CDI2GFQoG8DvqA==",
|
"integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"map-age-cleaner": "^0.1.1",
|
"map-age-cleaner": "^0.1.1",
|
||||||
@@ -2105,15 +1990,15 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"mimic-fn": {
|
"mimic-fn": {
|
||||||
"version": "2.0.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
|
||||||
"integrity": "sha512-jbex9Yd/3lmICXwYT6gA/j2mNQGU48wCh/VzRd+/Y/PjYQtlg1gLMdZqvu9s/xH7qKvngxRObl56XZR609IMbA==",
|
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"p-is-promise": {
|
"p-is-promise": {
|
||||||
"version": "2.0.0",
|
"version": "2.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
|
||||||
"integrity": "sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==",
|
"integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2215,9 +2100,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"mocha": {
|
"mocha": {
|
||||||
"version": "6.0.2",
|
"version": "6.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/mocha/-/mocha-6.1.4.tgz",
|
||||||
"integrity": "sha512-RtTJsmmToGyeTznSOMoM6TPEk1A84FQaHIciKrRqARZx+B5ccJ5tXlmJzEKGBxZdqk9UjpRsesZTUkZmR5YnuQ==",
|
"integrity": "sha512-PN8CIy4RXsIoxoFJzS4QNnCH4psUCPWc4/rPrst/ecSJJbLBkubMiyGCP2Kj/9YnWbotFqAoeXyXMucj7gwCFg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"ansi-colors": "3.2.3",
|
"ansi-colors": "3.2.3",
|
||||||
@@ -2225,23 +2110,23 @@
|
|||||||
"debug": "3.2.6",
|
"debug": "3.2.6",
|
||||||
"diff": "3.5.0",
|
"diff": "3.5.0",
|
||||||
"escape-string-regexp": "1.0.5",
|
"escape-string-regexp": "1.0.5",
|
||||||
"findup-sync": "2.0.0",
|
"find-up": "3.0.0",
|
||||||
"glob": "7.1.3",
|
"glob": "7.1.3",
|
||||||
"growl": "1.10.5",
|
"growl": "1.10.5",
|
||||||
"he": "1.2.0",
|
"he": "1.2.0",
|
||||||
"js-yaml": "3.12.0",
|
"js-yaml": "3.13.1",
|
||||||
"log-symbols": "2.2.0",
|
"log-symbols": "2.2.0",
|
||||||
"minimatch": "3.0.4",
|
"minimatch": "3.0.4",
|
||||||
"mkdirp": "0.5.1",
|
"mkdirp": "0.5.1",
|
||||||
"ms": "2.1.1",
|
"ms": "2.1.1",
|
||||||
"node-environment-flags": "1.0.4",
|
"node-environment-flags": "1.0.5",
|
||||||
"object.assign": "4.1.0",
|
"object.assign": "4.1.0",
|
||||||
"strip-json-comments": "2.0.1",
|
"strip-json-comments": "2.0.1",
|
||||||
"supports-color": "6.0.0",
|
"supports-color": "6.0.0",
|
||||||
"which": "1.3.1",
|
"which": "1.3.1",
|
||||||
"wide-align": "1.1.3",
|
"wide-align": "1.1.3",
|
||||||
"yargs": "12.0.5",
|
"yargs": "13.2.2",
|
||||||
"yargs-parser": "11.1.1",
|
"yargs-parser": "13.0.0",
|
||||||
"yargs-unparser": "1.5.0"
|
"yargs-unparser": "1.5.0"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -2310,12 +2195,21 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node-environment-flags": {
|
"node-environment-flags": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.5",
|
||||||
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
|
||||||
"integrity": "sha512-M9rwCnWVLW7PX+NUWe3ejEdiLYinRpsEre9hMkU/6NS4h+EEulYaDH1gCEZ2gyXsmw+RXYDaV2JkkTNcsPDJ0Q==",
|
"integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"object.getownpropertydescriptors": "^2.0.3"
|
"object.getownpropertydescriptors": "^2.0.3",
|
||||||
|
"semver": "^5.7.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"semver": {
|
||||||
|
"version": "5.7.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz",
|
||||||
|
"integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"normalize-url": {
|
"normalize-url": {
|
||||||
@@ -2403,9 +2297,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"object-keys": {
|
"object-keys": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
|
||||||
"integrity": "sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==",
|
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"object-visit": {
|
"object-visit": {
|
||||||
@@ -2463,15 +2357,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ora": {
|
"ora": {
|
||||||
"version": "3.2.0",
|
"version": "3.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/ora/-/ora-3.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/ora/-/ora-3.4.0.tgz",
|
||||||
"integrity": "sha512-XHMZA5WieCbtg+tu0uPF8CjvwQdNzKCX6BVh3N6GFsEXH40mTk5dsw/ya1lBTUGJslcEFJFQ8cBhOgkkZXQtMA==",
|
"integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
"cli-cursor": "^2.1.0",
|
"cli-cursor": "^2.1.0",
|
||||||
"cli-spinners": "^2.0.0",
|
"cli-spinners": "^2.0.0",
|
||||||
"log-symbols": "^2.2.0",
|
"log-symbols": "^2.2.0",
|
||||||
"strip-ansi": "^5.0.0",
|
"strip-ansi": "^5.2.0",
|
||||||
"wcwidth": "^1.0.1"
|
"wcwidth": "^1.0.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -2542,15 +2436,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"p-try": {
|
"p-try": {
|
||||||
"version": "2.1.0",
|
"version": "2.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
|
||||||
"integrity": "sha512-H2RyIJ7+A3rjkwKC2l5GGtU4H1vkxKCAGsWasNVd0Set+6i4znxbWy6/j16YDPJDWxhsgZiKAstMEP8wCdSpjA==",
|
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"parse-passwd": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
|
|
||||||
"integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
|
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"pascalcase": {
|
"pascalcase": {
|
||||||
@@ -2641,9 +2529,9 @@
|
|||||||
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
|
"integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
|
||||||
},
|
},
|
||||||
"prettier": {
|
"prettier": {
|
||||||
"version": "1.16.4",
|
"version": "1.18.2",
|
||||||
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz",
|
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz",
|
||||||
"integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==",
|
"integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"process-nextick-args": {
|
"process-nextick-args": {
|
||||||
@@ -2720,24 +2608,24 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"require-main-filename": {
|
"require-main-filename": {
|
||||||
"version": "1.0.1",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
|
||||||
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
|
"integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"resolve": {
|
"resolve": {
|
||||||
"version": "1.10.0",
|
"version": "1.11.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
|
||||||
"integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
|
"integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"path-parse": "^1.0.6"
|
"path-parse": "^1.0.6"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"resolve-dependencies": {
|
"resolve-dependencies": {
|
||||||
"version": "2.2.2",
|
"version": "2.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/resolve-dependencies/-/resolve-dependencies-2.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/resolve-dependencies/-/resolve-dependencies-2.2.3.tgz",
|
||||||
"integrity": "sha512-lZARvM5mDaVOBUNam2fbaHYydBBPMlMt6jjlQYvD8D2N//SOlq6iqqFrCWsYkBGYtXgix4EAiTFuZLpt5lXQtA==",
|
"integrity": "sha512-EIZcqEE3q+fWNapzpQ2iiCPal+J7TsLfLnoeGq4h5L4GYjnf4xKzVHN7VBjLGgOJwUs/Z+a6nqA80AhwP7IPlQ==",
|
||||||
"requires": {
|
"requires": {
|
||||||
"@calebboyd/semaphore": "^1.3.1",
|
"@calebboyd/semaphore": "^1.3.1",
|
||||||
"acorn": "^6.0.4",
|
"acorn": "^6.0.4",
|
||||||
@@ -2746,16 +2634,6 @@
|
|||||||
"pify": "^4.0.0"
|
"pify": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"resolve-dir": {
|
|
||||||
"version": "1.0.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
|
|
||||||
"integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
|
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
|
||||||
"expand-tilde": "^2.0.0",
|
|
||||||
"global-modules": "^1.0.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"resolve-url": {
|
"resolve-url": {
|
||||||
"version": "0.2.1",
|
"version": "0.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
|
||||||
@@ -3011,9 +2889,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"source-map-support": {
|
"source-map-support": {
|
||||||
"version": "0.5.11",
|
"version": "0.5.12",
|
||||||
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.11.tgz",
|
"resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz",
|
||||||
"integrity": "sha512-//sajEx/fGL3iw6fltKMdPvy8kL3kJ2O3iuYlRoT3k9Kb4BjOoZ+BZzaNHeuaruSt+Kf3Zk9tnfAQg9/AJqUVQ==",
|
"integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"buffer-from": "^1.0.0",
|
"buffer-from": "^1.0.0",
|
||||||
@@ -3151,9 +3029,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tapable": {
|
"tapable": {
|
||||||
"version": "1.1.1",
|
"version": "1.1.3",
|
||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz",
|
||||||
"integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA=="
|
"integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA=="
|
||||||
},
|
},
|
||||||
"tar-stream": {
|
"tar-stream": {
|
||||||
"version": "1.6.1",
|
"version": "1.6.1",
|
||||||
@@ -3236,16 +3114,24 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ts-node": {
|
"ts-node": {
|
||||||
"version": "8.0.3",
|
"version": "8.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.3.0.tgz",
|
||||||
"integrity": "sha512-2qayBA4vdtVRuDo11DEFSsD/SFsBXQBRZZhbRGSIkmYmVkWjULn/GGMdG10KVqkaGndljfaTD8dKjWgcejO8YA==",
|
"integrity": "sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"arg": "^4.1.0",
|
"arg": "^4.1.0",
|
||||||
"diff": "^3.1.0",
|
"diff": "^4.0.1",
|
||||||
"make-error": "^1.1.1",
|
"make-error": "^1.1.1",
|
||||||
"source-map-support": "^0.5.6",
|
"source-map-support": "^0.5.6",
|
||||||
"yn": "^3.0.0"
|
"yn": "^3.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"diff": {
|
||||||
|
"version": "4.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz",
|
||||||
|
"integrity": "sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==",
|
||||||
|
"dev": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tslib": {
|
"tslib": {
|
||||||
@@ -3255,18 +3141,18 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"tslint": {
|
"tslint": {
|
||||||
"version": "5.14.0",
|
"version": "5.17.0",
|
||||||
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.14.0.tgz",
|
"resolved": "https://registry.npmjs.org/tslint/-/tslint-5.17.0.tgz",
|
||||||
"integrity": "sha512-IUla/ieHVnB8Le7LdQFRGlVJid2T/gaJe5VkjzRVSRR6pA2ODYrnfR1hmxi+5+au9l50jBwpbBL34txgv4NnTQ==",
|
"integrity": "sha512-pflx87WfVoYepTet3xLfDOLDm9Jqi61UXIKePOuca0qoAZyrGWonDG9VTbji58Fy+8gciUn8Bt7y69+KEVjc/w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"babel-code-frame": "^6.22.0",
|
"@babel/code-frame": "^7.0.0",
|
||||||
"builtin-modules": "^1.1.1",
|
"builtin-modules": "^1.1.1",
|
||||||
"chalk": "^2.3.0",
|
"chalk": "^2.3.0",
|
||||||
"commander": "^2.12.1",
|
"commander": "^2.12.1",
|
||||||
"diff": "^3.2.0",
|
"diff": "^3.2.0",
|
||||||
"glob": "^7.1.1",
|
"glob": "^7.1.1",
|
||||||
"js-yaml": "^3.7.0",
|
"js-yaml": "^3.13.1",
|
||||||
"minimatch": "^3.0.4",
|
"minimatch": "^3.0.4",
|
||||||
"mkdirp": "^0.5.1",
|
"mkdirp": "^0.5.1",
|
||||||
"resolve": "^1.3.2",
|
"resolve": "^1.3.2",
|
||||||
@@ -3316,9 +3202,9 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"typescript": {
|
"typescript": {
|
||||||
"version": "3.4.1",
|
"version": "3.5.2",
|
||||||
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.1.tgz",
|
"resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.2.tgz",
|
||||||
"integrity": "sha512-3NSMb2VzDQm8oBTLH6Nj55VVtUEpe/rgkIzMir0qVoLyjDZlnMBva0U6vDiV3IH+sl/Yu6oP5QwsAQtHPmDd2Q==",
|
"integrity": "sha512-7KxJovlYhTX5RaRbUdkAXN1KUZ8PwWlTzQdHV6xNqvuFOs7+WBo10TQUqT19Q/Jz2hk5v9TQDIhyLhhJY4p5AA==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"unbzip2-stream": {
|
"unbzip2-stream": {
|
||||||
@@ -3522,29 +3408,41 @@
|
|||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"yargs": {
|
"yargs": {
|
||||||
"version": "12.0.5",
|
"version": "13.2.2",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.2.tgz",
|
||||||
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
|
"integrity": "sha512-WyEoxgyTD3w5XRpAQNYUB9ycVH/PQrToaTXdYXRdOXvEy1l19br+VJsc0vcO8PTGg5ro/l/GY7F/JMEBmI0BxA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"cliui": "^4.0.0",
|
"cliui": "^4.0.0",
|
||||||
"decamelize": "^1.2.0",
|
|
||||||
"find-up": "^3.0.0",
|
"find-up": "^3.0.0",
|
||||||
"get-caller-file": "^1.0.1",
|
"get-caller-file": "^2.0.1",
|
||||||
"os-locale": "^3.0.0",
|
"os-locale": "^3.1.0",
|
||||||
"require-directory": "^2.1.1",
|
"require-directory": "^2.1.1",
|
||||||
"require-main-filename": "^1.0.1",
|
"require-main-filename": "^2.0.0",
|
||||||
"set-blocking": "^2.0.0",
|
"set-blocking": "^2.0.0",
|
||||||
"string-width": "^2.0.0",
|
"string-width": "^3.0.0",
|
||||||
"which-module": "^2.0.0",
|
"which-module": "^2.0.0",
|
||||||
"y18n": "^3.2.1 || ^4.0.0",
|
"y18n": "^4.0.0",
|
||||||
"yargs-parser": "^11.1.1"
|
"yargs-parser": "^13.0.0"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"string-width": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"emoji-regex": "^7.0.1",
|
||||||
|
"is-fullwidth-code-point": "^2.0.0",
|
||||||
|
"strip-ansi": "^5.1.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yargs-parser": {
|
"yargs-parser": {
|
||||||
"version": "11.1.1",
|
"version": "13.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.0.0.tgz",
|
||||||
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
|
"integrity": "sha512-w2LXjoL8oRdRQN+hOyppuXs+V/fVAYtpcrRxZuF7Kt/Oc+Jr2uAcVntaUTNT6w5ihoWfFDpNY8CPx1QskxZ/pw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"camelcase": "^5.0.0",
|
"camelcase": "^5.0.0",
|
||||||
@@ -3560,6 +3458,50 @@
|
|||||||
"flat": "^4.1.0",
|
"flat": "^4.1.0",
|
||||||
"lodash": "^4.17.11",
|
"lodash": "^4.17.11",
|
||||||
"yargs": "^12.0.5"
|
"yargs": "^12.0.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"get-caller-file": {
|
||||||
|
"version": "1.0.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
|
||||||
|
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"require-main-filename": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
|
"yargs": {
|
||||||
|
"version": "12.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
|
||||||
|
"integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"cliui": "^4.0.0",
|
||||||
|
"decamelize": "^1.2.0",
|
||||||
|
"find-up": "^3.0.0",
|
||||||
|
"get-caller-file": "^1.0.1",
|
||||||
|
"os-locale": "^3.0.0",
|
||||||
|
"require-directory": "^2.1.1",
|
||||||
|
"require-main-filename": "^1.0.1",
|
||||||
|
"set-blocking": "^2.0.0",
|
||||||
|
"string-width": "^2.0.0",
|
||||||
|
"which-module": "^2.0.0",
|
||||||
|
"y18n": "^3.2.1 || ^4.0.0",
|
||||||
|
"yargs-parser": "^11.1.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yargs-parser": {
|
||||||
|
"version": "11.1.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
|
||||||
|
"integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"camelcase": "^5.0.0",
|
||||||
|
"decamelize": "^1.2.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yauzl": {
|
"yauzl": {
|
||||||
@@ -3572,9 +3514,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"yn": {
|
"yn": {
|
||||||
"version": "3.0.0",
|
"version": "3.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/yn/-/yn-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/yn/-/yn-3.1.0.tgz",
|
||||||
"integrity": "sha512-+Wo/p5VRfxUgBUGy2j/6KX2mj9AYJWOHuhMjMcbBFc3y54o9/4buK1ksBvuiK01C3kby8DH9lSmJdSxw+4G/2Q==",
|
"integrity": "sha512-kKfnnYkbTfrAdd0xICNFw7Atm8nKpLcLv9AZGEt+kczL/WQVai4e2V6ZN8U/O+iI6WrNuJjNNOyu4zfhl9D3Hg==",
|
||||||
"dev": true
|
"dev": true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-13
@@ -2,14 +2,14 @@
|
|||||||
"name": "nexe",
|
"name": "nexe",
|
||||||
"description": "Create a single executable out of your Node.js application",
|
"description": "Create a single executable out of your Node.js application",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "3.0.0",
|
"version": "3.3.2",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
"Craig Condon <craig.j.condon@gmail.com> (http://crcn.io)",
|
"Craig Condon <craig.j.condon@gmail.com> (http://crcn.io)",
|
||||||
"Jared Allard <jaredallard@outlook.com>",
|
"Jared Allard <jaredallard@outlook.com>",
|
||||||
"Caleb Boyd <caleb.boyd@hotmail.com>"
|
"Caleb Boyd <caleb.boyd@hotmail.com>"
|
||||||
],
|
],
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"asset-compile": "ts-node tasks/asset-compile",
|
"ci:build": "ts-node tasks/build",
|
||||||
"test": "mocha",
|
"test": "mocha",
|
||||||
"lint": "tslint \"{src,plugins,tasks}/**/*.ts\" --fix",
|
"lint": "tslint \"{src,plugins,tasks}/**/*.ts\" --fix",
|
||||||
"prepare": "npm run lint && npm run build && npm test",
|
"prepare": "npm run lint && npm run build && npm test",
|
||||||
@@ -39,14 +39,14 @@
|
|||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
"cherow": "1.6.9",
|
"cherow": "1.6.9",
|
||||||
"download": "^7.1.0",
|
"download": "^7.1.0",
|
||||||
"globby": "^9.1.0",
|
"globby": "^9.2.0",
|
||||||
"got": "^9.6.0",
|
"got": "^9.6.0",
|
||||||
"minimist": "^1.2.0",
|
"minimist": "^1.2.0",
|
||||||
"mkdirp": "^0.5.1",
|
"mkdirp": "^0.5.1",
|
||||||
"multistream": "^2.1.1",
|
"multistream": "^2.1.1",
|
||||||
"ora": "^3.2.0",
|
"ora": "^3.4.0",
|
||||||
"pify": "^4.0.1",
|
"pify": "^4.0.1",
|
||||||
"resolve-dependencies": "^2.2.2",
|
"resolve-dependencies": "^2.2.3",
|
||||||
"rimraf": "^2.6.3"
|
"rimraf": "^2.6.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -54,23 +54,23 @@
|
|||||||
"@types/download": "^6.2.4",
|
"@types/download": "^6.2.4",
|
||||||
"@types/execa": "^0.9.0",
|
"@types/execa": "^0.9.0",
|
||||||
"@types/globby": "^9.1.0",
|
"@types/globby": "^9.1.0",
|
||||||
"@types/got": "^9.4.1",
|
"@types/got": "^9.6.0",
|
||||||
"@types/minimist": "^1.2.0",
|
"@types/minimist": "^1.2.0",
|
||||||
"@types/mkdirp": "^0.5.2",
|
"@types/mkdirp": "^0.5.2",
|
||||||
"@types/mocha": "^5.2.6",
|
"@types/mocha": "^5.2.7",
|
||||||
"@types/multistream": "^2.1.1",
|
"@types/multistream": "^2.1.1",
|
||||||
"@types/ora": "^3.2.0",
|
"@types/ora": "^3.2.0",
|
||||||
"@types/pify": "3.0.2",
|
"@types/pify": "3.0.2",
|
||||||
"@types/rimraf": "2.0.2",
|
"@types/rimraf": "2.0.2",
|
||||||
"@types/semver": "^5.5.0",
|
"@types/semver": "^6.0.0",
|
||||||
"chai": "^4.2.0",
|
"chai": "^4.2.0",
|
||||||
"execa": "^1.0.0",
|
"execa": "^1.0.0",
|
||||||
"mocha": "^6.0.2",
|
"mocha": "^6.1.4",
|
||||||
"prettier": "^1.16.4",
|
"prettier": "^1.18.2",
|
||||||
"ts-node": "^8.0.3",
|
"ts-node": "^8.3.0",
|
||||||
"tslint": "^5.14.0",
|
"tslint": "^5.17.0",
|
||||||
"tslint-config-prettier": "^1.18.0",
|
"tslint-config-prettier": "^1.18.0",
|
||||||
"tslint-plugin-prettier": "^2.0.1",
|
"tslint-plugin-prettier": "^2.0.1",
|
||||||
"typescript": "^3.4.1"
|
"typescript": "^3.5.2"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+19
-7
@@ -1,4 +1,4 @@
|
|||||||
import { delimiter, dirname, normalize, join } from 'path'
|
import { delimiter, resolve, normalize, join } from 'path'
|
||||||
import { Buffer } from 'buffer'
|
import { Buffer } from 'buffer'
|
||||||
import { createReadStream, ReadStream } from 'fs'
|
import { createReadStream, ReadStream } from 'fs'
|
||||||
import { spawn } from 'child_process'
|
import { spawn } from 'child_process'
|
||||||
@@ -15,9 +15,6 @@ import {
|
|||||||
} from './util'
|
} from './util'
|
||||||
import { NexeOptions, version } from './options'
|
import { NexeOptions, version } from './options'
|
||||||
import { NexeTarget } from './target'
|
import { NexeTarget } from './target'
|
||||||
import download = require('download')
|
|
||||||
import { getLatestGitRelease } from './releases'
|
|
||||||
import { IncomingMessage } from 'http'
|
|
||||||
import combineStreams = require('multistream')
|
import combineStreams = require('multistream')
|
||||||
import { Bundle, toStream } from './fs/bundle'
|
import { Bundle, toStream } from './fs/bundle'
|
||||||
|
|
||||||
@@ -101,11 +98,22 @@ export class NexeCompiler {
|
|||||||
* The file path of node binary
|
* The file path of node binary
|
||||||
*/
|
*/
|
||||||
public nodeSrcBinPath: string
|
public nodeSrcBinPath: string
|
||||||
|
/**
|
||||||
|
* Remote asset path if available
|
||||||
|
*/
|
||||||
|
public remoteAsset: string
|
||||||
|
|
||||||
constructor(public options: NexeOptions) {
|
constructor(public options: NexeOptions) {
|
||||||
const { python } = (this.options = options)
|
const { python } = (this.options = options)
|
||||||
|
//SOMEDAY iterate over multiple targets with `--outDir`
|
||||||
this.targets = options.targets as NexeTarget[]
|
this.targets = options.targets as NexeTarget[]
|
||||||
this.target = this.targets[0]
|
this.target = this.targets[0]
|
||||||
|
if (options.asset && options.asset.startsWith('http')) {
|
||||||
|
this.remoteAsset = options.asset
|
||||||
|
} else {
|
||||||
|
this.remoteAsset =
|
||||||
|
'https://github.com/nexe/nexe/releases/download/v3.0.0/' + this.target.toString()
|
||||||
|
}
|
||||||
this.src = join(this.options.temp, this.target.version)
|
this.src = join(this.options.temp, this.target.version)
|
||||||
this.configureScript = configure + (semverGt(this.target.version, '10.10.0') ? '.py' : '')
|
this.configureScript = configure + (semverGt(this.target.version, '10.10.0') ? '.py' : '')
|
||||||
this.nodeSrcBinPath = isWindows
|
this.nodeSrcBinPath = isWindows
|
||||||
@@ -190,6 +198,9 @@ export class NexeCompiler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public getNodeExecutableLocation(target?: NexeTarget) {
|
public getNodeExecutableLocation(target?: NexeTarget) {
|
||||||
|
if (this.options.asset && !this.options.asset.startsWith('http')) {
|
||||||
|
return resolve(this.options.cwd, this.options.asset)
|
||||||
|
}
|
||||||
if (target) {
|
if (target) {
|
||||||
return join(this.options.temp, target.toString())
|
return join(this.options.temp, target.toString())
|
||||||
}
|
}
|
||||||
@@ -226,6 +237,9 @@ export class NexeCompiler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _configureAsync() {
|
private _configureAsync() {
|
||||||
|
if (isWindows && semverGt(this.target.version, '10.15.99')) {
|
||||||
|
return Promise.resolve()
|
||||||
|
}
|
||||||
return this._runBuildCommandAsync(this.env.PYTHON || 'python', [
|
return this._runBuildCommandAsync(this.env.PYTHON || 'python', [
|
||||||
this.configureScript,
|
this.configureScript,
|
||||||
...this.options.configure
|
...this.options.configure
|
||||||
@@ -251,7 +265,7 @@ export class NexeCompiler {
|
|||||||
binary: NodeJS.ReadableStream | null,
|
binary: NodeJS.ReadableStream | null,
|
||||||
location: string | undefined
|
location: string | undefined
|
||||||
) {
|
) {
|
||||||
//TODO combine make/configure/vcBuild/and modified times of included files
|
//SOMEDAY combine make/configure/vcBuild/and modified times of included files
|
||||||
const { snapshot, build } = this.options
|
const { snapshot, build } = this.options
|
||||||
|
|
||||||
if (!binary) {
|
if (!binary) {
|
||||||
@@ -261,8 +275,6 @@ export class NexeCompiler {
|
|||||||
if (build && snapshot != null && (await pathExistsAsync(snapshot))) {
|
if (build && snapshot != null && (await pathExistsAsync(snapshot))) {
|
||||||
const snapshotLastModified = (await statAsync(snapshot)).mtimeMs
|
const snapshotLastModified = (await statAsync(snapshot)).mtimeMs
|
||||||
const binaryLastModified = (await statAsync(location)).mtimeMs
|
const binaryLastModified = (await statAsync(location)).mtimeMs
|
||||||
// if build was requested and there's a snapshot to embed in the binary,
|
|
||||||
// we need to rebuild if the snapshot was just modified.
|
|
||||||
return snapshotLastModified > binaryLastModified
|
return snapshotLastModified > binaryLastModified
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+70
-35
@@ -13,42 +13,35 @@ export interface NexeBinary {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let originalFsMethods: any = null
|
let originalFsMethods: any = null
|
||||||
let nexeBinary: NexeBinary | null = null
|
let lazyRestoreFs = () => {}
|
||||||
|
|
||||||
function restoreFs(fs: any = require('fs')): NexeBinary | false {
|
|
||||||
if (!nexeBinary) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
const source = nexeBinary
|
|
||||||
Object.assign(fs, originalFsMethods)
|
|
||||||
nexeBinary = originalFsMethods = null
|
|
||||||
return source
|
|
||||||
}
|
|
||||||
|
|
||||||
function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
||||||
if (originalFsMethods !== null) {
|
if (originalFsMethods !== null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
originalFsMethods = Object.assign({}, fs)
|
originalFsMethods = Object.assign({}, fs)
|
||||||
nexeBinary = binary
|
const { blobPath, resources: manifest } = binary,
|
||||||
const { blobPath, resources: manifest } = binary
|
{ resourceStart, stat } = binary.layout,
|
||||||
const { resourceStart, stat } = binary.layout
|
directories: { [key: string]: { [key: string]: boolean } } = {},
|
||||||
const directories: { [key: string]: { [key: string]: boolean } } = {},
|
|
||||||
notAFile = '!@#$%^&*',
|
notAFile = '!@#$%^&*',
|
||||||
isWin = process.platform.startsWith('win'),
|
isWin = process.platform.startsWith('win'),
|
||||||
isString = (x: any): x is string => typeof x === 'string' || x instanceof String,
|
isString = (x: any): x is string => typeof x === 'string' || x instanceof String,
|
||||||
isNotFile = () => false,
|
|
||||||
isNotDirectory = isNotFile,
|
|
||||||
isFile = () => true,
|
|
||||||
noop = () => {},
|
noop = () => {},
|
||||||
isDirectory = isFile,
|
path = require('path'),
|
||||||
path = require('path')
|
baseDir = path.dirname(process.execPath)
|
||||||
|
|
||||||
let log = (text: string) => true
|
let log = (_: string) => true
|
||||||
if ((process.env.DEBUG || '').toLowerCase().includes('nexe:require')) {
|
if ((process.env.DEBUG || '').toLowerCase().includes('nexe:require')) {
|
||||||
log = (text: string) => process.stderr.write('[nexe] - ' + text + '\n')
|
log = (text: string) => process.stderr.write('[nexe] - ' + text + '\n')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const winPath = (key: string) => {
|
||||||
|
if (isWin && key.substr(1, 2) === ':\\') {
|
||||||
|
key = key[0].toUpperCase() + key.substr(1)
|
||||||
|
}
|
||||||
|
return key
|
||||||
|
}
|
||||||
|
|
||||||
const getKey = function getKey(filepath: string | Buffer | null): string {
|
const getKey = function getKey(filepath: string | Buffer | null): string {
|
||||||
if (Buffer.isBuffer(filepath)) {
|
if (Buffer.isBuffer(filepath)) {
|
||||||
filepath = filepath.toString()
|
filepath = filepath.toString()
|
||||||
@@ -56,12 +49,9 @@ function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
|||||||
if (!isString(filepath)) {
|
if (!isString(filepath)) {
|
||||||
return notAFile
|
return notAFile
|
||||||
}
|
}
|
||||||
let key = path.resolve(filepath)
|
let key = path.resolve(baseDir, filepath)
|
||||||
|
|
||||||
if (isWin && key.substr(1, 2) === ':\\') {
|
return winPath(key)
|
||||||
key = key[0].toUpperCase() + key.substr(1)
|
|
||||||
}
|
|
||||||
return key
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const statTime = function() {
|
const statTime = function() {
|
||||||
@@ -116,7 +106,7 @@ function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
|||||||
const entry = manifest[filepath]
|
const entry = manifest[filepath]
|
||||||
const absolutePath = getKey(filepath)
|
const absolutePath = getKey(filepath)
|
||||||
const longPath = makeLong(absolutePath)
|
const longPath = makeLong(absolutePath)
|
||||||
const normalizedPath = path.normalize(filepath)
|
const normalizedPath = winPath(path.normalize(filepath))
|
||||||
|
|
||||||
if (!manifest[absolutePath]) {
|
if (!manifest[absolutePath]) {
|
||||||
manifest[absolutePath] = entry
|
manifest[absolutePath] = entry
|
||||||
@@ -206,19 +196,19 @@ function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
|||||||
const encoding = fileOpts(options).encoding
|
const encoding = fileOpts(options).encoding
|
||||||
callback = typeof options === 'function' ? options : callback
|
callback = typeof options === 'function' ? options : callback
|
||||||
|
|
||||||
fs.open(blobPath, 'r', function(err: Error, fd: number) {
|
originalFsMethods.open(blobPath, 'r', function(err: Error, fd: number) {
|
||||||
if (err) return callback(err, null)
|
if (err) return callback(err, null)
|
||||||
fs.read(fd, Buffer.alloc(length), 0, length, resourceOffset, function(
|
originalFsMethods.read(fd, Buffer.alloc(length), 0, length, resourceOffset, function(
|
||||||
error: Error,
|
error: Error,
|
||||||
bytesRead: number,
|
bytesRead: number,
|
||||||
result: Buffer
|
result: Buffer
|
||||||
) {
|
) {
|
||||||
if (error) {
|
if (error) {
|
||||||
return fs.close(fd, function() {
|
return originalFsMethods.close(fd, function() {
|
||||||
callback(error, null)
|
callback(error, null)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
fs.close(fd, function(err: Error) {
|
originalFsMethods.close(fd, function(err: Error) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err, result)
|
return callback(err, result)
|
||||||
}
|
}
|
||||||
@@ -237,7 +227,7 @@ function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
|||||||
const resourceOffset = resourceStart + offset
|
const resourceOffset = resourceStart + offset
|
||||||
const opts = fileOpts(options)
|
const opts = fileOpts(options)
|
||||||
|
|
||||||
return fs.createReadStream(
|
return originalFsMethods.createReadStream(
|
||||||
blobPath,
|
blobPath,
|
||||||
Object.assign({}, opts, {
|
Object.assign({}, opts, {
|
||||||
start: resourceOffset,
|
start: resourceOffset,
|
||||||
@@ -254,10 +244,10 @@ function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
|||||||
const [offset, length] = entry
|
const [offset, length] = entry
|
||||||
const resourceOffset = resourceStart + offset
|
const resourceOffset = resourceStart + offset
|
||||||
const encoding = fileOpts(options).encoding
|
const encoding = fileOpts(options).encoding
|
||||||
const fd = fs.openSync(process.execPath, 'r')
|
const fd = originalFsMethods.openSync(process.execPath, 'r')
|
||||||
const result = Buffer.alloc(length)
|
const result = Buffer.alloc(length)
|
||||||
fs.readSync(fd, result, 0, length, resourceOffset)
|
originalFsMethods.readSync(fd, result, 0, length, resourceOffset)
|
||||||
fs.closeSync(fd)
|
originalFsMethods.closeSync(fd)
|
||||||
return encoding ? result.toString(encoding) : result
|
return encoding ? result.toString(encoding) : result
|
||||||
},
|
},
|
||||||
statSync: function statSync(filepath: string | Buffer) {
|
statSync: function statSync(filepath: string | Buffer) {
|
||||||
@@ -332,8 +322,53 @@ function shimFs(binary: NexeBinary, fs: any = require('fs')) {
|
|||||||
process.nextTick(() => cb(exists))
|
process.nextTick(() => cb(exists))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (typeof fs.copyFile === 'function') {
|
||||||
|
nfs.copyFile = function(filepath: string, dest: string, flags: number, callback: Function) {
|
||||||
|
setupManifest()
|
||||||
|
const entry = manifest[getKey(filepath)]
|
||||||
|
if (!entry) {
|
||||||
|
return originalFsMethods.copyFile.apply(fs, arguments)
|
||||||
|
}
|
||||||
|
if (typeof flags === 'function') {
|
||||||
|
callback = flags
|
||||||
|
flags = 0
|
||||||
|
}
|
||||||
|
nfs.readFile(filepath, (err: any, buffer: any) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err)
|
||||||
|
}
|
||||||
|
originalFsMethods.writeFile(dest, buffer, (err: any) => {
|
||||||
|
if (err) {
|
||||||
|
return callback(err)
|
||||||
|
}
|
||||||
|
callback(null)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
nfs.copyFileSync = function(filepath: string, dest: string) {
|
||||||
|
setupManifest()
|
||||||
|
const entry = manifest[getKey(filepath)]
|
||||||
|
if (!entry) {
|
||||||
|
return originalFsMethods.copyFileSync.apply(fs, arguments)
|
||||||
|
}
|
||||||
|
return originalFsMethods.writeFileSync(dest, nfs.readFileSync(filepath))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Object.assign(fs, nfs)
|
Object.assign(fs, nfs)
|
||||||
|
|
||||||
|
lazyRestoreFs = () => {
|
||||||
|
Object.keys(nfs).forEach(key => {
|
||||||
|
fs[key] = originalFsMethods[key]
|
||||||
|
})
|
||||||
|
lazyRestoreFs = () => {}
|
||||||
|
}
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restoreFs() {
|
||||||
|
lazyRestoreFs()
|
||||||
|
}
|
||||||
|
|
||||||
export { shimFs, restoreFs }
|
export { shimFs, restoreFs }
|
||||||
|
|||||||
+23
-20
@@ -21,7 +21,9 @@ export interface NexeOptions {
|
|||||||
output: string
|
output: string
|
||||||
targets: (string | NexeTarget)[]
|
targets: (string | NexeTarget)[]
|
||||||
name: string
|
name: string
|
||||||
|
asset: string
|
||||||
cwd: string
|
cwd: string
|
||||||
|
fs: boolean | string[]
|
||||||
flags: string[]
|
flags: string[]
|
||||||
configure: string[]
|
configure: string[]
|
||||||
vcBuild: string[]
|
vcBuild: string[]
|
||||||
@@ -35,11 +37,6 @@ export interface NexeOptions {
|
|||||||
patches: (string | NexePatch)[]
|
patches: (string | NexePatch)[]
|
||||||
plugins: (string | NexePatch)[]
|
plugins: (string | NexePatch)[]
|
||||||
native: any
|
native: any
|
||||||
/**
|
|
||||||
* @deprecated
|
|
||||||
* Use mangle: false instead
|
|
||||||
*/
|
|
||||||
empty: boolean
|
|
||||||
mangle: boolean
|
mangle: boolean
|
||||||
ghToken: string
|
ghToken: string
|
||||||
sourceUrl?: string
|
sourceUrl?: string
|
||||||
@@ -53,7 +50,6 @@ export interface NexeOptions {
|
|||||||
ico?: string
|
ico?: string
|
||||||
debugBundle?: boolean
|
debugBundle?: boolean
|
||||||
warmup?: string
|
warmup?: string
|
||||||
compress?: boolean
|
|
||||||
clean?: boolean
|
clean?: boolean
|
||||||
/**
|
/**
|
||||||
* Api Only
|
* Api Only
|
||||||
@@ -64,12 +60,13 @@ export interface NexeOptions {
|
|||||||
const defaults = {
|
const defaults = {
|
||||||
flags: [],
|
flags: [],
|
||||||
cwd: process.cwd(),
|
cwd: process.cwd(),
|
||||||
|
fs: true,
|
||||||
configure: [],
|
configure: [],
|
||||||
|
mangle: true,
|
||||||
make: [],
|
make: [],
|
||||||
targets: [],
|
targets: [],
|
||||||
vcBuild: isWindows ? ['nosign', 'release'] : [],
|
vcBuild: isWindows ? ['nosign', 'release'] : [],
|
||||||
enableNodeCli: false,
|
enableNodeCli: false,
|
||||||
compress: false,
|
|
||||||
build: false,
|
build: false,
|
||||||
bundle: true,
|
bundle: true,
|
||||||
patches: [],
|
patches: [],
|
||||||
@@ -83,7 +80,7 @@ const alias = {
|
|||||||
b: 'build',
|
b: 'build',
|
||||||
n: 'name',
|
n: 'name',
|
||||||
r: 'resource',
|
r: 'resource',
|
||||||
a: 'resource',
|
a: 'asset',
|
||||||
p: 'python',
|
p: 'python',
|
||||||
f: 'flag',
|
f: 'flag',
|
||||||
c: 'configure',
|
c: 'configure',
|
||||||
@@ -104,6 +101,7 @@ ${c.bold('nexe <entry-file> [options]')}
|
|||||||
-t --target -- node version description
|
-t --target -- node version description
|
||||||
-n --name -- main app module name
|
-n --name -- main app module name
|
||||||
-r --resource -- *embed files (glob) within the binary
|
-r --resource -- *embed files (glob) within the binary
|
||||||
|
-a --asset -- alternate asset path, file or url pointing to a base (nexe) binary
|
||||||
--plugin -- extend nexe runtime behavior
|
--plugin -- extend nexe runtime behavior
|
||||||
|
|
||||||
${c.underline.bold('Building from source:')}
|
${c.underline.bold('Building from source:')}
|
||||||
@@ -113,7 +111,8 @@ ${c.bold('nexe <entry-file> [options]')}
|
|||||||
-f --flag -- *v8 flags to include during compilation
|
-f --flag -- *v8 flags to include during compilation
|
||||||
-c --configure -- *arguments to the configure step
|
-c --configure -- *arguments to the configure step
|
||||||
-m --make -- *arguments to the make/build step
|
-m --make -- *arguments to the make/build step
|
||||||
--no-mangle -- used when generating base binaries, or when pathing _third_party_main manually.
|
--patch -- module with middleware default export for adding a build patch
|
||||||
|
--no-mangle -- used when generating base binaries, or when patching _third_party_main manually.
|
||||||
--snapshot -- path to a warmup snapshot
|
--snapshot -- path to a warmup snapshot
|
||||||
--ico -- file name for alternate icon file (windows)
|
--ico -- file name for alternate icon file (windows)
|
||||||
--rc-* -- populate rc file options (windows)
|
--rc-* -- populate rc file options (windows)
|
||||||
@@ -268,6 +267,21 @@ function normalizeOptions(input?: Partial<NexeOptions>): NexeOptions {
|
|||||||
: `${options.output || options.name}`
|
: `${options.output || options.name}`
|
||||||
options.output = resolve(cwd, options.output)
|
options.output = resolve(cwd, options.output)
|
||||||
|
|
||||||
|
const requireDefault = (x: string) => {
|
||||||
|
if (typeof x === 'string') {
|
||||||
|
return require(x).default
|
||||||
|
}
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
|
||||||
|
options.mangle = 'mangle' in opts ? opts.mangle : true
|
||||||
|
options.plugins = flatten(opts.plugin, options.plugins).map(requireDefault)
|
||||||
|
options.patches = flatten(opts.patch, options.patches).map(requireDefault)
|
||||||
|
|
||||||
|
if ((!options.mangle && !options.bundle) || options.patches.length) {
|
||||||
|
options.build = true
|
||||||
|
}
|
||||||
|
|
||||||
if (options.build) {
|
if (options.build) {
|
||||||
const { arch } = options.targets[0] as NexeTarget
|
const { arch } = options.targets[0] as NexeTarget
|
||||||
if (isWindows) {
|
if (isWindows) {
|
||||||
@@ -277,17 +291,6 @@ function normalizeOptions(input?: Partial<NexeOptions>): NexeOptions {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const requireDefault = (x: string) => {
|
|
||||||
if (typeof x === 'string') {
|
|
||||||
return require(x).default
|
|
||||||
}
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
|
|
||||||
options.mangle = 'mangle' in opts ? opts.mangle : !opts.empty
|
|
||||||
options.plugins = flatten(opts.plugin, options.plugins).map(requireDefault)
|
|
||||||
options.patches = flatten(opts.patch, options.patches).map(requireDefault)
|
|
||||||
|
|
||||||
Object.keys(alias)
|
Object.keys(alias)
|
||||||
.filter(k => k !== 'rc')
|
.filter(k => k !== 'rc')
|
||||||
.forEach(x => delete opts[x])
|
.forEach(x => delete opts[x])
|
||||||
|
|||||||
@@ -1,17 +1,20 @@
|
|||||||
const fs = require('fs'),
|
const fs = require('fs'),
|
||||||
fd = fs.openSync(process.execPath, 'r'),
|
fd = fs.openSync(process.execPath, 'r'),
|
||||||
stat = fs.statSync(process.execPath),
|
stat = fs.statSync(process.execPath),
|
||||||
footer = Buffer.alloc(32, 0)
|
tailSize = Math.min(stat.size, 16000),
|
||||||
|
tailWindow = Buffer.from(Array(tailSize))
|
||||||
|
|
||||||
fs.readSync(fd, footer, 0, 32, stat.size - 32)
|
fs.readSync(fd, tailWindow, 0, tailSize, stat.size - tailSize)
|
||||||
|
|
||||||
if (!footer.slice(0, 16).equals(Buffer.from('<nexe~~sentinel>'))) {
|
const footerPosition = tailWindow.indexOf('<nexe~~sentinel>')
|
||||||
|
if (footerPosition == -1) {
|
||||||
throw 'Invalid Nexe binary'
|
throw 'Invalid Nexe binary'
|
||||||
}
|
}
|
||||||
|
|
||||||
const contentSize = footer.readDoubleLE(16),
|
const footer = tailWindow.slice(footerPosition, footerPosition + 32),
|
||||||
|
contentSize = footer.readDoubleLE(16),
|
||||||
resourceSize = footer.readDoubleLE(24),
|
resourceSize = footer.readDoubleLE(24),
|
||||||
contentStart = stat.size - 32 - resourceSize - contentSize,
|
contentStart = stat.size - tailSize + footerPosition - resourceSize - contentSize,
|
||||||
resourceStart = contentStart + contentSize
|
resourceStart = contentStart + contentSize
|
||||||
|
|
||||||
Object.defineProperty(
|
Object.defineProperty(
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { resolve } from 'path'
|
import { resolve } from 'path'
|
||||||
import { NexeCompiler } from '../compiler'
|
import { NexeCompiler } from '../compiler'
|
||||||
|
import { semverGt } from '../util'
|
||||||
|
|
||||||
export default async function(compiler: NexeCompiler, next: () => Promise<void>) {
|
export default async function(compiler: NexeCompiler, next: () => Promise<void>) {
|
||||||
const { snapshot, warmup, cwd } = compiler.options
|
const { snapshot, warmup, cwd } = compiler.options
|
||||||
@@ -8,13 +9,18 @@ export default async function(compiler: NexeCompiler, next: () => Promise<void>)
|
|||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const variablePrefix = semverGt(compiler.target.version, '11.0.0') ? 'v8_' : ''
|
||||||
|
|
||||||
await compiler.replaceInFileAsync(
|
await compiler.replaceInFileAsync(
|
||||||
compiler.configureScript,
|
compiler.configureScript,
|
||||||
'def configure_v8(o):',
|
'def configure_v8(o):',
|
||||||
`def configure_v8(o):\n o['variables']['embed_script'] = r'${resolve(
|
`def configure_v8(o):\n o['variables']['${variablePrefix}embed_script'] = r'${resolve(
|
||||||
cwd,
|
cwd,
|
||||||
snapshot
|
snapshot
|
||||||
)}'\n o['variables']['warmup_script'] = r'${resolve(cwd, warmup || snapshot)}'`
|
)}'\n o['variables']['${variablePrefix}warmup_script'] = r'${resolve(
|
||||||
|
cwd,
|
||||||
|
warmup || snapshot
|
||||||
|
)}'`
|
||||||
)
|
)
|
||||||
|
|
||||||
return next()
|
return next()
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { NexeCompiler } from '../compiler'
|
import { NexeCompiler } from '../compiler'
|
||||||
import { parse } from 'cherow'
|
import { parse } from 'cherow'
|
||||||
import { semverGt } from '../util'
|
import { wrap, semverGt } from '../util'
|
||||||
|
|
||||||
function walkSome(node: any, visit: Function) {
|
function walkSome(node: any, visit: Function) {
|
||||||
if (!node || typeof node.type !== 'string' || node._visited) {
|
if (!node || typeof node.type !== 'string' || node._visited) {
|
||||||
@@ -29,6 +29,8 @@ export default async function main(compiler: NexeCompiler, next: () => Promise<v
|
|||||||
|
|
||||||
if (version.startsWith('4.')) {
|
if (version.startsWith('4.')) {
|
||||||
bootFile = 'src/node.js'
|
bootFile = 'src/node.js'
|
||||||
|
} else if (semverGt(version, '11.99')) {
|
||||||
|
bootFile = 'lib/internal/bootstrap/pre_execution.js'
|
||||||
} else if (semverGt(version, '9.10.1')) {
|
} else if (semverGt(version, '9.10.1')) {
|
||||||
bootFile = 'lib/internal/bootstrap/node.js'
|
bootFile = 'lib/internal/bootstrap/node.js'
|
||||||
}
|
}
|
||||||
@@ -53,12 +55,32 @@ export default async function main(compiler: NexeCompiler, next: () => Promise<v
|
|||||||
})
|
})
|
||||||
|
|
||||||
const fileLines = file.contents.split('\n')
|
const fileLines = file.contents.split('\n')
|
||||||
fileLines.splice(location.start.line, 0, '{{replace:lib/fs/bootstrap.js}}' + '\n')
|
fileLines.splice(
|
||||||
|
location.start.line,
|
||||||
|
0,
|
||||||
|
'{{replace:lib/fs/bootstrap.js}}' +
|
||||||
|
'\n' +
|
||||||
|
(semverGt(version, '11.99') ? 'expandArgv1 = false;\n' : '')
|
||||||
|
)
|
||||||
file.contents = fileLines.join('\n')
|
file.contents = fileLines.join('\n')
|
||||||
|
|
||||||
await compiler.setFileContentsAsync(
|
if (semverGt(version, '11.99')) {
|
||||||
'lib/_third_party_main.js',
|
await compiler.replaceInFileAsync(
|
||||||
'{{replace:lib/patches/boot-nexe.js}}'
|
bootFile,
|
||||||
)
|
'initializePolicy();',
|
||||||
|
'initializePolicy();\n' + wrap('{{replace:lib/patches/boot-nexe.js}}')
|
||||||
|
)
|
||||||
|
await compiler.replaceInFileAsync(
|
||||||
|
'src/node.cc',
|
||||||
|
'MaybeLocal<Value> StartMainThreadExecution(Environment* env) {',
|
||||||
|
'MaybeLocal<Value> StartMainThreadExecution(Environment* env) {\n' +
|
||||||
|
' return StartExecution(env, "internal/main/run_main_module");\n'
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
await compiler.setFileContentsAsync(
|
||||||
|
'lib/_third_party_main.js',
|
||||||
|
'{{replace:lib/patches/boot-nexe.js}}'
|
||||||
|
)
|
||||||
|
}
|
||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
|
|||||||
+27
-8
@@ -1,13 +1,13 @@
|
|||||||
import { NexeCompiler, NexeError } from '../compiler'
|
import { NexeCompiler, NexeError } from '../compiler'
|
||||||
import { resolve, relative } from 'path'
|
import { resolve, relative } from 'path'
|
||||||
import { each } from '@calebboyd/semaphore'
|
import { each } from '@calebboyd/semaphore'
|
||||||
import resolveFiles from 'resolve-dependencies'
|
import resolveFiles, { resolveFileNameSync } from 'resolve-dependencies'
|
||||||
import { dequote, STDIN_FLAG } from '../util'
|
import { dequote, STDIN_FLAG, semverGt } from '../util'
|
||||||
import { Readable } from 'stream'
|
import { Readable } from 'stream'
|
||||||
|
|
||||||
function getStdIn(stdin: Readable): Promise<string> {
|
function getStdIn(stdin: Readable): Promise<string> {
|
||||||
|
let out = ''
|
||||||
return new Promise(resolve => {
|
return new Promise(resolve => {
|
||||||
let out = ''
|
|
||||||
stdin
|
stdin
|
||||||
.setEncoding('utf8')
|
.setEncoding('utf8')
|
||||||
.on('readable', () => {
|
.on('readable', () => {
|
||||||
@@ -16,14 +16,25 @@ function getStdIn(stdin: Readable): Promise<string> {
|
|||||||
out += current
|
out += current
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.on('end', () => resolve(out))
|
.on('end', () => resolve(out.trim()))
|
||||||
|
setTimeout(() => {
|
||||||
|
if (!out.trim()) {
|
||||||
|
resolve(out.trim())
|
||||||
|
}
|
||||||
|
}, 1000)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
export default async function bundle(compiler: NexeCompiler, next: any) {
|
export default async function bundle(compiler: NexeCompiler, next: any) {
|
||||||
const { bundle, cwd, input } = compiler.options
|
const { bundle, cwd, input: inputPath } = compiler.options
|
||||||
|
let input = inputPath
|
||||||
compiler.entrypoint = './' + relative(cwd, input)
|
compiler.entrypoint = './' + relative(cwd, input)
|
||||||
compiler.startup = ';require("module").runMain();'
|
|
||||||
|
if (semverGt(compiler.target.version, '11.99')) {
|
||||||
|
compiler.startup = ''
|
||||||
|
} else {
|
||||||
|
compiler.startup = ';require("module").runMain();'
|
||||||
|
}
|
||||||
|
|
||||||
if (!bundle) {
|
if (!bundle) {
|
||||||
await compiler.addResource(resolve(cwd, input))
|
await compiler.addResource(resolve(cwd, input))
|
||||||
@@ -35,14 +46,22 @@ export default async function bundle(compiler: NexeCompiler, next: any) {
|
|||||||
code = await require(bundle).createBundle(compiler.options)
|
code = await require(bundle).createBundle(compiler.options)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (input === STDIN_FLAG) {
|
if (input === STDIN_FLAG && (code = code || dequote(await getStdIn(process.stdin)))) {
|
||||||
compiler.stdinUsed = true
|
compiler.stdinUsed = true
|
||||||
compiler.entrypoint = './__nexe_stdin.js'
|
compiler.entrypoint = './__nexe_stdin.js'
|
||||||
code = code || dequote(await getStdIn(process.stdin))
|
|
||||||
await compiler.addResource(resolve(cwd, compiler.entrypoint), code)
|
await compiler.addResource(resolve(cwd, compiler.entrypoint), code)
|
||||||
return next()
|
return next()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (input === STDIN_FLAG) {
|
||||||
|
const maybeInput = resolveFileNameSync(cwd, '.')
|
||||||
|
if (!maybeInput || !maybeInput.absPath) {
|
||||||
|
throw new NexeError('No valid input detected')
|
||||||
|
}
|
||||||
|
input = maybeInput.absPath
|
||||||
|
compiler.entrypoint = './' + relative(cwd, input)
|
||||||
|
}
|
||||||
|
|
||||||
const { files, warnings } = await resolveFiles(
|
const { files, warnings } = await resolveFiles(
|
||||||
input,
|
input,
|
||||||
...Object.keys(compiler.bundle.index).filter(x => x.endsWith('.js')),
|
...Object.keys(compiler.bundle.index).filter(x => x.endsWith('.js')),
|
||||||
|
|||||||
+28
-15
@@ -1,8 +1,9 @@
|
|||||||
import { normalize, relative } from 'path'
|
import { dirname, normalize, relative, resolve } from 'path'
|
||||||
import { createWriteStream, chmodSync, statSync } from 'fs'
|
import { createWriteStream, chmodSync, statSync } from 'fs'
|
||||||
import { NexeCompiler } from '../compiler'
|
import { NexeCompiler } from '../compiler'
|
||||||
import { NexeTarget } from '../target'
|
import { NexeTarget } from '../target'
|
||||||
import { STDIN_FLAG } from '../util'
|
import { STDIN_FLAG } from '../util'
|
||||||
|
import mkdirp = require('mkdirp')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The "cli" step detects the appropriate input. If no input options are passed,
|
* The "cli" step detects the appropriate input. If no input options are passed,
|
||||||
@@ -16,30 +17,42 @@ import { STDIN_FLAG } from '../util'
|
|||||||
*/
|
*/
|
||||||
export default async function cli(compiler: NexeCompiler, next: () => Promise<void>) {
|
export default async function cli(compiler: NexeCompiler, next: () => Promise<void>) {
|
||||||
await next()
|
await next()
|
||||||
const { log } = compiler
|
const { log } = compiler,
|
||||||
const target = compiler.options.targets.shift() as NexeTarget
|
target = compiler.options.targets.shift() as NexeTarget,
|
||||||
const deliverable = await compiler.compileAsync(target)
|
deliverable = await compiler.compileAsync(target),
|
||||||
|
output = normalize(compiler.output!)
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
mkdirp.sync(dirname(output))
|
||||||
|
|
||||||
|
return new Promise((res, rej) => {
|
||||||
const step = log.step('Writing result to file')
|
const step = log.step('Writing result to file')
|
||||||
deliverable
|
deliverable
|
||||||
.pipe(createWriteStream(normalize(compiler.output!)))
|
.pipe(createWriteStream(output))
|
||||||
.on('error', reject)
|
.on('error', rej)
|
||||||
.once('close', (e: Error) => {
|
.once('close', (e: Error) => {
|
||||||
if (e) {
|
if (e) {
|
||||||
reject(e)
|
rej(e)
|
||||||
} else if (compiler.output) {
|
} else if (compiler.output) {
|
||||||
const output = compiler.output
|
const output = compiler.output,
|
||||||
const mode = statSync(output).mode | 0o111
|
mode = statSync(output).mode | 0o111,
|
||||||
|
inputFileLogOutput = relative(
|
||||||
|
process.cwd(),
|
||||||
|
resolve(compiler.options.cwd, compiler.entrypoint || compiler.options.input)
|
||||||
|
),
|
||||||
|
outputFileLogOutput = relative(process.cwd(), output)
|
||||||
|
|
||||||
chmodSync(output, mode.toString(8).slice(-3))
|
chmodSync(output, mode.toString(8).slice(-3))
|
||||||
const inputFile = relative(process.cwd(), compiler.options.input)
|
|
||||||
const outputFile = relative(process.cwd(), output)
|
|
||||||
step.log(
|
step.log(
|
||||||
`Entry: '${
|
`Entry: '${
|
||||||
compiler.stdinUsed ? (compiler.options.mangle ? STDIN_FLAG : '[none]') : inputFile
|
compiler.stdinUsed
|
||||||
}' written to: ${outputFile}`
|
? compiler.options.mangle
|
||||||
|
? STDIN_FLAG
|
||||||
|
: '[none]'
|
||||||
|
: inputFileLogOutput
|
||||||
|
}' written to: ${outputFileLogOutput}`
|
||||||
)
|
)
|
||||||
resolve(compiler.quit())
|
compiler.quit()
|
||||||
|
res(output)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
+26
-36
@@ -3,7 +3,6 @@ import { pathExistsAsync } from '../util'
|
|||||||
import { LogStep } from '../logger'
|
import { LogStep } from '../logger'
|
||||||
import { IncomingMessage } from 'http'
|
import { IncomingMessage } from 'http'
|
||||||
import { NexeCompiler, NexeError } from '../compiler'
|
import { NexeCompiler, NexeError } from '../compiler'
|
||||||
import { getLatestGitRelease } from '../releases'
|
|
||||||
import { dirname } from 'path'
|
import { dirname } from 'path'
|
||||||
|
|
||||||
function fetchNodeSourceAsync(dest: string, url: string, step: LogStep, options = {}) {
|
function fetchNodeSourceAsync(dest: string, url: string, step: LogStep, options = {}) {
|
||||||
@@ -24,37 +23,28 @@ function fetchNodeSourceAsync(dest: string, url: string, step: LogStep, options
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function fetchPrebuiltBinary(compiler: NexeCompiler, step: any) {
|
async function fetchPrebuiltBinary(compiler: NexeCompiler, step: any) {
|
||||||
let downloadOptions = compiler.options.downloadOptions
|
const { target, remoteAsset } = compiler,
|
||||||
const target = compiler.target
|
filename = compiler.getNodeExecutableLocation(target)
|
||||||
|
|
||||||
if (compiler.options.ghToken) {
|
try {
|
||||||
downloadOptions = Object.assign({}, downloadOptions)
|
await download(remoteAsset, dirname(filename), compiler.options.downloadOptions).on(
|
||||||
downloadOptions.headers = Object.assign({}, downloadOptions.headers, {
|
'response',
|
||||||
Authorization: 'token ' + compiler.options.ghToken
|
(res: IncomingMessage) => {
|
||||||
})
|
const total = +res.headers['content-length']!
|
||||||
|
let current = 0
|
||||||
|
res.on('data', data => {
|
||||||
|
current += data.length
|
||||||
|
step!.modify(`Downloading...${((current / total) * 100).toFixed()}%`)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
)
|
||||||
|
} catch (e) {
|
||||||
|
if (e.statusCode === 404) {
|
||||||
|
throw new NexeError(`${remoteAsset} is not available, create it using the --build flag`)
|
||||||
|
} else {
|
||||||
|
throw new NexeError('Error downloading prebuilt binary: ' + e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const githubRelease = await getLatestGitRelease(downloadOptions)
|
|
||||||
const assetName = target.toString()
|
|
||||||
const asset = githubRelease.assets.find(x => x.name === assetName)
|
|
||||||
|
|
||||||
if (!asset) {
|
|
||||||
throw new NexeError(`${assetName} not available, create it using the --build flag`)
|
|
||||||
}
|
|
||||||
const filename = compiler.getNodeExecutableLocation(target)
|
|
||||||
|
|
||||||
await download(
|
|
||||||
asset.browser_download_url,
|
|
||||||
dirname(filename),
|
|
||||||
compiler.options.downloadOptions
|
|
||||||
).on('response', (res: IncomingMessage) => {
|
|
||||||
const total = +res.headers['content-length']!
|
|
||||||
let current = 0
|
|
||||||
res.on('data', data => {
|
|
||||||
current += data.length
|
|
||||||
step!.modify(`Downloading...${((current / total) * 100).toFixed()}%`)
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -66,12 +56,12 @@ export default async function downloadNode(compiler: NexeCompiler, next: () => P
|
|||||||
const { src, log, target } = compiler,
|
const { src, log, target } = compiler,
|
||||||
{ version } = target,
|
{ version } = target,
|
||||||
{ sourceUrl, downloadOptions, build } = compiler.options,
|
{ sourceUrl, downloadOptions, build } = compiler.options,
|
||||||
url = sourceUrl || `https://nodejs.org/dist/v${version}/node-v${version}.tar.gz`
|
url = sourceUrl || `https://nodejs.org/dist/v${version}/node-v${version}.tar.gz`,
|
||||||
const step = log.step(
|
step = log.step(
|
||||||
`Downloading ${build ? '' : 'pre-built '}Node.js${build ? `source from: ${url}` : ''}`
|
`Downloading ${build ? '' : 'pre-built '}Node.js${build ? `source from: ${url}` : ''}`
|
||||||
)
|
),
|
||||||
const exeLocation = compiler.getNodeExecutableLocation(build ? undefined : target)
|
exeLocation = compiler.getNodeExecutableLocation(build ? undefined : target),
|
||||||
const downloadExists = await pathExistsAsync(build ? src : exeLocation)
|
downloadExists = await pathExistsAsync(build ? src : exeLocation)
|
||||||
|
|
||||||
if (downloadExists) {
|
if (downloadExists) {
|
||||||
step.log('Already downloaded...')
|
step.log('Already downloaded...')
|
||||||
|
|||||||
+8
-2
@@ -6,7 +6,9 @@ export default function(compiler: NexeCompiler, next: () => Promise<void>) {
|
|||||||
wrap(
|
wrap(
|
||||||
`process.__nexe = ${JSON.stringify(compiler.binaryConfiguration)};\n` +
|
`process.__nexe = ${JSON.stringify(compiler.binaryConfiguration)};\n` +
|
||||||
'{{replace:lib/fs/patch.js}}' +
|
'{{replace:lib/fs/patch.js}}' +
|
||||||
'\nshimFs(process.__nexe)'
|
'\nshimFs(process.__nexe)' +
|
||||||
|
`\n${compiler.options.fs ? '' : 'restoreFs()'}`
|
||||||
|
//TODO support only restoring specific methods
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
compiler.shims.push(
|
compiler.shims.push(
|
||||||
@@ -22,7 +24,11 @@ export default function(compiler: NexeCompiler, next: () => Promise<void>) {
|
|||||||
compiler.shims.push(
|
compiler.shims.push(
|
||||||
wrap(`
|
wrap(`
|
||||||
if (!process.send) {
|
if (!process.send) {
|
||||||
process.argv.splice(1,0, require.resolve(${JSON.stringify(compiler.entrypoint)}))
|
const path = require('path')
|
||||||
|
const entry = path.resolve(path.dirname(process.execPath),${JSON.stringify(
|
||||||
|
compiler.entrypoint
|
||||||
|
)})
|
||||||
|
process.argv.splice(1,0, entry)
|
||||||
}
|
}
|
||||||
`)
|
`)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,106 +0,0 @@
|
|||||||
import * as nexe from '../lib/nexe'
|
|
||||||
import { getUnBuiltReleases, getLatestGitRelease } from '../lib/releases'
|
|
||||||
import * as ci from './ci'
|
|
||||||
import { runDockerBuild } from './docker'
|
|
||||||
import { getTarget, targetsEqual } from '../lib/target'
|
|
||||||
import { pathExistsAsync, readFileAsync, execFileAsync } from '../lib/util'
|
|
||||||
import got = require('got')
|
|
||||||
|
|
||||||
const env = process.env,
|
|
||||||
branchName = env.CIRCLE_BRANCH || env.APPVEYOR_REPO_BRANCH || env.TRAVIS_BRANCH || '',
|
|
||||||
isScheduled = Boolean(env.APPVEYOR_SCHEDULED_BUILD || env.NEXE_TRIGGERED),
|
|
||||||
isWindows = Boolean(env.APPVEYOR),
|
|
||||||
isPullRequest =
|
|
||||||
Boolean(env.CIRCLE_PR_NUMBER) ||
|
|
||||||
Boolean(env.APPVEYOR_PULL_REQUEST_NUMBER) ||
|
|
||||||
Boolean(env.TRAVIS_PULL_REQUEST_BRANCH),
|
|
||||||
headers = {
|
|
||||||
Authorization: 'token ' + env.GITHUB_TOKEN,
|
|
||||||
'User-Agent': 'nexe (https://www.npmjs.com/package/nexe)'
|
|
||||||
}
|
|
||||||
|
|
||||||
if (require.main === module) {
|
|
||||||
if (!isPullRequest) {
|
|
||||||
build().catch(x => {
|
|
||||||
console.error(x)
|
|
||||||
process.exit(1)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async function build() {
|
|
||||||
if (isScheduled) {
|
|
||||||
const releases = await getUnBuiltReleases({ headers })
|
|
||||||
if (!releases.length) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
const windowsBuild = releases.find(x => x.platform === 'windows')
|
|
||||||
const macBuild = releases.find(x => x.platform === 'mac')
|
|
||||||
const linuxOrAlpine = releases.find(x => x.platform === 'linux' || x.platform === 'alpine')
|
|
||||||
|
|
||||||
if (linuxOrAlpine) {
|
|
||||||
await ci.triggerDockerBuild(linuxOrAlpine, branchName)
|
|
||||||
}
|
|
||||||
if (macBuild) {
|
|
||||||
await ci.triggerMacBuild(macBuild, branchName)
|
|
||||||
}
|
|
||||||
if (windowsBuild) {
|
|
||||||
await ci.triggerWindowsBuild(windowsBuild)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (env.NEXE_VERSION) {
|
|
||||||
const target = getTarget(env.NEXE_VERSION),
|
|
||||||
output = isWindows ? './out.exe' : './out',
|
|
||||||
options = {
|
|
||||||
empty: true,
|
|
||||||
build: true,
|
|
||||||
target,
|
|
||||||
output
|
|
||||||
}
|
|
||||||
console.log('Building: ', target)
|
|
||||||
const stop = keepalive()
|
|
||||||
if (['arm7l', 'arm6l', 'arm64', 'alpine'].includes(target.platform)) {
|
|
||||||
await runDockerBuild(target)
|
|
||||||
} else {
|
|
||||||
await nexe.compile(options)
|
|
||||||
}
|
|
||||||
stop()
|
|
||||||
|
|
||||||
if (await pathExistsAsync(output)) {
|
|
||||||
await assertNexeBinary(output)
|
|
||||||
const gitRelease = await getLatestGitRelease({ headers })
|
|
||||||
const unbuiltReleases = await getUnBuiltReleases({ headers })
|
|
||||||
if (!unbuiltReleases.some(x => targetsEqual(x, target))) {
|
|
||||||
console.log(`${target} already uploaded.`)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
await got(gitRelease.upload_url.split('{')[0], {
|
|
||||||
query: { name: target.toString() },
|
|
||||||
body: await readFileAsync(output),
|
|
||||||
headers: {
|
|
||||||
...headers,
|
|
||||||
'Content-Type': 'application/octet-stream'
|
|
||||||
}
|
|
||||||
}).catch(reason => {
|
|
||||||
console.log(reason && reason.response && reason.response.body)
|
|
||||||
throw reason
|
|
||||||
})
|
|
||||||
console.log(target + ' uploaded.')
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function keepalive() {
|
|
||||||
const keepalive = setInterval(() => console.log('Building...'), 300 * 1000)
|
|
||||||
return () => clearInterval(keepalive)
|
|
||||||
}
|
|
||||||
|
|
||||||
function assertNexeBinary(file: string) {
|
|
||||||
return execFileAsync(file).catch(e => {
|
|
||||||
if (e && e.stack && e.stack.includes('Invalid Nexe binary')) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
throw e
|
|
||||||
})
|
|
||||||
}
|
|
||||||
+116
@@ -0,0 +1,116 @@
|
|||||||
|
import * as nexe from '../lib/nexe'
|
||||||
|
import { getUnBuiltReleases, getLatestGitRelease } from '../lib/releases'
|
||||||
|
import { runDockerBuild } from './docker'
|
||||||
|
import { getTarget, targetsEqual, NexeTarget } from '../lib/target'
|
||||||
|
import { pathExistsAsync, readFileAsync, execFileAsync, semverGt } from '../lib/util'
|
||||||
|
import got = require('got')
|
||||||
|
import { cpus } from 'os'
|
||||||
|
|
||||||
|
const env = process.env,
|
||||||
|
isPullRequest = env.BUILD_REASON === 'PullRequest',
|
||||||
|
isWindows = process.platform === 'win32',
|
||||||
|
isLinux = process.platform === 'linux',
|
||||||
|
buildHost = env.AGENT_JOBNAME || (isWindows && 'windows_2017_2015') || '',
|
||||||
|
isMac = process.platform === 'darwin',
|
||||||
|
headers = {
|
||||||
|
Authorization: 'token ' + env.GITHUB_TOKEN,
|
||||||
|
'User-Agent': 'nexe (https://www.npmjs.com/package/nexe)'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (require.main === module) {
|
||||||
|
if (!isPullRequest) {
|
||||||
|
build().catch(x => {
|
||||||
|
console.error(x)
|
||||||
|
process.exit(1)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async function build() {
|
||||||
|
const releases = await getUnBuiltReleases({ headers })
|
||||||
|
if (!releases.length) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const windowsBuild = releases.find(x => x.platform === 'windows'),
|
||||||
|
macBuild = releases.find(x => x.platform === 'mac'),
|
||||||
|
linux = releases.find(x => x.platform === 'linux'),
|
||||||
|
alpine = releases.find(x => x.platform === 'alpine')
|
||||||
|
|
||||||
|
let target: NexeTarget | undefined
|
||||||
|
|
||||||
|
if (env.NEXE_VERSION) target = getTarget(env.NEXE_VERSION)
|
||||||
|
else if (isWindows) target = windowsBuild
|
||||||
|
else if (isMac) target = macBuild
|
||||||
|
else if (isLinux) target = linux
|
||||||
|
if (buildHost.includes('alpine')) target = alpine
|
||||||
|
|
||||||
|
if (!target) {
|
||||||
|
return console.log('Nothing to build...')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isWindows && buildHost.includes('2017') && !semverGt(target.version, '9.99.99')) {
|
||||||
|
return console.log(`Not building ${target} on this host...`)
|
||||||
|
}
|
||||||
|
if (isWindows && buildHost.includes('2015') && semverGt(target.version, '9.99.99')) {
|
||||||
|
return console.log(`Not building ${target} on this host...`)
|
||||||
|
}
|
||||||
|
|
||||||
|
const output = isWindows ? './out.exe' : './out',
|
||||||
|
options = {
|
||||||
|
mangle: false,
|
||||||
|
build: true,
|
||||||
|
verbose: Boolean(env.NEXE_VERBOSE!),
|
||||||
|
target,
|
||||||
|
make: ['-j' + cpus().length],
|
||||||
|
output
|
||||||
|
}
|
||||||
|
console.log('Building: ' + target + ' on ' + buildHost)
|
||||||
|
const stop = keepalive()
|
||||||
|
|
||||||
|
if (
|
||||||
|
[/*'arm7l', 'arm6l', 'arm64', */ 'alpine'].includes(target.platform) &&
|
||||||
|
buildHost.includes('alpine')
|
||||||
|
) {
|
||||||
|
await runDockerBuild(target)
|
||||||
|
} else {
|
||||||
|
await nexe.compile(options)
|
||||||
|
}
|
||||||
|
stop()
|
||||||
|
if (await pathExistsAsync(output)) {
|
||||||
|
await assertNexeBinary(output)
|
||||||
|
const gitRelease = await getLatestGitRelease({ headers }),
|
||||||
|
unbuiltReleases = await getUnBuiltReleases({ headers })
|
||||||
|
if (!unbuiltReleases.some(x => targetsEqual(x, target!))) {
|
||||||
|
console.log(`${target} already uploaded.`)
|
||||||
|
process.exit(0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await got(gitRelease.upload_url.split('{')[0], {
|
||||||
|
query: { name: target.toString() },
|
||||||
|
body: await readFileAsync(output),
|
||||||
|
headers: {
|
||||||
|
...headers,
|
||||||
|
'Content-Type': 'application/octet-stream'
|
||||||
|
}
|
||||||
|
}).catch(reason => {
|
||||||
|
console.log(reason && reason.response && reason.response.body)
|
||||||
|
throw reason
|
||||||
|
})
|
||||||
|
console.log(target + ' uploaded.')
|
||||||
|
process.exit(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function keepalive() {
|
||||||
|
const keepalive = setInterval(() => console.log('Building...'), 300 * 1000)
|
||||||
|
return () => clearInterval(keepalive)
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertNexeBinary(file: string) {
|
||||||
|
return execFileAsync(file).catch(e => {
|
||||||
|
if (e && e.stack && e.stack.includes('Invalid Nexe binary')) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
throw e
|
||||||
|
})
|
||||||
|
}
|
||||||
-58
@@ -1,58 +0,0 @@
|
|||||||
import { NexeTarget } from '../lib/releases'
|
|
||||||
import got = require('got')
|
|
||||||
import * as assert from 'assert'
|
|
||||||
import { getTarget } from '../lib/target'
|
|
||||||
const { env } = process
|
|
||||||
|
|
||||||
export function triggerMacBuild(release: NexeTarget, branch: string) {
|
|
||||||
assert.ok(env.CIRCLE_TOKEN)
|
|
||||||
const circle = `https://circleci.com/api/v1.1/project/github/nexe/nexe/tree/${branch}?circle-token=${
|
|
||||||
env.CIRCLE_TOKEN
|
|
||||||
}`
|
|
||||||
return got(circle, {
|
|
||||||
json: true,
|
|
||||||
body: {
|
|
||||||
build_parameters: {
|
|
||||||
NEXE_VERSION: release.toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function triggerDockerBuild(release: NexeTarget, branch: string) {
|
|
||||||
assert.ok(env.TRAVIS_TOKEN)
|
|
||||||
const travis = `https://api.travis-ci.org/repo/nexe%2Fnexe/requests`
|
|
||||||
return got(travis, {
|
|
||||||
json: true,
|
|
||||||
body: {
|
|
||||||
request: {
|
|
||||||
branch: branch,
|
|
||||||
config: {
|
|
||||||
merge_mode: 'deep_merge',
|
|
||||||
env: {
|
|
||||||
//use matrix so that secure global variable is merged
|
|
||||||
matrix: {
|
|
||||||
NEXE_VERSION: release.toString()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
headers: {
|
|
||||||
'Travis-API-Version': '3',
|
|
||||||
Authorization: `token ${env.TRAVIS_TOKEN}`
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
export function triggerWindowsBuild(release: NexeTarget) {
|
|
||||||
const version = 'NEXE_VERSION' in env ? env.NEXE_VERSION!.trim() : release.toString()
|
|
||||||
if (getTarget(version).version.startsWith('10.')) {
|
|
||||||
if ((env.APPVEYOR_BUILD_WORKER_IMAGE || '').includes('2017')) {
|
|
||||||
env.NEXE_VERSION = version
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
env.NEXE_VERSION = version
|
|
||||||
}
|
|
||||||
return Promise.resolve()
|
|
||||||
}
|
|
||||||
+6
-5
@@ -9,7 +9,7 @@ function alpine(target: NexeTarget) {
|
|||||||
FROM ${target.arch === 'x64' ? '' : 'i386/'}alpine:3.4
|
FROM ${target.arch === 'x64' ? '' : 'i386/'}alpine:3.4
|
||||||
RUN apk add --no-cache curl make gcc g++ binutils-gold python linux-headers paxctl libgcc libstdc++ git vim tar gzip wget
|
RUN apk add --no-cache curl make gcc g++ binutils-gold python linux-headers paxctl libgcc libstdc++ git vim tar gzip wget
|
||||||
ENV NODE_VERSION=${target.version}
|
ENV NODE_VERSION=${target.version}
|
||||||
ENV NEXE_VERSION=beta
|
ENV NEXE_VERSION=latest
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
|
|
||||||
RUN curl -sSL https://nodejs.org/dist/v\${NODE_VERSION}/node-v\${NODE_VERSION}.tar.gz | tar -xz && \
|
RUN curl -sSL https://nodejs.org/dist/v\${NODE_VERSION}/node-v\${NODE_VERSION}.tar.gz | tar -xz && \
|
||||||
@@ -20,19 +20,20 @@ RUN curl -sSL https://nodejs.org/dist/v\${NODE_VERSION}/node-v\${NODE_VERSION}.t
|
|||||||
paxctl -cm /usr/bin/node
|
paxctl -cm /usr/bin/node
|
||||||
|
|
||||||
RUN rm /nexe_temp/\${NODE_VERSION}/out/Release/node && \
|
RUN rm /nexe_temp/\${NODE_VERSION}/out/Release/node && \
|
||||||
npm install -g nexe@\${NEXE_VERSION} && \
|
npm install -g nexe@\${NEXE_VERSION}
|
||||||
nexe --build --empty --temp /nexe_temp -c="--fully-static" -o out --enableStdIn=false
|
RUN echo "console.log('hello world')" >> index.js && \
|
||||||
|
nexe --build --no-mangle --temp /nexe_temp -c="--fully-static" -o out
|
||||||
`.trim()
|
`.trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
function arm(target: NexeTarget) {
|
function arm(target: NexeTarget) {
|
||||||
return `
|
return `
|
||||||
FROM hypriot/rpi-node
|
FROM hypriot/rpi-node
|
||||||
ENV NEXE_VERSION=beta
|
ENV NEXE_VERSION=latest
|
||||||
WORKDIR /
|
WORKDIR /
|
||||||
|
|
||||||
RUN yarn global add nexe@\${NEXE_VERSION} && \
|
RUN yarn global add nexe@\${NEXE_VERSION} && \
|
||||||
nexe --build --empty -o out -t ${target.version}
|
nexe --build --no-mangle -o out -t ${target.version}
|
||||||
`.trim()
|
`.trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,9 +10,13 @@ describe('options', () => {
|
|||||||
const options = normalizeOptions()
|
const options = normalizeOptions()
|
||||||
expect(options.cwd).to.equal(process.cwd())
|
expect(options.cwd).to.equal(process.cwd())
|
||||||
})
|
})
|
||||||
it('should use the main module in a package directory', () => {
|
it('should use the main module in a package directory (if not in a TTY)', () => {
|
||||||
const options = normalizeOptions()
|
const options = normalizeOptions()
|
||||||
expect(options.input).to.equal(path.resolve('./index.js'))
|
if (!process.stdin.isTTY) {
|
||||||
|
expect(options.input).to.equal('[stdin]')
|
||||||
|
} else {
|
||||||
|
expect(options.input).to.equal(path.resolve('./index.js'))
|
||||||
|
}
|
||||||
})
|
})
|
||||||
it('should resolve relative paths for input', () => {
|
it('should resolve relative paths for input', () => {
|
||||||
const options = normalizeOptions({ input: 'test/fixture/entry.js' })
|
const options = normalizeOptions({ input: 'test/fixture/entry.js' })
|
||||||
|
|||||||
Reference in New Issue
Block a user