From 314f149b4ba19923c5feec702ed1a5a09f6cf7c1 Mon Sep 17 00:00:00 2001 From: Matthew Nibecker Date: Mon, 20 Apr 2020 09:40:38 -0700 Subject: [PATCH] Debian release artifact (#631) Add install script for linux which currently creates only .deb artifact for debian based linux distributions. Also add github action for creating linux release artifacts. --- .github/workflows/linux-release.yml | 46 ++ package-lock.json | 862 ++++++++++++++++++++++------ package.json | 5 +- scripts/release/index.js | 2 + scripts/release/install.js | 18 + scripts/release/pack.js | 8 + src/static/AppIcon.png | Bin 0 -> 24630 bytes 7 files changed, 764 insertions(+), 177 deletions(-) create mode 100644 .github/workflows/linux-release.yml create mode 100644 src/static/AppIcon.png diff --git a/.github/workflows/linux-release.yml b/.github/workflows/linux-release.yml new file mode 100644 index 0000000000..6bc44ee038 --- /dev/null +++ b/.github/workflows/linux-release.yml @@ -0,0 +1,46 @@ +name: Brim linux release + +on: + push: + tags: + - v* + +jobs: + build: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + - name: setup node + uses: actions/setup-node@v1 + with: + node-version: 12.x + - name: Set NPM Cache Directory + id: set-npm-cache-dir + run: echo "::set-output name=npm_cache_dir::$(npm config get cache)" + - name: Clear Extraneous Runner Cache + run: rm -rf "${NPM_CACHE:?}" + env: + NPM_CACHE: ${{ steps.set-npm-cache-dir.outputs.npm_cache_dir }} + shell: bash + - name: Cache node modules + uses: actions/cache@v1 + env: + cache-name: cache-node-modules-ci-v4 + with: + path: ${{ steps.set-npm-cache-dir.outputs.npm_cache_dir }} + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}- + - run: npm install --no-audit + - run: npm run build + - name: build package + run: | + node ./scripts/release --linux + - name: upload release artifact + uses: svenstaro/upload-release-action@1.1.0 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ github.ref }} + file: dist/installers/brim_amd64.deb + asset_name: brim_amd64.deb + overwrite: true diff --git a/package-lock.json b/package-lock.json index ce599dc28b..568256a7de 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1059,9 +1059,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -1623,6 +1623,58 @@ "@types/yargs": "^12.0.9" } }, + "@malept/cross-spawn-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.0.tgz", + "integrity": "sha512-GeIK5rfU1Yd7BZJQPTGZMMmcZy5nhRToPXZcjaDwQDRSewdhp648GT2E4dh+L7+Io7AOW6WQ+GR44QSzja4qxg==", + "optional": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "cross-spawn": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.2.tgz", + "integrity": "sha512-PD6G8QG3S4FK/XCGFbEQrDqO2AnMMsy0meR7lerlIOHAAbkuavGU/pOqprrlvfTNjvowivTeBsjebAL0NSoMxw==", + "optional": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "optional": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "optional": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "optional": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "optional": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, "@octokit/endpoint": { "version": "5.5.1", "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-5.5.1.tgz", @@ -1792,6 +1844,29 @@ "@types/responselike": "*" } }, + "@types/color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", + "optional": true + }, + "@types/events": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", + "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==", + "optional": true + }, + "@types/glob": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", + "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", + "optional": true, + "requires": { + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, "@types/http-cache-semantics": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", @@ -1838,11 +1913,16 @@ "@types/node": "*" } }, + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "optional": true + }, "@types/node": { "version": "13.1.5", "resolved": "https://registry.npmjs.org/@types/node/-/node-13.1.5.tgz", - "integrity": "sha512-wupvfmtbqRJzjCm1H2diy7wo31Gn1OzvqoxCfQuKM9eSecogzP0WTlrjdq7cf7jgSO2ZX6hxwgRPR8Wt7FA22g==", - "dev": true + "integrity": "sha512-wupvfmtbqRJzjCm1H2diy7wo31Gn1OzvqoxCfQuKM9eSecogzP0WTlrjdq7cf7jgSO2ZX6hxwgRPR8Wt7FA22g==" }, "@types/responselike": { "version": "1.0.0", @@ -2040,9 +2120,9 @@ "optional": true }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "optional": true }, @@ -2379,11 +2459,11 @@ } }, "asar": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/asar/-/asar-2.0.3.tgz", - "integrity": "sha512-QdHKO+HOYVtE4B/M3up3i4LSJeJgsa2CTVBrjBf9GgLUPGGUFZowcdJ5yE4gOJuRAHNdqB9JFeRfFfaOu5x8Rw==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/asar/-/asar-2.1.0.tgz", + "integrity": "sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA==", "requires": { + "@types/glob": "^7.1.1", "chromium-pickle-js": "^0.2.0", "commander": "^2.20.0", "cuint": "^0.2.2", @@ -2468,8 +2548,7 @@ "author-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/author-regex/-/author-regex-1.0.0.tgz", - "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=", - "dev": true + "integrity": "sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA=" }, "aws-sign2": { "version": "0.7.0", @@ -2858,8 +2937,7 @@ "bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "boolbase": { "version": "1.0.0", @@ -3238,8 +3316,7 @@ "chromium-pickle-js": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", - "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=", - "dev": true + "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=" }, "chrono-node": { "version": "1.3.11", @@ -3558,6 +3635,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -3910,8 +3988,7 @@ "cuint": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", - "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=", - "dev": true + "integrity": "sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=" }, "currently-unhandled": { "version": "0.4.1", @@ -4536,6 +4613,52 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.29.tgz", "integrity": "sha512-yo8Qz0ygADGFptISDj3pOC9wXfln/5pQaN/ysDIzOaAWXt73cNHmtEC8zSO2Y+kse/txmwIAJzkYZ5fooaS5DQ==", "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } }, @@ -4547,6 +4670,54 @@ "requires": { "electron-download": "^4.1.1", "extract-zip": "^1.6.7" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + } + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } } }, "electron-devtools-installer": { @@ -4626,13 +4797,290 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } }, + "electron-installer-common": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/electron-installer-common/-/electron-installer-common-0.10.1.tgz", + "integrity": "sha512-d9gEXhfSSyMn8mkFNdbUdkqdLkxVZ8nO3NDso3nuSnG1+wy7cJuuCjutwR4+zsXdQuNFC1n/DxpTk4pBLZSCTQ==", + "optional": true, + "requires": { + "@malept/cross-spawn-promise": "^1.0.0", + "asar": "^2.0.1", + "debug": "^4.1.1", + "fs-extra": "^8.0.1", + "glob": "^7.1.4", + "lodash": "^4.17.15", + "parse-author": "^2.0.0", + "semver": "^7.1.1", + "tmp-promise": "^2.0.1" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "optional": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "optional": true + }, + "semver": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", + "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", + "optional": true + }, + "tmp-promise": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-2.0.2.tgz", + "integrity": "sha512-zl71nFWjPKW2KXs+73gEk8RmqvtAeXPxhWDkTUoa3MSMkjq3I+9OeknjF178MQoMYsdqL730hfzvNfEkePxq9Q==", + "optional": true, + "requires": { + "tmp": "0.1.0" + } + } + } + }, + "electron-installer-debian": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/electron-installer-debian/-/electron-installer-debian-3.0.0.tgz", + "integrity": "sha512-91iiicfK5hq6D6Xit7SFCN2GpccFBQbZB1JpYaxFdaueEjM/1hSULtCPf4e5w/2vQKZ73AfBZrxxIJqO3DhGPw==", + "optional": true, + "requires": { + "debug": "^4.1.1", + "electron-installer-common": "^0.10.0", + "fs-extra": "^8.0.1", + "get-folder-size": "^2.0.1", + "lodash": "^4.17.4", + "word-wrap": "^1.2.3", + "yargs": "^15.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "optional": true + }, + "ansi-styles": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", + "optional": true, + "requires": { + "@types/color-name": "^1.1.1", + "color-convert": "^2.0.1" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "optional": true + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "optional": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "optional": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "optional": true + }, + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "optional": true + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "optional": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "optional": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "optional": true + }, + "graceful-fs": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", + "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==", + "optional": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "optional": true + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "optional": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "optional": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "optional": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "optional": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "optional": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "optional": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "yargs": { + "version": "15.3.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.3.1.tgz", + "integrity": "sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA==", + "optional": true, + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.1" + } + }, + "yargs-parser": { + "version": "18.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.2.tgz", + "integrity": "sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ==", + "optional": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "electron-installer-dmg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/electron-installer-dmg/-/electron-installer-dmg-3.0.0.tgz", @@ -4672,9 +5120,9 @@ "dev": true }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -4995,9 +5443,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "ms": { @@ -5957,32 +6405,6 @@ } } }, - "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", - "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } - } - }, "extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -6022,14 +6444,6 @@ "bser": "2.1.1" } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { - "pend": "~1.2.0" - } - }, "fecha": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", @@ -7082,6 +7496,12 @@ } } }, + "gar": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/gar/-/gar-1.0.4.tgz", + "integrity": "sha512-w4n9cPWyP7aHxKxYHFQMegj7WIAsL/YX/C4Bs5Rr8s1H9M1rNtRWRsw+ovYMkXDQ5S4ZbYHsHAPmevPjPgw44w==", + "optional": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -7169,6 +7589,16 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, + "get-folder-size": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-folder-size/-/get-folder-size-2.0.1.tgz", + "integrity": "sha512-+CEb+GDCM7tkOS2wdMKTn9vU7DgnKUTuDlehkNJKNSovdCOVxs14OfKCk4cvSaR3za4gj+OBdl9opPN9xrJ0zA==", + "optional": true, + "requires": { + "gar": "^1.0.4", + "tiny-each-async": "2.0.3" + } + }, "get-node-dimensions": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz", @@ -7646,26 +8076,6 @@ "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", "dev": true }, - "handlebars": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.6.0.tgz", - "integrity": "sha512-i1ZUP7Qp2JdkMaFon2a+b0m5geE8Z4ZTLaGkgrObkEd+OkUKyRbRWw4KxuFCoHfdETSY1yf9/574eVoNSiK7pw==", - "dev": true, - "requires": { - "neo-async": "^2.6.0", - "optimist": "^0.6.1", - "source-map": "^0.6.1", - "uglify-js": "^3.1.4" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, "har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", @@ -7819,6 +8229,12 @@ "whatwg-encoding": "^1.0.1" } }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, "htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -8512,12 +8928,12 @@ } }, "istanbul-reports": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.6.tgz", - "integrity": "sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA==", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz", + "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==", "dev": true, "requires": { - "handlebars": "^4.1.2" + "html-escaper": "^2.0.0" } }, "isurl": { @@ -10063,9 +10479,9 @@ }, "dependencies": { "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, "parse5": { @@ -10128,9 +10544,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -10277,16 +10693,122 @@ "dev": true }, "livereload": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.8.2.tgz", - "integrity": "sha512-8wCvhiCL4cGVoT3U5xoe+UjpiiVZLrlOvr6dbhb1VlyC5QarhrlyRRt4z7EMGO4KSgXj+tKF/dr284F28/wI+g==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.1.tgz", + "integrity": "sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw==", "dev": true, "requires": { - "chokidar": "^2.1.5", + "chokidar": "^3.3.0", + "livereload-js": "^3.1.0", "opts": ">= 1.2.0", "ws": "^6.2.1" }, "dependencies": { + "anymatch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", + "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", + "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", + "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "dev": true, + "requires": { + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.3.0" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", + "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "readdirp": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", + "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.7" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, "ws": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", @@ -10298,6 +10820,12 @@ } } }, + "livereload-js": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.2.2.tgz", + "integrity": "sha512-xhScbNeC687ZINjEf/bD+BMiPx4s4q0mehcLb3zCc8+mykOtmaBR4vqzyIV9rIGdG9JjHaT0LiFdscvivCjX1Q==", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -10739,9 +11267,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -10810,7 +11338,8 @@ "minimist": { "version": "0.0.8", "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true }, "mixin-deep": { "version": "1.3.2", @@ -10834,11 +11363,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + } } }, "modify-filename": { @@ -11043,8 +11579,7 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" }, "murmur-32": { "version": "0.1.0", @@ -11113,12 +11648,6 @@ "semver": "^5.4.1" } }, - "neo-async": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", - "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", - "dev": true - }, "next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", @@ -11538,9 +12067,9 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "ms": { @@ -12116,7 +12645,6 @@ "version": "2.2.2", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", - "dev": true, "requires": { "p-try": "^2.0.0" } @@ -12148,8 +12676,7 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" }, "paralleljs": { "version": "0.2.1", @@ -12170,7 +12697,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-author/-/parse-author-2.0.0.tgz", "integrity": "sha1-00YL8d3Q367tQtp1QkLmX7aEqB8=", - "dev": true, "requires": { "author-regex": "^1.0.0" } @@ -12300,7 +12826,8 @@ "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=" + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true }, "performance-now": { "version": "2.1.0", @@ -12308,6 +12835,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, "pidtree": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.0.tgz", @@ -12425,9 +12958,9 @@ }, "dependencies": { "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, "acorn-jsx": { @@ -12959,9 +13492,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -13382,8 +13915,7 @@ "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, "require-relative": { "version": "0.8.7", @@ -13611,9 +14143,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -14517,9 +15049,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.0", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true } } @@ -14862,6 +15394,12 @@ "next-tick": "1" } }, + "tiny-each-async": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tiny-each-async/-/tiny-each-async-2.0.3.tgz", + "integrity": "sha1-jru/1tYpXxNwAD+7NxYq/loKUdE=", + "optional": true + }, "tiny-emitter": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", @@ -14872,7 +15410,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, "requires": { "rimraf": "^2.6.3" }, @@ -14881,7 +15418,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -14892,7 +15428,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-1.1.0.tgz", "integrity": "sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw==", - "dev": true, "requires": { "bluebird": "^3.5.0", "tmp": "0.1.0" @@ -14902,7 +15437,6 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -14911,7 +15445,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.1.0.tgz", "integrity": "sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw==", - "dev": true, "requires": { "rimraf": "^2.6.3" } @@ -15109,7 +15642,8 @@ "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true }, "typescript": { "version": "2.9.2", @@ -15146,26 +15680,6 @@ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" }, - "uglify-js": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.7.4.tgz", - "integrity": "sha512-tinYWE8X1QfCHxS1lBS8yiDekyhSXOO6R66yNOCdUJeojxxw+PX2BHAz/BWyW7PQ7pkiWVxJfIEbiDxyLWvUGg==", - "dev": true, - "optional": true, - "requires": { - "commander": "~2.20.3", - "source-map": "~0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "optional": true - } - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -15450,9 +15964,9 @@ }, "dependencies": { "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, "acorn-jsx": { @@ -15685,8 +16199,7 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" }, "wide-align": { "version": "1.1.3", @@ -15763,6 +16276,12 @@ "triple-beam": "^1.2.0" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "optional": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -15881,8 +16400,7 @@ "y18n": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==" }, "yallist": { "version": "2.1.2", @@ -15952,14 +16470,6 @@ } } }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "requires": { - "fd-slicer": "~1.0.1" - } - }, "zip-folder": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/zip-folder/-/zip-folder-1.0.0.tgz", diff --git a/package.json b/package.json index d5d3cf48e1..70ac75b2bb 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "got": "^10.6.0", "jest": "^24.9.0", "jest-junit": "^6.4.0", - "livereload": "^0.8.2", + "livereload": "^0.9.1", "node-sass-chokidar": "^1.4.0", "npm-run-all": "^4.1.3", "prettier": "^1.19.1", @@ -142,5 +142,8 @@ "source-map-support": "^0.5.16", "valid-url": "^1.0.9", "zq": "brimsec/zq#v0.11.1" + }, + "optionalDependencies": { + "electron-installer-debian": "^3.0.0" } } diff --git a/scripts/release/index.js b/scripts/release/index.js index ec15921ea2..ddd5160281 100755 --- a/scripts/release/index.js +++ b/scripts/release/index.js @@ -8,6 +8,7 @@ const install = require("./install") program .option("--win32", "Release for Windows") .option("--darwin", "Release for macOS") + .option("--linux", "Release for Linux") .option("--sign", "Sign package (macOS only)", false) .option("--notarize", "Notarize package (macOS only)", false) .option( @@ -41,5 +42,6 @@ program certificatePassword: cmd.windowsCertificatePassword }) ) + if (cmd.linux) pack.linux().then(install.debian) }) .parse(process.argv) diff --git a/scripts/release/install.js b/scripts/release/install.js index b9f0b3b354..d88234b2b3 100644 --- a/scripts/release/install.js +++ b/scripts/release/install.js @@ -2,6 +2,7 @@ const fs = require("fs") const os = require("os") const installer = require("electron-winstaller") +const debInstaller = require("electron-installer-debian") const createDMG = require("electron-installer-dmg") const createZip = require("electron-installer-zip") const path = require("path") @@ -62,6 +63,23 @@ module.exports = { // up exception may contain a passphrase. console.log("Error building win32 installer") }) + }, + + debian: function() { + console.log("Building deb package installer") + return debInstaller({ + src: "./dist/packages/Brim-linux-x64", + dest: out, + arch: "amd64", + rename: (dest) => { + return path.join(dest, "<%= name %>_<%= arch %>.deb") + }, + options: { + homepage: "https://www.brimsecurity.com", + icon: "./dist/static/AppIcon.png", + maintainer: "Brim Security, Inc. " + } + }) } } diff --git a/scripts/release/pack.js b/scripts/release/pack.js index 806e42467e..a65ef20c8c 100644 --- a/scripts/release/pack.js +++ b/scripts/release/pack.js @@ -37,5 +37,13 @@ module.exports = { }).then(() => { console.log("Built package for win32 in " + opts.out) }) + }, + linux: function() { + return packager({ + ...opts, + platform: "linux" + }).then(() => { + console.log("Built package for linux in " + opts.out) + }) } } diff --git a/src/static/AppIcon.png b/src/static/AppIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..d6f7d28f52c7b8b01f15b26585da99a7b4752df3 GIT binary patch literal 24630 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