├── .dockerignore ├── .drone.yml ├── .eslintrc.yaml ├── .gitignore ├── .gitmodules ├── .npmignore ├── .prettierrc.yaml ├── .travis.yml ├── LICENSE ├── README.md ├── example ├── build.ts └── src │ └── hello.js ├── package.json ├── scripts ├── cacher.sh ├── centos.dockerfile ├── ci.bash ├── node.patch ├── node_build.bash └── preinstall.bash ├── src ├── api │ ├── bundler.ts │ └── index.ts ├── common │ ├── buffer.ts │ ├── error.ts │ ├── filesystem.ts │ ├── footer.ts │ └── util.ts └── patches │ ├── fs.ts │ ├── nbin.ts │ └── thirdPartyMain.ts ├── test ├── bundler.test.ts ├── mocha.opts ├── tsconfig.json └── util.test.ts ├── tsconfig.json ├── typings ├── external.d.ts ├── internal.d.ts └── nbin.d.ts └── yarn.lock /.dockerignore: -------------------------------------------------------------------------------- 1 | * -------------------------------------------------------------------------------- /.drone.yml: -------------------------------------------------------------------------------- 1 | kind: pipeline 2 | type: docker 3 | name: amd64:linux 4 | 5 | platform: 6 | arch: amd64 7 | 8 | steps: 9 | - name: cache:restore 10 | image: node:12 11 | commands: 12 | - ./scripts/cacher.sh 13 | 14 | - name: build 15 | image: codercom/nbin:centos 16 | commands: 17 | - yarn 18 | - . /opt/rh/devtoolset-6/enable 19 | - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing so we can preserve cache for the next run' 20 | 21 | - name: cache:package 22 | image: node:12 23 | commands: 24 | - ./scripts/cacher.sh 25 | when: 26 | event: push 27 | 28 | - name: cache:push 29 | image: plugins/gcs 30 | settings: 31 | source: cache-upload/ 32 | target: nbin.cdr.sh 33 | token: 34 | from_secret: gcs-token 35 | when: 36 | event: push 37 | 38 | - name: test 39 | image: node:12 40 | commands: 41 | - yarn test 42 | 43 | - name: upload 44 | image: plugins/gcs 45 | settings: 46 | source: build/ 47 | target: nbin.cdr.sh 48 | token: 49 | from_secret: gcs-token 50 | when: 51 | event: tag 52 | 53 | --- 54 | kind: pipeline 55 | type: docker 56 | name: amd64:alpine 57 | 58 | platform: 59 | arch: amd64 60 | 61 | steps: 62 | - name: cache:restore 63 | image: node:12-alpine 64 | commands: 65 | - ./scripts/cacher.sh 66 | 67 | - name: build 68 | image: node:12-alpine 69 | commands: 70 | - apk add bash gcc g++ ccache git make python linux-headers 71 | - yarn 72 | - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing so we can preserve cache for the next run' 73 | 74 | - name: cache:package 75 | image: node:12-alpine 76 | commands: 77 | - ./scripts/cacher.sh 78 | when: 79 | event: push 80 | 81 | - name: cache:push 82 | image: plugins/gcs 83 | settings: 84 | source: cache-upload/ 85 | target: nbin.cdr.sh 86 | token: 87 | from_secret: gcs-token 88 | when: 89 | event: push 90 | 91 | - name: test 92 | image: node:12-alpine 93 | commands: 94 | - yarn test 95 | 96 | - name: upload 97 | image: plugins/gcs 98 | settings: 99 | source: build/ 100 | target: nbin.cdr.sh 101 | token: 102 | from_secret: gcs-token 103 | when: 104 | event: tag 105 | 106 | --- 107 | kind: pipeline 108 | type: docker 109 | name: arm64:linux 110 | 111 | platform: 112 | arch: arm64 113 | 114 | steps: 115 | - name: cache:restore 116 | image: node:12 117 | commands: 118 | - ./scripts/cacher.sh 119 | 120 | - name: build 121 | image: node:12 122 | commands: 123 | - apt update && apt install -y build-essential ccache 124 | - yarn 125 | - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing so we can preserve cache for the next run' 126 | 127 | - name: cache:package 128 | image: node:12 129 | commands: 130 | - ./scripts/cacher.sh 131 | when: 132 | event: push 133 | 134 | - name: cache:push 135 | image: plugins/gcs 136 | settings: 137 | source: cache-upload/ 138 | target: nbin.cdr.sh 139 | token: 140 | from_secret: gcs-token 141 | when: 142 | event: push 143 | 144 | - name: test 145 | image: node:12 146 | commands: 147 | - yarn test 148 | 149 | - name: upload 150 | image: plugins/gcs 151 | settings: 152 | source: build/ 153 | target: nbin.cdr.sh 154 | token: 155 | from_secret: gcs-token 156 | when: 157 | event: tag 158 | 159 | --- 160 | kind: pipeline 161 | type: docker 162 | name: arm64:alpine 163 | 164 | platform: 165 | arch: arm64 166 | 167 | steps: 168 | - name: cache:restore 169 | image: node:12-alpine 170 | commands: 171 | - ./scripts/cacher.sh 172 | 173 | - name: build 174 | image: node:12-alpine 175 | commands: 176 | - apk add bash gcc g++ ccache git make python linux-headers 177 | - yarn 178 | - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing so we can preserve cache for the next run' 179 | 180 | - name: cache:package 181 | image: node:12-alpine 182 | commands: 183 | - ./scripts/cacher.sh 184 | when: 185 | event: push 186 | 187 | - name: cache:push 188 | image: plugins/gcs 189 | settings: 190 | source: cache-upload/ 191 | target: nbin.cdr.sh 192 | token: 193 | from_secret: gcs-token 194 | when: 195 | event: push 196 | 197 | - name: test 198 | image: node:12-alpine 199 | commands: 200 | - yarn test 201 | 202 | - name: upload 203 | image: plugins/gcs 204 | settings: 205 | source: build/ 206 | target: nbin.cdr.sh 207 | token: 208 | from_secret: gcs-token 209 | when: 210 | event: tag 211 | 212 | --- 213 | kind: pipeline 214 | type: docker 215 | name: arm:linux 216 | 217 | platform: 218 | arch: arm 219 | 220 | steps: 221 | - name: cache:restore 222 | image: node:12 223 | commands: 224 | - ./scripts/cacher.sh 225 | 226 | - name: build 227 | image: node:12 228 | commands: 229 | - apt update && apt install -y build-essential ccache 230 | - yarn 231 | - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing so we can preserve cache for the next run' 232 | 233 | - name: cache:package 234 | image: node:12 235 | commands: 236 | - ./scripts/cacher.sh 237 | when: 238 | event: push 239 | 240 | - name: cache:push 241 | image: plugins/gcs 242 | settings: 243 | source: cache-upload/ 244 | target: nbin.cdr.sh 245 | token: 246 | from_secret: gcs-token 247 | when: 248 | event: push 249 | 250 | - name: test 251 | image: node:12 252 | commands: 253 | - yarn test 254 | 255 | - name: upload 256 | image: plugins/gcs 257 | settings: 258 | source: build/ 259 | target: nbin.cdr.sh 260 | token: 261 | from_secret: gcs-token 262 | when: 263 | event: tag 264 | 265 | --- 266 | kind: pipeline 267 | type: docker 268 | name: arm:alpine 269 | 270 | platform: 271 | arch: arm 272 | 273 | steps: 274 | - name: cache:restore 275 | image: node:12-alpine 276 | commands: 277 | - ./scripts/cacher.sh 278 | 279 | - name: build 280 | image: node:12-alpine 281 | commands: 282 | - apk add bash gcc g++ ccache git make python linux-headers 283 | - yarn 284 | - timeout 50m ./scripts/ci.bash || echo 'Timed out or failed; continuing so we can preserve cache for the next run' 285 | 286 | - name: cache:package 287 | image: node:12-alpine 288 | commands: 289 | - ./scripts/cacher.sh 290 | when: 291 | event: push 292 | 293 | - name: cache:push 294 | image: plugins/gcs 295 | settings: 296 | source: cache-upload/ 297 | target: nbin.cdr.sh 298 | token: 299 | from_secret: gcs-token 300 | when: 301 | event: push 302 | 303 | - name: test 304 | image: node:12-alpine 305 | failure: ignore 306 | commands: 307 | - yarn test 308 | 309 | - name: upload 310 | image: plugins/gcs 311 | settings: 312 | source: build/ 313 | target: nbin.cdr.sh 314 | token: 315 | from_secret: gcs-token 316 | when: 317 | event: tag 318 | -------------------------------------------------------------------------------- /.eslintrc.yaml: -------------------------------------------------------------------------------- 1 | parser: "@typescript-eslint/parser" 2 | env: 3 | node: true 4 | es6: true # Map, etc. 5 | mocha: true 6 | 7 | parserOptions: 8 | ecmaVersion: 2018 9 | sourceType: module 10 | 11 | extends: 12 | - eslint:recommended 13 | - plugin:@typescript-eslint/recommended 14 | - plugin:import/recommended 15 | - plugin:import/typescript 16 | - plugin:prettier/recommended 17 | - prettier # Removes eslint rules that conflict with prettier. 18 | - prettier/@typescript-eslint # Remove conflicts again. 19 | 20 | rules: 21 | # For overloads. 22 | no-dupe-class-members: off 23 | 24 | import/no-unresolved: [2, { ignore: [ '^nbin$', '^@coder/nbin$' ] }] 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | yarn-error.log 2 | node_modules 3 | out 4 | build 5 | .vscode 6 | *.tgz -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "lib/node"] 2 | path = lib/node 3 | url = https://github.com/nodejs/node 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | *.tgz 2 | .dockerignore 3 | .eslintrc.yaml 4 | .gitignore 5 | .gitmodules 6 | .prettierrc.yaml 7 | .travis.yml 8 | .drone.yml 9 | .vscode 10 | build 11 | example 12 | lib 13 | node.patch 14 | node_modules 15 | out/patches 16 | scripts 17 | src 18 | test 19 | tsconfig.json 20 | yarn-error.log 21 | yarn.lock 22 | -------------------------------------------------------------------------------- /.prettierrc.yaml: -------------------------------------------------------------------------------- 1 | printWidth: 120 2 | semi: false 3 | tabWidth: 2 4 | singleQuote: false 5 | trailingComma: es5 6 | useTabs: false 7 | arrowParens: always 8 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: node_js 2 | osx_image: xcode10.2 3 | node_js: 4 | - 12.14.0 5 | services: 6 | - docker 7 | git: 8 | depth: 3 9 | submodules_depth: 3 10 | cache: 11 | directories: 12 | - /Users/travis/Library/Caches/ccache 13 | before_install: 14 | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache; fi 15 | - export PATH="/usr/local/opt/ccache/libexec:$PATH" 16 | - eval "$(MATRIX_EVAL)" 17 | matrix: 18 | include: 19 | - os: osx 20 | script: scripts/ci.bash 21 | deploy: 22 | provider: gcs 23 | access_key_id: GOOGZVNTORC5JOVTMMRVCXAM 24 | secret_access_key: 25 | secure: emlYmPkMTQZykYh1V+mDSoaSyPp5SRWXUxPnJqAvSqM5JZbKLCzjKS6zOpTd6YNZBgklViPud9hMuAkNXH1ApkpcDFqlBG/DzcvgdJO0m+a2n6uUfP9U9O0GBmGc78Fz5kWCip/uckZeA8ZnpU+2He695qIlt2q1ENmKOhIJX7jd6kCxYFfOSadugPkdDMrpmGGEJ4O5KZU1ceAL+bFT0k+nF5Aj578Gih80HzIIlyX/7lIdx4fBV+B3qpNSwgiIZompDeUgFaGyAbbuecSQKmUrG1/4sn9VlJrNR4pFK9ZAldG3K9xR6fshR9cF1GMheX2XbyOk2W/rgn6pVQIV5JLNtwS8trGyGL90wUwSdiSTUd6y/UaOGfudO9QgDo5/nzMf6Ag8AMMr3IIvgbBYR8dUVKFupbhtJOTWdOA0EDlnW800YDGILSGc9a0BjUkuVX3QeGhwAeWYiQ9P5oXA55MaRfADA30dFtVzj9/k/4NQvPME/rvUQxn2jZsalHFPkuaPUVpTfZXyUVwg71cxictRINA7EugfuaqEX/6Imd92NJlrAg1bwr/BQrrbvTnGD6j4YOPT5LlaGcJhmycMC6rxIVD/ss/yGz0X7NS8tv1L16CgjZ/QXoUUpj/jbGerm4LjjPoUOukO0s470NrgBy9ps0a34feWNhU2zitXXvQ= 26 | bucket: nbin.cdr.sh 27 | skip_cleanup: true 28 | local-dir: build 29 | on: 30 | tags: true 31 | repo: cdr/nbin 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License 2 | 3 | Copyright (c) 2019 Coder Technologies Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # nbin · [!["Open Issues"](https://img.shields.io/github/issues-raw/cdr/nbin.svg)](https://github.com/cdr/nbin/issues) [!["Version"](https://img.shields.io/npm/v/@coder/nbin.svg)](https://www.npmjs.com/package/@coder/nbin) [![MIT license](https://img.shields.io/badge/license-MIT-green.svg)](#) [![Discord](https://discordapp.com/api/guilds/463752820026376202/widget.png)](https://discord.gg/zxSwN8Z) 2 | 3 | Fast and robust node.js binary compiler. 4 | 5 | **WARNING:** This project was created for 6 | [code-server](https://github.com/cdr/code-server) and may provide limited 7 | support. 8 | 9 | Why was this made? Why not use `pkg` or `nexe`? 10 | 11 | - Support for native node modules. 12 | - No magic. The user specifies all customization. An example of this is 13 | overriding the file system. 14 | - First-class support for multiple platforms. 15 | 16 | ## Usage 17 | 18 | `nbin` does not do any kind of scanning for requiring files; it only includes 19 | the files you tell it to. That means you should include everything (for example 20 | by using `writeFiles('/path/to/repo/*')`) or use a bundler like Webpack and 21 | include the bundle. 22 | 23 | When running within the binary, your application will have access to a module 24 | named [`nbin`](typings/nbin.d.ts). 25 | 26 | Two packages are provided: 27 | - `@coder/nbin` - available as an API to build binaries. 28 | - `nbin` - *ONLY* available within your binary. 29 | 30 | ### Example 31 | 32 | ```ts 33 | import { Binary } from "@coder/nbin"; 34 | 35 | const bin = new Binary({ 36 | mainFile: "out/cli.js", 37 | }); 38 | 39 | bin.writeFile("out/cli.js", Buffer.from("console.log('hi');")); 40 | const output = bin.bundle(); 41 | ``` 42 | 43 | ### Forks 44 | 45 | To use the compiled binary as the original Node binary set the `NBIN_BYPASS` 46 | environment variable. This can be especially useful when forking processes (or 47 | spawning with the binary). You might want to simply immediately set this to any 48 | truthy value as soon as your code loads. 49 | 50 | ### Webpack 51 | 52 | If you are using webpack to bundle your `main`, you'll need to externalize 53 | modules. 54 | 55 | ```ts 56 | // webpack.config.js 57 | 58 | module.exports = { 59 | ... 60 | external: { 61 | nbin: "commonjs nbin", 62 | // Additional modules to exclude 63 | }, 64 | }; 65 | ``` 66 | 67 | ### Environment 68 | 69 | You can pass 70 | [`NODE_OPTIONS`](https://nodejs.org/api/cli.html#cli_node_options_options). 71 | 72 | ```bash 73 | NODE_OPTIONS="--inspect-brk" ./path/to/bin 74 | ``` 75 | 76 | Gzip'd JavaScript files are supported to reduce bundle size. 77 | 78 | ## Development 79 | 80 | ``` 81 | yarn 82 | yarn build 83 | ``` 84 | 85 | When publishing use `npm` and not `yarn` as `yarn` will traverse ignored 86 | directories anyway and re-add anything excluded by any discovered `.gitignore` 87 | files. 88 | 89 | ### Patching 90 | 91 | We patch Node to make it capable of reading files within the binary. 92 | 93 | To generate a new patch, **stage all the changes** you want to be included in 94 | the patch in the Node source, then run `yarn patch:generate` in this 95 | directory. 96 | -------------------------------------------------------------------------------- /example/build.ts: -------------------------------------------------------------------------------- 1 | import { mkdirpSync, writeFileSync } from "fs-extra"; 2 | import * as path from "path"; 3 | import { Binary } from "../out/api"; 4 | 5 | const dirName = path.resolve(__dirname); 6 | const bin = new Binary({ 7 | nodePath: path.join(dirName, "..", "lib", "node", "out", "Release", "node"), 8 | mainFile: path.join(dirName, "src", "hello.js"), 9 | }); 10 | bin.writeFiles(path.join(dirName, "src/**")); 11 | bin.build().then((buffer) => { 12 | const outDir = path.join(dirName, "out"); 13 | mkdirpSync(outDir); 14 | writeFileSync(path.join(outDir, "example"), buffer, { 15 | mode: "755", 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /example/src/hello.js: -------------------------------------------------------------------------------- 1 | console.log("Hey there!"); 2 | 3 | console.log("here is a banana"); 4 | 5 | console.log("frogger"); 6 | 7 | console.log("built with nbin", process.versions.nbin); 8 | 9 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@coder/nbin", 3 | "version": "1.2.7", 4 | "description": "Fast and robust node.js binary compiler.", 5 | "main": "out/api/index.js", 6 | "scripts": { 7 | "prepublish": "./scripts/preinstall.bash", 8 | "prepublishOnly": "yarn build && yarn test", 9 | "test": "mocha", 10 | "coverage": "nyc mocha", 11 | "lint": "eslint src test typings --ext .ts", 12 | "build:docker": "./scripts/docker.bash", 13 | "build:bundle": "browserify --node --no-bundle-external ./out/patches/nbin.js --standalone nbin --outfile ./lib/node/lib/nbin.js", 14 | "build:nbin": "tsc", 15 | "build:node": "./scripts/node_build.bash", 16 | "build": "yarn build:nbin && yarn build:bundle && yarn build:node", 17 | "patch:generate": "cd ./lib/node && git diff HEAD > ../../scripts/node.patch", 18 | "patch:apply": "cd ./lib/node && git apply ../../scripts/node.patch" 19 | }, 20 | "typings": "typings/nbin.d.ts", 21 | "author": "Coder", 22 | "license": "MIT", 23 | "devDependencies": { 24 | "@types/fs-extra": "^5.0.5", 25 | "@types/glob": "^7.1.1", 26 | "@types/mocha": "^5.2.7", 27 | "@types/node": "^11.11.4", 28 | "@types/node-fetch": "^2.1.7", 29 | "@typescript-eslint/eslint-plugin": "^2.0.0", 30 | "@typescript-eslint/parser": "^2.0.0", 31 | "eslint": "^6.2.0", 32 | "eslint-config-prettier": "^6.0.0", 33 | "eslint-plugin-import": "^2.18.2", 34 | "eslint-plugin-prettier": "^3.1.0", 35 | "mocha": "^6.2.0", 36 | "node-pty": "^0.9.0", 37 | "nyc": "^14.1.1", 38 | "prettier": "^1.18.2", 39 | "source-map-support": "^0.5.16", 40 | "ts-node": "^8.4.1", 41 | "typescript": "^3.7.3" 42 | }, 43 | "dependencies": { 44 | "@coder/logger": "^1.1.8", 45 | "browserify": "^16.5.0", 46 | "fs-extra": "^7.0.1", 47 | "glob": "^7.1.3", 48 | "node-fetch": "^2.3.0", 49 | "ora": "^3.2.0" 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /scripts/cacher.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | # cacher.sh -- Restore and rebuild cache. 3 | # Cache paths are designed to work with multi-arch builds and are organized 4 | # based on the branch or tag. The master branch cache is used as a fallback. 5 | # This will download and package the cache but it will not upload it. 6 | 7 | set -eu 8 | 9 | # Try restoring from each argument in turn until we get something. 10 | restore() { 11 | for branch in "$@" ; do 12 | if [ -n "$branch" ] ; then 13 | cache_path="https://nbin.cdr.sh/cache/$branch/$tar.tar.gz" 14 | if wget "$cache_path" ; then 15 | tar xzvf "$tar.tar.gz" 16 | break 17 | fi 18 | fi 19 | done 20 | } 21 | 22 | # We only need to cache the ccache directory. Everything inside the cache-upload 23 | # directory will be uploaded as-is to the nbin bucket. 24 | package() { 25 | mkdir -p "cache-upload/cache/$1" 26 | tar czfv "cache-upload/cache/$1/$tar.tar.gz" .cache/ccache 27 | } 28 | 29 | main() { 30 | cd "$(dirname "$0")/.." 31 | 32 | # Get the branch for this build. 33 | branch=${DRONE_BRANCH:-${DRONE_SOURCE_BRANCH:-${DRONE_TAG:-}}} 34 | 35 | # The cache will be named based on the arch, platform, and libc. 36 | arch=$DRONE_STAGE_ARCH 37 | platform=${PLATFORM:-linux} 38 | case $DRONE_STAGE_NAME in 39 | *alpine*) libc=musl ;; 40 | * ) libc=glibc ;; 41 | esac 42 | 43 | tar="$platform-$arch-$libc" 44 | 45 | # The action is determined by the name of the step. 46 | case $DRONE_STEP_NAME in 47 | *restore*) restore "$branch" "$DRONE_REPO_BRANCH" ;; 48 | *rebuild*|*package*) package "$branch" ;; 49 | *) exit 1 ;; 50 | esac 51 | } 52 | 53 | main "$@" 54 | -------------------------------------------------------------------------------- /scripts/centos.dockerfile: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | RUN yum update -y \ 4 | && yum install -y epel-release centos-release-scl \ 5 | && yum-config-manager --enable rhel-server-rhscl-7-rpms \ 6 | && yum update -y 7 | 8 | RUN yum install -y \ 9 | devtoolset-6 \ 10 | gcc-c++ \ 11 | xz \ 12 | ccache \ 13 | git \ 14 | wget 15 | 16 | RUN mkdir /root/node \ 17 | && cd /root/node \ 18 | && curl https://nodejs.org/dist/v12.14.0/node-v12.14.0-linux-x64.tar.xz | tar xJ --strip-components=1 -- \ 19 | && ln -s /root/node/bin/node /usr/bin/node 20 | 21 | ENV PATH "$PATH:/root/node/bin" 22 | 23 | RUN npm install -g yarn 24 | -------------------------------------------------------------------------------- /scripts/ci.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # ci.bash -- Build from CI. 3 | 4 | set -Eeuo pipefail 5 | 6 | function copy-binary() { 7 | binary_name="node-$node_version-$platform-$1" 8 | mkdir -p "./build/$nbin_version" 9 | cp ./lib/node/node "./build/$nbin_version/$binary_name" 10 | echo "Copied binary to ./build/$nbin_version/$binary_name" 11 | } 12 | 13 | function main() { 14 | cd "$(dirname "$0")/.." 15 | 16 | local nbin_version=${TRAVIS_TAG:-${DRONE_TAG:-}} 17 | if [[ -z $nbin_version ]] ; then 18 | nbin_version=$(grep version ./package.json | head -1 | awk -F: '{ print $2 }' | sed 's/[",]//g' | tr -d '[:space:]') 19 | fi 20 | 21 | local arch="amd64" 22 | local platform="linux" 23 | if [[ ${OSTYPE:-} == darwin* ]] ; then 24 | platform="darwin" 25 | else 26 | # On Alpine there seems no way to get the version except to use an invalid 27 | # command which will output the version to stderr and exit with 1. 28 | local output 29 | output=$(ldd --version 2>&1 || :) 30 | if [[ $output == musl* ]] ; then 31 | platform="alpine" 32 | fi 33 | arch=$(uname -m) 34 | fi 35 | 36 | echo "Building $platform-$arch" 37 | XDG_CACHE_HOME="$(pwd)/.cache" yarn build 38 | 39 | local node_version 40 | node_version=$(NBIN_BYPASS=true ./lib/node/node --version | sed 's/^v//') 41 | 42 | case $arch in 43 | "amd64"|"x86_64") copy-binary "x86_64" ;; 44 | "aarch64" ) copy-binary "arm64" ;; 45 | "armv8l" ) copy-binary "arm" ;; 46 | * ) copy-binary "$arch" ;; 47 | esac 48 | } 49 | 50 | main "$@" 51 | -------------------------------------------------------------------------------- /scripts/node.patch: -------------------------------------------------------------------------------- 1 | diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js 2 | index 64505220ab..da14bb6327 100644 3 | --- a/lib/internal/modules/cjs/loader.js 4 | +++ b/lib/internal/modules/cjs/loader.js 5 | @@ -63,6 +63,9 @@ const manifest = getOptionValue('--experimental-policy') ? 6 | require('internal/process/policy').manifest : 7 | null; 8 | const { compileFunction } = internalBinding('contextify'); 9 | +// NOTE@coder: Modules used in our customizations below. 10 | +const nbin = require('nbin'); 11 | +const zlib = require('zlib'); 12 | 13 | const { 14 | ERR_INVALID_ARG_VALUE, 15 | @@ -118,7 +121,11 @@ function stat(filename) { 16 | const result = statCache.get(filename); 17 | if (result !== undefined) return result; 18 | } 19 | - const result = internalModuleStat(filename); 20 | + // NOTE@coder: Try loading from within the binary. 21 | + const s = nbin.fs.statSync(filename); 22 | + const result = s.isDirectory ? 23 | + 1 : 24 | + (s.isFile ? 0 : internalModuleStat(filename)); 25 | if (statCache !== null) statCache.set(filename, result); 26 | return result; 27 | } 28 | @@ -224,7 +231,13 @@ function readPackage(requestPath) { 29 | const existing = packageJsonCache.get(jsonPath); 30 | if (existing !== undefined) return existing; 31 | 32 | - const json = internalModuleReadJSON(path.toNamespacedPath(jsonPath)); 33 | + // NOTE@coder: Try loading from the binary. 34 | + let json; 35 | + if (nbin.fs.existsSync(jsonPath)) { 36 | + json = nbin.fs.readFileSync(jsonPath, 'utf8'); 37 | + } else { 38 | + json = internalModuleReadJSON(path.toNamespacedPath(jsonPath)); 39 | + } 40 | if (json === undefined) { 41 | packageJsonCache.set(jsonPath, false); 42 | return false; 43 | @@ -334,6 +347,10 @@ function tryFile(requestPath, isMain) { 44 | } 45 | 46 | function toRealPath(requestPath) { 47 | + // NOTE@coder: Try loading from the binary. 48 | + if (nbin.fs.existsSync(requestPath)) { 49 | + return requestPath; 50 | + } 51 | return fs.realpathSync(requestPath, { 52 | [internalFS.realpathCacheKey]: realpathCache 53 | }); 54 | @@ -991,14 +1008,32 @@ Module._extensions['.js'] = function(module, filename) { 55 | } 56 | } 57 | } 58 | - const content = fs.readFileSync(filename, 'utf8'); 59 | + // NOTE@coder: Try loading from within the binary. 60 | + let content; 61 | + if (nbin.fs.existsSync(filename)) { 62 | + content = nbin.fs.readFileSync(filename, 'utf8'); 63 | + } else { 64 | + content = fs.readFileSync(filename, 'utf8'); 65 | + } 66 | + module._compile(stripBOM(content), filename); 67 | +}; 68 | + 69 | +// NOTE@coder: Native extension for .gz 70 | +Module._extensions['.gz'] = function(module, filename) { 71 | + const content = zlib.gunzipSync(nbin.fs.readFileSync(filename)).toString('utf8'); 72 | module._compile(stripBOM(content), filename); 73 | }; 74 | 75 | 76 | // Native extension for .json 77 | Module._extensions['.json'] = function(module, filename) { 78 | - const content = fs.readFileSync(filename, 'utf8'); 79 | + // NOTE@coder: Try loading from within the binary. 80 | + let content; 81 | + if (nbin.fs.existsSync(filename)) { 82 | + content = nbin.fs.readFileSync(filename, 'utf8'); 83 | + } else { 84 | + content = fs.readFileSync(filename, 'utf8'); 85 | + } 86 | 87 | if (manifest) { 88 | const moduleURL = pathToFileURL(filename); 89 | @@ -1017,12 +1052,31 @@ Module._extensions['.json'] = function(module, filename) { 90 | // Native extension for .node 91 | Module._extensions['.node'] = function(module, filename) { 92 | if (manifest) { 93 | - const content = fs.readFileSync(filename); 94 | + // NOTE@coder: Try loading from within the binary. 95 | + let content; 96 | + if (nbin.fs.existsSync(filename)) { 97 | + content = nbin.fs.readFileSync(filename); 98 | + } else { 99 | + content = fs.readFileSync(filename); 100 | + } 101 | const moduleURL = pathToFileURL(filename); 102 | manifest.assertIntegrity(moduleURL, content); 103 | } 104 | // Be aware this doesn't use `content` 105 | - return process.dlopen(module, path.toNamespacedPath(filename)); 106 | + // NOTE@coder: Try extracting from the binary to a temporary directory. 107 | + let isInternal = false; 108 | + if (nbin.fs.existsSync(filename)) { 109 | + const tmpFile = path.join(nbin.tmpDir, path.basename(filename)); 110 | + if (!fs.existsSync(tmpFile)) { 111 | + fs.writeFileSync(tmpFile, nbin.fs.readFileSync(filename)); 112 | + } 113 | + filename = tmpFile; 114 | + isInternal = true; 115 | + } 116 | + return process.dlopen( 117 | + module, 118 | + isInternal ? filename : path.toNamespacedPath(filename) 119 | + ); 120 | }; 121 | 122 | Module._extensions['.mjs'] = function(module, filename) { 123 | diff --git a/src/node.cc b/src/node.cc 124 | index ae53d0c31c..f670f2ca17 100644 125 | --- a/src/node.cc 126 | +++ b/src/node.cc 127 | @@ -411,7 +411,8 @@ MaybeLocal StartMainThreadExecution(Environment* env) { 128 | // To allow people to extend Node in different ways, this hook allows 129 | // one to drop a file lib/_third_party_main.js into the build 130 | // directory which will be executed instead of Node's normal loading. 131 | - if (NativeModuleEnv::Exists("_third_party_main")) { 132 | + // NOTE@coder: Only load the packaged code if we aren't bypassing it. 133 | + if (!getenv("NBIN_BYPASS") && NativeModuleEnv::Exists("_third_party_main")) { 134 | return StartExecution(env, "internal/main/run_third_party_main"); 135 | } 136 | 137 | @@ -660,6 +661,10 @@ int ProcessGlobalArgs(std::vector* args, 138 | std::vector* exec_args, 139 | std::vector* errors, 140 | bool is_env) { 141 | + if (!getenv("NBIN_BYPASS") && !is_env) { 142 | + return 0; 143 | + } 144 | + 145 | // Parse a few arguments which are specific to Node. 146 | std::vector v8_args; 147 | 148 | -------------------------------------------------------------------------------- /scripts/node_build.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # node_build.bash 3 | 4 | set -Eeuo pipefail 5 | 6 | 7 | function main() { 8 | cd "$(dirname "$0")/../lib/node" 9 | 10 | if [[ ! -f ../../out/patches/thirdPartyMain.js ]] ; then 11 | >&2 echo "Must build nbin before building Node"; exit 1 12 | fi 13 | 14 | cp ../../out/patches/thirdPartyMain.js ./lib/_third_party_main.js 15 | 16 | if ! git apply ../../scripts/node.patch ; then 17 | echo "Failed to patch; assuming already patched" 18 | fi 19 | 20 | local -i cores=2 21 | export CC="ccache gcc" 22 | export CXX="ccache g++" 23 | if [[ -n ${XDG_CACHE_HOME:-} ]] ; then 24 | export CCACHE_DIR="$XDG_CACHE_HOME/ccache" 25 | elif [[ $OSTYPE == "darwin"* ]]; then 26 | export CCACHE_DIR="$HOME/Library/Caches/ccache" 27 | else 28 | export CCACHE_DIR="$HOME/.cache/ccache" 29 | cores=$(awk '/^processor/{print $3}' /proc/cpuinfo | wc -l) 30 | fi 31 | 32 | echo "ccache directory: $CCACHE_DIR" 33 | echo "cores: $cores" 34 | 35 | ./configure \ 36 | --link-module ./lib/nbin.js \ 37 | --link-module ./lib/_third_party_main.js \ 38 | --openssl-no-asm --openssl-use-def-ca-store 39 | 40 | make "-j$cores" 41 | } 42 | 43 | main "$@" 44 | -------------------------------------------------------------------------------- /scripts/preinstall.bash: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # preinstall.bash 3 | 4 | set -Eeuo pipefail 5 | 6 | function main() { 7 | cd "$(dirname "${0}")/.." 8 | 9 | # Make sure submodules have been pulled. 10 | if [[ ! -f ./lib/node/.git ]] ; then 11 | echo "Could not find Node; have submodules been pulled?" 12 | echo "Running git submodule update --recursive --init" 13 | git submodule update --recursive --init 14 | 15 | # Ensure Node has been cloned. 16 | if [[ ! -f ./lib/node/.git ]] ; then 17 | >&2 echo "Unable to pull Node submodule"; exit 1 18 | fi 19 | fi 20 | } 21 | 22 | main "$@" 23 | -------------------------------------------------------------------------------- /src/api/bundler.ts: -------------------------------------------------------------------------------- 1 | import { field, Level, logger } from "@coder/logger" 2 | import * as nbin from "@coder/nbin" 3 | import * as fs from "fs-extra" 4 | import * as glob from "glob" 5 | import fetch from "node-fetch" 6 | import * as ora from "ora" 7 | import * as os from "os" 8 | import * as path from "path" 9 | import { writeString } from "../common/buffer" 10 | import { WritableFilesystem } from "../common/filesystem" 11 | import { createFooter } from "../common/footer" 12 | import { getXdgCacheHome } from "../common/util" 13 | 14 | export class Binary implements nbin.Binary { 15 | private readonly fs: WritableFilesystem = new WritableFilesystem() 16 | 17 | public constructor(private readonly options: nbin.BinaryOptions) {} 18 | 19 | public writeFile(pathName: string, content: Buffer | string): void { 20 | const parts = path 21 | .normalize(pathName) 22 | .split(path.sep) 23 | .filter((i) => i.length) 24 | let writableFs: WritableFilesystem = this.fs 25 | for (let i = 0; i < parts.length; i++) { 26 | const part = parts[i] 27 | if (i === parts.length - 1) { 28 | writableFs.write(part, typeof content === "string" ? Buffer.from(content) : content) 29 | } else { 30 | writableFs = writableFs.cd(part) 31 | } 32 | } 33 | } 34 | 35 | public writeFiles(globName: string, callback?: (fileWritten: string) => void): number { 36 | const files = glob.sync(globName, { cwd: process.cwd() }) 37 | let fileCount = 0 38 | let spinner: ora.Ora | undefined 39 | if (logger.level <= Level.Info) { 40 | spinner = ora("Writing...") 41 | } 42 | 43 | for (let i = 0; i < files.length; i++) { 44 | const file = files[i] 45 | const stat = fs.statSync(file) 46 | if (!stat.isFile()) { 47 | continue 48 | } 49 | this.writeFile(file, fs.readFileSync(file)) 50 | if (spinner) { 51 | spinner.text = `Wrote "${file}"!` 52 | } 53 | if (callback) { 54 | callback(file) 55 | } 56 | ++fileCount 57 | } 58 | 59 | if (spinner) { 60 | spinner.succeed(`Wrote ${fileCount} ${fileCount === 1 ? "file" : "files"}!`) 61 | } 62 | 63 | return fileCount 64 | } 65 | 66 | public writeModule(modulePath: string): void { 67 | if (!fs.existsSync(modulePath)) { 68 | throw new Error(`"${modulePath}" does not exist`) 69 | } 70 | const paths = glob.sync(path.join(modulePath, "**")) 71 | const moduleName = path.basename(modulePath) 72 | 73 | for (let i = 0; i < paths.length; i++) { 74 | const p = paths[i] 75 | const newPath = path.join("/node_modules", moduleName, path.relative(modulePath, p)) 76 | const stat = fs.statSync(p) 77 | if (!stat.isFile()) { 78 | continue 79 | } 80 | this.writeFile(newPath, fs.readFileSync(p)) 81 | } 82 | logger.trace("Packaged module", field("module", moduleName)) 83 | } 84 | 85 | public async build(): Promise { 86 | const nodeBuffer = await this.cacheBinary() 87 | 88 | // Create a buffer containing the version and its length. 89 | const version = this.version 90 | const versionBuffer = Buffer.alloc(2 + Buffer.byteLength(version)) 91 | writeString(versionBuffer, version) 92 | 93 | // Writing the entrypoint 94 | const mainFileBuffer = Buffer.alloc(2 + Buffer.byteLength(this.options.mainFile)) 95 | writeString(mainFileBuffer, this.options.mainFile) 96 | 97 | logger.trace("Building filesystem") 98 | 99 | // Filesystem contents 100 | const fsBuffer = this.fs.build() 101 | 102 | // Footer 103 | const footerBuffer = createFooter( 104 | fsBuffer.header.byteLength + versionBuffer.byteLength + mainFileBuffer.byteLength, // Header byte length 105 | nodeBuffer.byteLength, // Header byte offset 106 | fsBuffer.fileContents.byteLength, // File contents length 107 | nodeBuffer.byteLength + fsBuffer.header.byteLength + versionBuffer.byteLength + mainFileBuffer.byteLength // File contents offset 108 | ) 109 | 110 | return Buffer.concat([ 111 | nodeBuffer, 112 | versionBuffer, 113 | mainFileBuffer, 114 | fsBuffer.header, 115 | fsBuffer.fileContents, 116 | footerBuffer, 117 | ]) 118 | } 119 | 120 | private async cacheBinary(): Promise { 121 | let nodeBinaryPath = this.options.nodePath || path.join(__dirname, "../../lib/node/node") 122 | const nodeBinaryName = this.nodeBinaryName 123 | 124 | // By default we use the locally compiled node. If that or the provided Node 125 | // path doesn't exist then we use the cache directory and will download a 126 | // pre-built binary there. 127 | if (!(await fs.pathExists(nodeBinaryPath))) { 128 | const cacheDir = getXdgCacheHome("nbin") 129 | nodeBinaryPath = path.join(cacheDir, nodeBinaryName) 130 | } 131 | 132 | // See if we already have the binary. 133 | if (await fs.pathExists(nodeBinaryPath)) { 134 | logger.trace("Returning cached binary", field("path", nodeBinaryPath)) 135 | return fs.readFile(nodeBinaryPath) 136 | } 137 | 138 | // The binary we need doesn't exist, fetch it. 139 | const binary = await this.fetchNodeBinary(nodeBinaryName) 140 | await fs.mkdirp(path.dirname(nodeBinaryPath)) 141 | await fs.writeFile(nodeBinaryPath, binary) 142 | 143 | logger.trace("Returning written binary", field("path", nodeBinaryPath)) 144 | 145 | return binary 146 | } 147 | 148 | private async fetchNodeBinary(binName: string): Promise { 149 | const url = `https://nbin.cdr.sh/${binName}` 150 | logger.trace("Fetching", field("url", url)) 151 | 152 | const resp = await fetch(url) 153 | if (resp.status !== 200) { 154 | throw new Error(`Unable to download ${url}; does the resource exist? Error: ${resp.statusText}`) 155 | } 156 | const buffer = await resp.arrayBuffer() 157 | 158 | return Buffer.from(buffer) 159 | } 160 | 161 | private get nodeBinaryName(): string { 162 | const currentPlatform = this.options.target || os.platform() 163 | let currentArchitecture = os.arch() 164 | if (currentArchitecture === "x64") { 165 | currentArchitecture = "x86_64" 166 | } 167 | const nodeVersion = "12.14.0" 168 | const binName = `${this.version}/node-${nodeVersion}-${currentPlatform}-${currentArchitecture}` 169 | 170 | return binName 171 | } 172 | 173 | private get version(): string { 174 | // eslint-disable-next-line @typescript-eslint/no-var-requires 175 | return require(path.resolve(__dirname, "../../package.json")).version 176 | } 177 | } 178 | -------------------------------------------------------------------------------- /src/api/index.ts: -------------------------------------------------------------------------------- 1 | import { Binary } from "./bundler" 2 | 3 | export { Binary } 4 | -------------------------------------------------------------------------------- /src/common/buffer.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Write a string to a buffer. 3 | */ 4 | export const writeString = (buffer: Buffer, value: string, offset = 0): number => { 5 | const len = Buffer.byteLength(value) 6 | buffer.writeUInt16BE(len, offset) 7 | offset += 2 8 | offset += buffer.write(value, offset, "utf8") 9 | return offset 10 | } 11 | 12 | /** 13 | * Read a string from a buffer. 14 | */ 15 | export const readString = ( 16 | buffer: Buffer, 17 | offset: number 18 | ): { 19 | readonly value: string 20 | readonly offset: number 21 | } => { 22 | const len = buffer.readUInt16BE(offset) 23 | offset += 2 24 | const value = buffer.slice(offset, offset + len).toString("utf8") 25 | offset += len 26 | return { 27 | offset, 28 | value, 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/common/error.ts: -------------------------------------------------------------------------------- 1 | export const createNotFound = (): NodeJS.ErrnoException => { 2 | const e = new Error("File not found") 3 | Object.defineProperty(e, "code", { value: "ENOENT" }) 4 | return e 5 | } 6 | -------------------------------------------------------------------------------- /src/common/filesystem.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs" 2 | import * as nbin from "nbin" 3 | import * as path from "path" 4 | import { readString, writeString } from "./buffer" 5 | import { createNotFound } from "./error" 6 | 7 | interface Stat { 8 | readonly isFile: boolean 9 | readonly isDirectory: boolean 10 | readonly size: number 11 | } 12 | 13 | interface File { 14 | readonly byteLength: number 15 | readonly byteOffset: number 16 | 17 | read(offset?: number, length?: number): Promise 18 | readSync(offset?: number, length?: number): Buffer 19 | } 20 | 21 | export interface ReadableFilesystemProvider { 22 | readContents: (offset: number, length: number) => Promise 23 | readContentsSync: (offset: number, length: number) => Buffer 24 | } 25 | 26 | export class ReadableFilesystem implements nbin.Filesystem { 27 | private readonly directories: Map = new Map() 28 | public static fromBuffer(buffer: Buffer, provider: ReadableFilesystemProvider): ReadableFilesystem { 29 | let offset = 0 30 | const dirAmount = buffer.readUInt16BE(offset) 31 | offset += 2 32 | const directory = new ReadableFilesystem() 33 | for (let i = 0; i < dirAmount; i++) { 34 | const dirName = readString(buffer, offset) 35 | offset = dirName.offset 36 | const dirSliceLen = buffer.readUInt32BE(offset) 37 | offset += 4 38 | directory.directories.set( 39 | dirName.value, 40 | ReadableFilesystem.fromBuffer(buffer.slice(offset, offset + dirSliceLen), provider) 41 | ) 42 | offset += dirSliceLen 43 | } 44 | const fileAmount = buffer.readUInt16BE(offset) 45 | offset += 2 46 | for (let i = 0; i < fileAmount; i++) { 47 | const fileName = readString(buffer, offset) 48 | offset = fileName.offset 49 | const byteOffset = buffer.readUInt32BE(offset) 50 | offset += 4 51 | const byteLength = buffer.readUInt32BE(offset) 52 | offset += 4 53 | 54 | directory.files.set(fileName.value, { 55 | byteLength, 56 | byteOffset, 57 | 58 | read: (offset = 0, length: number = byteLength): Promise => { 59 | offset = Math.min(byteOffset + offset, byteOffset + byteLength) 60 | length = Math.min(length, byteLength, byteOffset + byteLength - offset) 61 | 62 | return provider.readContents(offset, length) 63 | }, 64 | 65 | readSync: (offset = 0, length: number = byteLength): Buffer => { 66 | offset = Math.min(byteOffset + offset, byteOffset + byteLength) 67 | length = Math.min(length, byteLength, byteOffset + byteLength - offset) 68 | 69 | return provider.readContentsSync(offset, length) 70 | }, 71 | }) 72 | } 73 | return directory 74 | } 75 | 76 | protected readonly files: Map = new Map() 77 | 78 | private ls(): ReadonlyArray { 79 | return [...Array.from(this.directories.keys()), ...Array.from(this.files.keys())] 80 | } 81 | 82 | private stat(name: string): Stat { 83 | const file = this.files.get(name) 84 | return { 85 | isFile: !!file, 86 | isDirectory: this.directories.has(name), 87 | size: file ? file.byteLength : 0, 88 | } 89 | } 90 | 91 | private cd(name: string): ReadableFilesystem | undefined { 92 | return this.directories.get(name) 93 | } 94 | 95 | private read(name: string, offset?: number, length?: number): Promise { 96 | const file = this.files.get(name) 97 | if (!file) { 98 | return Promise.reject(createNotFound()) 99 | } 100 | return file.read(offset, length) 101 | } 102 | 103 | private readSync(name: string, offset?: number, length?: number): Buffer { 104 | const file = this.files.get(name) 105 | if (!file) { 106 | throw createNotFound() 107 | } 108 | return file.readSync(offset, length) 109 | } 110 | 111 | public async readFile(pathName: fs.PathLike, encoding?: "buffer", offset?: number, length?: number): Promise 112 | public async readFile(pathName: fs.PathLike, encoding?: "utf8", offset?: number, length?: number): Promise 113 | public async readFile( 114 | pathName: fs.PathLike, 115 | encoding?: "utf8" | "buffer", 116 | offset?: number, 117 | length?: number 118 | ): Promise { 119 | const res = this.getFilesystem(pathName) 120 | if (!res) { 121 | throw createNotFound() 122 | } 123 | const b = await res.fs.read(res.name, offset, length) 124 | if (encoding && encoding === "utf8") { 125 | return b.toString() 126 | } 127 | return b 128 | } 129 | 130 | public readFileSync(pathName: fs.PathLike, encoding?: "buffer", offset?: number, length?: number): Buffer 131 | public readFileSync(pathName: fs.PathLike, encoding?: "utf8", offset?: number, length?: number): string 132 | public readFileSync( 133 | pathName: fs.PathLike, 134 | encoding?: "utf8" | "buffer", 135 | offset?: number, 136 | length?: number 137 | ): Buffer | string { 138 | const res = this.getFilesystem(pathName) 139 | if (!res) { 140 | throw createNotFound() 141 | } 142 | const b = res.fs.readSync(res.name, offset, length) 143 | if (encoding && encoding === "utf8") { 144 | return b.toString() 145 | } 146 | return b 147 | } 148 | 149 | public existsSync = (pathName: fs.PathLike): boolean => { 150 | const stat = this.statSync(pathName) 151 | return stat.isFile || stat.isDirectory 152 | } 153 | 154 | public readdirSync(pathName: fs.PathLike): ReadonlyArray { 155 | const res = this.getFilesystem(pathName) 156 | if (!res) { 157 | throw createNotFound() 158 | } 159 | const filesystem = res.fs.cd(res.name) 160 | if (!filesystem) { 161 | throw createNotFound() 162 | } 163 | return filesystem.ls() 164 | } 165 | 166 | public statSync(pathName: fs.PathLike): Stat { 167 | const res = this.getFilesystem(pathName) 168 | if (!res) { 169 | return { 170 | isDirectory: false, 171 | isFile: false, 172 | size: 0, 173 | } 174 | } 175 | return res.fs.stat(res.name) 176 | } 177 | 178 | /** 179 | * Will split the inputted path and attempt to nest down the tree to find the 180 | * file system for the specified path. 181 | */ 182 | private getFilesystem(fullPath: fs.PathLike): { fs: ReadableFilesystem; name: string } | undefined { 183 | const parts = path 184 | .normalize(fullPath.toString()) 185 | .split(path.sep) 186 | .filter((i) => i.length) 187 | let filesystem = this as ReadableFilesystem | undefined 188 | const last = parts.length - 1 189 | for (let i = 0; i < last; ++i) { 190 | if (!filesystem) { 191 | break 192 | } 193 | const part = parts[i] 194 | filesystem = filesystem.cd(part) 195 | } 196 | return filesystem && { fs: filesystem, name: parts[last] } 197 | } 198 | } 199 | 200 | export class WritableFilesystem { 201 | private readonly directories: Map = new Map() 202 | protected readonly files: Map = new Map() 203 | private readonly contentBuffers: Buffer[] = [] 204 | private contentLength = 0 205 | 206 | public constructor(private readonly parent?: WritableFilesystem) {} 207 | 208 | /** 209 | * Write a file. 210 | */ 211 | public write(name: string, value: Buffer): void { 212 | this.files.set(name, value) 213 | } 214 | 215 | public cd(name: string): WritableFilesystem { 216 | if (this.directories.has(name)) { 217 | // eslint-disable-next-line @typescript-eslint/no-non-null-assertion 218 | return this.directories.get(name)! 219 | } 220 | 221 | const dir = new WritableFilesystem(this) 222 | this.directories.set(name, dir) 223 | 224 | return dir 225 | } 226 | 227 | public build(): { 228 | readonly header: Buffer 229 | readonly fileContents: Buffer 230 | } { 231 | return { 232 | header: this.toBuffer(), 233 | fileContents: Buffer.concat(this.contentBuffers), 234 | } 235 | } 236 | 237 | private toBuffer(): Buffer { 238 | const dirs = Array.from(this.directories.values()).map((dir) => dir.toBuffer()) 239 | const dirNames = Array.from(this.directories.keys()) 240 | const files = Array.from(this.files.keys()) 241 | const headerSize = this.headerSize(dirs) 242 | const buffer = Buffer.alloc(headerSize) 243 | let offset = 0 244 | 245 | // Storing the amount of directories 246 | offset = buffer.writeUInt16BE(dirs.length, offset) 247 | for (let i = 0; i < dirs.length; i++) { 248 | const dir = dirs[i] 249 | 250 | // Storing the directory name 251 | offset = writeString(buffer, dirNames[i], offset) 252 | // Writing the length of the dir slice 253 | offset = buffer.writeUInt32BE(dir.byteLength, offset) 254 | // Up until here is fine 255 | // Writing the dirslice 256 | buffer.set(dir, offset) 257 | offset += dir.byteLength 258 | } 259 | // Storing the amount of files 260 | offset = buffer.writeUInt16BE(files.length, offset) 261 | for (let i = 0; i < files.length; i++) { 262 | const file = this.files.get(files[i]) 263 | if (!file) { 264 | throw new Error(`${files[i]} does not exist`) 265 | } 266 | // Writing the file path 267 | offset = writeString(buffer, files[i], offset) 268 | // Writing the resource length offset. 269 | // This offset is set from the beginning of the header. 270 | const resourceOffset = this.store(file) 271 | offset = buffer.writeUInt32BE(resourceOffset, offset) 272 | offset = buffer.writeUInt32BE(file.byteLength, offset) 273 | } 274 | 275 | return buffer 276 | } 277 | 278 | private headerSize(dirs: Buffer[]): number { 279 | const dirNames = Array.from(this.directories.keys()) 280 | const files = Array.from(this.files.keys()) 281 | const headerSize = 282 | 2 + // # of dirs 283 | dirs 284 | .map((d, i) => { 285 | // 2 byte for str len, then string 286 | const dirNameLen = 2 + Buffer.byteLength(dirNames[i], "utf8") 287 | // Length of subdir slice 288 | const dirLen = 4 289 | return dirNameLen + dirLen + d.byteLength 290 | }) 291 | .reduce((p, c) => p + c, 0) + 292 | 2 + 293 | files 294 | .map((f) => { 295 | const strLen = 2 + Buffer.byteLength(f, "utf8") 296 | return strLen + 4 + 4 297 | }) 298 | .reduce((p, c) => p + c, 0) 299 | 300 | return headerSize 301 | } 302 | 303 | /** 304 | * Bubbles to the main filesystem. Stores a buffer 305 | * and returns the offset it'll be stored at. 306 | */ 307 | private store(buffer: Buffer): number { 308 | if (this.parent) { 309 | return this.parent.store(buffer) 310 | } 311 | 312 | const plen = this.contentLength 313 | this.contentBuffers.push(buffer) 314 | this.contentLength += buffer.byteLength 315 | 316 | return plen 317 | } 318 | } 319 | -------------------------------------------------------------------------------- /src/common/footer.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs" 2 | 3 | export interface Footer { 4 | readonly headerLength: number 5 | readonly headerOffset: number 6 | readonly contentLength: number 7 | readonly contentOffset: number 8 | } 9 | 10 | /** 11 | * Reads a footer from a file descriptor with the size of the file 12 | */ 13 | export const readFooter = (fd: number, size: number): Footer => { 14 | const buffer = Buffer.allocUnsafe(16) 15 | fs.readSync(fd, buffer, 0, 16, size - 16) 16 | const headerLength = buffer.readUInt32BE(0) 17 | const headerOffset = buffer.readUInt32BE(4) 18 | const contentLength = buffer.readUInt32BE(8) 19 | const contentOffset = buffer.readUInt32BE(12) 20 | 21 | return { 22 | headerLength, 23 | headerOffset, 24 | contentLength, 25 | contentOffset, 26 | } 27 | } 28 | 29 | /** 30 | * Creates a footer defining byte lengths and offsets 31 | */ 32 | export const createFooter = ( 33 | headerLength: number, 34 | headerOffset: number, 35 | contentLength: number, 36 | contentOffset: number 37 | ): Buffer => { 38 | const buffer = Buffer.allocUnsafe(16) 39 | buffer.writeUInt32BE(headerLength, 0) 40 | buffer.writeUInt32BE(headerOffset, 4) 41 | buffer.writeUInt32BE(contentLength, 8) 42 | buffer.writeUInt32BE(contentOffset, 12) 43 | return buffer 44 | } 45 | -------------------------------------------------------------------------------- /src/common/util.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs" 2 | import * as os from "os" 3 | import * as path from "path" 4 | 5 | export const mkdirp = (p: string): void => { 6 | try { 7 | fs.mkdirSync(p) 8 | } catch (error) { 9 | if (error.code !== "EEXIST") { 10 | const parent = path.dirname(p) 11 | if (parent === p) { 12 | throw error 13 | } 14 | mkdirp(parent) 15 | fs.mkdirSync(p) 16 | } 17 | } 18 | } 19 | 20 | export const getXdgCacheHome = (name: string): string => { 21 | switch (process.platform) { 22 | case "win32": 23 | return path.join(process.env.XDG_CACHE_HOME || path.join(os.homedir(), "AppData/Local"), `${name}/Cache`) 24 | case "darwin": 25 | return path.join(process.env.XDG_CACHE_HOME || path.join(os.homedir(), "Library/Caches"), name) 26 | default: 27 | return path.join(process.env.XDG_CACHE_HOME || path.join(os.homedir(), ".cache"), name) 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/patches/fs.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A patch for `fs` permitting certain directories to be routed within the 3 | * binary. 4 | */ 5 | import * as fs from "fs" 6 | import * as nbin from "nbin" 7 | import * as path from "path" 8 | import * as util from "util" 9 | import { createNotFound } from "../common/error" 10 | 11 | /* eslint-disable @typescript-eslint/no-explicit-any */ 12 | /* eslint-disable @typescript-eslint/no-non-null-assertion */ 13 | 14 | interface OpenFile { 15 | readonly path: fs.PathLike 16 | readLocation: number 17 | } 18 | 19 | /** 20 | * Fills `${pathName}/*` with the binary stuff. 21 | */ 22 | export const fillFs = (pathName: string, filesystem: nbin.Filesystem): void => { 23 | const openFiles = new Map() 24 | const override = ( 25 | propertyName: T, 26 | factory: (callOld: () => any) => Omit, 27 | customPromisify?: (...args: any[]) => Promise 28 | ): void => { 29 | const oldfunc = (fs as any)[propertyName] 30 | ;(fs as any)[propertyName] = (...args: any[]): any => { 31 | const callOld = (): any => (oldfunc as any)(...args) 32 | 33 | // Try to determine whether this call falls within the path we are trying 34 | // to fill. If it doesn't we'll call the original method. 35 | let realPath = args[0] 36 | // Likely a file descriptor 37 | if (typeof realPath === "number") { 38 | const newFd = args[0] 39 | const maybeRealPath = openFiles.get(newFd) 40 | if (maybeRealPath) { 41 | realPath = maybeRealPath 42 | } 43 | // Likely a file path. 44 | } else if (typeof realPath === "string") { 45 | const newPath = realPath 46 | const rel = path.relative(pathName, newPath!) 47 | if (!rel.startsWith("..")) { 48 | // Looks like it falls within the fill path. 49 | return (factory(callOld) as any)(...args) 50 | } 51 | } 52 | 53 | return callOld() 54 | } 55 | 56 | if (customPromisify) { 57 | ;(fs as any)[propertyName][util.promisify.custom] = customPromisify 58 | } 59 | } 60 | 61 | let fdId = 0 62 | const findCb = (args: any[]): undefined | ((...args: any[]) => void) => { 63 | const cb = args.filter((d) => { 64 | return typeof d === "function" 65 | }) 66 | if (cb.length === 0) { 67 | return 68 | } 69 | return cb[0] 70 | } 71 | 72 | override("access", (callOld) => (pathName: fs.PathLike): void => { 73 | if (!filesystem.existsSync(pathName)) { 74 | return callOld() 75 | } 76 | }) 77 | 78 | override("accessSync", (callOld) => (pathName: fs.PathLike): void => { 79 | if (!filesystem.existsSync(pathName)) { 80 | return callOld() 81 | } 82 | }) 83 | 84 | override("close", (callOld) => (fd: number, callback: Function): void => { 85 | if (!openFiles.has(fd)) { 86 | return callOld() 87 | } 88 | 89 | openFiles.delete(fd) 90 | callback(null) 91 | }) 92 | 93 | override("closeSync", (callOld) => (fd: number): void => { 94 | if (!openFiles.has(fd)) { 95 | return callOld() 96 | } 97 | 98 | openFiles.delete(fd) 99 | }) 100 | 101 | override( 102 | "exists", 103 | () => (pathName: fs.PathLike, callback: Function): void => { 104 | callback(filesystem.existsSync(pathName)) 105 | }, 106 | (pathName: fs.PathLike): Promise => { 107 | return new Promise((resolve) => { 108 | return fs.exists(pathName, (exists) => { 109 | resolve(exists) 110 | }) 111 | }) 112 | } 113 | ) 114 | 115 | override("existsSync", () => (pathName: fs.PathLike): boolean => { 116 | return filesystem.existsSync(pathName) 117 | }) 118 | 119 | override( 120 | "fstat", 121 | (callOld) => (fd: number, callback: (err: NodeJS.ErrnoException | null, stats: fs.Stats) => void): void => { 122 | if (!openFiles.has(fd)) { 123 | return callOld() 124 | } 125 | 126 | const openFile = openFiles.get(fd) 127 | if (!openFile) { 128 | return callback(createNotFound(), null!) 129 | } 130 | return fs.stat(openFile.path, callback) 131 | } 132 | ) 133 | 134 | override("fstatSync", (callOld) => (fd: number): fs.Stats => { 135 | if (!openFiles.has(fd)) { 136 | return callOld() 137 | } 138 | 139 | const openFile = openFiles.get(fd) 140 | if (!openFile) { 141 | throw createNotFound() 142 | } 143 | return fs.statSync(openFile.path) 144 | }) 145 | 146 | override( 147 | "lstat", 148 | () => (pathName: fs.PathLike, callback: (err: NodeJS.ErrnoException | null, stats: fs.Stats) => void): void => { 149 | return fs.stat(pathName, callback) 150 | } 151 | ) 152 | 153 | override("lstatSync", () => (pathName: fs.PathLike): fs.Stats => { 154 | return fs.statSync(pathName) 155 | }) 156 | 157 | const doOpen = (pathName: fs.PathLike): number => { 158 | const desc = fdId++ 159 | openFiles.set(desc, { 160 | path: pathName, 161 | readLocation: 0, 162 | }) 163 | return desc 164 | } 165 | 166 | override("open", (callOld) => (pathName: fs.PathLike, ...args: any[]): void => { 167 | if (!filesystem.existsSync(pathName)) { 168 | return callOld() 169 | } 170 | const fd = doOpen(pathName) 171 | const cb = findCb(args) 172 | if (!cb) { 173 | return 174 | } 175 | process.nextTick(() => { 176 | cb(null, fd) 177 | }) 178 | }) 179 | 180 | override("openSync", (callOld) => (pathName: fs.PathLike): number => { 181 | if (!filesystem.existsSync(pathName)) { 182 | return callOld() 183 | } 184 | return doOpen(pathName) 185 | }) 186 | 187 | override( 188 | "read", 189 | (callOld) => ( 190 | fd: number, 191 | buffer: Buffer, 192 | offset: number, 193 | length: number, 194 | position: number, 195 | callback: Function 196 | ): void => { 197 | const openFile = openFiles.get(fd) 198 | if (!openFile) { 199 | return callOld() 200 | } 201 | 202 | let hadPosition = true 203 | if (typeof position === "undefined" || position === null) { 204 | position = openFile.readLocation 205 | hadPosition = false 206 | } 207 | filesystem 208 | .readFile(openFile.path, "buffer", position, length) 209 | .then((content) => { 210 | buffer.set(content, offset) 211 | if (!hadPosition) { 212 | openFile.readLocation += content.byteLength 213 | } 214 | // tslint:disable-next-line:no-any 215 | callback(null, content.byteLength, content as any) 216 | }) 217 | .catch((ex) => { 218 | callback(ex, null, null) 219 | }) 220 | }, 221 | (fd, buffer: Buffer, offset, length, position) => { 222 | return new Promise((resolve, reject) => { 223 | return fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => { 224 | if (err) { 225 | return reject(err) 226 | } 227 | 228 | resolve({ 229 | bytesRead, 230 | buffer, 231 | }) 232 | }) 233 | }) 234 | } 235 | ) 236 | 237 | override( 238 | "readSync", 239 | (callOld) => (fd: number, buffer: Buffer, offset: number, length: number, position: number): number => { 240 | const openFile = openFiles.get(fd) 241 | if (!openFile) { 242 | return callOld() 243 | } 244 | 245 | let hadPosition = true 246 | if (typeof position === "undefined" || position === null) { 247 | position = openFile.readLocation 248 | hadPosition = false 249 | } 250 | const content = filesystem.readFileSync(openFile.path, "buffer", position, length) 251 | buffer.set(content, offset) 252 | if (!hadPosition) { 253 | openFile.readLocation += content.byteLength 254 | } 255 | return content.byteLength 256 | } 257 | ) 258 | 259 | override("readdir", () => (pathName: fs.PathLike, ...args: any[]): void => { 260 | const cb = findCb(args) 261 | if (!cb) { 262 | return 263 | } 264 | cb(null, filesystem.readdirSync(pathName)) 265 | }) 266 | 267 | override("readdirSync", () => (pathName: string): string[] => { 268 | return [...filesystem.readdirSync(pathName)] 269 | }) 270 | 271 | override("readFile", () => (pathName: string, ...args: any[]): void => { 272 | let encoding = "buffer" 273 | if (typeof args[0] === "string") { 274 | encoding = args[0] 275 | } 276 | if (typeof args[0] === "object" && args[0] !== null) { 277 | const opts = args[0] 278 | if (opts.encoding) { 279 | encoding = opts.encoding 280 | } 281 | } 282 | const cb = findCb(args) 283 | if (!cb) { 284 | return 285 | } 286 | filesystem 287 | .readFile(pathName, encoding as "utf8") 288 | .then((result) => { 289 | cb(null, result) 290 | }) 291 | .catch((ex) => { 292 | cb(ex) 293 | }) 294 | }) 295 | 296 | override("readFileSync", () => (pathName: string, ...args: any[]): string | Buffer => { 297 | let encoding = "buffer" 298 | if (typeof args[0] === "string") { 299 | encoding = args[0] 300 | } 301 | if (typeof args[0] === "object" && args[0] !== null) { 302 | const opts = args[0] 303 | if (opts.encoding) { 304 | encoding = opts.encoding 305 | } 306 | } 307 | return filesystem.readFileSync(pathName, encoding as "buffer") 308 | }) 309 | 310 | override("realpath", () => (pathName: fs.PathLike, ...args: any[]): void => { 311 | const cb = findCb(args) 312 | if (!cb) { 313 | return 314 | } 315 | cb(null, pathName) 316 | }) 317 | 318 | override("realpathSync", () => (pathName: fs.PathLike): fs.PathLike => { 319 | return pathName 320 | }) 321 | 322 | const doStat = (pathName: fs.PathLike): fs.Stats => { 323 | const stat = filesystem.statSync(pathName) 324 | const date = new Date() 325 | 326 | return new (class { 327 | isBlockDevice(): false { 328 | return false 329 | } 330 | isCharacterDevice(): false { 331 | return false 332 | } 333 | isDirectory(): boolean { 334 | return stat.isDirectory 335 | } 336 | isFIFO(): false { 337 | return false 338 | } 339 | isFile(): boolean { 340 | return stat.isFile 341 | } 342 | isSocket(): false { 343 | return false 344 | } 345 | isSymbolicLink(): false { 346 | return false 347 | } 348 | 349 | public readonly atime = date 350 | public readonly atimeMs = date.getTime() 351 | public readonly birthtime = date 352 | public readonly birthtimeMs = date.getTime() 353 | public readonly blksize = null! 354 | public readonly blocks = null! 355 | public readonly ctime = date 356 | public readonly ctimeMs = date.getTime() 357 | public readonly dev = null! 358 | public readonly gid = 0 359 | public readonly ino = 0 360 | public readonly mode = null! 361 | public readonly mtime = date 362 | public readonly mtimeMs = date.getTime() 363 | public readonly nlink = null! 364 | public readonly rdev = null! 365 | public readonly size = stat.size 366 | public readonly uid = 0 367 | })() 368 | } 369 | 370 | override("stat", () => (pathName: fs.PathLike, ...args: any[]): void => { 371 | const cb = findCb(args) 372 | if (!cb) { 373 | return 374 | } 375 | cb(null, doStat(pathName)) 376 | }) 377 | 378 | override("statSync", () => (pathName: fs.PathLike): fs.Stats => { 379 | return doStat(pathName) 380 | }) 381 | } 382 | -------------------------------------------------------------------------------- /src/patches/nbin.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs" 2 | import * as nbin from "nbin" 3 | import * as path from "path" 4 | import { readString } from "../common/buffer" 5 | import { ReadableFilesystem } from "../common/filesystem" 6 | import { readFooter } from "../common/footer" 7 | import { mkdirp, getXdgCacheHome } from "../common/util" 8 | import { fillFs } from "./fs" 9 | 10 | const execPath = process.execPath 11 | const execPathStat = fs.statSync(execPath) 12 | const nbinFd = fs.openSync(execPath, "r") 13 | 14 | // Footer is located at the end of the file. 15 | const footer = readFooter(nbinFd, execPathStat.size) 16 | 17 | // Contains the version, mainFile and the filesystem. 18 | const headerBuffer = Buffer.allocUnsafe(footer.headerLength) 19 | fs.readSync(nbinFd, headerBuffer, 0, footer.headerLength, footer.headerOffset) 20 | const version = readString(headerBuffer, 0) 21 | const mainFile = readString(headerBuffer, version.offset) 22 | 23 | // Maximize read performance by using the originals before any overrides. 24 | const originalRead = fs.read 25 | const originalReadSync = fs.readSync 26 | 27 | const fsBuffer = headerBuffer.slice(mainFile.offset) 28 | const readableFs = ReadableFilesystem.fromBuffer(fsBuffer, { 29 | readContents: (offset: number, length: number): Promise => { 30 | const buffer = Buffer.allocUnsafe(length) 31 | return new Promise((resolve, reject) => { 32 | originalRead(nbinFd, buffer, 0, length, offset + footer.contentOffset, (err, _, buffer) => { 33 | if (err) { 34 | return reject(err) 35 | } 36 | 37 | resolve(buffer) 38 | }) 39 | }) 40 | }, 41 | readContentsSync: (offset: number, length: number): Buffer => { 42 | const buffer = Buffer.alloc(length) 43 | originalReadSync(nbinFd, buffer, 0, length, offset + footer.contentOffset) 44 | return buffer 45 | }, 46 | }) 47 | 48 | const tmpDir = path.join(getXdgCacheHome("nbin"), version.value) 49 | mkdirp(tmpDir) 50 | 51 | const exported: typeof nbin = { 52 | version: version.value, 53 | mainFile: mainFile.value, 54 | fs: readableFs, 55 | shimNativeFs: (path: string): void => { 56 | fillFs(path, readableFs) 57 | }, 58 | tmpDir, 59 | } 60 | 61 | export = exported 62 | -------------------------------------------------------------------------------- /src/patches/thirdPartyMain.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Application entry point. 3 | */ 4 | import * as nbin from "nbin" 5 | 6 | // Set the version globally. 7 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 8 | ;(process.versions as any).nbin = nbin.version 9 | 10 | // Splice in the main file. 11 | process.argv.splice(1, 0, nbin.mainFile) 12 | 13 | // Kick things off by loading the main file. 14 | require("module").runMain() 15 | -------------------------------------------------------------------------------- /test/bundler.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from "assert" 2 | import * as cp from "child_process" 3 | import * as fs from "fs-extra" 4 | import * as os from "os" 5 | import * as path from "path" 6 | import * as util from "util" 7 | import * as zlib from "zlib" 8 | import { Binary } from "../src/api/bundler" 9 | 10 | // Add a default for the maximum memory. 11 | process.env.NODE_OPTIONS = `--max-old-space-size=1024 ${process.env.NODE_OPTIONS || ""}` 12 | 13 | let binId = 0 14 | const nodePath = path.join(__dirname, "../lib/node/node") 15 | const tmpDir = path.join(os.tmpdir(), "nbin/tests") 16 | const runBinary = async ( 17 | binary: Binary, 18 | expected?: { stdout?: string; stderr?: string }, 19 | env?: NodeJS.ProcessEnv, 20 | args?: string[] 21 | ): Promise<{ stdout: string; stderr: string }> => { 22 | const tmpFile = path.join(tmpDir, `${binId++}`) 23 | await fs.writeFile(tmpFile, await binary.build()) 24 | await fs.chmod(tmpFile, "755") 25 | const output = await util.promisify(cp.exec)(`${tmpFile} ${(args || []).join(" ")}`, { 26 | env: { 27 | ...process.env, 28 | ...(env || {}), 29 | }, 30 | }) 31 | assert.equal(output.stderr, (expected && expected.stderr) || "") 32 | assert.equal(output.stdout, (expected && expected.stdout) || "") 33 | return output 34 | } 35 | 36 | describe("bundler", () => { 37 | before(async () => { 38 | assert.equal(fs.existsSync(nodePath), true, "Node must be built locally to run bundler tests") 39 | await fs.mkdirp(tmpDir) 40 | }) 41 | 42 | it("should error if running raw binary", async () => { 43 | // TODO: If possible we could try to detect if anything has been bundled yet 44 | // and display an appropriate message. 45 | assert.rejects(async () => { 46 | await util.promisify(cp.exec)(nodePath) 47 | }, /ERR/) // out of bounds or out of range 48 | }) 49 | 50 | it("should compile binary and execute it", async () => { 51 | const mainFile = "/example.js" 52 | const bin = new Binary({ nodePath, mainFile }) 53 | const stdout = "hello!" 54 | bin.writeFile(mainFile, `process.stdout.write("${stdout}");`) 55 | await runBinary(bin, { stdout }) 56 | }) 57 | 58 | it("should bypass nbin", async () => { 59 | const mainFile = "/example.js" 60 | const bin = new Binary({ nodePath, mainFile }) 61 | const stdout = "bypassed hello!" 62 | bin.writeFile(mainFile, `process.stdout.write("hello!");`) 63 | await runBinary( 64 | bin, 65 | { stdout }, 66 | { 67 | NBIN_BYPASS: "true", 68 | }, 69 | ["-e", `'process.stdout.write("${stdout}")'`] 70 | ) 71 | }) 72 | 73 | /** 74 | * TODO: this should work on other platforms 75 | */ 76 | if (process.platform === "linux") { 77 | it("should load native module", async () => { 78 | const mainFile = "/example.js" 79 | const bin = new Binary({ nodePath, mainFile }) 80 | const stdout = "hi" 81 | bin.writeModule(path.join(__dirname, "../node_modules", "node-pty")) 82 | bin.writeFile(mainFile, `require("node-pty");process.stdout.write("${stdout}");`) 83 | await runBinary(bin, { stdout }) 84 | }) 85 | } 86 | 87 | it("should fork and bypass nbin", async () => { 88 | const mainFile = "/example.js" 89 | const bin = new Binary({ nodePath, mainFile }) 90 | 91 | const exampleContent = (): void => { 92 | process.env.NBIN_BYPASS = "true" 93 | const proc = require("child_process").fork("/test.js", [], { 94 | stdio: "inherit", 95 | }) 96 | proc.on("message", (d: string) => { 97 | process.stdout.write(d) 98 | process.exit(0) 99 | }) 100 | } 101 | 102 | const stdout = "hi" 103 | bin.writeFile(mainFile, `(${exampleContent.toString()})()`) 104 | bin.writeFile("/test.js", `process.send("${stdout}");`) 105 | await runBinary(bin, { stdout }) 106 | }) 107 | 108 | it("should fork and not bypass nbin", async () => { 109 | const mainFile = "/example.js" 110 | const bin = new Binary({ nodePath, mainFile }) 111 | 112 | const exampleContent = (stdout: string): void => { 113 | if (!process.env.LOADED_NBIN) { 114 | process.env.LOADED_NBIN = "true" 115 | const proc = require("child_process").fork("/test.js", [], { 116 | stdio: "inherit", 117 | }) 118 | proc.on("message", (d: string) => { 119 | process.stdout.write(d) 120 | process.exit(0) 121 | }) 122 | } else { 123 | if (process.send) { 124 | process.send(stdout) 125 | } else { 126 | process.stderr.write("wasn't spawned with ipc") 127 | } 128 | process.exit(0) 129 | } 130 | } 131 | 132 | const stdout = "from the main file" 133 | bin.writeFile(mainFile, `(${exampleContent.toString()})("${stdout}")`) 134 | bin.writeFile("/test.js", `process.send("from the child");`) 135 | await runBinary(bin, { stdout }) 136 | }) 137 | 138 | /** 139 | * TODO: this should work on other platforms 140 | */ 141 | if (process.platform === "linux") { 142 | it("should fill fs", async () => { 143 | const mainFile = "/example.js" 144 | const exampleContent = (stdout: string): void => { 145 | const assert = require("assert") as typeof import("assert") 146 | const fs = require("fs") as typeof import("fs") 147 | const nbin = require("nbin") as typeof import("nbin") 148 | 149 | try { 150 | fs.readFileSync("/donkey/frog") 151 | process.exit(1) // Fail if we read successfully. 152 | } catch (ex) { 153 | nbin.shimNativeFs("/donkey") 154 | assert.equal(fs.readFileSync("/donkey/frog").toString(), "example") 155 | try { 156 | fs.writeFileSync("/donkey/banana", "asdf") 157 | process.exit(1) 158 | } catch (ex) { 159 | process.stdout.write(stdout) 160 | } 161 | } 162 | } 163 | const stdout = "success" 164 | const bin = new Binary({ nodePath, mainFile }) 165 | bin.writeFile(mainFile, `(${exampleContent.toString()})("${stdout}")`) 166 | bin.writeFile("/donkey/frog", "example") 167 | await runBinary(bin, { stdout }) 168 | }) 169 | } 170 | 171 | it("should fill fs and propagate errors", async () => { 172 | const mainFile = "/example.js" 173 | const exampleContent = (stdout: string): void => { 174 | const fs = require("fs") as typeof import("fs") 175 | const nbin = require("nbin") as typeof import("nbin") 176 | 177 | nbin.shimNativeFs("/home/kyle/node/coder/code-server/packages/server") 178 | fs.open("/home/kyle/node/coder/code-server/packages/server/build/web/auth/__webpack_hmr", "r", (err) => { 179 | if (err) { 180 | process.stdout.write(stdout) 181 | process.exit(0) 182 | } 183 | 184 | process.exit(1) 185 | }) 186 | } 187 | const stdout = "success" 188 | const bin = new Binary({ nodePath, mainFile }) 189 | bin.writeFile(mainFile, `(${exampleContent.toString()})("${stdout}")`) 190 | await runBinary(bin, { stdout }) 191 | }) 192 | 193 | it("should load gzip'd javascript", async () => { 194 | const mainFile = "/example.js.gz" 195 | const bin = new Binary({ nodePath, mainFile }) 196 | const stdout = "success" 197 | bin.writeFile(mainFile, zlib.gzipSync(Buffer.from(`process.stdout.write("${stdout}");process.exit(0);`))) 198 | await runBinary(bin, { stdout }) 199 | }) 200 | 201 | it("should pass options", async () => { 202 | const mainFile = "/example.js" 203 | const bin = new Binary({ nodePath, mainFile }) 204 | const stdout = `["/example.js","--version"]` 205 | bin.writeFile(mainFile, `process.stdout.write(JSON.stringify(process.argv.slice(1)));process.exit(0);`) 206 | await runBinary(bin, { stdout: "v12.14.0\n" }, { NBIN_BYPASS: "true" }, ["--version"]) 207 | await runBinary(bin, { stdout }, undefined, ["--version"]) 208 | }) 209 | }) 210 | -------------------------------------------------------------------------------- /test/mocha.opts: -------------------------------------------------------------------------------- 1 | --require ts-node/register 2 | --require source-map-support/register 3 | ./test/*.test.ts 4 | -------------------------------------------------------------------------------- /test/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "noImplicitReturns": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "outDir": "out", 10 | "declaration": true, 11 | "sourceMap": true, 12 | "baseUrl": ".", 13 | "paths": { 14 | "nbin": ["../typings/internal.d.ts"] 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /test/util.test.ts: -------------------------------------------------------------------------------- 1 | import * as assert from "assert" 2 | import * as fs from "fs-extra" 3 | import * as path from "path" 4 | import * as os from "os" 5 | import { mkdirp } from "../src/common/util" 6 | 7 | const tmpDir = path.join(os.tmpdir(), "nbin/tests") 8 | 9 | describe("util", () => { 10 | it("mkdirp", async () => { 11 | const target = path.join(tmpDir, "foo/bar/baz") 12 | assert.equal(mkdirp(target), undefined) 13 | assert.equal(await fs.pathExists(target), true) 14 | assert.equal(mkdirp(target), undefined) // Shouldn't throw if it exists. 15 | 16 | // In CI we have permissions so we'll write a file to force an error. 17 | try { 18 | await fs.writeFile("/file", "") 19 | } catch (error) { 20 | // No problem. 21 | } 22 | assert.throws(() => mkdirp(path.join("/file/foo/bar/baz")), /Error/) 23 | }) 24 | }) 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "module": "commonjs", 5 | "moduleResolution": "node", 6 | "strict": true, 7 | "noImplicitReturns": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "outDir": "out", 10 | "declaration": true, 11 | "sourceMap": true, 12 | "baseUrl": ".", 13 | "paths": { 14 | "nbin": ["./typings/internal.d.ts"], 15 | "@coder/nbin": ["./typings/external.d.ts"] 16 | } 17 | }, 18 | "include": [ 19 | "./src" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /typings/external.d.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * External nbin module (the API). 3 | */ 4 | declare module "@coder/nbin" { 5 | export interface BinaryOptions { 6 | /** 7 | * Path of the node binary to bundle. 8 | * *Must* be a patched binary. 9 | */ 10 | readonly nodePath?: string 11 | 12 | /** 13 | * Main file for your application. 14 | * Will be called as the entrypoint. 15 | */ 16 | readonly mainFile: string 17 | 18 | /** 19 | * OS target 20 | */ 21 | readonly target?: "darwin" | "alpine" | "linux" 22 | } 23 | 24 | /** 25 | * Create a new binary. 26 | */ 27 | export class Binary { 28 | public constructor(options: BinaryOptions) 29 | 30 | /** 31 | * Write a file to the bundle at a path. 32 | */ 33 | public writeFile(pathName: string, content: Buffer): void 34 | 35 | /** 36 | * Writes files from an FS glob. 37 | * Calls back as files are written. 38 | * @example 39 | * writeFiles(path.join(__dirname, "dog/**")); 40 | * @returns number of files written 41 | */ 42 | public writeFiles(glob: string, callback?: (fileWritten: string) => void): number 43 | 44 | /** 45 | * Will bundle a module based on path and name. 46 | * Allows you to do `writeModule("/test/bananas/node_modules/frog")` and 47 | * embed the `frog` module within the binary. 48 | * 49 | * All modules by default will be placed in `/node_modules` 50 | */ 51 | public writeModule(modulePath: string): void 52 | 53 | /** 54 | * Bundles the binary. 55 | * @returns the content of the executable file. 56 | */ 57 | public build(): Promise 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /typings/internal.d.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs" 2 | 3 | /** 4 | * Internal nbin module. Only available inside the binary. 5 | */ 6 | declare module "nbin" { 7 | /** 8 | * Returns the stat for a path. 9 | */ 10 | export interface Stat { 11 | readonly isDirectory: boolean 12 | readonly isFile: boolean 13 | readonly size: number 14 | } 15 | 16 | export interface Filesystem { 17 | /** 18 | * Checks if a file exists within the binary. 19 | */ 20 | existsSync(path: fs.PathLike): boolean 21 | 22 | /** 23 | * Performs a stat on paths within the binary. 24 | */ 25 | statSync(path: fs.PathLike): Stat 26 | 27 | /** 28 | * Reads a directory within the binary. 29 | */ 30 | readdirSync(path: fs.PathLike): ReadonlyArray 31 | 32 | /** 33 | * Reads a file asynchronously from the binary. 34 | */ 35 | readFile(path: fs.PathLike, encoding?: "buffer", offset?: number, length?: number): Promise 36 | readFile(path: fs.PathLike, encoding?: "utf8", offset?: number, length?: number): Promise 37 | 38 | /** 39 | * Reads a file synchronously from the binary. 40 | */ 41 | readFileSync(path: fs.PathLike, encoding?: "buffer", offset?: number, length?: number): Buffer 42 | readFileSync(path: fs.PathLike, encoding?: "utf8", offset?: number, length?: number): string 43 | } 44 | 45 | /** 46 | * nbin version. 47 | */ 48 | export const version: string 49 | 50 | /** 51 | * Returns the entrypoint of the application. 52 | */ 53 | export const mainFile: string 54 | 55 | /** 56 | * Shims the native `fs` module for the path. 57 | */ 58 | export const shimNativeFs: (path: string) => void 59 | 60 | /** 61 | * Provides file system access into the binary. 62 | */ 63 | export const fs: Filesystem 64 | 65 | /** 66 | * Where to extract temporary files. 67 | */ 68 | export const tmpDir: string 69 | } 70 | -------------------------------------------------------------------------------- /typings/nbin.d.ts: -------------------------------------------------------------------------------- 1 | import "./internal" 2 | import "./external" 3 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5": 6 | version "7.5.5" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" 8 | integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== 9 | dependencies: 10 | "@babel/highlight" "^7.0.0" 11 | 12 | "@babel/generator@^7.4.0", "@babel/generator@^7.7.4": 13 | version "7.7.4" 14 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.7.4.tgz#db651e2840ca9aa66f327dcec1dc5f5fa9611369" 15 | integrity sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg== 16 | dependencies: 17 | "@babel/types" "^7.7.4" 18 | jsesc "^2.5.1" 19 | lodash "^4.17.13" 20 | source-map "^0.5.0" 21 | 22 | "@babel/helper-function-name@^7.7.4": 23 | version "7.7.4" 24 | resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz#ab6e041e7135d436d8f0a3eca15de5b67a341a2e" 25 | integrity sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ== 26 | dependencies: 27 | "@babel/helper-get-function-arity" "^7.7.4" 28 | "@babel/template" "^7.7.4" 29 | "@babel/types" "^7.7.4" 30 | 31 | "@babel/helper-get-function-arity@^7.7.4": 32 | version "7.7.4" 33 | resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz#cb46348d2f8808e632f0ab048172130e636005f0" 34 | integrity sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA== 35 | dependencies: 36 | "@babel/types" "^7.7.4" 37 | 38 | "@babel/helper-split-export-declaration@^7.7.4": 39 | version "7.7.4" 40 | resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz#57292af60443c4a3622cf74040ddc28e68336fd8" 41 | integrity sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug== 42 | dependencies: 43 | "@babel/types" "^7.7.4" 44 | 45 | "@babel/highlight@^7.0.0": 46 | version "7.5.0" 47 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.5.0.tgz#56d11312bd9248fa619591d02472be6e8cb32540" 48 | integrity sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ== 49 | dependencies: 50 | chalk "^2.0.0" 51 | esutils "^2.0.2" 52 | js-tokens "^4.0.0" 53 | 54 | "@babel/parser@^7.4.3", "@babel/parser@^7.7.4": 55 | version "7.7.5" 56 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.7.5.tgz#cbf45321619ac12d83363fcf9c94bb67fa646d71" 57 | integrity sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig== 58 | 59 | "@babel/template@^7.4.0", "@babel/template@^7.7.4": 60 | version "7.7.4" 61 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b" 62 | integrity sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw== 63 | dependencies: 64 | "@babel/code-frame" "^7.0.0" 65 | "@babel/parser" "^7.7.4" 66 | "@babel/types" "^7.7.4" 67 | 68 | "@babel/traverse@^7.4.3": 69 | version "7.7.4" 70 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.7.4.tgz#9c1e7c60fb679fe4fcfaa42500833333c2058558" 71 | integrity sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw== 72 | dependencies: 73 | "@babel/code-frame" "^7.5.5" 74 | "@babel/generator" "^7.7.4" 75 | "@babel/helper-function-name" "^7.7.4" 76 | "@babel/helper-split-export-declaration" "^7.7.4" 77 | "@babel/parser" "^7.7.4" 78 | "@babel/types" "^7.7.4" 79 | debug "^4.1.0" 80 | globals "^11.1.0" 81 | lodash "^4.17.13" 82 | 83 | "@babel/types@^7.4.0", "@babel/types@^7.7.4": 84 | version "7.7.4" 85 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.7.4.tgz#516570d539e44ddf308c07569c258ff94fde9193" 86 | integrity sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA== 87 | dependencies: 88 | esutils "^2.0.2" 89 | lodash "^4.17.13" 90 | to-fast-properties "^2.0.0" 91 | 92 | "@coder/logger@^1.1.8": 93 | version "1.1.12" 94 | resolved "https://registry.yarnpkg.com/@coder/logger/-/logger-1.1.12.tgz#def113b7183abc35a8da2b57f0929f7e9626f4e0" 95 | integrity sha512-oM0j3lTVPqApUm3e0bKKcXpfAiJEys31fgEfQlHmvEA13ujsC4zDuXnt0uzDtph48eMoNRLOF/EE4mNShVJKVw== 96 | 97 | "@types/eslint-visitor-keys@^1.0.0": 98 | version "1.0.0" 99 | resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d" 100 | integrity sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag== 101 | 102 | "@types/events@*": 103 | version "3.0.0" 104 | resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" 105 | integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== 106 | 107 | "@types/fs-extra@^5.0.5": 108 | version "5.1.0" 109 | resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.1.0.tgz#2a325ef97901504a3828718c390d34b8426a10a1" 110 | integrity sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ== 111 | dependencies: 112 | "@types/node" "*" 113 | 114 | "@types/glob@^7.1.1": 115 | version "7.1.1" 116 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" 117 | integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== 118 | dependencies: 119 | "@types/events" "*" 120 | "@types/minimatch" "*" 121 | "@types/node" "*" 122 | 123 | "@types/json-schema@^7.0.3": 124 | version "7.0.3" 125 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.3.tgz#bdfd69d61e464dcc81b25159c270d75a73c1a636" 126 | integrity sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A== 127 | 128 | "@types/minimatch@*": 129 | version "3.0.3" 130 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" 131 | integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== 132 | 133 | "@types/mocha@^5.2.7": 134 | version "5.2.7" 135 | resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-5.2.7.tgz#315d570ccb56c53452ff8638738df60726d5b6ea" 136 | integrity sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ== 137 | 138 | "@types/node-fetch@^2.1.7": 139 | version "2.5.4" 140 | resolved "https://registry.yarnpkg.com/@types/node-fetch/-/node-fetch-2.5.4.tgz#5245b6d8841fc3a6208b82291119bc11c4e0ce44" 141 | integrity sha512-Oz6id++2qAOFuOlE1j0ouk1dzl3mmI1+qINPNBhi9nt/gVOz0G+13Ao6qjhdF0Ys+eOkhu6JnFmt38bR3H0POQ== 142 | dependencies: 143 | "@types/node" "*" 144 | 145 | "@types/node@*": 146 | version "12.12.20" 147 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.20.tgz#7b693038ce661fe57a7ffa4679440b5e7c5e8b99" 148 | integrity sha512-VAe+DiwpnC/g448uN+/3gRl4th0BTdrR9gSLIOHA+SUQskaYZQDOHG7xmjiE7JUhjbXnbXytf6Ih+/pA6CtMFQ== 149 | 150 | "@types/node@^11.11.4": 151 | version "11.15.3" 152 | resolved "https://registry.yarnpkg.com/@types/node/-/node-11.15.3.tgz#cb7f19846a83ac5a88fc22756b74633cdeb476a7" 153 | integrity sha512-5RzvXVietaB8S4dwDjxjltAOHtTO87fiksjqjWGZih97j6KSrdCDaRfmYMNrgrLM87odGBrsTHAl6N3fLraQaw== 154 | 155 | "@typescript-eslint/eslint-plugin@^2.0.0": 156 | version "2.12.0" 157 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.12.0.tgz#0da7cbca7b24f4c6919e9eb31c704bfb126f90ad" 158 | integrity sha512-1t4r9rpLuEwl3hgt90jY18wJHSyb0E3orVL3DaqwmpiSDHmHiSspVsvsFF78BJ/3NNG3qmeso836jpuBWYziAA== 159 | dependencies: 160 | "@typescript-eslint/experimental-utils" "2.12.0" 161 | eslint-utils "^1.4.3" 162 | functional-red-black-tree "^1.0.1" 163 | regexpp "^3.0.0" 164 | tsutils "^3.17.1" 165 | 166 | "@typescript-eslint/experimental-utils@2.12.0": 167 | version "2.12.0" 168 | resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.12.0.tgz#e0a76ffb6293e058748408a191921e453c31d40d" 169 | integrity sha512-jv4gYpw5N5BrWF3ntROvCuLe1IjRenLy5+U57J24NbPGwZFAjhnM45qpq0nDH1y/AZMb3Br25YiNVwyPbz6RkA== 170 | dependencies: 171 | "@types/json-schema" "^7.0.3" 172 | "@typescript-eslint/typescript-estree" "2.12.0" 173 | eslint-scope "^5.0.0" 174 | 175 | "@typescript-eslint/parser@^2.0.0": 176 | version "2.12.0" 177 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.12.0.tgz#393f1604943a4ca570bb1a45bc8834e9b9158884" 178 | integrity sha512-lPdkwpdzxEfjI8TyTzZqPatkrswLSVu4bqUgnB03fHSOwpC7KSerPgJRgIAf11UGNf7HKjJV6oaPZI4AghLU6g== 179 | dependencies: 180 | "@types/eslint-visitor-keys" "^1.0.0" 181 | "@typescript-eslint/experimental-utils" "2.12.0" 182 | "@typescript-eslint/typescript-estree" "2.12.0" 183 | eslint-visitor-keys "^1.1.0" 184 | 185 | "@typescript-eslint/typescript-estree@2.12.0": 186 | version "2.12.0" 187 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.12.0.tgz#bd9e547ccffd17dfab0c3ab0947c80c8e2eb914c" 188 | integrity sha512-rGehVfjHEn8Frh9UW02ZZIfJs6SIIxIu/K1bbci8rFfDE/1lQ8krIJy5OXOV3DVnNdDPtoiPOdEANkLMrwXbiQ== 189 | dependencies: 190 | debug "^4.1.1" 191 | eslint-visitor-keys "^1.1.0" 192 | glob "^7.1.6" 193 | is-glob "^4.0.1" 194 | lodash.unescape "4.0.1" 195 | semver "^6.3.0" 196 | tsutils "^3.17.1" 197 | 198 | JSONStream@^1.0.3: 199 | version "1.3.5" 200 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" 201 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== 202 | dependencies: 203 | jsonparse "^1.2.0" 204 | through ">=2.2.7 <3" 205 | 206 | acorn-jsx@^5.1.0: 207 | version "5.1.0" 208 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.1.0.tgz#294adb71b57398b0680015f0a38c563ee1db5384" 209 | integrity sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw== 210 | 211 | acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: 212 | version "1.8.2" 213 | resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" 214 | integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== 215 | dependencies: 216 | acorn "^7.0.0" 217 | acorn-walk "^7.0.0" 218 | xtend "^4.0.2" 219 | 220 | acorn-walk@^7.0.0: 221 | version "7.0.0" 222 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.0.0.tgz#c8ba6f0f1aac4b0a9e32d1f0af12be769528f36b" 223 | integrity sha512-7Bv1We7ZGuU79zZbb6rRqcpxo3OY+zrdtloZWoyD8fmGX+FeXRjE+iuGkZjSXLVovLzrsvMGMy0EkwA0E0umxg== 224 | 225 | acorn@^7.0.0, acorn@^7.1.0: 226 | version "7.1.0" 227 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.0.tgz#949d36f2c292535da602283586c2477c57eb2d6c" 228 | integrity sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ== 229 | 230 | ajv@^6.10.0, ajv@^6.10.2: 231 | version "6.10.2" 232 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" 233 | integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== 234 | dependencies: 235 | fast-deep-equal "^2.0.1" 236 | fast-json-stable-stringify "^2.0.0" 237 | json-schema-traverse "^0.4.1" 238 | uri-js "^4.2.2" 239 | 240 | ansi-colors@3.2.3: 241 | version "3.2.3" 242 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" 243 | integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== 244 | 245 | ansi-escapes@^4.2.1: 246 | version "4.3.0" 247 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.0.tgz#a4ce2b33d6b214b7950d8595c212f12ac9cc569d" 248 | integrity sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg== 249 | dependencies: 250 | type-fest "^0.8.1" 251 | 252 | ansi-regex@^3.0.0: 253 | version "3.0.0" 254 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 255 | integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= 256 | 257 | ansi-regex@^4.1.0: 258 | version "4.1.0" 259 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 260 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 261 | 262 | ansi-regex@^5.0.0: 263 | version "5.0.0" 264 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 265 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 266 | 267 | ansi-styles@^3.2.0, ansi-styles@^3.2.1: 268 | version "3.2.1" 269 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 270 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 271 | dependencies: 272 | color-convert "^1.9.0" 273 | 274 | append-transform@^1.0.0: 275 | version "1.0.0" 276 | resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" 277 | integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== 278 | dependencies: 279 | default-require-extensions "^2.0.0" 280 | 281 | archy@^1.0.0: 282 | version "1.0.0" 283 | resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" 284 | integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= 285 | 286 | arg@^4.1.0: 287 | version "4.1.2" 288 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.2.tgz#e70c90579e02c63d80e3ad4e31d8bfdb8bd50064" 289 | integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg== 290 | 291 | argparse@^1.0.7: 292 | version "1.0.10" 293 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 294 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 295 | dependencies: 296 | sprintf-js "~1.0.2" 297 | 298 | array-includes@^3.0.3: 299 | version "3.1.0" 300 | resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.0.tgz#48a929ef4c6bb1fa6dc4a92c9b023a261b0ca404" 301 | integrity sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ== 302 | dependencies: 303 | define-properties "^1.1.3" 304 | es-abstract "^1.17.0-next.0" 305 | 306 | array.prototype.flat@^1.2.1: 307 | version "1.2.3" 308 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" 309 | integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== 310 | dependencies: 311 | define-properties "^1.1.3" 312 | es-abstract "^1.17.0-next.1" 313 | 314 | asn1.js@^4.0.0: 315 | version "4.10.1" 316 | resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" 317 | integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== 318 | dependencies: 319 | bn.js "^4.0.0" 320 | inherits "^2.0.1" 321 | minimalistic-assert "^1.0.0" 322 | 323 | assert@^1.4.0: 324 | version "1.5.0" 325 | resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" 326 | integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== 327 | dependencies: 328 | object-assign "^4.1.1" 329 | util "0.10.3" 330 | 331 | astral-regex@^1.0.0: 332 | version "1.0.0" 333 | resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" 334 | integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== 335 | 336 | balanced-match@^1.0.0: 337 | version "1.0.0" 338 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 339 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 340 | 341 | base64-js@^1.0.2: 342 | version "1.3.1" 343 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" 344 | integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== 345 | 346 | bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: 347 | version "4.11.8" 348 | resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" 349 | integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== 350 | 351 | brace-expansion@^1.1.7: 352 | version "1.1.11" 353 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 354 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 355 | dependencies: 356 | balanced-match "^1.0.0" 357 | concat-map "0.0.1" 358 | 359 | brorand@^1.0.1: 360 | version "1.1.0" 361 | resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" 362 | integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= 363 | 364 | browser-pack@^6.0.1: 365 | version "6.1.0" 366 | resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" 367 | integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== 368 | dependencies: 369 | JSONStream "^1.0.3" 370 | combine-source-map "~0.8.0" 371 | defined "^1.0.0" 372 | safe-buffer "^5.1.1" 373 | through2 "^2.0.0" 374 | umd "^3.0.0" 375 | 376 | browser-resolve@^1.11.0, browser-resolve@^1.7.0: 377 | version "1.11.3" 378 | resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" 379 | integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== 380 | dependencies: 381 | resolve "1.1.7" 382 | 383 | browser-stdout@1.3.1: 384 | version "1.3.1" 385 | resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" 386 | integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== 387 | 388 | browserify-aes@^1.0.0, browserify-aes@^1.0.4: 389 | version "1.2.0" 390 | resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" 391 | integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== 392 | dependencies: 393 | buffer-xor "^1.0.3" 394 | cipher-base "^1.0.0" 395 | create-hash "^1.1.0" 396 | evp_bytestokey "^1.0.3" 397 | inherits "^2.0.1" 398 | safe-buffer "^5.0.1" 399 | 400 | browserify-cipher@^1.0.0: 401 | version "1.0.1" 402 | resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" 403 | integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== 404 | dependencies: 405 | browserify-aes "^1.0.4" 406 | browserify-des "^1.0.0" 407 | evp_bytestokey "^1.0.0" 408 | 409 | browserify-des@^1.0.0: 410 | version "1.0.2" 411 | resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" 412 | integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== 413 | dependencies: 414 | cipher-base "^1.0.1" 415 | des.js "^1.0.0" 416 | inherits "^2.0.1" 417 | safe-buffer "^5.1.2" 418 | 419 | browserify-rsa@^4.0.0: 420 | version "4.0.1" 421 | resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" 422 | integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= 423 | dependencies: 424 | bn.js "^4.1.0" 425 | randombytes "^2.0.1" 426 | 427 | browserify-sign@^4.0.0: 428 | version "4.0.4" 429 | resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" 430 | integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= 431 | dependencies: 432 | bn.js "^4.1.1" 433 | browserify-rsa "^4.0.0" 434 | create-hash "^1.1.0" 435 | create-hmac "^1.1.2" 436 | elliptic "^6.0.0" 437 | inherits "^2.0.1" 438 | parse-asn1 "^5.0.0" 439 | 440 | browserify-zlib@~0.2.0: 441 | version "0.2.0" 442 | resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" 443 | integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== 444 | dependencies: 445 | pako "~1.0.5" 446 | 447 | browserify@^16.5.0: 448 | version "16.5.0" 449 | resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.0.tgz#a1c2bc0431bec11fd29151941582e3f645ede881" 450 | integrity sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw== 451 | dependencies: 452 | JSONStream "^1.0.3" 453 | assert "^1.4.0" 454 | browser-pack "^6.0.1" 455 | browser-resolve "^1.11.0" 456 | browserify-zlib "~0.2.0" 457 | buffer "^5.0.2" 458 | cached-path-relative "^1.0.0" 459 | concat-stream "^1.6.0" 460 | console-browserify "^1.1.0" 461 | constants-browserify "~1.0.0" 462 | crypto-browserify "^3.0.0" 463 | defined "^1.0.0" 464 | deps-sort "^2.0.0" 465 | domain-browser "^1.2.0" 466 | duplexer2 "~0.1.2" 467 | events "^2.0.0" 468 | glob "^7.1.0" 469 | has "^1.0.0" 470 | htmlescape "^1.1.0" 471 | https-browserify "^1.0.0" 472 | inherits "~2.0.1" 473 | insert-module-globals "^7.0.0" 474 | labeled-stream-splicer "^2.0.0" 475 | mkdirp "^0.5.0" 476 | module-deps "^6.0.0" 477 | os-browserify "~0.3.0" 478 | parents "^1.0.1" 479 | path-browserify "~0.0.0" 480 | process "~0.11.0" 481 | punycode "^1.3.2" 482 | querystring-es3 "~0.2.0" 483 | read-only-stream "^2.0.0" 484 | readable-stream "^2.0.2" 485 | resolve "^1.1.4" 486 | shasum "^1.0.0" 487 | shell-quote "^1.6.1" 488 | stream-browserify "^2.0.0" 489 | stream-http "^3.0.0" 490 | string_decoder "^1.1.1" 491 | subarg "^1.0.0" 492 | syntax-error "^1.1.1" 493 | through2 "^2.0.0" 494 | timers-browserify "^1.0.1" 495 | tty-browserify "0.0.1" 496 | url "~0.11.0" 497 | util "~0.10.1" 498 | vm-browserify "^1.0.0" 499 | xtend "^4.0.0" 500 | 501 | buffer-from@^1.0.0: 502 | version "1.1.1" 503 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 504 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== 505 | 506 | buffer-xor@^1.0.3: 507 | version "1.0.3" 508 | resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" 509 | integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= 510 | 511 | buffer@^5.0.2: 512 | version "5.4.3" 513 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.4.3.tgz#3fbc9c69eb713d323e3fc1a895eee0710c072115" 514 | integrity sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A== 515 | dependencies: 516 | base64-js "^1.0.2" 517 | ieee754 "^1.1.4" 518 | 519 | builtin-status-codes@^3.0.0: 520 | version "3.0.0" 521 | resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" 522 | integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= 523 | 524 | cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: 525 | version "1.0.2" 526 | resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" 527 | integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== 528 | 529 | caching-transform@^3.0.2: 530 | version "3.0.2" 531 | resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" 532 | integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== 533 | dependencies: 534 | hasha "^3.0.0" 535 | make-dir "^2.0.0" 536 | package-hash "^3.0.0" 537 | write-file-atomic "^2.4.2" 538 | 539 | callsites@^3.0.0: 540 | version "3.1.0" 541 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 542 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 543 | 544 | camelcase@^5.0.0: 545 | version "5.3.1" 546 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 547 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 548 | 549 | chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.2: 550 | version "2.4.2" 551 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 552 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 553 | dependencies: 554 | ansi-styles "^3.2.1" 555 | escape-string-regexp "^1.0.5" 556 | supports-color "^5.3.0" 557 | 558 | chardet@^0.7.0: 559 | version "0.7.0" 560 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" 561 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== 562 | 563 | cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: 564 | version "1.0.4" 565 | resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" 566 | integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== 567 | dependencies: 568 | inherits "^2.0.1" 569 | safe-buffer "^5.0.1" 570 | 571 | cli-cursor@^2.1.0: 572 | version "2.1.0" 573 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" 574 | integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= 575 | dependencies: 576 | restore-cursor "^2.0.0" 577 | 578 | cli-cursor@^3.1.0: 579 | version "3.1.0" 580 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" 581 | integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== 582 | dependencies: 583 | restore-cursor "^3.1.0" 584 | 585 | cli-spinners@^2.0.0: 586 | version "2.2.0" 587 | resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" 588 | integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== 589 | 590 | cli-width@^2.0.0: 591 | version "2.2.0" 592 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 593 | integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= 594 | 595 | cliui@^5.0.0: 596 | version "5.0.0" 597 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" 598 | integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== 599 | dependencies: 600 | string-width "^3.1.0" 601 | strip-ansi "^5.2.0" 602 | wrap-ansi "^5.1.0" 603 | 604 | clone@^1.0.2: 605 | version "1.0.4" 606 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 607 | integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= 608 | 609 | color-convert@^1.9.0: 610 | version "1.9.3" 611 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 612 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 613 | dependencies: 614 | color-name "1.1.3" 615 | 616 | color-name@1.1.3: 617 | version "1.1.3" 618 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 619 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 620 | 621 | combine-source-map@^0.8.0, combine-source-map@~0.8.0: 622 | version "0.8.0" 623 | resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" 624 | integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= 625 | dependencies: 626 | convert-source-map "~1.1.0" 627 | inline-source-map "~0.6.0" 628 | lodash.memoize "~3.0.3" 629 | source-map "~0.5.3" 630 | 631 | commander@~2.20.3: 632 | version "2.20.3" 633 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 634 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 635 | 636 | commondir@^1.0.1: 637 | version "1.0.1" 638 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 639 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 640 | 641 | concat-map@0.0.1: 642 | version "0.0.1" 643 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 644 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 645 | 646 | concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@~1.6.0: 647 | version "1.6.2" 648 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 649 | integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== 650 | dependencies: 651 | buffer-from "^1.0.0" 652 | inherits "^2.0.3" 653 | readable-stream "^2.2.2" 654 | typedarray "^0.0.6" 655 | 656 | console-browserify@^1.1.0: 657 | version "1.2.0" 658 | resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" 659 | integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== 660 | 661 | constants-browserify@~1.0.0: 662 | version "1.0.0" 663 | resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" 664 | integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= 665 | 666 | contains-path@^0.1.0: 667 | version "0.1.0" 668 | resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" 669 | integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= 670 | 671 | convert-source-map@^1.6.0: 672 | version "1.7.0" 673 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" 674 | integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== 675 | dependencies: 676 | safe-buffer "~5.1.1" 677 | 678 | convert-source-map@~1.1.0: 679 | version "1.1.3" 680 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" 681 | integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= 682 | 683 | core-util-is@~1.0.0: 684 | version "1.0.2" 685 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 686 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 687 | 688 | cp-file@^6.2.0: 689 | version "6.2.0" 690 | resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" 691 | integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== 692 | dependencies: 693 | graceful-fs "^4.1.2" 694 | make-dir "^2.0.0" 695 | nested-error-stacks "^2.0.0" 696 | pify "^4.0.1" 697 | safe-buffer "^5.0.1" 698 | 699 | create-ecdh@^4.0.0: 700 | version "4.0.3" 701 | resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" 702 | integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== 703 | dependencies: 704 | bn.js "^4.1.0" 705 | elliptic "^6.0.0" 706 | 707 | create-hash@^1.1.0, create-hash@^1.1.2: 708 | version "1.2.0" 709 | resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" 710 | integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== 711 | dependencies: 712 | cipher-base "^1.0.1" 713 | inherits "^2.0.1" 714 | md5.js "^1.3.4" 715 | ripemd160 "^2.0.1" 716 | sha.js "^2.4.0" 717 | 718 | create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: 719 | version "1.1.7" 720 | resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" 721 | integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== 722 | dependencies: 723 | cipher-base "^1.0.3" 724 | create-hash "^1.1.0" 725 | inherits "^2.0.1" 726 | ripemd160 "^2.0.0" 727 | safe-buffer "^5.0.1" 728 | sha.js "^2.4.8" 729 | 730 | cross-spawn@^4: 731 | version "4.0.2" 732 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" 733 | integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= 734 | dependencies: 735 | lru-cache "^4.0.1" 736 | which "^1.2.9" 737 | 738 | cross-spawn@^6.0.5: 739 | version "6.0.5" 740 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" 741 | integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== 742 | dependencies: 743 | nice-try "^1.0.4" 744 | path-key "^2.0.1" 745 | semver "^5.5.0" 746 | shebang-command "^1.2.0" 747 | which "^1.2.9" 748 | 749 | crypto-browserify@^3.0.0: 750 | version "3.12.0" 751 | resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" 752 | integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== 753 | dependencies: 754 | browserify-cipher "^1.0.0" 755 | browserify-sign "^4.0.0" 756 | create-ecdh "^4.0.0" 757 | create-hash "^1.1.0" 758 | create-hmac "^1.1.0" 759 | diffie-hellman "^5.0.0" 760 | inherits "^2.0.1" 761 | pbkdf2 "^3.0.3" 762 | public-encrypt "^4.0.0" 763 | randombytes "^2.0.0" 764 | randomfill "^1.0.3" 765 | 766 | dash-ast@^1.0.0: 767 | version "1.0.0" 768 | resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" 769 | integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== 770 | 771 | debug@3.2.6: 772 | version "3.2.6" 773 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" 774 | integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== 775 | dependencies: 776 | ms "^2.1.1" 777 | 778 | debug@^2.6.9: 779 | version "2.6.9" 780 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 781 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 782 | dependencies: 783 | ms "2.0.0" 784 | 785 | debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: 786 | version "4.1.1" 787 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" 788 | integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== 789 | dependencies: 790 | ms "^2.1.1" 791 | 792 | decamelize@^1.2.0: 793 | version "1.2.0" 794 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" 795 | integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= 796 | 797 | deep-is@~0.1.3: 798 | version "0.1.3" 799 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 800 | integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= 801 | 802 | default-require-extensions@^2.0.0: 803 | version "2.0.0" 804 | resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" 805 | integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= 806 | dependencies: 807 | strip-bom "^3.0.0" 808 | 809 | defaults@^1.0.3: 810 | version "1.0.3" 811 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 812 | integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= 813 | dependencies: 814 | clone "^1.0.2" 815 | 816 | define-properties@^1.1.2, define-properties@^1.1.3: 817 | version "1.1.3" 818 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" 819 | integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== 820 | dependencies: 821 | object-keys "^1.0.12" 822 | 823 | defined@^1.0.0: 824 | version "1.0.0" 825 | resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" 826 | integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= 827 | 828 | deps-sort@^2.0.0: 829 | version "2.0.1" 830 | resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" 831 | integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== 832 | dependencies: 833 | JSONStream "^1.0.3" 834 | shasum-object "^1.0.0" 835 | subarg "^1.0.0" 836 | through2 "^2.0.0" 837 | 838 | des.js@^1.0.0: 839 | version "1.0.1" 840 | resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" 841 | integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== 842 | dependencies: 843 | inherits "^2.0.1" 844 | minimalistic-assert "^1.0.0" 845 | 846 | detective@^5.2.0: 847 | version "5.2.0" 848 | resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" 849 | integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== 850 | dependencies: 851 | acorn-node "^1.6.1" 852 | defined "^1.0.0" 853 | minimist "^1.1.1" 854 | 855 | diff@3.5.0: 856 | version "3.5.0" 857 | resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" 858 | integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== 859 | 860 | diff@^4.0.1: 861 | version "4.0.1" 862 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" 863 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q== 864 | 865 | diffie-hellman@^5.0.0: 866 | version "5.0.3" 867 | resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" 868 | integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== 869 | dependencies: 870 | bn.js "^4.1.0" 871 | miller-rabin "^4.0.0" 872 | randombytes "^2.0.0" 873 | 874 | doctrine@1.5.0: 875 | version "1.5.0" 876 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 877 | integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= 878 | dependencies: 879 | esutils "^2.0.2" 880 | isarray "^1.0.0" 881 | 882 | doctrine@^3.0.0: 883 | version "3.0.0" 884 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 885 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 886 | dependencies: 887 | esutils "^2.0.2" 888 | 889 | domain-browser@^1.2.0: 890 | version "1.2.0" 891 | resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" 892 | integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== 893 | 894 | duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: 895 | version "0.1.4" 896 | resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" 897 | integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= 898 | dependencies: 899 | readable-stream "^2.0.2" 900 | 901 | elliptic@^6.0.0: 902 | version "6.5.2" 903 | resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" 904 | integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== 905 | dependencies: 906 | bn.js "^4.4.0" 907 | brorand "^1.0.1" 908 | hash.js "^1.0.0" 909 | hmac-drbg "^1.0.0" 910 | inherits "^2.0.1" 911 | minimalistic-assert "^1.0.0" 912 | minimalistic-crypto-utils "^1.0.0" 913 | 914 | emoji-regex@^7.0.1: 915 | version "7.0.3" 916 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 917 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 918 | 919 | emoji-regex@^8.0.0: 920 | version "8.0.0" 921 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 922 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 923 | 924 | error-ex@^1.2.0, error-ex@^1.3.1: 925 | version "1.3.2" 926 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 927 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 928 | dependencies: 929 | is-arrayish "^0.2.1" 930 | 931 | es-abstract@^1.17.0-next.0, es-abstract@^1.17.0-next.1: 932 | version "1.17.0-next.1" 933 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172" 934 | integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw== 935 | dependencies: 936 | es-to-primitive "^1.2.1" 937 | function-bind "^1.1.1" 938 | has "^1.0.3" 939 | has-symbols "^1.0.1" 940 | is-callable "^1.1.4" 941 | is-regex "^1.0.4" 942 | object-inspect "^1.7.0" 943 | object-keys "^1.1.1" 944 | object.assign "^4.1.0" 945 | string.prototype.trimleft "^2.1.0" 946 | string.prototype.trimright "^2.1.0" 947 | 948 | es-to-primitive@^1.2.1: 949 | version "1.2.1" 950 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" 951 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== 952 | dependencies: 953 | is-callable "^1.1.4" 954 | is-date-object "^1.0.1" 955 | is-symbol "^1.0.2" 956 | 957 | es6-error@^4.0.1: 958 | version "4.1.1" 959 | resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" 960 | integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== 961 | 962 | escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: 963 | version "1.0.5" 964 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 965 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 966 | 967 | eslint-config-prettier@^6.0.0: 968 | version "6.7.0" 969 | resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.7.0.tgz#9a876952e12df2b284adbd3440994bf1f39dfbb9" 970 | integrity sha512-FamQVKM3jjUVwhG4hEMnbtsq7xOIDm+SY5iBPfR8gKsJoAB2IQnNF+bk1+8Fy44Nq7PPJaLvkRxILYdJWoguKQ== 971 | dependencies: 972 | get-stdin "^6.0.0" 973 | 974 | eslint-import-resolver-node@^0.3.2: 975 | version "0.3.2" 976 | resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" 977 | integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== 978 | dependencies: 979 | debug "^2.6.9" 980 | resolve "^1.5.0" 981 | 982 | eslint-module-utils@^2.4.1: 983 | version "2.5.0" 984 | resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz#cdf0b40d623032274ccd2abd7e64c4e524d6e19c" 985 | integrity sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw== 986 | dependencies: 987 | debug "^2.6.9" 988 | pkg-dir "^2.0.0" 989 | 990 | eslint-plugin-import@^2.18.2: 991 | version "2.19.1" 992 | resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz#5654e10b7839d064dd0d46cd1b88ec2133a11448" 993 | integrity sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw== 994 | dependencies: 995 | array-includes "^3.0.3" 996 | array.prototype.flat "^1.2.1" 997 | contains-path "^0.1.0" 998 | debug "^2.6.9" 999 | doctrine "1.5.0" 1000 | eslint-import-resolver-node "^0.3.2" 1001 | eslint-module-utils "^2.4.1" 1002 | has "^1.0.3" 1003 | minimatch "^3.0.4" 1004 | object.values "^1.1.0" 1005 | read-pkg-up "^2.0.0" 1006 | resolve "^1.12.0" 1007 | 1008 | eslint-plugin-prettier@^3.1.0: 1009 | version "3.1.2" 1010 | resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz#432e5a667666ab84ce72f945c72f77d996a5c9ba" 1011 | integrity sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA== 1012 | dependencies: 1013 | prettier-linter-helpers "^1.0.0" 1014 | 1015 | eslint-scope@^5.0.0: 1016 | version "5.0.0" 1017 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" 1018 | integrity sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw== 1019 | dependencies: 1020 | esrecurse "^4.1.0" 1021 | estraverse "^4.1.1" 1022 | 1023 | eslint-utils@^1.4.3: 1024 | version "1.4.3" 1025 | resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" 1026 | integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== 1027 | dependencies: 1028 | eslint-visitor-keys "^1.1.0" 1029 | 1030 | eslint-visitor-keys@^1.1.0: 1031 | version "1.1.0" 1032 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" 1033 | integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== 1034 | 1035 | eslint@^6.2.0: 1036 | version "6.7.2" 1037 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.7.2.tgz#c17707ca4ad7b2d8af986a33feba71e18a9fecd1" 1038 | integrity sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng== 1039 | dependencies: 1040 | "@babel/code-frame" "^7.0.0" 1041 | ajv "^6.10.0" 1042 | chalk "^2.1.0" 1043 | cross-spawn "^6.0.5" 1044 | debug "^4.0.1" 1045 | doctrine "^3.0.0" 1046 | eslint-scope "^5.0.0" 1047 | eslint-utils "^1.4.3" 1048 | eslint-visitor-keys "^1.1.0" 1049 | espree "^6.1.2" 1050 | esquery "^1.0.1" 1051 | esutils "^2.0.2" 1052 | file-entry-cache "^5.0.1" 1053 | functional-red-black-tree "^1.0.1" 1054 | glob-parent "^5.0.0" 1055 | globals "^12.1.0" 1056 | ignore "^4.0.6" 1057 | import-fresh "^3.0.0" 1058 | imurmurhash "^0.1.4" 1059 | inquirer "^7.0.0" 1060 | is-glob "^4.0.0" 1061 | js-yaml "^3.13.1" 1062 | json-stable-stringify-without-jsonify "^1.0.1" 1063 | levn "^0.3.0" 1064 | lodash "^4.17.14" 1065 | minimatch "^3.0.4" 1066 | mkdirp "^0.5.1" 1067 | natural-compare "^1.4.0" 1068 | optionator "^0.8.3" 1069 | progress "^2.0.0" 1070 | regexpp "^2.0.1" 1071 | semver "^6.1.2" 1072 | strip-ansi "^5.2.0" 1073 | strip-json-comments "^3.0.1" 1074 | table "^5.2.3" 1075 | text-table "^0.2.0" 1076 | v8-compile-cache "^2.0.3" 1077 | 1078 | espree@^6.1.2: 1079 | version "6.1.2" 1080 | resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" 1081 | integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== 1082 | dependencies: 1083 | acorn "^7.1.0" 1084 | acorn-jsx "^5.1.0" 1085 | eslint-visitor-keys "^1.1.0" 1086 | 1087 | esprima@^4.0.0: 1088 | version "4.0.1" 1089 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1090 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1091 | 1092 | esquery@^1.0.1: 1093 | version "1.0.1" 1094 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" 1095 | integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== 1096 | dependencies: 1097 | estraverse "^4.0.0" 1098 | 1099 | esrecurse@^4.1.0: 1100 | version "4.2.1" 1101 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 1102 | integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== 1103 | dependencies: 1104 | estraverse "^4.1.0" 1105 | 1106 | estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: 1107 | version "4.3.0" 1108 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 1109 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 1110 | 1111 | esutils@^2.0.2: 1112 | version "2.0.3" 1113 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 1114 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 1115 | 1116 | events@^2.0.0: 1117 | version "2.1.0" 1118 | resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" 1119 | integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== 1120 | 1121 | evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: 1122 | version "1.0.3" 1123 | resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" 1124 | integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== 1125 | dependencies: 1126 | md5.js "^1.3.4" 1127 | safe-buffer "^5.1.1" 1128 | 1129 | external-editor@^3.0.3: 1130 | version "3.1.0" 1131 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" 1132 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== 1133 | dependencies: 1134 | chardet "^0.7.0" 1135 | iconv-lite "^0.4.24" 1136 | tmp "^0.0.33" 1137 | 1138 | fast-deep-equal@^2.0.1: 1139 | version "2.0.1" 1140 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" 1141 | integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= 1142 | 1143 | fast-diff@^1.1.2: 1144 | version "1.2.0" 1145 | resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" 1146 | integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== 1147 | 1148 | fast-json-stable-stringify@^2.0.0: 1149 | version "2.1.0" 1150 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1151 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1152 | 1153 | fast-levenshtein@~2.0.6: 1154 | version "2.0.6" 1155 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 1156 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 1157 | 1158 | fast-safe-stringify@^2.0.7: 1159 | version "2.0.7" 1160 | resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" 1161 | integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== 1162 | 1163 | figures@^3.0.0: 1164 | version "3.1.0" 1165 | resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec" 1166 | integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg== 1167 | dependencies: 1168 | escape-string-regexp "^1.0.5" 1169 | 1170 | file-entry-cache@^5.0.1: 1171 | version "5.0.1" 1172 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" 1173 | integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== 1174 | dependencies: 1175 | flat-cache "^2.0.1" 1176 | 1177 | find-cache-dir@^2.1.0: 1178 | version "2.1.0" 1179 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" 1180 | integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== 1181 | dependencies: 1182 | commondir "^1.0.1" 1183 | make-dir "^2.0.0" 1184 | pkg-dir "^3.0.0" 1185 | 1186 | find-up@3.0.0, find-up@^3.0.0: 1187 | version "3.0.0" 1188 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" 1189 | integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== 1190 | dependencies: 1191 | locate-path "^3.0.0" 1192 | 1193 | find-up@^2.0.0, find-up@^2.1.0: 1194 | version "2.1.0" 1195 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" 1196 | integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= 1197 | dependencies: 1198 | locate-path "^2.0.0" 1199 | 1200 | flat-cache@^2.0.1: 1201 | version "2.0.1" 1202 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" 1203 | integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== 1204 | dependencies: 1205 | flatted "^2.0.0" 1206 | rimraf "2.6.3" 1207 | write "1.0.3" 1208 | 1209 | flat@^4.1.0: 1210 | version "4.1.0" 1211 | resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.0.tgz#090bec8b05e39cba309747f1d588f04dbaf98db2" 1212 | integrity sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw== 1213 | dependencies: 1214 | is-buffer "~2.0.3" 1215 | 1216 | flatted@^2.0.0: 1217 | version "2.0.1" 1218 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" 1219 | integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== 1220 | 1221 | foreground-child@^1.5.6: 1222 | version "1.5.6" 1223 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" 1224 | integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= 1225 | dependencies: 1226 | cross-spawn "^4" 1227 | signal-exit "^3.0.0" 1228 | 1229 | fs-extra@^7.0.1: 1230 | version "7.0.1" 1231 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" 1232 | integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== 1233 | dependencies: 1234 | graceful-fs "^4.1.2" 1235 | jsonfile "^4.0.0" 1236 | universalify "^0.1.0" 1237 | 1238 | fs.realpath@^1.0.0: 1239 | version "1.0.0" 1240 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1241 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 1242 | 1243 | function-bind@^1.1.1: 1244 | version "1.1.1" 1245 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 1246 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 1247 | 1248 | functional-red-black-tree@^1.0.1: 1249 | version "1.0.1" 1250 | resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" 1251 | integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= 1252 | 1253 | get-assigned-identifiers@^1.2.0: 1254 | version "1.2.0" 1255 | resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" 1256 | integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== 1257 | 1258 | get-caller-file@^2.0.1: 1259 | version "2.0.5" 1260 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1261 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1262 | 1263 | get-stdin@^6.0.0: 1264 | version "6.0.0" 1265 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" 1266 | integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== 1267 | 1268 | glob-parent@^5.0.0: 1269 | version "5.1.0" 1270 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.0.tgz#5f4c1d1e748d30cd73ad2944b3577a81b081e8c2" 1271 | integrity sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw== 1272 | dependencies: 1273 | is-glob "^4.0.1" 1274 | 1275 | glob@7.1.3: 1276 | version "7.1.3" 1277 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" 1278 | integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== 1279 | dependencies: 1280 | fs.realpath "^1.0.0" 1281 | inflight "^1.0.4" 1282 | inherits "2" 1283 | minimatch "^3.0.4" 1284 | once "^1.3.0" 1285 | path-is-absolute "^1.0.0" 1286 | 1287 | glob@^7.1.0, glob@^7.1.3, glob@^7.1.6: 1288 | version "7.1.6" 1289 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" 1290 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== 1291 | dependencies: 1292 | fs.realpath "^1.0.0" 1293 | inflight "^1.0.4" 1294 | inherits "2" 1295 | minimatch "^3.0.4" 1296 | once "^1.3.0" 1297 | path-is-absolute "^1.0.0" 1298 | 1299 | globals@^11.1.0: 1300 | version "11.12.0" 1301 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1302 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1303 | 1304 | globals@^12.1.0: 1305 | version "12.3.0" 1306 | resolved "https://registry.yarnpkg.com/globals/-/globals-12.3.0.tgz#1e564ee5c4dded2ab098b0f88f24702a3c56be13" 1307 | integrity sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw== 1308 | dependencies: 1309 | type-fest "^0.8.1" 1310 | 1311 | graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: 1312 | version "4.2.3" 1313 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" 1314 | integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== 1315 | 1316 | growl@1.10.5: 1317 | version "1.10.5" 1318 | resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" 1319 | integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== 1320 | 1321 | handlebars@^4.1.2: 1322 | version "4.5.3" 1323 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" 1324 | integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== 1325 | dependencies: 1326 | neo-async "^2.6.0" 1327 | optimist "^0.6.1" 1328 | source-map "^0.6.1" 1329 | optionalDependencies: 1330 | uglify-js "^3.1.4" 1331 | 1332 | has-flag@^3.0.0: 1333 | version "3.0.0" 1334 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 1335 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 1336 | 1337 | has-symbols@^1.0.0, has-symbols@^1.0.1: 1338 | version "1.0.1" 1339 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" 1340 | integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== 1341 | 1342 | has@^1.0.0, has@^1.0.3: 1343 | version "1.0.3" 1344 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 1345 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 1346 | dependencies: 1347 | function-bind "^1.1.1" 1348 | 1349 | hash-base@^3.0.0: 1350 | version "3.0.4" 1351 | resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" 1352 | integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= 1353 | dependencies: 1354 | inherits "^2.0.1" 1355 | safe-buffer "^5.0.1" 1356 | 1357 | hash.js@^1.0.0, hash.js@^1.0.3: 1358 | version "1.1.7" 1359 | resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" 1360 | integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== 1361 | dependencies: 1362 | inherits "^2.0.3" 1363 | minimalistic-assert "^1.0.1" 1364 | 1365 | hasha@^3.0.0: 1366 | version "3.0.0" 1367 | resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" 1368 | integrity sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk= 1369 | dependencies: 1370 | is-stream "^1.0.1" 1371 | 1372 | he@1.2.0: 1373 | version "1.2.0" 1374 | resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" 1375 | integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== 1376 | 1377 | hmac-drbg@^1.0.0: 1378 | version "1.0.1" 1379 | resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" 1380 | integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= 1381 | dependencies: 1382 | hash.js "^1.0.3" 1383 | minimalistic-assert "^1.0.0" 1384 | minimalistic-crypto-utils "^1.0.1" 1385 | 1386 | hosted-git-info@^2.1.4: 1387 | version "2.8.5" 1388 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" 1389 | integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== 1390 | 1391 | htmlescape@^1.1.0: 1392 | version "1.1.1" 1393 | resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" 1394 | integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= 1395 | 1396 | https-browserify@^1.0.0: 1397 | version "1.0.0" 1398 | resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" 1399 | integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= 1400 | 1401 | iconv-lite@^0.4.24: 1402 | version "0.4.24" 1403 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 1404 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 1405 | dependencies: 1406 | safer-buffer ">= 2.1.2 < 3" 1407 | 1408 | ieee754@^1.1.4: 1409 | version "1.1.13" 1410 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" 1411 | integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== 1412 | 1413 | ignore@^4.0.6: 1414 | version "4.0.6" 1415 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" 1416 | integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== 1417 | 1418 | import-fresh@^3.0.0: 1419 | version "3.2.1" 1420 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" 1421 | integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== 1422 | dependencies: 1423 | parent-module "^1.0.0" 1424 | resolve-from "^4.0.0" 1425 | 1426 | imurmurhash@^0.1.4: 1427 | version "0.1.4" 1428 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1429 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1430 | 1431 | inflight@^1.0.4: 1432 | version "1.0.6" 1433 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1434 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1435 | dependencies: 1436 | once "^1.3.0" 1437 | wrappy "1" 1438 | 1439 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: 1440 | version "2.0.4" 1441 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1442 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1443 | 1444 | inherits@2.0.1: 1445 | version "2.0.1" 1446 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" 1447 | integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= 1448 | 1449 | inherits@2.0.3: 1450 | version "2.0.3" 1451 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1452 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 1453 | 1454 | inline-source-map@~0.6.0: 1455 | version "0.6.2" 1456 | resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" 1457 | integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= 1458 | dependencies: 1459 | source-map "~0.5.3" 1460 | 1461 | inquirer@^7.0.0: 1462 | version "7.0.1" 1463 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.1.tgz#13f7980eedc73c689feff3994b109c4e799c6ebb" 1464 | integrity sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw== 1465 | dependencies: 1466 | ansi-escapes "^4.2.1" 1467 | chalk "^2.4.2" 1468 | cli-cursor "^3.1.0" 1469 | cli-width "^2.0.0" 1470 | external-editor "^3.0.3" 1471 | figures "^3.0.0" 1472 | lodash "^4.17.15" 1473 | mute-stream "0.0.8" 1474 | run-async "^2.2.0" 1475 | rxjs "^6.5.3" 1476 | string-width "^4.1.0" 1477 | strip-ansi "^5.1.0" 1478 | through "^2.3.6" 1479 | 1480 | insert-module-globals@^7.0.0: 1481 | version "7.2.0" 1482 | resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" 1483 | integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== 1484 | dependencies: 1485 | JSONStream "^1.0.3" 1486 | acorn-node "^1.5.2" 1487 | combine-source-map "^0.8.0" 1488 | concat-stream "^1.6.1" 1489 | is-buffer "^1.1.0" 1490 | path-is-absolute "^1.0.1" 1491 | process "~0.11.0" 1492 | through2 "^2.0.0" 1493 | undeclared-identifiers "^1.1.2" 1494 | xtend "^4.0.0" 1495 | 1496 | is-arrayish@^0.2.1: 1497 | version "0.2.1" 1498 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1499 | integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= 1500 | 1501 | is-buffer@^1.1.0: 1502 | version "1.1.6" 1503 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1504 | integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== 1505 | 1506 | is-buffer@~2.0.3: 1507 | version "2.0.4" 1508 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" 1509 | integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== 1510 | 1511 | is-callable@^1.1.4: 1512 | version "1.1.4" 1513 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" 1514 | integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== 1515 | 1516 | is-date-object@^1.0.1: 1517 | version "1.0.1" 1518 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" 1519 | integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= 1520 | 1521 | is-extglob@^2.1.1: 1522 | version "2.1.1" 1523 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1524 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1525 | 1526 | is-fullwidth-code-point@^2.0.0: 1527 | version "2.0.0" 1528 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1529 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 1530 | 1531 | is-fullwidth-code-point@^3.0.0: 1532 | version "3.0.0" 1533 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1534 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1535 | 1536 | is-glob@^4.0.0, is-glob@^4.0.1: 1537 | version "4.0.1" 1538 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1539 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1540 | dependencies: 1541 | is-extglob "^2.1.1" 1542 | 1543 | is-promise@^2.1.0: 1544 | version "2.1.0" 1545 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" 1546 | integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= 1547 | 1548 | is-regex@^1.0.4: 1549 | version "1.0.5" 1550 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" 1551 | integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== 1552 | dependencies: 1553 | has "^1.0.3" 1554 | 1555 | is-stream@^1.0.1: 1556 | version "1.1.0" 1557 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1558 | integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= 1559 | 1560 | is-symbol@^1.0.2: 1561 | version "1.0.3" 1562 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" 1563 | integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== 1564 | dependencies: 1565 | has-symbols "^1.0.1" 1566 | 1567 | isarray@^1.0.0, isarray@~1.0.0: 1568 | version "1.0.0" 1569 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1570 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1571 | 1572 | isexe@^2.0.0: 1573 | version "2.0.0" 1574 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1575 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1576 | 1577 | istanbul-lib-coverage@^2.0.5: 1578 | version "2.0.5" 1579 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" 1580 | integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== 1581 | 1582 | istanbul-lib-hook@^2.0.7: 1583 | version "2.0.7" 1584 | resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" 1585 | integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== 1586 | dependencies: 1587 | append-transform "^1.0.0" 1588 | 1589 | istanbul-lib-instrument@^3.3.0: 1590 | version "3.3.0" 1591 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" 1592 | integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== 1593 | dependencies: 1594 | "@babel/generator" "^7.4.0" 1595 | "@babel/parser" "^7.4.3" 1596 | "@babel/template" "^7.4.0" 1597 | "@babel/traverse" "^7.4.3" 1598 | "@babel/types" "^7.4.0" 1599 | istanbul-lib-coverage "^2.0.5" 1600 | semver "^6.0.0" 1601 | 1602 | istanbul-lib-report@^2.0.8: 1603 | version "2.0.8" 1604 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" 1605 | integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== 1606 | dependencies: 1607 | istanbul-lib-coverage "^2.0.5" 1608 | make-dir "^2.1.0" 1609 | supports-color "^6.1.0" 1610 | 1611 | istanbul-lib-source-maps@^3.0.6: 1612 | version "3.0.6" 1613 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" 1614 | integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== 1615 | dependencies: 1616 | debug "^4.1.1" 1617 | istanbul-lib-coverage "^2.0.5" 1618 | make-dir "^2.1.0" 1619 | rimraf "^2.6.3" 1620 | source-map "^0.6.1" 1621 | 1622 | istanbul-reports@^2.2.4: 1623 | version "2.2.6" 1624 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.6.tgz#7b4f2660d82b29303a8fe6091f8ca4bf058da1af" 1625 | integrity sha512-SKi4rnMyLBKe0Jy2uUdx28h8oG7ph2PPuQPvIAh31d+Ci+lSiEu4C+h3oBPuJ9+mPKhOyW0M8gY4U5NM1WLeXA== 1626 | dependencies: 1627 | handlebars "^4.1.2" 1628 | 1629 | js-tokens@^4.0.0: 1630 | version "4.0.0" 1631 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1632 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1633 | 1634 | js-yaml@3.13.1, js-yaml@^3.13.1: 1635 | version "3.13.1" 1636 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" 1637 | integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== 1638 | dependencies: 1639 | argparse "^1.0.7" 1640 | esprima "^4.0.0" 1641 | 1642 | jsesc@^2.5.1: 1643 | version "2.5.2" 1644 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1645 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1646 | 1647 | json-parse-better-errors@^1.0.1: 1648 | version "1.0.2" 1649 | resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" 1650 | integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== 1651 | 1652 | json-schema-traverse@^0.4.1: 1653 | version "0.4.1" 1654 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1655 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1656 | 1657 | json-stable-stringify-without-jsonify@^1.0.1: 1658 | version "1.0.1" 1659 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1660 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1661 | 1662 | json-stable-stringify@~0.0.0: 1663 | version "0.0.1" 1664 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" 1665 | integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= 1666 | dependencies: 1667 | jsonify "~0.0.0" 1668 | 1669 | jsonfile@^4.0.0: 1670 | version "4.0.0" 1671 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" 1672 | integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= 1673 | optionalDependencies: 1674 | graceful-fs "^4.1.6" 1675 | 1676 | jsonify@~0.0.0: 1677 | version "0.0.0" 1678 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1679 | integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= 1680 | 1681 | jsonparse@^1.2.0: 1682 | version "1.3.1" 1683 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" 1684 | integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= 1685 | 1686 | labeled-stream-splicer@^2.0.0: 1687 | version "2.0.2" 1688 | resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" 1689 | integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== 1690 | dependencies: 1691 | inherits "^2.0.1" 1692 | stream-splicer "^2.0.0" 1693 | 1694 | levn@^0.3.0, levn@~0.3.0: 1695 | version "0.3.0" 1696 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1697 | integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= 1698 | dependencies: 1699 | prelude-ls "~1.1.2" 1700 | type-check "~0.3.2" 1701 | 1702 | load-json-file@^2.0.0: 1703 | version "2.0.0" 1704 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" 1705 | integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= 1706 | dependencies: 1707 | graceful-fs "^4.1.2" 1708 | parse-json "^2.2.0" 1709 | pify "^2.0.0" 1710 | strip-bom "^3.0.0" 1711 | 1712 | load-json-file@^4.0.0: 1713 | version "4.0.0" 1714 | resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" 1715 | integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= 1716 | dependencies: 1717 | graceful-fs "^4.1.2" 1718 | parse-json "^4.0.0" 1719 | pify "^3.0.0" 1720 | strip-bom "^3.0.0" 1721 | 1722 | locate-path@^2.0.0: 1723 | version "2.0.0" 1724 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" 1725 | integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= 1726 | dependencies: 1727 | p-locate "^2.0.0" 1728 | path-exists "^3.0.0" 1729 | 1730 | locate-path@^3.0.0: 1731 | version "3.0.0" 1732 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" 1733 | integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== 1734 | dependencies: 1735 | p-locate "^3.0.0" 1736 | path-exists "^3.0.0" 1737 | 1738 | lodash.flattendeep@^4.4.0: 1739 | version "4.4.0" 1740 | resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" 1741 | integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= 1742 | 1743 | lodash.memoize@~3.0.3: 1744 | version "3.0.4" 1745 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" 1746 | integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= 1747 | 1748 | lodash.unescape@4.0.1: 1749 | version "4.0.1" 1750 | resolved "https://registry.yarnpkg.com/lodash.unescape/-/lodash.unescape-4.0.1.tgz#bf2249886ce514cda112fae9218cdc065211fc9c" 1751 | integrity sha1-vyJJiGzlFM2hEvrpIYzcBlIR/Jw= 1752 | 1753 | lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: 1754 | version "4.17.15" 1755 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" 1756 | integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== 1757 | 1758 | log-symbols@2.2.0, log-symbols@^2.2.0: 1759 | version "2.2.0" 1760 | resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" 1761 | integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== 1762 | dependencies: 1763 | chalk "^2.0.1" 1764 | 1765 | lru-cache@^4.0.1: 1766 | version "4.1.5" 1767 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1768 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1769 | dependencies: 1770 | pseudomap "^1.0.2" 1771 | yallist "^2.1.2" 1772 | 1773 | make-dir@^2.0.0, make-dir@^2.1.0: 1774 | version "2.1.0" 1775 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" 1776 | integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== 1777 | dependencies: 1778 | pify "^4.0.1" 1779 | semver "^5.6.0" 1780 | 1781 | make-error@^1.1.1: 1782 | version "1.3.5" 1783 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" 1784 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== 1785 | 1786 | md5.js@^1.3.4: 1787 | version "1.3.5" 1788 | resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" 1789 | integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== 1790 | dependencies: 1791 | hash-base "^3.0.0" 1792 | inherits "^2.0.1" 1793 | safe-buffer "^5.1.2" 1794 | 1795 | merge-source-map@^1.1.0: 1796 | version "1.1.0" 1797 | resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" 1798 | integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== 1799 | dependencies: 1800 | source-map "^0.6.1" 1801 | 1802 | miller-rabin@^4.0.0: 1803 | version "4.0.1" 1804 | resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" 1805 | integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== 1806 | dependencies: 1807 | bn.js "^4.0.0" 1808 | brorand "^1.0.1" 1809 | 1810 | mimic-fn@^1.0.0: 1811 | version "1.2.0" 1812 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" 1813 | integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== 1814 | 1815 | mimic-fn@^2.1.0: 1816 | version "2.1.0" 1817 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 1818 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 1819 | 1820 | minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: 1821 | version "1.0.1" 1822 | resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" 1823 | integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== 1824 | 1825 | minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: 1826 | version "1.0.1" 1827 | resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" 1828 | integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= 1829 | 1830 | minimatch@3.0.4, minimatch@^3.0.4: 1831 | version "3.0.4" 1832 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1833 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1834 | dependencies: 1835 | brace-expansion "^1.1.7" 1836 | 1837 | minimist@0.0.8: 1838 | version "0.0.8" 1839 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1840 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= 1841 | 1842 | minimist@^1.1.0, minimist@^1.1.1: 1843 | version "1.2.0" 1844 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1845 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1846 | 1847 | minimist@~0.0.1: 1848 | version "0.0.10" 1849 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" 1850 | integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= 1851 | 1852 | mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: 1853 | version "0.5.1" 1854 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1855 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= 1856 | dependencies: 1857 | minimist "0.0.8" 1858 | 1859 | mocha@^6.2.0: 1860 | version "6.2.2" 1861 | resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.2.tgz#5d8987e28940caf8957a7d7664b910dc5b2fea20" 1862 | integrity sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A== 1863 | dependencies: 1864 | ansi-colors "3.2.3" 1865 | browser-stdout "1.3.1" 1866 | debug "3.2.6" 1867 | diff "3.5.0" 1868 | escape-string-regexp "1.0.5" 1869 | find-up "3.0.0" 1870 | glob "7.1.3" 1871 | growl "1.10.5" 1872 | he "1.2.0" 1873 | js-yaml "3.13.1" 1874 | log-symbols "2.2.0" 1875 | minimatch "3.0.4" 1876 | mkdirp "0.5.1" 1877 | ms "2.1.1" 1878 | node-environment-flags "1.0.5" 1879 | object.assign "4.1.0" 1880 | strip-json-comments "2.0.1" 1881 | supports-color "6.0.0" 1882 | which "1.3.1" 1883 | wide-align "1.1.3" 1884 | yargs "13.3.0" 1885 | yargs-parser "13.1.1" 1886 | yargs-unparser "1.6.0" 1887 | 1888 | module-deps@^6.0.0: 1889 | version "6.2.2" 1890 | resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.2.tgz#d8a15c2265dfc119153c29bb47386987d0ee423b" 1891 | integrity sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w== 1892 | dependencies: 1893 | JSONStream "^1.0.3" 1894 | browser-resolve "^1.7.0" 1895 | cached-path-relative "^1.0.2" 1896 | concat-stream "~1.6.0" 1897 | defined "^1.0.0" 1898 | detective "^5.2.0" 1899 | duplexer2 "^0.1.2" 1900 | inherits "^2.0.1" 1901 | parents "^1.0.0" 1902 | readable-stream "^2.0.2" 1903 | resolve "^1.4.0" 1904 | stream-combiner2 "^1.1.1" 1905 | subarg "^1.0.0" 1906 | through2 "^2.0.0" 1907 | xtend "^4.0.0" 1908 | 1909 | ms@2.0.0: 1910 | version "2.0.0" 1911 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1912 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 1913 | 1914 | ms@2.1.1: 1915 | version "2.1.1" 1916 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 1917 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 1918 | 1919 | ms@^2.1.1: 1920 | version "2.1.2" 1921 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1922 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1923 | 1924 | mute-stream@0.0.8: 1925 | version "0.0.8" 1926 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" 1927 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== 1928 | 1929 | nan@^2.14.0: 1930 | version "2.14.0" 1931 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" 1932 | integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== 1933 | 1934 | natural-compare@^1.4.0: 1935 | version "1.4.0" 1936 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1937 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1938 | 1939 | neo-async@^2.6.0: 1940 | version "2.6.1" 1941 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" 1942 | integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== 1943 | 1944 | nested-error-stacks@^2.0.0: 1945 | version "2.1.0" 1946 | resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz#0fbdcf3e13fe4994781280524f8b96b0cdff9c61" 1947 | integrity sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug== 1948 | 1949 | nice-try@^1.0.4: 1950 | version "1.0.5" 1951 | resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" 1952 | integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== 1953 | 1954 | node-environment-flags@1.0.5: 1955 | version "1.0.5" 1956 | resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" 1957 | integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== 1958 | dependencies: 1959 | object.getownpropertydescriptors "^2.0.3" 1960 | semver "^5.7.0" 1961 | 1962 | node-fetch@^2.3.0: 1963 | version "2.6.0" 1964 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" 1965 | integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== 1966 | 1967 | node-pty@^0.9.0: 1968 | version "0.9.0" 1969 | resolved "https://registry.yarnpkg.com/node-pty/-/node-pty-0.9.0.tgz#8f9bcc0d1c5b970a3184ffd533d862c7eb6590a6" 1970 | integrity sha512-MBnCQl83FTYOu7B4xWw10AW77AAh7ThCE1VXEv+JeWj8mSpGo+0bwgsV+b23ljBFwEM9OmsOv3kM27iUPPm84g== 1971 | dependencies: 1972 | nan "^2.14.0" 1973 | 1974 | normalize-package-data@^2.3.2: 1975 | version "2.5.0" 1976 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" 1977 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== 1978 | dependencies: 1979 | hosted-git-info "^2.1.4" 1980 | resolve "^1.10.0" 1981 | semver "2 || 3 || 4 || 5" 1982 | validate-npm-package-license "^3.0.1" 1983 | 1984 | nyc@^14.1.1: 1985 | version "14.1.1" 1986 | resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb" 1987 | integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw== 1988 | dependencies: 1989 | archy "^1.0.0" 1990 | caching-transform "^3.0.2" 1991 | convert-source-map "^1.6.0" 1992 | cp-file "^6.2.0" 1993 | find-cache-dir "^2.1.0" 1994 | find-up "^3.0.0" 1995 | foreground-child "^1.5.6" 1996 | glob "^7.1.3" 1997 | istanbul-lib-coverage "^2.0.5" 1998 | istanbul-lib-hook "^2.0.7" 1999 | istanbul-lib-instrument "^3.3.0" 2000 | istanbul-lib-report "^2.0.8" 2001 | istanbul-lib-source-maps "^3.0.6" 2002 | istanbul-reports "^2.2.4" 2003 | js-yaml "^3.13.1" 2004 | make-dir "^2.1.0" 2005 | merge-source-map "^1.1.0" 2006 | resolve-from "^4.0.0" 2007 | rimraf "^2.6.3" 2008 | signal-exit "^3.0.2" 2009 | spawn-wrap "^1.4.2" 2010 | test-exclude "^5.2.3" 2011 | uuid "^3.3.2" 2012 | yargs "^13.2.2" 2013 | yargs-parser "^13.0.0" 2014 | 2015 | object-assign@^4.1.1: 2016 | version "4.1.1" 2017 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 2018 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 2019 | 2020 | object-inspect@^1.7.0: 2021 | version "1.7.0" 2022 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" 2023 | integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== 2024 | 2025 | object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: 2026 | version "1.1.1" 2027 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" 2028 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== 2029 | 2030 | object.assign@4.1.0, object.assign@^4.1.0: 2031 | version "4.1.0" 2032 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" 2033 | integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== 2034 | dependencies: 2035 | define-properties "^1.1.2" 2036 | function-bind "^1.1.1" 2037 | has-symbols "^1.0.0" 2038 | object-keys "^1.0.11" 2039 | 2040 | object.getownpropertydescriptors@^2.0.3: 2041 | version "2.1.0" 2042 | resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" 2043 | integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== 2044 | dependencies: 2045 | define-properties "^1.1.3" 2046 | es-abstract "^1.17.0-next.1" 2047 | 2048 | object.values@^1.1.0: 2049 | version "1.1.1" 2050 | resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" 2051 | integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== 2052 | dependencies: 2053 | define-properties "^1.1.3" 2054 | es-abstract "^1.17.0-next.1" 2055 | function-bind "^1.1.1" 2056 | has "^1.0.3" 2057 | 2058 | once@^1.3.0: 2059 | version "1.4.0" 2060 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2061 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 2062 | dependencies: 2063 | wrappy "1" 2064 | 2065 | onetime@^2.0.0: 2066 | version "2.0.1" 2067 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" 2068 | integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= 2069 | dependencies: 2070 | mimic-fn "^1.0.0" 2071 | 2072 | onetime@^5.1.0: 2073 | version "5.1.0" 2074 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" 2075 | integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== 2076 | dependencies: 2077 | mimic-fn "^2.1.0" 2078 | 2079 | optimist@^0.6.1: 2080 | version "0.6.1" 2081 | resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" 2082 | integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= 2083 | dependencies: 2084 | minimist "~0.0.1" 2085 | wordwrap "~0.0.2" 2086 | 2087 | optionator@^0.8.3: 2088 | version "0.8.3" 2089 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" 2090 | integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== 2091 | dependencies: 2092 | deep-is "~0.1.3" 2093 | fast-levenshtein "~2.0.6" 2094 | levn "~0.3.0" 2095 | prelude-ls "~1.1.2" 2096 | type-check "~0.3.2" 2097 | word-wrap "~1.2.3" 2098 | 2099 | ora@^3.2.0: 2100 | version "3.4.0" 2101 | resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" 2102 | integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== 2103 | dependencies: 2104 | chalk "^2.4.2" 2105 | cli-cursor "^2.1.0" 2106 | cli-spinners "^2.0.0" 2107 | log-symbols "^2.2.0" 2108 | strip-ansi "^5.2.0" 2109 | wcwidth "^1.0.1" 2110 | 2111 | os-browserify@~0.3.0: 2112 | version "0.3.0" 2113 | resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" 2114 | integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= 2115 | 2116 | os-homedir@^1.0.1: 2117 | version "1.0.2" 2118 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 2119 | integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= 2120 | 2121 | os-tmpdir@~1.0.2: 2122 | version "1.0.2" 2123 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 2124 | integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= 2125 | 2126 | p-limit@^1.1.0: 2127 | version "1.3.0" 2128 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" 2129 | integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== 2130 | dependencies: 2131 | p-try "^1.0.0" 2132 | 2133 | p-limit@^2.0.0: 2134 | version "2.2.1" 2135 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" 2136 | integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== 2137 | dependencies: 2138 | p-try "^2.0.0" 2139 | 2140 | p-locate@^2.0.0: 2141 | version "2.0.0" 2142 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" 2143 | integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= 2144 | dependencies: 2145 | p-limit "^1.1.0" 2146 | 2147 | p-locate@^3.0.0: 2148 | version "3.0.0" 2149 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" 2150 | integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== 2151 | dependencies: 2152 | p-limit "^2.0.0" 2153 | 2154 | p-try@^1.0.0: 2155 | version "1.0.0" 2156 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" 2157 | integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= 2158 | 2159 | p-try@^2.0.0: 2160 | version "2.2.0" 2161 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2162 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2163 | 2164 | package-hash@^3.0.0: 2165 | version "3.0.0" 2166 | resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" 2167 | integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== 2168 | dependencies: 2169 | graceful-fs "^4.1.15" 2170 | hasha "^3.0.0" 2171 | lodash.flattendeep "^4.4.0" 2172 | release-zalgo "^1.0.0" 2173 | 2174 | pako@~1.0.5: 2175 | version "1.0.10" 2176 | resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" 2177 | integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== 2178 | 2179 | parent-module@^1.0.0: 2180 | version "1.0.1" 2181 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 2182 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 2183 | dependencies: 2184 | callsites "^3.0.0" 2185 | 2186 | parents@^1.0.0, parents@^1.0.1: 2187 | version "1.0.1" 2188 | resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" 2189 | integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= 2190 | dependencies: 2191 | path-platform "~0.11.15" 2192 | 2193 | parse-asn1@^5.0.0: 2194 | version "5.1.5" 2195 | resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" 2196 | integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== 2197 | dependencies: 2198 | asn1.js "^4.0.0" 2199 | browserify-aes "^1.0.0" 2200 | create-hash "^1.1.0" 2201 | evp_bytestokey "^1.0.0" 2202 | pbkdf2 "^3.0.3" 2203 | safe-buffer "^5.1.1" 2204 | 2205 | parse-json@^2.2.0: 2206 | version "2.2.0" 2207 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" 2208 | integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= 2209 | dependencies: 2210 | error-ex "^1.2.0" 2211 | 2212 | parse-json@^4.0.0: 2213 | version "4.0.0" 2214 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" 2215 | integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= 2216 | dependencies: 2217 | error-ex "^1.3.1" 2218 | json-parse-better-errors "^1.0.1" 2219 | 2220 | path-browserify@~0.0.0: 2221 | version "0.0.1" 2222 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" 2223 | integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== 2224 | 2225 | path-exists@^3.0.0: 2226 | version "3.0.0" 2227 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" 2228 | integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= 2229 | 2230 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 2231 | version "1.0.1" 2232 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2233 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 2234 | 2235 | path-key@^2.0.1: 2236 | version "2.0.1" 2237 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 2238 | integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= 2239 | 2240 | path-parse@^1.0.6: 2241 | version "1.0.6" 2242 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" 2243 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== 2244 | 2245 | path-platform@~0.11.15: 2246 | version "0.11.15" 2247 | resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" 2248 | integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= 2249 | 2250 | path-type@^2.0.0: 2251 | version "2.0.0" 2252 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" 2253 | integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= 2254 | dependencies: 2255 | pify "^2.0.0" 2256 | 2257 | path-type@^3.0.0: 2258 | version "3.0.0" 2259 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" 2260 | integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== 2261 | dependencies: 2262 | pify "^3.0.0" 2263 | 2264 | pbkdf2@^3.0.3: 2265 | version "3.0.17" 2266 | resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" 2267 | integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== 2268 | dependencies: 2269 | create-hash "^1.1.2" 2270 | create-hmac "^1.1.4" 2271 | ripemd160 "^2.0.1" 2272 | safe-buffer "^5.0.1" 2273 | sha.js "^2.4.8" 2274 | 2275 | pify@^2.0.0: 2276 | version "2.3.0" 2277 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 2278 | integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= 2279 | 2280 | pify@^3.0.0: 2281 | version "3.0.0" 2282 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 2283 | integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= 2284 | 2285 | pify@^4.0.1: 2286 | version "4.0.1" 2287 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" 2288 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== 2289 | 2290 | pkg-dir@^2.0.0: 2291 | version "2.0.0" 2292 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" 2293 | integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= 2294 | dependencies: 2295 | find-up "^2.1.0" 2296 | 2297 | pkg-dir@^3.0.0: 2298 | version "3.0.0" 2299 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" 2300 | integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== 2301 | dependencies: 2302 | find-up "^3.0.0" 2303 | 2304 | prelude-ls@~1.1.2: 2305 | version "1.1.2" 2306 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 2307 | integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= 2308 | 2309 | prettier-linter-helpers@^1.0.0: 2310 | version "1.0.0" 2311 | resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" 2312 | integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== 2313 | dependencies: 2314 | fast-diff "^1.1.2" 2315 | 2316 | prettier@^1.18.2: 2317 | version "1.19.1" 2318 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" 2319 | integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== 2320 | 2321 | process-nextick-args@~2.0.0: 2322 | version "2.0.1" 2323 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 2324 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 2325 | 2326 | process@~0.11.0: 2327 | version "0.11.10" 2328 | resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" 2329 | integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= 2330 | 2331 | progress@^2.0.0: 2332 | version "2.0.3" 2333 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 2334 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 2335 | 2336 | pseudomap@^1.0.2: 2337 | version "1.0.2" 2338 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 2339 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 2340 | 2341 | public-encrypt@^4.0.0: 2342 | version "4.0.3" 2343 | resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" 2344 | integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== 2345 | dependencies: 2346 | bn.js "^4.1.0" 2347 | browserify-rsa "^4.0.0" 2348 | create-hash "^1.1.0" 2349 | parse-asn1 "^5.0.0" 2350 | randombytes "^2.0.1" 2351 | safe-buffer "^5.1.2" 2352 | 2353 | punycode@1.3.2: 2354 | version "1.3.2" 2355 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" 2356 | integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= 2357 | 2358 | punycode@^1.3.2: 2359 | version "1.4.1" 2360 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 2361 | integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= 2362 | 2363 | punycode@^2.1.0: 2364 | version "2.1.1" 2365 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 2366 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 2367 | 2368 | querystring-es3@~0.2.0: 2369 | version "0.2.1" 2370 | resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" 2371 | integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= 2372 | 2373 | querystring@0.2.0: 2374 | version "0.2.0" 2375 | resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" 2376 | integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= 2377 | 2378 | randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: 2379 | version "2.1.0" 2380 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 2381 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 2382 | dependencies: 2383 | safe-buffer "^5.1.0" 2384 | 2385 | randomfill@^1.0.3: 2386 | version "1.0.4" 2387 | resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" 2388 | integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== 2389 | dependencies: 2390 | randombytes "^2.0.5" 2391 | safe-buffer "^5.1.0" 2392 | 2393 | read-only-stream@^2.0.0: 2394 | version "2.0.0" 2395 | resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" 2396 | integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= 2397 | dependencies: 2398 | readable-stream "^2.0.2" 2399 | 2400 | read-pkg-up@^2.0.0: 2401 | version "2.0.0" 2402 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" 2403 | integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= 2404 | dependencies: 2405 | find-up "^2.0.0" 2406 | read-pkg "^2.0.0" 2407 | 2408 | read-pkg-up@^4.0.0: 2409 | version "4.0.0" 2410 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" 2411 | integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== 2412 | dependencies: 2413 | find-up "^3.0.0" 2414 | read-pkg "^3.0.0" 2415 | 2416 | read-pkg@^2.0.0: 2417 | version "2.0.0" 2418 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" 2419 | integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= 2420 | dependencies: 2421 | load-json-file "^2.0.0" 2422 | normalize-package-data "^2.3.2" 2423 | path-type "^2.0.0" 2424 | 2425 | read-pkg@^3.0.0: 2426 | version "3.0.0" 2427 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" 2428 | integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= 2429 | dependencies: 2430 | load-json-file "^4.0.0" 2431 | normalize-package-data "^2.3.2" 2432 | path-type "^3.0.0" 2433 | 2434 | readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@~2.3.6: 2435 | version "2.3.6" 2436 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 2437 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 2438 | dependencies: 2439 | core-util-is "~1.0.0" 2440 | inherits "~2.0.3" 2441 | isarray "~1.0.0" 2442 | process-nextick-args "~2.0.0" 2443 | safe-buffer "~5.1.1" 2444 | string_decoder "~1.1.1" 2445 | util-deprecate "~1.0.1" 2446 | 2447 | readable-stream@^3.0.6: 2448 | version "3.4.0" 2449 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" 2450 | integrity sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ== 2451 | dependencies: 2452 | inherits "^2.0.3" 2453 | string_decoder "^1.1.1" 2454 | util-deprecate "^1.0.1" 2455 | 2456 | regexpp@^2.0.1: 2457 | version "2.0.1" 2458 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" 2459 | integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== 2460 | 2461 | regexpp@^3.0.0: 2462 | version "3.0.0" 2463 | resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.0.0.tgz#dd63982ee3300e67b41c1956f850aa680d9d330e" 2464 | integrity sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g== 2465 | 2466 | release-zalgo@^1.0.0: 2467 | version "1.0.0" 2468 | resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" 2469 | integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= 2470 | dependencies: 2471 | es6-error "^4.0.1" 2472 | 2473 | require-directory@^2.1.1: 2474 | version "2.1.1" 2475 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2476 | integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= 2477 | 2478 | require-main-filename@^2.0.0: 2479 | version "2.0.0" 2480 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" 2481 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== 2482 | 2483 | resolve-from@^4.0.0: 2484 | version "4.0.0" 2485 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 2486 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 2487 | 2488 | resolve@1.1.7: 2489 | version "1.1.7" 2490 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" 2491 | integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= 2492 | 2493 | resolve@^1.1.4, resolve@^1.4.0: 2494 | version "1.14.0" 2495 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.0.tgz#6d14c6f9db9f8002071332b600039abf82053f64" 2496 | integrity sha512-uviWSi5N67j3t3UKFxej1loCH0VZn5XuqdNxoLShPcYPw6cUZn74K1VRj+9myynRX03bxIBEkwlkob/ujLsJVw== 2497 | dependencies: 2498 | path-parse "^1.0.6" 2499 | 2500 | resolve@^1.10.0, resolve@^1.12.0, resolve@^1.5.0: 2501 | version "1.13.1" 2502 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" 2503 | integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== 2504 | dependencies: 2505 | path-parse "^1.0.6" 2506 | 2507 | restore-cursor@^2.0.0: 2508 | version "2.0.0" 2509 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" 2510 | integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= 2511 | dependencies: 2512 | onetime "^2.0.0" 2513 | signal-exit "^3.0.2" 2514 | 2515 | restore-cursor@^3.1.0: 2516 | version "3.1.0" 2517 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" 2518 | integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== 2519 | dependencies: 2520 | onetime "^5.1.0" 2521 | signal-exit "^3.0.2" 2522 | 2523 | rimraf@2.6.3: 2524 | version "2.6.3" 2525 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" 2526 | integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== 2527 | dependencies: 2528 | glob "^7.1.3" 2529 | 2530 | rimraf@^2.6.2, rimraf@^2.6.3: 2531 | version "2.7.1" 2532 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" 2533 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== 2534 | dependencies: 2535 | glob "^7.1.3" 2536 | 2537 | ripemd160@^2.0.0, ripemd160@^2.0.1: 2538 | version "2.0.2" 2539 | resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" 2540 | integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== 2541 | dependencies: 2542 | hash-base "^3.0.0" 2543 | inherits "^2.0.1" 2544 | 2545 | run-async@^2.2.0: 2546 | version "2.3.0" 2547 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" 2548 | integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= 2549 | dependencies: 2550 | is-promise "^2.1.0" 2551 | 2552 | rxjs@^6.5.3: 2553 | version "6.5.3" 2554 | resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" 2555 | integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== 2556 | dependencies: 2557 | tslib "^1.9.0" 2558 | 2559 | safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: 2560 | version "5.2.0" 2561 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 2562 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 2563 | 2564 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 2565 | version "5.1.2" 2566 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 2567 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 2568 | 2569 | "safer-buffer@>= 2.1.2 < 3": 2570 | version "2.1.2" 2571 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 2572 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 2573 | 2574 | "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0, semver@^5.7.0: 2575 | version "5.7.1" 2576 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 2577 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 2578 | 2579 | semver@^6.0.0, semver@^6.1.2, semver@^6.3.0: 2580 | version "6.3.0" 2581 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 2582 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 2583 | 2584 | set-blocking@^2.0.0: 2585 | version "2.0.0" 2586 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 2587 | integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= 2588 | 2589 | sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: 2590 | version "2.4.11" 2591 | resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" 2592 | integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== 2593 | dependencies: 2594 | inherits "^2.0.1" 2595 | safe-buffer "^5.0.1" 2596 | 2597 | shasum-object@^1.0.0: 2598 | version "1.0.0" 2599 | resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" 2600 | integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== 2601 | dependencies: 2602 | fast-safe-stringify "^2.0.7" 2603 | 2604 | shasum@^1.0.0: 2605 | version "1.0.2" 2606 | resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" 2607 | integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= 2608 | dependencies: 2609 | json-stable-stringify "~0.0.0" 2610 | sha.js "~2.4.4" 2611 | 2612 | shebang-command@^1.2.0: 2613 | version "1.2.0" 2614 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 2615 | integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= 2616 | dependencies: 2617 | shebang-regex "^1.0.0" 2618 | 2619 | shebang-regex@^1.0.0: 2620 | version "1.0.0" 2621 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 2622 | integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= 2623 | 2624 | shell-quote@^1.6.1: 2625 | version "1.7.2" 2626 | resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" 2627 | integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== 2628 | 2629 | signal-exit@^3.0.0, signal-exit@^3.0.2: 2630 | version "3.0.2" 2631 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 2632 | integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= 2633 | 2634 | simple-concat@^1.0.0: 2635 | version "1.0.0" 2636 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" 2637 | integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= 2638 | 2639 | slice-ansi@^2.1.0: 2640 | version "2.1.0" 2641 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" 2642 | integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== 2643 | dependencies: 2644 | ansi-styles "^3.2.0" 2645 | astral-regex "^1.0.0" 2646 | is-fullwidth-code-point "^2.0.0" 2647 | 2648 | source-map-support@^0.5.16, source-map-support@^0.5.6: 2649 | version "0.5.16" 2650 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" 2651 | integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== 2652 | dependencies: 2653 | buffer-from "^1.0.0" 2654 | source-map "^0.6.0" 2655 | 2656 | source-map@^0.5.0, source-map@~0.5.3: 2657 | version "0.5.7" 2658 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 2659 | integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= 2660 | 2661 | source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: 2662 | version "0.6.1" 2663 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2664 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2665 | 2666 | spawn-wrap@^1.4.2: 2667 | version "1.4.3" 2668 | resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" 2669 | integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== 2670 | dependencies: 2671 | foreground-child "^1.5.6" 2672 | mkdirp "^0.5.0" 2673 | os-homedir "^1.0.1" 2674 | rimraf "^2.6.2" 2675 | signal-exit "^3.0.2" 2676 | which "^1.3.0" 2677 | 2678 | spdx-correct@^3.0.0: 2679 | version "3.1.0" 2680 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" 2681 | integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== 2682 | dependencies: 2683 | spdx-expression-parse "^3.0.0" 2684 | spdx-license-ids "^3.0.0" 2685 | 2686 | spdx-exceptions@^2.1.0: 2687 | version "2.2.0" 2688 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" 2689 | integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== 2690 | 2691 | spdx-expression-parse@^3.0.0: 2692 | version "3.0.0" 2693 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" 2694 | integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== 2695 | dependencies: 2696 | spdx-exceptions "^2.1.0" 2697 | spdx-license-ids "^3.0.0" 2698 | 2699 | spdx-license-ids@^3.0.0: 2700 | version "3.0.5" 2701 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" 2702 | integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== 2703 | 2704 | sprintf-js@~1.0.2: 2705 | version "1.0.3" 2706 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2707 | integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= 2708 | 2709 | stream-browserify@^2.0.0: 2710 | version "2.0.2" 2711 | resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" 2712 | integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== 2713 | dependencies: 2714 | inherits "~2.0.1" 2715 | readable-stream "^2.0.2" 2716 | 2717 | stream-combiner2@^1.1.1: 2718 | version "1.1.1" 2719 | resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" 2720 | integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= 2721 | dependencies: 2722 | duplexer2 "~0.1.0" 2723 | readable-stream "^2.0.2" 2724 | 2725 | stream-http@^3.0.0: 2726 | version "3.1.0" 2727 | resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" 2728 | integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw== 2729 | dependencies: 2730 | builtin-status-codes "^3.0.0" 2731 | inherits "^2.0.1" 2732 | readable-stream "^3.0.6" 2733 | xtend "^4.0.0" 2734 | 2735 | stream-splicer@^2.0.0: 2736 | version "2.0.1" 2737 | resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" 2738 | integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== 2739 | dependencies: 2740 | inherits "^2.0.1" 2741 | readable-stream "^2.0.2" 2742 | 2743 | "string-width@^1.0.2 || 2": 2744 | version "2.1.1" 2745 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 2746 | integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== 2747 | dependencies: 2748 | is-fullwidth-code-point "^2.0.0" 2749 | strip-ansi "^4.0.0" 2750 | 2751 | string-width@^3.0.0, string-width@^3.1.0: 2752 | version "3.1.0" 2753 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 2754 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 2755 | dependencies: 2756 | emoji-regex "^7.0.1" 2757 | is-fullwidth-code-point "^2.0.0" 2758 | strip-ansi "^5.1.0" 2759 | 2760 | string-width@^4.1.0: 2761 | version "4.2.0" 2762 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" 2763 | integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== 2764 | dependencies: 2765 | emoji-regex "^8.0.0" 2766 | is-fullwidth-code-point "^3.0.0" 2767 | strip-ansi "^6.0.0" 2768 | 2769 | string.prototype.trimleft@^2.1.0: 2770 | version "2.1.0" 2771 | resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" 2772 | integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== 2773 | dependencies: 2774 | define-properties "^1.1.3" 2775 | function-bind "^1.1.1" 2776 | 2777 | string.prototype.trimright@^2.1.0: 2778 | version "2.1.0" 2779 | resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" 2780 | integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== 2781 | dependencies: 2782 | define-properties "^1.1.3" 2783 | function-bind "^1.1.1" 2784 | 2785 | string_decoder@^1.1.1: 2786 | version "1.3.0" 2787 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 2788 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 2789 | dependencies: 2790 | safe-buffer "~5.2.0" 2791 | 2792 | string_decoder@~1.1.1: 2793 | version "1.1.1" 2794 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 2795 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 2796 | dependencies: 2797 | safe-buffer "~5.1.0" 2798 | 2799 | strip-ansi@^4.0.0: 2800 | version "4.0.0" 2801 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 2802 | integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= 2803 | dependencies: 2804 | ansi-regex "^3.0.0" 2805 | 2806 | strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: 2807 | version "5.2.0" 2808 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 2809 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 2810 | dependencies: 2811 | ansi-regex "^4.1.0" 2812 | 2813 | strip-ansi@^6.0.0: 2814 | version "6.0.0" 2815 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 2816 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 2817 | dependencies: 2818 | ansi-regex "^5.0.0" 2819 | 2820 | strip-bom@^3.0.0: 2821 | version "3.0.0" 2822 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 2823 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 2824 | 2825 | strip-json-comments@2.0.1: 2826 | version "2.0.1" 2827 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 2828 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 2829 | 2830 | strip-json-comments@^3.0.1: 2831 | version "3.0.1" 2832 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" 2833 | integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== 2834 | 2835 | subarg@^1.0.0: 2836 | version "1.0.0" 2837 | resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" 2838 | integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= 2839 | dependencies: 2840 | minimist "^1.1.0" 2841 | 2842 | supports-color@6.0.0: 2843 | version "6.0.0" 2844 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" 2845 | integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== 2846 | dependencies: 2847 | has-flag "^3.0.0" 2848 | 2849 | supports-color@^5.3.0: 2850 | version "5.5.0" 2851 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 2852 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 2853 | dependencies: 2854 | has-flag "^3.0.0" 2855 | 2856 | supports-color@^6.1.0: 2857 | version "6.1.0" 2858 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" 2859 | integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== 2860 | dependencies: 2861 | has-flag "^3.0.0" 2862 | 2863 | syntax-error@^1.1.1: 2864 | version "1.4.0" 2865 | resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" 2866 | integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== 2867 | dependencies: 2868 | acorn-node "^1.2.0" 2869 | 2870 | table@^5.2.3: 2871 | version "5.4.6" 2872 | resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" 2873 | integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== 2874 | dependencies: 2875 | ajv "^6.10.2" 2876 | lodash "^4.17.14" 2877 | slice-ansi "^2.1.0" 2878 | string-width "^3.0.0" 2879 | 2880 | test-exclude@^5.2.3: 2881 | version "5.2.3" 2882 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" 2883 | integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== 2884 | dependencies: 2885 | glob "^7.1.3" 2886 | minimatch "^3.0.4" 2887 | read-pkg-up "^4.0.0" 2888 | require-main-filename "^2.0.0" 2889 | 2890 | text-table@^0.2.0: 2891 | version "0.2.0" 2892 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 2893 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 2894 | 2895 | through2@^2.0.0: 2896 | version "2.0.5" 2897 | resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" 2898 | integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== 2899 | dependencies: 2900 | readable-stream "~2.3.6" 2901 | xtend "~4.0.1" 2902 | 2903 | "through@>=2.2.7 <3", through@^2.3.6: 2904 | version "2.3.8" 2905 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2906 | integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= 2907 | 2908 | timers-browserify@^1.0.1: 2909 | version "1.4.2" 2910 | resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" 2911 | integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= 2912 | dependencies: 2913 | process "~0.11.0" 2914 | 2915 | tmp@^0.0.33: 2916 | version "0.0.33" 2917 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" 2918 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== 2919 | dependencies: 2920 | os-tmpdir "~1.0.2" 2921 | 2922 | to-fast-properties@^2.0.0: 2923 | version "2.0.0" 2924 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 2925 | integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= 2926 | 2927 | ts-node@^8.4.1: 2928 | version "8.5.4" 2929 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.5.4.tgz#a152add11fa19c221d0b48962c210cf467262ab2" 2930 | integrity sha512-izbVCRV68EasEPQ8MSIGBNK9dc/4sYJJKYA+IarMQct1RtEot6Xp0bXuClsbUSnKpg50ho+aOAx8en5c+y4OFw== 2931 | dependencies: 2932 | arg "^4.1.0" 2933 | diff "^4.0.1" 2934 | make-error "^1.1.1" 2935 | source-map-support "^0.5.6" 2936 | yn "^3.0.0" 2937 | 2938 | tslib@^1.8.1, tslib@^1.9.0: 2939 | version "1.10.0" 2940 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 2941 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 2942 | 2943 | tsutils@^3.17.1: 2944 | version "3.17.1" 2945 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.17.1.tgz#ed719917f11ca0dee586272b2ac49e015a2dd759" 2946 | integrity sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g== 2947 | dependencies: 2948 | tslib "^1.8.1" 2949 | 2950 | tty-browserify@0.0.1: 2951 | version "0.0.1" 2952 | resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" 2953 | integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== 2954 | 2955 | type-check@~0.3.2: 2956 | version "0.3.2" 2957 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 2958 | integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= 2959 | dependencies: 2960 | prelude-ls "~1.1.2" 2961 | 2962 | type-fest@^0.8.1: 2963 | version "0.8.1" 2964 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 2965 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 2966 | 2967 | typedarray@^0.0.6: 2968 | version "0.0.6" 2969 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 2970 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= 2971 | 2972 | typescript@^3.7.3: 2973 | version "3.7.3" 2974 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.3.tgz#b36840668a16458a7025b9eabfad11b66ab85c69" 2975 | integrity sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw== 2976 | 2977 | uglify-js@^3.1.4: 2978 | version "3.7.2" 2979 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.2.tgz#cb1a601e67536e9ed094a92dd1e333459643d3f9" 2980 | integrity sha512-uhRwZcANNWVLrxLfNFEdltoPNhECUR3lc+UdJoG9CBpMcSnKyWA94tc3eAujB1GcMY5Uwq8ZMp4qWpxWYDQmaA== 2981 | dependencies: 2982 | commander "~2.20.3" 2983 | source-map "~0.6.1" 2984 | 2985 | umd@^3.0.0: 2986 | version "3.0.3" 2987 | resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" 2988 | integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== 2989 | 2990 | undeclared-identifiers@^1.1.2: 2991 | version "1.1.3" 2992 | resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" 2993 | integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== 2994 | dependencies: 2995 | acorn-node "^1.3.0" 2996 | dash-ast "^1.0.0" 2997 | get-assigned-identifiers "^1.2.0" 2998 | simple-concat "^1.0.0" 2999 | xtend "^4.0.1" 3000 | 3001 | universalify@^0.1.0: 3002 | version "0.1.2" 3003 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" 3004 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== 3005 | 3006 | uri-js@^4.2.2: 3007 | version "4.2.2" 3008 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" 3009 | integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== 3010 | dependencies: 3011 | punycode "^2.1.0" 3012 | 3013 | url@~0.11.0: 3014 | version "0.11.0" 3015 | resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" 3016 | integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= 3017 | dependencies: 3018 | punycode "1.3.2" 3019 | querystring "0.2.0" 3020 | 3021 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 3022 | version "1.0.2" 3023 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 3024 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 3025 | 3026 | util@0.10.3: 3027 | version "0.10.3" 3028 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" 3029 | integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= 3030 | dependencies: 3031 | inherits "2.0.1" 3032 | 3033 | util@~0.10.1: 3034 | version "0.10.4" 3035 | resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" 3036 | integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== 3037 | dependencies: 3038 | inherits "2.0.3" 3039 | 3040 | uuid@^3.3.2: 3041 | version "3.3.3" 3042 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" 3043 | integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== 3044 | 3045 | v8-compile-cache@^2.0.3: 3046 | version "2.1.0" 3047 | resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz#e14de37b31a6d194f5690d67efc4e7f6fc6ab30e" 3048 | integrity sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g== 3049 | 3050 | validate-npm-package-license@^3.0.1: 3051 | version "3.0.4" 3052 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" 3053 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== 3054 | dependencies: 3055 | spdx-correct "^3.0.0" 3056 | spdx-expression-parse "^3.0.0" 3057 | 3058 | vm-browserify@^1.0.0: 3059 | version "1.1.2" 3060 | resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" 3061 | integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== 3062 | 3063 | wcwidth@^1.0.1: 3064 | version "1.0.1" 3065 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" 3066 | integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= 3067 | dependencies: 3068 | defaults "^1.0.3" 3069 | 3070 | which-module@^2.0.0: 3071 | version "2.0.0" 3072 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" 3073 | integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= 3074 | 3075 | which@1.3.1, which@^1.2.9, which@^1.3.0: 3076 | version "1.3.1" 3077 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" 3078 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== 3079 | dependencies: 3080 | isexe "^2.0.0" 3081 | 3082 | wide-align@1.1.3: 3083 | version "1.1.3" 3084 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 3085 | integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== 3086 | dependencies: 3087 | string-width "^1.0.2 || 2" 3088 | 3089 | word-wrap@~1.2.3: 3090 | version "1.2.3" 3091 | resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" 3092 | integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== 3093 | 3094 | wordwrap@~0.0.2: 3095 | version "0.0.3" 3096 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" 3097 | integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= 3098 | 3099 | wrap-ansi@^5.1.0: 3100 | version "5.1.0" 3101 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" 3102 | integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== 3103 | dependencies: 3104 | ansi-styles "^3.2.0" 3105 | string-width "^3.0.0" 3106 | strip-ansi "^5.0.0" 3107 | 3108 | wrappy@1: 3109 | version "1.0.2" 3110 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 3111 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 3112 | 3113 | write-file-atomic@^2.4.2: 3114 | version "2.4.3" 3115 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" 3116 | integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== 3117 | dependencies: 3118 | graceful-fs "^4.1.11" 3119 | imurmurhash "^0.1.4" 3120 | signal-exit "^3.0.2" 3121 | 3122 | write@1.0.3: 3123 | version "1.0.3" 3124 | resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" 3125 | integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== 3126 | dependencies: 3127 | mkdirp "^0.5.1" 3128 | 3129 | xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: 3130 | version "4.0.2" 3131 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" 3132 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== 3133 | 3134 | y18n@^4.0.0: 3135 | version "4.0.0" 3136 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" 3137 | integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== 3138 | 3139 | yallist@^2.1.2: 3140 | version "2.1.2" 3141 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 3142 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 3143 | 3144 | yargs-parser@13.1.1, yargs-parser@^13.0.0, yargs-parser@^13.1.1: 3145 | version "13.1.1" 3146 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" 3147 | integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== 3148 | dependencies: 3149 | camelcase "^5.0.0" 3150 | decamelize "^1.2.0" 3151 | 3152 | yargs-unparser@1.6.0: 3153 | version "1.6.0" 3154 | resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" 3155 | integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== 3156 | dependencies: 3157 | flat "^4.1.0" 3158 | lodash "^4.17.15" 3159 | yargs "^13.3.0" 3160 | 3161 | yargs@13.3.0, yargs@^13.2.2, yargs@^13.3.0: 3162 | version "13.3.0" 3163 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.0.tgz#4c657a55e07e5f2cf947f8a366567c04a0dedc83" 3164 | integrity sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA== 3165 | dependencies: 3166 | cliui "^5.0.0" 3167 | find-up "^3.0.0" 3168 | get-caller-file "^2.0.1" 3169 | require-directory "^2.1.1" 3170 | require-main-filename "^2.0.0" 3171 | set-blocking "^2.0.0" 3172 | string-width "^3.0.0" 3173 | which-module "^2.0.0" 3174 | y18n "^4.0.0" 3175 | yargs-parser "^13.1.1" 3176 | 3177 | yn@^3.0.0: 3178 | version "3.1.1" 3179 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 3180 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 3181 | --------------------------------------------------------------------------------