From 2ab738c08389696888fa13b09fb29d02932a00b3 Mon Sep 17 00:00:00 2001 From: Webber Date: Sun, 22 Dec 2019 15:05:15 +0100 Subject: [PATCH] Run docker from javascript --- .babelrc.json | 3 - .eslintrc.json | 3 +- .github/workflows/main.yml | 59 ++-- Dockerfile | 7 +- babel.config.js | 15 + dist/index.js | Bin 19359 -> 127944 bytes dist/run-unity-builder.sh | 104 ------ jest.config.js | 8 + package.json | 8 +- src/index.js | 42 +-- src/model/action.js | 30 ++ src/model/action.test.js | 20 ++ src/model/docker.js | 57 ++++ src/model/docker.test.js | 15 + src/model/image.js | 76 +++++ src/model/image.test.js | 66 ++++ src/model/input.js | 22 ++ src/run-unity-builder.sh | 1 + yarn.lock | 656 ++++++++++++++++++++++++++++++++++++- 19 files changed, 1012 insertions(+), 180 deletions(-) delete mode 100644 .babelrc.json create mode 100644 babel.config.js delete mode 100644 dist/run-unity-builder.sh create mode 100644 jest.config.js create mode 100644 src/model/action.js create mode 100644 src/model/action.test.js create mode 100644 src/model/docker.js create mode 100644 src/model/docker.test.js create mode 100644 src/model/image.js create mode 100644 src/model/image.test.js create mode 100644 src/model/input.js diff --git a/.babelrc.json b/.babelrc.json deleted file mode 100644 index 64363362..00000000 --- a/.babelrc.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "presets": ["@babel/preset-flow"] -} diff --git a/.eslintrc.json b/.eslintrc.json index 72fb7787..af97d6e0 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -15,6 +15,7 @@ "plugins": ["react", "jsx-a11y", "import", "prettier", "flowtype", "unicorn"], "settings": { "react": { "version": "latest" } }, "rules": { - "prettier/prettier": "error" + "prettier/prettier": "error", + "import/no-extraneous-dependencies": 0 } } diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 91e93df7..0018efc1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,49 +9,40 @@ env: PROJECT_PATH: test-project jobs: - # test: - # name: Test the project - # runs-on: ubuntu-latest - # steps: - # - uses: actions/checkout@v1 - # - uses: webbertakken/unity-activate@v1 - # - uses: webbertakken/unity-test-runner@v1.1 - # - uses: webbertakken/unity-return-license@v1 - # if: always() - # - uses: actions/upload-artifact@v1 - # with: - # name: Test results - # path: artifacts/ + strategy: + matrix: + unityVersion: + - 2019.2.11f1 + targetPlatform: + - WebGL + # - StandaloneOSX + # - StandaloneWindows + # - StandaloneWindows64 + # - StandaloneLinux64 + # - PS4 + # - XboxOne + # - Switch + - Android + - iOS + # - tvOS + # - Lumin + # - BJM + # - WSAPlayer - buildForWebGL: - name: Build for WebGL - # needs: [test] + buildForAllPlatforms: + name: Build for ${{ matrix.targetPlatform }} on version ${{ matrix.unityVersion }} runs-on: ubuntu-latest - steps: # webbertakken/unity-builder@v0.3-webgl + steps: - uses: actions/checkout@v1 - uses: webbertakken/unity-activate@v1 - - uses: ./ + - uses: ./ # webbertakken/unity-builder@v0.3-webgl with: projectPath: test-project - targetPlatform: WebGL - unityVersion: 2019.2.11f1 + targetPlatform: ${{ matrix.targetPlatform }} + unityVersion: ${{ matrix.unityVersion }} - uses: webbertakken/unity-return-license@v1 if: always() - uses: actions/upload-artifact@v1 with: name: Build path: build -# buildForAndroid: -# name: Build for Android -# # needs: [test] -# runs-on: ubuntu-latest -# steps: # webbertakken/unity-builder@v0.3-android -# - uses: actions/checkout@v1 -# - uses: webbertakken/unity-activate@v1 -# - uses: ./ -# - uses: webbertakken/unity-return-license@v1 -# if: always() -# - uses: actions/upload-artifact@v1 -# with: -# name: Build -# path: build diff --git a/Dockerfile b/Dockerfile index fa5af25b..a513588f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,5 @@ -ARG IMAGE_REPOSITORY -ARG IMAGE_NAME -ARG IMAGE_VERSION - -FROM $IMAGE_REPOSITORY/$IMAGE_NAME:$IMAGE_VERSION +ARG IMAGE +FROM $IMAGE LABEL "com.github.actions.name"="Unity - Builder" LABEL "com.github.actions.description"="Build Unity projects for different platforms." diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..3c464d16 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,15 @@ +const esModules = ['lodash-es'].join('|'); + +module.exports = { + ignore: [`/node_modules/(?!${esModules})`], + presets: [ + [ + '@babel/preset-env', + { + targets: { + node: true, + }, + }, + ], + ], +}; diff --git a/dist/index.js b/dist/index.js index c17a16a17a7e8d32464b6794c52fc296aadcfe43..466743caf9f85ad48998ca0e9890c3cd2195e035 100644 GIT binary patch literal 127944 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®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 CwJNv( diff --git a/dist/run-unity-builder.sh b/dist/run-unity-builder.sh deleted file mode 100644 index d045ab58..00000000 --- a/dist/run-unity-builder.sh +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -# -# Input variables -# - -IMAGE_UNITY_VERSION=$1 -IMAGE_TARGET_PLATFORM=$2 -PROJECT_PATH=$3 -TARGET_PLATFORM=$4 -BUILD_NAME=$5 -BUILDS_PATH=$6 -BUILD_METHOD=$7 - -# -# Default variables -# - -# PROJECT_PATH = test-project -# BUILD_TARGET = -# BUILD_NAME = -# BUILDS_PATH = -# BUILD_METHOD = -# HOME = /home/runner -# GITHUB_REF = refs/pull/8/merge -# GITHUB_SHA = 0e697e1f2d80e0e8505c0e0dcff76d24bc7a4f36 -# GITHUB_REPOSITORY = webbertakken/unity-builder -# GITHUB_ACTOR = webbertakken -# GITHUB_WORKFLOW = Actions 😎 -# GITHUB_HEAD_REF = prepare-for-multi-target -# GITHUB_BASE_REF = master -# GITHUB_EVENT_NAME = pull_request -# GITHUB_WORKSPACE = /home/runner/work/unity-builder/unity-builder -# GITHUB_ACTION = self -# GITHUB_EVENT_PATH = /home/runner/work/_temp/_github_workflow/event.json -# RUNNER_OS = Linux -# RUNNER_TOOL_CACHE = /opt/hostedtoolcache -# RUNNER_TEMP = /home/runner/work/_temp -# RUNNER_WORKSPACE = /home/runner/work/unity-builder - -# -# Internal variables -# - -ACTION_ROOT=$(dirname $(dirname $(readlink -fm "$0"))) -DOCKER_IMAGE_TAG=unity-builder:$IMAGE_UNITY_VERSION-$IMAGE_TARGET_PLATFORM - -# TODO - Remove debug statements (after it is proven to work) - -echo "Listing ACTION_ROOT" -ls $ACTION_ROOT -echo "" -echo "Listing GITHUB_WORKSPACE" -ls $GITHUB_WORKSPACE -echo "" -echo "Listing RUNNER_WORKSPACE" -ls $RUNNER_WORKSPACE -echo "" - -# -# Build image -# - -echo "Building docker image for $IMAGE_UNITY_VERSION-$IMAGE_TARGET_PLATFORM" -docker build $GITHUB_WORKSPACE \ - --file $ACTION_ROOT/Dockerfile \ - --build-arg IMAGE_REPOSITORY=gableroux \ - --build-arg IMAGE_NAME=unity3d \ - --build-arg IMAGE_VERSION=$IMAGE_UNITY_VERSION-$IMAGE_TARGET_PLATFORM \ - --tag $DOCKER_IMAGE_TAG - -# -# Run specified container -# - -docker run \ - --workdir /github/workspace \ - --rm \ - --env PROJECT_PATH \ - --env BUILD_TARGET=$TARGET_PLATFORM \ - --env BUILD_NAME \ - --env BUILDS_PATH \ - --env BUILD_METHOD \ - --env HOME=/github/home \ - --env GITHUB_REF \ - --env GITHUB_SHA \ - --env GITHUB_REPOSITORY \ - --env GITHUB_ACTOR \ - --env GITHUB_WORKFLOW \ - --env GITHUB_HEAD_REF \ - --env GITHUB_BASE_REF \ - --env GITHUB_EVENT_NAME \ - --env GITHUB_WORKSPACE=/github/workspace \ - --env GITHUB_ACTION \ - --env GITHUB_EVENT_PATH \ - --env RUNNER_OS \ - --env RUNNER_TOOL_CACHE \ - --env RUNNER_TEMP \ - --env RUNNER_WORKSPACE \ - --volume "/var/run/docker.sock":"/var/run/docker.sock" \ - --volume "/home/runner/work/_temp/_github_home":"/github/home" \ - --volume "/home/runner/work/_temp/_github_workflow":"/github/workflow" \ - --volume "${PWD}":"/github/workspace" \ - $DOCKER_IMAGE_TAG diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 00000000..eed52d7e --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +const esModules = ['lodash-es'].join('|'); + +module.exports = { + testEnvironment: 'node', + moduleFileExtensions: ['js', 'jsx', 'json', 'vue'], + transform: { '^.+\\.(js|jsx)?$': 'babel-jest' }, + transformIgnorePatterns: [`/node_modules/(?!${esModules})`], +}; diff --git a/package.json b/package.json index 4cf7db46..a7713ee5 100644 --- a/package.json +++ b/package.json @@ -7,11 +7,9 @@ "author": "Webber ", "license": "MIT", "scripts": { - "build": "ncc build src/index.js -o dist -m", - "watch": "yarn build -w", - "start": "node dist/index.js", + "build": "ncc build --out dist --minify", "lint": "prettier --check \"src/**/*.js\" && eslint src", - "test": "jest --passWithNoTests" + "test": "jest" }, "dependencies": { "@actions/core": "^1.2.0", @@ -21,6 +19,7 @@ "devDependencies": { "@babel/cli": "7.7.5", "@babel/core": "7.7.5", + "@babel/preset-env": "7.7.7", "@zeit/ncc": "0.20.5", "babel-eslint": "10.0.3", "eslint": "6.7.2", @@ -35,6 +34,7 @@ "husky": "4.0.0-beta.5", "jest": "24.9.0", "lint-staged": "9.5.0", + "lodash-es": "4.17.15", "prettier": "1.19.1" }, "husky": { diff --git a/src/index.js b/src/index.js index e276b9ca..9ecc8a2e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,38 +1,26 @@ +import Action from './model/action'; +import Docker from './model/docker'; +import ImageTag from './model/image'; +import Input from './model/input'; + const core = require('@actions/core'); -const path = require('path'); -const { exec } = require('@actions/exec'); async function action() { - // Explicitly notify about platform support - if (process.platform !== 'linux') { - throw new Error('Currently only Linux-based platforms are supported'); - } + Action.checkCompatibility(); - // Input variables specified in workflows using "with" prop. - const projectPath = core.getInput('projectPath', { default: './' }); - const targetPlatform = core.getInput('targetPlatform', { default: 'WebGL' }); - const unityVersion = core.getInput('unityVersion', { default: '2019.2.11f1' }); - const buildName = core.getInput('buildName', { default: 'TestBuild' }); - const buildsPath = core.getInput('buildsPath', { default: 'build' }); - const buildMethod = core.getInput('buildMethod', { default: '' }); - - // Determine image - const IMAGE_UNITY_VERSION = unityVersion; - const IMAGE_TARGET_PLATFORM = targetPlatform.toLowerCase(); - - // Run appropriate docker image with given args - const bootstrapper = path.join(__dirname, 'run-unity-builder.sh'); - await exec(`ls ${bootstrapper}`); - await exec(`chmod +x ${bootstrapper}`); - await exec(bootstrapper, [ - IMAGE_UNITY_VERSION, - IMAGE_TARGET_PLATFORM, - projectPath, + const { + unityVersion, targetPlatform, + projectPath, buildName, buildsPath, buildMethod, - ]); + } = Input.getFromUser(); + + const { dockerfile, workspace } = Action; + const baseImage = new ImageTag({ unityVersion, targetPlatform }); + const builtImage = await Docker.build({ path: workspace, dockerfile, image: baseImage }); + await Docker.run(builtImage, { projectPath, buildName, buildsPath, buildMethod }); } action().catch(error => { diff --git a/src/model/action.js b/src/model/action.js new file mode 100644 index 00000000..e47cf913 --- /dev/null +++ b/src/model/action.js @@ -0,0 +1,30 @@ +import path from 'path'; + +export default class Action { + static get supportedPlatforms() { + return ['linux']; + } + + static get name() { + return 'unity-builder'; + } + + static get rootFolder() { + return path.dirname(path.dirname(__dirname)); + } + + static get dockerfile() { + return `${Action.rootFolder}/Dockerfile`; + } + + static get workspace() { + return process.env.GITHUB_WORKSPACE; + } + + static checkCompatibility() { + const currentPlatform = process.platform; + if (!Action.supportedPlatforms.includes(currentPlatform)) { + throw new Error(`Currently ${currentPlatform}-platform is not supported`); + } + } +} diff --git a/src/model/action.test.js b/src/model/action.test.js new file mode 100644 index 00000000..b72af5d4 --- /dev/null +++ b/src/model/action.test.js @@ -0,0 +1,20 @@ +import path from 'path'; +import Action from './action'; + +describe('Action', () => { + describe('compatibility check', () => { + it('throws for anything other than linux', () => { + if (process.platform !== 'linux') { + expect(() => Action.checkCompatibility()).toThrow(); + } else { + expect(() => Action.checkCompatibility()).not.toThrow(); + } + }); + }); + + it('returns the root folder of the action', () => { + const { rootFolder, name } = Action; + + expect(path.basename(rootFolder)).toStrictEqual(name); + }); +}); diff --git a/src/model/docker.js b/src/model/docker.js new file mode 100644 index 00000000..e3207d72 --- /dev/null +++ b/src/model/docker.js @@ -0,0 +1,57 @@ +import { exec } from '@actions/exec'; + +export default class Docker { + static async build(buildParameters) { + const { path = './', dockerfile, image } = buildParameters; + const tag = `unity-builder:${image.tag}`; + + await exec('pwd'); + await exec('ls -alh'); + await exec(`ls -alh ${path}`); + await exec(` + docker build ${path} + --file ${dockerfile} + --build-arg IMAGE=${image} + --tag ${tag} + `); + + return tag; + } + + static async run(image, parameters) { + const { GITHUB_WORKSPACE } = process.env; + const { projectPath, buildName, buildsPath, buildMethod } = parameters; + + await exec(` + docker run \ + --workdir /github/workspace \ + --rm \ + --env PROJECT_PATH=${projectPath} \ + --env BUILD_TARGET=${image.targetPlatform} \ + --env BUILD_NAME=${buildName} \ + --env BUILDS_PATH=${buildsPath} \ + --env BUILD_METHOD=${buildMethod} \ + --env HOME=/github/home \ + --env GITHUB_REF \ + --env GITHUB_SHA \ + --env GITHUB_REPOSITORY \ + --env GITHUB_ACTOR \ + --env GITHUB_WORKFLOW \ + --env GITHUB_HEAD_REF \ + --env GITHUB_BASE_REF \ + --env GITHUB_EVENT_NAME \ + --env GITHUB_WORKSPACE=/github/workspace \ + --env GITHUB_ACTION \ + --env GITHUB_EVENT_PATH \ + --env RUNNER_OS \ + --env RUNNER_TOOL_CACHE \ + --env RUNNER_TEMP \ + --env RUNNER_WORKSPACE \ + --volume "/var/run/docker.sock":"/var/run/docker.sock" \ + --volume "/home/runner/work/_temp/_github_home":"/github/home" \ + --volume "/home/runner/work/_temp/_github_workflow":"/github/workflow" \ + --volume "${GITHUB_WORKSPACE}":"/github/workspace" \ + ${image} + `); + } +} diff --git a/src/model/docker.test.js b/src/model/docker.test.js new file mode 100644 index 00000000..0a88dcb2 --- /dev/null +++ b/src/model/docker.test.js @@ -0,0 +1,15 @@ +import Action from './action'; +import Docker from './docker'; +import Image from './image'; + +describe('Docker', () => { + it('builds', async () => { + const tag = await Docker.build({ + // path: Action.rootFolder, + dockerfile: `${Action.rootFolder}/Dockerfile`, + image: new Image({ version: '2019.2.11f1', targetPlatform: 'WebGL' }), + }); + + expect(tag).toStrictEqual('unity-builder:2019.2.11f1-webgl'); + }); +}); diff --git a/src/model/image.js b/src/model/image.js new file mode 100644 index 00000000..951aca53 --- /dev/null +++ b/src/model/image.js @@ -0,0 +1,76 @@ +import { has, get, trimEnd } from 'lodash-es'; + +export default class Image { + constructor(imageProperties) { + const { + repository = 'gableroux', + name = 'unity3d', + version = '2019.2.11f1', + targetPlatform, + } = imageProperties; + + if (!Image.versionPattern.test(version)) { + throw new Error(`Invalid version "${version}".`); + } + + if (!has(Image.targetPlatformToBuilderPlatformMap, targetPlatform)) { + throw new Error(`Platform "${targetPlatform}" is currently not supported.`); + } + + const builderPlatform = get( + Image.targetPlatformToBuilderPlatformMap, + targetPlatform, + Image.builderPlatforms.generic, + ); + + Object.assign(this, { repository, name, version, targetPlatform, builderPlatform }); + } + + static get versionPattern() { + return /^20\d{2}\.\d\.\w{4}$/; + } + + static get builderPlatforms() { + return { + generic: '', + webgl: 'webgl', + mac: 'mac', + windows: 'windows', + android: 'android', + ios: 'ios', + }; + } + + static get targetPlatformToBuilderPlatformMap() { + const { generic, webgl, mac, windows, android, ios } = Image.builderPlatforms; + + return { + WebGL: webgl, + StandaloneOSX: mac, + StandaloneWindows: windows, + StandaloneWindows64: windows, + StandaloneLinux64: generic, + PS4: generic, + XboxOne: generic, + Switch: generic, + Android: android, + iOS: ios, + tvOS: generic, + Lumin: generic, + BJM: generic, + Stadia: generic, + WSAPlayer: generic, + Facebook: generic, + }; + } + + get tag() { + return trimEnd(`${this.version}-${this.builderPlatform}`, '-'); + } + + toString() { + const { repository, name, tag } = this; + + return `${repository}/${name}:${tag}`; + } +} diff --git a/src/model/image.test.js b/src/model/image.test.js new file mode 100644 index 00000000..5af04c22 --- /dev/null +++ b/src/model/image.test.js @@ -0,0 +1,66 @@ +import Image from './image'; + +describe('UnityImageVersion', () => { + const some = { + repository: 'test1', + name: 'test2', + version: '2099.9.f9f9', + targetPlatform: 'Stadia', + builderPlatform: '', + }; + + const defaults = { + repository: 'gableroux', + name: 'unity3d', + image: 'gableroux/unity3d', + }; + + describe('constructor', () => { + it('can be called', () => { + expect(() => new Image({ targetPlatform: some.targetPlatform })).not.toThrow(); + }); + + it('accepts parameters and sets the right properties', () => { + const image = new Image(some); + + expect(image.repository).toStrictEqual(some.repository); + expect(image.name).toStrictEqual(some.name); + expect(image.version).toStrictEqual(some.version); + expect(image.targetPlatform).toStrictEqual(some.targetPlatform); + expect(image.builderPlatform).toStrictEqual(some.builderPlatform); + }); + + it('throws for incorrect versions', () => { + const { targetPlatform } = some; + expect(() => new Image({ version: 'some version', targetPlatform })).toThrow(); + expect(() => new Image({ version: '', targetPlatform })).toThrow(); + expect(() => new Image({ version: 1, targetPlatform })).toThrow(); + expect(() => new Image({ version: null, targetPlatform })).toThrow(); + }); + + it('throws for incorrect or unsupported targets', () => { + expect(() => new Image({ targetPlatform: undefined })).toThrow(); + expect(() => new Image({ targetPlatform: 'nonExisting' })).toThrow(); + }); + }); + + describe('toString', () => { + it('returns the correct version', () => { + const image = new Image({ version: '2099.1.1111', targetPlatform: some.targetPlatform }); + + expect(image.toString()).toStrictEqual(`${defaults.image}:2099.1.1111`); + }); + + it('returns the specific build platform', () => { + const image = new Image({ version: '2019.2.11f1', targetPlatform: 'WebGL' }); + + expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1-webgl`); + }); + + it('returns no specific build platform for generic targetPlatforms', () => { + const image = new Image({ targetPlatform: 'Stadia' }); + + expect(image.toString()).toStrictEqual(`${defaults.image}:2019.2.11f1`); + }); + }); +}); diff --git a/src/model/input.js b/src/model/input.js new file mode 100644 index 00000000..816213c7 --- /dev/null +++ b/src/model/input.js @@ -0,0 +1,22 @@ +const core = require('@actions/core'); + +export default class Input { + static getFromUser() { + // Input variables specified in workflows using "with" prop. + const unityVersion = core.getInput('unityVersion'); + const targetPlatform = core.getInput('targetPlatform'); + const projectPath = core.getInput('projectPath'); + const buildName = core.getInput('buildName'); + const buildsPath = core.getInput('buildsPath'); + const buildMethod = core.getInput('buildMethod'); + + return { + unityVersion, + targetPlatform, + projectPath, + buildName, + buildsPath, + buildMethod, + }; + } +} diff --git a/src/run-unity-builder.sh b/src/run-unity-builder.sh index d045ab58..79d0d694 100644 --- a/src/run-unity-builder.sh +++ b/src/run-unity-builder.sh @@ -60,6 +60,7 @@ echo "" # # Build image # +echo "some test" echo "Building docker image for $IMAGE_UNITY_VERSION-$IMAGE_TARGET_PLATFORM" docker build $GITHUB_WORKSPACE \ diff --git a/yarn.lock b/yarn.lock index 94d3066a..7408626d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -80,6 +80,55 @@ lodash "^4.17.13" source-map "^0.5.0" +"@babel/helper-annotate-as-pure@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz#bb3faf1e74b74bd547e867e48f551fa6b098b6ce" + integrity sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz#5f73f2b28580e224b5b9bd03146a4015d6217f5f" + integrity sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-call-delegate@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz#621b83e596722b50c0066f9dc37d3232e461b801" + integrity sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA== + dependencies: + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-create-regexp-features-plugin@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz#6d5762359fd34f4da1500e4cff9955b5299aaf59" + integrity sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A== + dependencies: + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.6.0" + +"@babel/helper-define-map@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz#2841bf92eb8bd9c906851546fe6b9d45e162f176" + integrity sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-explode-assignable-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz#fa700878e008d85dc51ba43e9fb835cddfe05c84" + integrity sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg== + dependencies: + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helper-function-name@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" @@ -96,11 +145,87 @@ dependencies: "@babel/types" "^7.7.4" +"@babel/helper-hoist-variables@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz#612384e3d823fdfaaf9fce31550fe5d4db0f3d12" + integrity sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-member-expression-to-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz#356438e2569df7321a8326644d4b790d2122cb74" + integrity sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-imports@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz#e5a92529f8888bf319a6376abfbd1cebc491ad91" + integrity sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ== + dependencies: + "@babel/types" "^7.7.4" + +"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835" + integrity sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-simple-access" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz#034af31370d2995242aa4df402c3b7794b2dcdf2" + integrity sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg== + dependencies: + "@babel/types" "^7.7.4" + "@babel/helper-plugin-utils@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== +"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4": + version "7.5.5" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351" + integrity sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw== + dependencies: + lodash "^4.17.13" + +"@babel/helper-remap-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz#c68c2407350d9af0e061ed6726afb4fff16d0234" + integrity sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-wrap-function" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-replace-supers@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz#3c881a6a6a7571275a72d82e6107126ec9e2cdd2" + integrity sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + +"@babel/helper-simple-access@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz#a169a0adb1b5f418cfc19f22586b2ebf58a9a294" + integrity sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A== + dependencies: + "@babel/template" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helper-split-export-declaration@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" @@ -108,6 +233,16 @@ dependencies: "@babel/types" "^7.7.4" +"@babel/helper-wrap-function@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz#37ab7fed5150e22d9d7266e830072c0cdd8baace" + integrity sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@babel/types" "^7.7.4" + "@babel/helpers@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.7.4.tgz#62c215b9e6c712dadc15a9a0dcab76c92a940302" @@ -131,13 +266,398 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== -"@babel/plugin-syntax-object-rest-spread@^7.0.0": +"@babel/plugin-proposal-async-generator-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz#0351c5ac0a9e927845fffd5b82af476947b7ce6d" + integrity sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + "@babel/plugin-syntax-async-generators" "^7.7.4" + +"@babel/plugin-proposal-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz#dde64a7f127691758cbfed6cf70de0fa5879d52d" + integrity sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + +"@babel/plugin-proposal-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz#7700a6bfda771d8dc81973249eac416c6b4c697d" + integrity sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.7.4" + +"@babel/plugin-proposal-object-rest-spread@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.7.tgz#9f27075004ab99be08c5c1bd653a2985813cb370" + integrity sha512-3qp9I8lelgzNedI3hrhkvhaEYree6+WHnyA/q4Dza9z7iEIs1eyhWyJnetk3jJ69RT0AT4G0UhEGwyGFJ7GUuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + +"@babel/plugin-proposal-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz#ec21e8aeb09ec6711bc0a39ca49520abee1de379" + integrity sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.7.tgz#433fa9dac64f953c12578b29633f456b68831c4e" + integrity sha512-80PbkKyORBUVm1fbTLrHpYdJxMThzM1UqFGh0ALEhO9TYbG86Ah9zQYAB/84axz2vcxefDLdZwWwZNlYARlu9w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-async-generators@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz#331aaf310a10c80c44a66b238b6e49132bd3c889" + integrity sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz#29ca3b4415abfe4a5ec381e903862ad1a54c3aec" + integrity sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz#86e63f7d2e22f9e27129ac4e83ea989a382e86cc" + integrity sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0", "@babel/plugin-syntax-object-rest-spread@^7.7.4": version "7.7.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz#47cf220d19d6d0d7b154304701f468fc1cc6ff46" integrity sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg== dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-optional-catch-binding@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz#a3e38f59f4b6233867b4a92dcb0ee05b2c334aa6" + integrity sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-top-level-await@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz#bd7d8fa7b9fee793a36e4027fd6dd1aa32f946da" + integrity sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz#76309bd578addd8aee3b379d809c802305a98a12" + integrity sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz#694cbeae6d613a34ef0292713fa42fb45c4470ba" + integrity sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.7.4" + +"@babel/plugin-transform-block-scoped-functions@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz#d0d9d5c269c78eaea76227ace214b8d01e4d837b" + integrity sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz#200aad0dcd6bb80372f94d9e628ea062c58bf224" + integrity sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz#c92c14be0a1399e15df72667067a8f510c9400ec" + integrity sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-define-map" "^7.7.4" + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-optimise-call-expression" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + "@babel/helper-split-export-declaration" "^7.7.4" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz#e856c1628d3238ffe12d668eb42559f79a81910d" + integrity sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz#2b713729e5054a1135097b6a67da1b6fe8789267" + integrity sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.7.tgz#3e9713f1b69f339e87fa796b097d73ded16b937b" + integrity sha512-b4in+YlTeE/QmTgrllnb3bHA0HntYvjz8O3Mcbx75UBPJA2xhb5A8nle498VhxSXJHQefjtQxpnLPehDJ4TRlg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-duplicate-keys@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz#3d21731a42e3f598a73835299dd0169c3b90ac91" + integrity sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz#dd30c0191e3a1ba19bcc7e389bdfddc0729d5db9" + integrity sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz#248800e3a5e507b1f103d8b4ca998e77c63932bc" + integrity sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz#75a6d3303d50db638ff8b5385d12451c865025b1" + integrity sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g== + dependencies: + "@babel/helper-function-name" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz#27fe87d2b5017a2a5a34d1c41a6b9f6a6262643e" + integrity sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-member-expression-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz#aee127f2f3339fc34ce5e3055d7ffbf7aa26f19a" + integrity sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz#39e0fb717224b59475b306402bb8eedab01e729c" + integrity sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ== + dependencies: + "@babel/helper-module-transforms" "^7.7.5" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-commonjs@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz#1d27f5eb0bcf7543e774950e5b2fa782e637b345" + integrity sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q== + dependencies: + "@babel/helper-module-transforms" "^7.7.5" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.7.4" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-systemjs@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz#cd98152339d3e763dfe838b7d4273edaf520bb30" + integrity sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw== + dependencies: + "@babel/helper-hoist-variables" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + +"@babel/plugin-transform-modules-umd@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz#1027c355a118de0aae9fee00ad7813c584d9061f" + integrity sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw== + dependencies: + "@babel/helper-module-transforms" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz#fb3bcc4ee4198e7385805007373d6b6f42c98220" + integrity sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + +"@babel/plugin-transform-new-target@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz#4a0753d2d60639437be07b592a9e58ee00720167" + integrity sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz#48488937a2d586c0148451bf51af9d7dda567262" + integrity sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.7.4" + +"@babel/plugin-transform-parameters@^7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.7.tgz#7a884b2460164dc5f194f668332736584c760007" + integrity sha512-OhGSrf9ZBrr1fw84oFXj5hgi8Nmg+E2w5L7NhnG0lPvpDtqd7dbyilM2/vR8CKbJ907RyxPh2kj6sBCSSfI9Ew== + dependencies: + "@babel/helper-call-delegate" "^7.7.4" + "@babel/helper-get-function-arity" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz#2388d6505ef89b266103f450f9167e6bd73f98c2" + integrity sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.7.5": + version "7.7.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz#3a8757ee1a2780f390e89f246065ecf59c26fce9" + integrity sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz#6a7cf123ad175bb5c69aec8f6f0770387ed3f1eb" + integrity sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-shorthand-properties@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz#74a0a9b2f6d67a684c6fbfd5f0458eb7ba99891e" + integrity sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz#aa673b356fe6b7e70d69b6e33a17fef641008578" + integrity sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz#ffb68c05090c30732076b1285dc1401b404a123c" + integrity sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz#1eb6411736dd3fe87dbd20cc6668e5121c17d604" + integrity sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz#3174626214f2d6de322882e498a38e8371b2140e" + integrity sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.7.4": + version "7.7.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz#a3c0f65b117c4c81c5b6484f2a5e7b95346b83ae" + integrity sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/preset-env@7.7.7": + version "7.7.7" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.7.7.tgz#c294167b91e53e7e36d820e943ece8d0c7fe46ac" + integrity sha512-pCu0hrSSDVI7kCVUOdcMNQEbOPJ52E+LrQ14sN8uL2ALfSqePZQlKrOy+tM4uhEdYlCHi4imr8Zz2cZe9oSdIg== + dependencies: + "@babel/helper-module-imports" "^7.7.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.7.4" + "@babel/plugin-proposal-dynamic-import" "^7.7.4" + "@babel/plugin-proposal-json-strings" "^7.7.4" + "@babel/plugin-proposal-object-rest-spread" "^7.7.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.7.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.7.7" + "@babel/plugin-syntax-async-generators" "^7.7.4" + "@babel/plugin-syntax-dynamic-import" "^7.7.4" + "@babel/plugin-syntax-json-strings" "^7.7.4" + "@babel/plugin-syntax-object-rest-spread" "^7.7.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.7.4" + "@babel/plugin-syntax-top-level-await" "^7.7.4" + "@babel/plugin-transform-arrow-functions" "^7.7.4" + "@babel/plugin-transform-async-to-generator" "^7.7.4" + "@babel/plugin-transform-block-scoped-functions" "^7.7.4" + "@babel/plugin-transform-block-scoping" "^7.7.4" + "@babel/plugin-transform-classes" "^7.7.4" + "@babel/plugin-transform-computed-properties" "^7.7.4" + "@babel/plugin-transform-destructuring" "^7.7.4" + "@babel/plugin-transform-dotall-regex" "^7.7.7" + "@babel/plugin-transform-duplicate-keys" "^7.7.4" + "@babel/plugin-transform-exponentiation-operator" "^7.7.4" + "@babel/plugin-transform-for-of" "^7.7.4" + "@babel/plugin-transform-function-name" "^7.7.4" + "@babel/plugin-transform-literals" "^7.7.4" + "@babel/plugin-transform-member-expression-literals" "^7.7.4" + "@babel/plugin-transform-modules-amd" "^7.7.5" + "@babel/plugin-transform-modules-commonjs" "^7.7.5" + "@babel/plugin-transform-modules-systemjs" "^7.7.4" + "@babel/plugin-transform-modules-umd" "^7.7.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.7.4" + "@babel/plugin-transform-new-target" "^7.7.4" + "@babel/plugin-transform-object-super" "^7.7.4" + "@babel/plugin-transform-parameters" "^7.7.7" + "@babel/plugin-transform-property-literals" "^7.7.4" + "@babel/plugin-transform-regenerator" "^7.7.5" + "@babel/plugin-transform-reserved-words" "^7.7.4" + "@babel/plugin-transform-shorthand-properties" "^7.7.4" + "@babel/plugin-transform-spread" "^7.7.4" + "@babel/plugin-transform-sticky-regex" "^7.7.4" + "@babel/plugin-transform-template-literals" "^7.7.4" + "@babel/plugin-transform-typeof-symbol" "^7.7.4" + "@babel/plugin-transform-unicode-regex" "^7.7.4" + "@babel/types" "^7.7.4" + browserslist "^4.6.0" + core-js-compat "^3.6.0" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + "@babel/runtime-corejs3@^7.7.4": version "7.7.6" resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.7.6.tgz#5b1044ea11b659d288f77190e19c62da959ed9a3" @@ -809,6 +1329,13 @@ babel-jest@^24.9.0: chalk "^2.4.2" slash "^2.0.0" +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-istanbul@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.2.0.tgz#df4ade83d897a92df069c4d9a25cf2671293c854" @@ -919,6 +1446,15 @@ browser-resolve@^1.11.3: dependencies: resolve "1.1.7" +browserslist@^4.6.0, browserslist@^4.8.2: + version "4.8.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.2.tgz#b45720ad5fbc8713b7253c20766f701c9a694289" + integrity sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA== + dependencies: + caniuse-lite "^1.0.30001015" + electron-to-chromium "^1.3.322" + node-releases "^1.1.42" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -980,6 +1516,11 @@ camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +caniuse-lite@^1.0.30001015: + version "1.0.30001016" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz#16ea48d7d6e8caf3cad3295c2d746fe38c4e7f66" + integrity sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -1178,6 +1719,14 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= +core-js-compat@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.0.tgz#4eb6cb69d03d99159ed7c860cd5fcf7d23a62ea9" + integrity sha512-Z3eCNjGgoYluH89Jt4wVkfYsc/VdLrA2/woX5lm0isO/pCT+P+Y+o65bOuEnjDJLthdwTBxbCVzptTXtc18fJg== + dependencies: + browserslist "^4.8.2" + semver "7.0.0" + core-js-pure@^3.0.0: version "3.5.0" resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.5.0.tgz#f63c7f2b245e7d678e73f87ad28505480554d70e" @@ -1397,6 +1946,11 @@ ecc-jsbn@~0.1.1: jsbn "~0.1.0" safer-buffer "^2.1.0" +electron-to-chromium@^1.3.322: + version "1.3.322" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz#a6f7e1c79025c2b05838e8e344f6e89eb83213a8" + integrity sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -2343,7 +2897,7 @@ inquirer@^7.0.0: strip-ansi "^5.1.0" through "^2.3.6" -invariant@^2.2.4: +invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== @@ -3016,6 +3570,11 @@ jest@24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" +js-levenshtein@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz#c6cee58eb3550372df8deb85fad5ce66ce01d59d" + integrity sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g== + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3071,6 +3630,11 @@ jsesc@^2.5.1: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -3280,6 +3844,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash-es@4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.15.tgz#21bd96839354412f23d7a10340e5eac6ee455d78" + integrity sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ== + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" @@ -3581,6 +4150,13 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" +node-releases@^1.1.42: + version "1.1.43" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.43.tgz#2c6ca237f88ce11d49631f11190bb01f8d0549f2" + integrity sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w== + dependencies: + semver "^6.3.0" + normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -4054,6 +4630,11 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" +private@^0.1.6: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== + process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -4196,11 +4777,30 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" +regenerate-unicode-properties@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + regenerator-runtime@^0.13.2: version "0.13.3" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz#7cf6a77d8f5c6f60eb73c5fc1955b2ceb01e6bf5" integrity sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw== +regenerator-transform@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" + integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== + dependencies: + private "^0.1.6" + regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" @@ -4224,6 +4824,30 @@ regexpp@^3.0.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== +regexpu-core@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" + integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.1.0" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + +regjsgen@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.0: + version "0.6.2" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" + integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== + dependencies: + jsesc "~0.5.0" + remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" @@ -4460,6 +5084,11 @@ semver-compare@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" + integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== + semver@^6.0.0, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -4984,6 +5613,29 @@ uglify-js@^3.1.4: commander "~2.20.3" source-map "~0.6.1" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz#a9cc6cc7ce63a0a3023fc99e341b94431d405a57" + integrity sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847"