diff --git a/.gitignore b/.gitignore index 8c7050a3f..9a457a402 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,9 @@ _jest-editor/ .vscode/symbols.json -coverage/ +/coverage/ integrations/create-react-example/node_modules node_modules/ out/ **/.DS_Store +*.vsix \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index e37b67a80..ebbc15847 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - "6" + - "8" script: - yarn ci - cat ./coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js diff --git a/.vscode/launch.json b/.vscode/launch.json index 9a4a15bcf..092cd9085 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,29 +1,31 @@ -// A launch configuration that compiles the extension and then opens it inside a new window { - "version": "0.1.0", - "configurations": [ - { - "type": "node", - "request": "launch", - "name": "Debug Tests", - "program": "${workspaceRoot}/node_modules/jest/bin/jest.js", - "cwd": "${workspaceRoot}", - "args": [ - "--i", - "--config", - "jest.json" - ] - }, - { - "name": "Launch Extension", - "type": "extensionHost", - "request": "launch", - "runtimeExecutable": "${execPath}", - "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], - "stopOnEntry": false, - "sourceMaps": true, - "outDir": "${workspaceRoot}/out/src", - "preLaunchTask": "npm" - } - ] + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Debug Tests", + "program": "${workspaceRoot}/node_modules/jest/bin/jest.js", + "cwd": "${workspaceRoot}", + "args": ["--i", "--config", "jest.json"] + }, + { + "name": "Launch Extension (development)", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "watch" + }, + { + "name": "Launch Extension (production)", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": ["--extensionDevelopmentPath=${workspaceFolder}"], + "outFiles": ["${workspaceFolder}/out/**/*.js"], + "preLaunchTask": "npm: compile" + } + ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index d650016ad..82127e99a 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -12,7 +12,6 @@ "typescript.tsdk": "./node_modules/typescript/lib", "eslint.enable": false, "tslint.autoFixOnSave": true, - "jest.pathToConfig": "./jest.json", "prettier.semi": false, "prettier.printWidth": 120, "prettier.trailingComma": "es5", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index fb7f662e1..a228ada77 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,30 +1,29 @@ -// Available variables which can be used inside of strings. -// ${workspaceRoot}: the root folder of the team -// ${file}: the current opened file -// ${fileBasename}: the current opened file's basename -// ${fileDirname}: the current opened file's dirname -// ${fileExtname}: the current opened file's extension -// ${cwd}: the current working directory of the spawned process - -// A task runner that calls a custom npm script that compiles the extension. { - "version": "0.1.0", - - // we want to run npm - "command": "npm", - - // the command is a shell script - "isShellCommand": true, - - // show the output window only if unrecognized errors occur. - "showOutput": "silent", - - // we run the custom script "compile" as defined in package.json - "args": ["run", "compile", "--loglevel", "silent"], - - // The tsc compiler is started in watching mode - "isWatching": true, - - // use the standard tsc in watch mode problem matcher to find compile problems in the output. - "problemMatcher": "$tsc-watch" -} \ No newline at end of file + "version": "2.0.0", + "tasks": [ + { + "label": "watch", + "type": "npm", + "script": "watch", + "isBackground": true, + "problemMatcher": [ + { + "owner": "custom", + "pattern": [ + { + "regexp": "^PATTERN WON'T MATCH, BUT NEEDED TO BE A VALID PROBLEM MATCHER$", + "file": 1, + "location": 2, + "message": 3 + } + ], + "background": { + "activeOnStart": true, + "beginsPattern": "^Compilation\\s+starting", + "endsPattern": "^Compilation\\s+finished" + } + } + ] + } + ] +} diff --git a/.vscodeignore b/.vscodeignore index 8c685e4e3..d210cefc8 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -4,7 +4,6 @@ src/** **/*.map .gitignore tsconfig.json -vsc-extension-quickstart.md integrations/** **/__mocks__/** **/tests/** @@ -17,3 +16,8 @@ tslint.json yarn.lock yarn-error.log scripts/ +coverage +.github/** +images/** +!images/vscode-jest.png +webpack.config.js \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 38a94ba4b..daa0c317f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,10 +5,30 @@ Bug-fixes within the same version aren't needed ## Master -* Your message here - name - --> +### 3.0.1 + +* use webpack for compilation, resulting in a much smaller extension size - stephtr + +* fix security vulnerability for dependencies flagged by github - stephtr + +### 3.0.0 +* Support multi-root workspaces - escaton + * multiroot workspace statusBar displays both active folder and workspace summary info - connectdotz + * fix race condition in multi-root projects - connectdotz + * add folder status bar support for multi-root projects - connectdotz + +* support template-literal-string test names by matching with location info from jest result - connectdotz + +* paying down some tech debt, see PR#447 for detail. + +* Add disableOptimisticBPs option to debug configuration. Fixes #400 - blikblum + +* Adds "Jest: Restart Runner" command - vdh + +* replaced deprecated vscode.previewHtml command with webview - qalex + ### 2.9.1 * Prevent ANSI escape codes from appearing in test messages - seanpoulter diff --git a/README.md b/README.md index 78a52c075..c101f8a26 100644 --- a/README.md +++ b/README.md @@ -139,6 +139,10 @@ These are the [activation events](https://code.visualstudio.com/docs/extensionAP These are the things that will trigger the extension loading. If one of these applies, and you're not seeing the "Jest" in the bottom bar, reference the self-diagnosis below +### use extension in multiroot environment +vscode-jest supports multiroot feature, but if you want to turn it off for some workspace folders check out `jest.disabledWorkspaceFolders` configuration setting. +`jest.disabledWorkspaceFolders` is an array of strings with folder names. + ### non-standard environments vscode-jest supports common jest configuration, such as when jest is in `root/node_modules/.bin/jest`, or for react-native `root/node_modules/react-native-scripts`. diff --git a/__mocks__/vscode.ts b/__mocks__/vscode.ts index 590f946a4..52bf338c5 100644 --- a/__mocks__/vscode.ts +++ b/__mocks__/vscode.ts @@ -1,21 +1,32 @@ const languages = { createDiagnosticCollection: jest.fn(), + registerCodeLensProvider: jest.fn(), } -const StatusBarAlignment = {} +const StatusBarAlignment = { Left: 1, Right: 2 } const window = { createStatusBarItem: jest.fn(() => ({ show: jest.fn(), + tooltip: jest.fn(), })), showErrorMessage: jest.fn(), showWarningMessage: jest.fn(), createTextEditorDecorationType: jest.fn(), + createOutputChannel: jest.fn(), + showWorkspaceFolderPick: jest.fn(), + onDidChangeActiveTextEditor: jest.fn(), + showInformationMessage: jest.fn(), } const workspace = { getConfiguration: jest.fn(), workspaceFolders: [], + getWorkspaceFolder: jest.fn(), + + onDidChangeConfiguration: jest.fn(), + onDidChangeTextDocument: jest.fn(), + onDidChangeWorkspaceFolders: jest.fn(), } const OverviewRulerLane = { @@ -33,13 +44,18 @@ const DiagnosticSeverity = { Error: 0, Warning: 1, Information: 2, Hint: 3 } const debug = { onDidTerminateDebugSession: jest.fn(), startDebugging: jest.fn(), + registerDebugConfigurationProvider: jest.fn(), } const commands = { executeCommand: jest.fn(), + registerCommand: jest.fn(), } +const CodeLens = function CodeLens() {} + export { + CodeLens, languages, StatusBarAlignment, window, diff --git a/integrations/create-react-example/yarn.lock b/integrations/create-react-example/yarn.lock index ce6ab773e..31c6162c3 100644 --- a/integrations/create-react-example/yarn.lock +++ b/integrations/create-react-example/yarn.lock @@ -1336,7 +1336,7 @@ async@^1.5.2: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.1.4, async@^2.5.0: +async@^2.1.4: version "2.6.1" resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== @@ -2273,6 +2273,11 @@ commander@~2.13.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" integrity sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA== +commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + common-tags@^1.4.0: version "1.8.0" resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" @@ -4107,11 +4112,11 @@ handle-thing@^1.2.5: integrity sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ= handlebars@^4.0.3: - version "4.0.12" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" - integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== dependencies: - async "^2.5.0" + neo-async "^2.6.0" optimist "^0.6.1" source-map "^0.6.1" optionalDependencies: @@ -5361,9 +5366,9 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.12.0, js-yaml@^3.7.0, js-yaml@^3.9.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -6139,10 +6144,10 @@ negotiator@0.6.1: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= -neo-async@^2.5.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" - integrity sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw== +neo-async@^2.5.0, neo-async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== nice-try@^1.0.4: version "1.0.5" @@ -9087,7 +9092,7 @@ uglify-es@^3.3.4: commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.4.x, uglify-js@^3.1.4: +uglify-js@3.4.x: version "3.4.9" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== @@ -9095,6 +9100,14 @@ uglify-js@3.4.x, uglify-js@^3.1.4: commander "~2.17.1" source-map "~0.6.1" +uglify-js@^3.1.4: + version "3.6.0" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" + integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" + uglifyjs-webpack-plugin@^1.2.4: version "1.3.0" resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" diff --git a/jest.config.js b/jest.config.js new file mode 100644 index 000000000..e03811ab2 --- /dev/null +++ b/jest.config.js @@ -0,0 +1,8 @@ +module.exports = { + preset: 'ts-jest', + testEnvironment: 'node', + testRegex: "tests/.*\\.ts$", + automock: true, + moduleFileExtensions: ["ts", "js", "json"], + setupFiles: ["./tests/jestSetup.js"], +}; \ No newline at end of file diff --git a/jest.json b/jest.json deleted file mode 100644 index 0067a9998..000000000 --- a/jest.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "automock": true, - "moduleFileExtensions": ["ts", "js", "json"], - "transform": { - "^.+\\.ts$": "/scripts/preprocessor.js" - }, - "testRegex": "tests/.*\\.ts$" -} diff --git a/package.json b/package.json index 4f41d014a..46579e260 100644 --- a/package.json +++ b/package.json @@ -2,10 +2,10 @@ "name": "vscode-jest", "displayName": "Jest", "description": "Use Facebook's Jest With Pleasure.", - "version": "2.9.1", + "version": "3.0.1", "publisher": "Orta", "engines": { - "vscode": "^1.18.0" + "vscode": "^1.23.0" }, "author": { "name": "Orta Therox, ConnectDotz & Sean Poulter", @@ -20,6 +20,7 @@ "color": "#ca461a" }, "categories": ["Other"], + "keywords": ["multi-root ready"], "activationEvents": [ "workspaceContains:jest.config.js", "workspaceContains:jest.json", @@ -28,7 +29,7 @@ "workspaceContains:node_modules/react-native-scripts", "onCommand:io.orta.jest.start" ], - "main": "./out/src/extension", + "main": "./out/extension", "icon": "images/vscode-jest.png", "contributes": { "languages": [ @@ -51,54 +52,63 @@ "jest.autoEnable": { "description": "Automatically start Jest for this project", "type": "boolean", - "default": true + "default": true, + "scope": "resource" }, "jest.pathToJest": { - "description": - "The path to the Jest binary, or an npm command to run tests suffixed with `--` e.g. `node_modules/.bin/jest` or `npm test --`", + "description": "The path to the Jest binary, or an npm command to run tests suffixed with `--` e.g. `node_modules/.bin/jest` or `npm test --`", "type": "string", - "default": null + "default": null, + "scope": "resource" }, "jest.pathToConfig": { "description": "The path to your Jest configuration file", "type": "string", - "default": "" + "default": "", + "scope": "resource" }, "jest.rootPath": { "description": "The path to your frontend src folder", "type": "string", - "default": "" + "default": "", + "scope": "resource" }, "jest.enableInlineErrorMessages": { "description": "Whether errors should be reported inline on a file", "type": "boolean", - "default": true + "default": true, + "scope": "resource" }, "jest.enableSnapshotUpdateMessages": { "description": "Whether snapshot update messages should show", "type": "boolean", - "default": true + "default": true, + "scope": "resource" }, "jest.runAllTestsFirst": { "description": "Run all tests before starting Jest in watch mode", "type": "boolean", - "default": true + "default": true, + "scope": "resource" }, "jest.showCoverageOnLoad": { "description": "Show code coverage when extension starts (if collected)", "type": "boolean", - "default": false + "default": false, + "scope": "resource" }, "jest.coverageFormatter": { "description": "Coverage formatter to use", "type": "string", "enum": ["DefaultFormatter", "GutterFormatter"], - "default": "DefaultFormatter" + "default": "DefaultFormatter", + "scope": "resource" }, "jest.enableCodeLens": { "description": "Whether codelens for debugging should show", "type": "boolean", - "default": true + "default": true, + "scope": "window" }, "jest.debugCodeLens.showWhenTestStateIn": { "description": "Show the debug CodeLens when the it/test block state is in this collection", @@ -106,22 +116,33 @@ "items": { "enum": ["fail", "pass", "skip", "unknown"] }, - "default": ["fail", "unknown"] + "default": ["fail", "unknown"], + "scope": "window" }, "jest.enableSnapshotPreviews": { "description": "Whether snapshot previews should show", "type": "boolean", - "default": true + "default": true, + "scope": "window" }, "jest.restartJestOnSnapshotUpdate": { "description": "Restart Jest runner after updating the snapshots", "type": "boolean", - "default": false + "default": false, + "scope": "resource" }, "jest.debugMode": { "description": "Enable debug mode to diagnose plugin issues. (see developer console)", "type": "boolean", - "default": false + "default": false, + "scope": "resource" + }, + "jest.disabledWorkspaceFolders": { + "description": "Disabled workspace folders names in multiroot environment", + "type": "array", + "items": "string", + "default": [], + "scope": "window" } } }, @@ -134,6 +155,10 @@ "command": "io.orta.jest.stop", "title": "Jest: Stop Runner" }, + { + "command": "io.orta.jest.restart", + "title": "Jest: Restart Runner" + }, { "command": "io.orta.jest.show-channel", "title": "Jest: Show Test Output Channel" @@ -160,13 +185,13 @@ "args": ["--runInBand"], "cwd": "^\"\\${workspaceFolder}\"", "console": "integratedTerminal", - "internalConsoleOptions": "neverOpen" + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true } }, { "label": "Jest: create-react-app", - "description": - "Running jest within apps bootstrapped by create-react-app (and similar); you may have to edit `runtimeExecutable`", + "description": "Running jest within apps bootstrapped by create-react-app (and similar); you may have to edit `runtimeExecutable`", "body": { "type": "node", "name": "vscode-jest-tests", @@ -176,7 +201,8 @@ "cwd": "^\"\\${workspaceFolder}\"", "console": "integratedTerminal", "protocol": "inspector", - "internalConsoleOptions": "neverOpen" + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true } }, { @@ -191,7 +217,8 @@ "cwd": "^\"\\${workspaceFolder}\"", "console": "integratedTerminal", "protocol": "inspector", - "internalConsoleOptions": "neverOpen" + "internalConsoleOptions": "neverOpen", + "disableOptimisticBPs": true } } ] @@ -199,47 +226,54 @@ ] }, "lint-staged": { - "*.json": ["yarn prettier-write --", "git add"], - "*.ts": ["yarn prettier-write --", "git add"] + "*.json": ["yarn prettier-write --parser json", "git add"], + "*.ts": ["yarn prettier-write --parser typescript", "git add"] }, "scripts": { "precommit": "lint-staged", "ci": "yarn lint && yarn test --coverage", "clean-out": "rimraf ./out", - "vscode:prepublish": "yarn clean-out && tsc -p ./tsconfig.publish.json", - "compile": "tsc -watch -p ./tsconfig.publish.json", - "lint": "node scripts/lint", + "vscode:prepublish": "yarn clean-out && yarn compile", + "compile": "webpack --mode production", + "watch": "webpack --mode development --watch --info-verbosity verbose", + "lint": "tslint -c tslint.json 'src/**/*.ts' 'tests/**/*.ts'", "postinstall": "node ./node_modules/vscode/bin/install", - "test": "tsc && jest --config jest.json", + "test": "jest", "watch-test": "yarn test -- --watch", "prettier": "prettier", - "prettier-write": - "yarn prettier -- --parser typescript --no-semi --single-quote --trailing-comma es5 --write --print-width 120", + "prettier-write": "yarn prettier --parser typescript --no-semi --single-quote --trailing-comma es5 --write --print-width 120", "prettier-project": "yarn prettier-write -- '?(__mocks__|src|tests)/**/*.ts'" }, "devDependencies": { - "@types/jest": "^21.1.1", + "@types/jest": "^24.0.11", "@types/node": "^8.0.31", "coveralls": "^3.0.0", "danger": "^2", + "elegant-spinner": "^1.0.1", "glob": "^7.1.1", "husky": "^0.14.3", - "jest": "^23.3.0", + "istanbul-lib-coverage": "^1.1.1", + "istanbul-lib-source-maps": "^1.1.0", + "jest": "^24.7.0", + "jest-editor-support": "^26.0.0-beta", + "jest-snapshot": "^24.7.0", "lint-staged": "^4.2.3", - "prettier": "1.7.3", + "micromatch": "^2.3.11", + "prettier": "^1.17.0", "rimraf": "^2.6.2", - "tslint": "^5.7.0", - "tslint-config-prettier": "^1.5.0", - "typescript": "^2.8.0", - "vscode": "^1.1.6" + "ts-jest": "^24.0.2", + "ts-loader": "^6.0.4", + "tslint": "^5.16.0", + "tslint-config-prettier": "^1.18.0", + "typescript": "^3.4.3", + "typescript-tslint-plugin": "^0.3.1", + "vscode": "^1.1.33", + "webpack": "^4.35.0", + "webpack-cli": "^3.3.4" }, - "dependencies": { - "elegant-spinner": "^1.0.1", - "istanbul-lib-coverage": "^1.1.1", - "istanbul-lib-source-maps": "^1.1.0", - "jest-editor-support": "23.3.0", - "jest-snapshot": "^23.0.1", - "jest-test-typescript-parser": "^23.3.0", - "micromatch": "^2.3.11" + "__metadata": { + "id": "7997a8ae-1fae-4022-b834-12f6318aeffd", + "publisherDisplayName": "Orta", + "publisherId": "c22b4001-1af3-48d1-87ed-490c6c3b747f" } } diff --git a/scripts/lint.js b/scripts/lint.js deleted file mode 100644 index a74a96c85..000000000 --- a/scripts/lint.js +++ /dev/null @@ -1,17 +0,0 @@ -const { Linter, Configuration } = require('tslint'); -const fs = require('fs'); -const glob = require('glob'); - -const linter = new Linter({ - formatter: 'prose', -}); -const configuration = Configuration.findConfiguration(null, './').results; - -glob.sync('**/*.ts', { ignore: ['**/*.d.ts', 'node_modules/**'] }).forEach(file => { - const fileContents = fs.readFileSync(file, 'utf8'); - linter.lint(file, fileContents, configuration); -}); - -const results = linter.getResult(); -console.error(results.output); -process.exit((results.failures.length + results.fixes.length) === 0 ? 0 : 1); diff --git a/scripts/preprocessor.js b/scripts/preprocessor.js deleted file mode 100644 index 579ca03f6..000000000 --- a/scripts/preprocessor.js +++ /dev/null @@ -1,16 +0,0 @@ -const tsc = require('typescript'); -const tsConfig = require('../tsconfig.json'); - -module.exports = { - process(src, path) { - if (path.endsWith('.ts')) { - return tsc.transpile( - src, - tsConfig.compilerOptions, - path, - [] - ); - } - return src; - }, -}; diff --git a/src/Coverage/CoverageCodeLensProvider.ts b/src/Coverage/CoverageCodeLensProvider.ts index e73fc41f8..d8b9d0c99 100644 --- a/src/Coverage/CoverageCodeLensProvider.ts +++ b/src/Coverage/CoverageCodeLensProvider.ts @@ -1,25 +1,17 @@ import * as vscode from 'vscode' -import { JestExt } from '../JestExt' +import { GetJestExtByURI } from '../extensionManager' -export function registerCoverageCodeLens(jestExt: JestExt) { - return [ - vscode.languages.registerCodeLensProvider( - { pattern: '**/*.{ts,tsx,js,jsx}' }, - new CoverageCodeLensProvider(jestExt) - ), - ] -} - -class CoverageCodeLensProvider implements vscode.CodeLensProvider { - private jestExt: JestExt +export class CoverageCodeLensProvider implements vscode.CodeLensProvider { + private getJestExt: GetJestExtByURI - constructor(jestExt: JestExt) { - this.jestExt = jestExt + constructor(getJestExt: GetJestExtByURI) { + this.getJestExt = getJestExt } public provideCodeLenses(document: vscode.TextDocument, _token: vscode.CancellationToken) { - const coverage = this.jestExt.coverageMapProvider.getFileCoverage(document.fileName) + const ext = this.getJestExt(document.uri) + const coverage = ext && ext.coverageMapProvider.getFileCoverage(document.fileName) if (!coverage) { return } diff --git a/src/Coverage/CoverageMapProvider.ts b/src/Coverage/CoverageMapProvider.ts index 72d79fd97..a709b211d 100644 --- a/src/Coverage/CoverageMapProvider.ts +++ b/src/Coverage/CoverageMapProvider.ts @@ -18,7 +18,7 @@ export class CoverageMapProvider { return this._map } - update(obj: CoverageMap | Object) { + update(obj: CoverageMap | object) { const map = createCoverageMap(obj) const transformed = this.mapStore.transformCoverage(map) this._map = transformed.map diff --git a/src/Coverage/CoverageOverlay.ts b/src/Coverage/CoverageOverlay.ts index 3ce0f3bb6..2c5acef1e 100644 --- a/src/Coverage/CoverageOverlay.ts +++ b/src/Coverage/CoverageOverlay.ts @@ -8,8 +8,8 @@ import { hasDocument } from '../editor' export class CoverageOverlay { static readonly defaultVisibility = false static readonly defaultFormatter = 'DefaultFormatter' - private _enabled: boolean formatter: AbstractFormatter + private _enabled: boolean constructor( context: vscode.ExtensionContext, diff --git a/src/DebugCodeLens/DebugCodeLens.ts b/src/DebugCodeLens/DebugCodeLens.ts index cf81013e5..01faf7181 100644 --- a/src/DebugCodeLens/DebugCodeLens.ts +++ b/src/DebugCodeLens/DebugCodeLens.ts @@ -3,9 +3,11 @@ import * as vscode from 'vscode' export class DebugCodeLens extends vscode.CodeLens { readonly fileName: string readonly testName: string + readonly document: vscode.TextDocument - constructor(range: vscode.Range, fileName: string, testName: string) { + constructor(document: vscode.TextDocument, range: vscode.Range, fileName: string, testName: string) { super(range) + this.document = document this.fileName = fileName this.testName = testName } diff --git a/src/DebugCodeLens/DebugCodeLensProvider.ts b/src/DebugCodeLens/DebugCodeLensProvider.ts index d03662a7c..519a9eb6c 100644 --- a/src/DebugCodeLens/DebugCodeLensProvider.ts +++ b/src/DebugCodeLens/DebugCodeLensProvider.ts @@ -3,16 +3,17 @@ import { extensionName } from '../appGlobals' import { escapeRegExp } from '../helpers' import { basename } from 'path' import { DebugCodeLens } from './DebugCodeLens' -import { TestReconciliationState, TestResultProvider } from '../TestResults' +import { TestReconciliationState } from '../TestResults' import { TestState, TestStateByTestReconciliationState } from './TestState' +import { GetJestExtByURI } from '../extensionManager' export class DebugCodeLensProvider implements vscode.CodeLensProvider { - private _showWhenTestStateIn: TestState[] onDidChange: vscode.EventEmitter - testResultProvider: TestResultProvider + private _showWhenTestStateIn: TestState[] + private getJestExt: GetJestExtByURI - constructor(testResultProvider: TestResultProvider, showWhenTestStateIn: TestState[]) { - this.testResultProvider = testResultProvider + constructor(getJestExt: GetJestExtByURI, showWhenTestStateIn: TestState[] = []) { + this.getJestExt = getJestExt this._showWhenTestStateIn = showWhenTestStateIn this.onDidChange = new vscode.EventEmitter() } @@ -32,13 +33,13 @@ export class DebugCodeLensProvider implements vscode.CodeLensProvider { provideCodeLenses(document: vscode.TextDocument, _: vscode.CancellationToken): vscode.CodeLens[] { const result = [] - - if (this._showWhenTestStateIn.length === 0 || document.isUntitled) { + const ext = this.getJestExt(document.uri) + if (!ext || this._showWhenTestStateIn.length === 0 || document.isUntitled) { return result } const filePath = document.fileName - const testResults = this.testResultProvider.getResults(filePath) + const testResults = ext.testResultProvider.getResults(filePath) const fileName = basename(document.fileName) for (const test of testResults) { @@ -49,7 +50,7 @@ export class DebugCodeLensProvider implements vscode.CodeLensProvider { const start = new vscode.Position(test.start.line, test.start.column) const end = new vscode.Position(test.end.line, test.start.column + 5) const range = new vscode.Range(start, end) - result.push(new DebugCodeLens(range, fileName, test.name)) + result.push(new DebugCodeLens(document, range, fileName, test.name)) } return result @@ -63,7 +64,7 @@ export class DebugCodeLensProvider implements vscode.CodeLensProvider { resolveCodeLens(codeLens: vscode.CodeLens, _: vscode.CancellationToken): vscode.ProviderResult { if (codeLens instanceof DebugCodeLens) { codeLens.command = { - arguments: [codeLens.fileName, escapeRegExp(codeLens.testName)], + arguments: [codeLens.document, codeLens.fileName, escapeRegExp(codeLens.testName)], command: `${extensionName}.run-test`, title: 'Debug', } diff --git a/src/DebugCodeLens/TestState.ts b/src/DebugCodeLens/TestState.ts index 3b2593a2a..5ffff547b 100644 --- a/src/DebugCodeLens/TestState.ts +++ b/src/DebugCodeLens/TestState.ts @@ -7,6 +7,7 @@ export enum TestState { Unknown = 'unknown', } +// tslint:disable-next-line variable-name export const TestStateByTestReconciliationState = { [TestReconciliationState.KnownFail]: TestState.Fail, [TestReconciliationState.KnownSkip]: TestState.Skip, diff --git a/src/DebugConfigurationProvider.ts b/src/DebugConfigurationProvider.ts index 18d769610..531a514a7 100644 --- a/src/DebugConfigurationProvider.ts +++ b/src/DebugConfigurationProvider.ts @@ -50,8 +50,9 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv // https://github.com/Microsoft/vscode-recipes/tree/master/debugging-jest-tests#configure-launchjson-file-for-your-test-framework // create-react-app config according to: - // https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#debugging-tests-in-visual-studio-code + // https://facebook.github.io/create-react-app/docs/debugging-tests#debugging-tests-in-visual-studio-code + // tslint:disable no-invalid-template-strings const debugConfiguration: vscode.DebugConfiguration = { type: 'node', name: 'vscode-jest-tests', @@ -60,6 +61,7 @@ export class DebugConfigurationProvider implements vscode.DebugConfigurationProv cwd: '${workspaceFolder}', console: 'integratedTerminal', internalConsoleOptions: 'neverOpen', + disableOptimisticBPs: true, } const testCommand = folder && getTestCommand(folder.uri.fsPath) diff --git a/src/JestExt.ts b/src/JestExt.ts index 26ab0e270..d8f19dd38 100644 --- a/src/JestExt.ts +++ b/src/JestExt.ts @@ -2,8 +2,8 @@ import * as vscode from 'vscode' import { ProjectWorkspace, JestTotalResults } from 'jest-editor-support' import * as decorations from './decorations' -import { IPluginSettings } from './Settings' -import * as status from './statusBar' +import { IPluginResourceSettings } from './Settings' +import { statusBar, StatusBar } from './StatusBar' import { TestReconciliationState, TestResultProvider, @@ -17,25 +17,33 @@ import { updateDiagnostics, updateCurrentDiagnostics, resetDiagnostics, failedSu import { DebugCodeLensProvider } from './DebugCodeLens' import { DebugConfigurationProvider } from './DebugConfigurationProvider' import { DecorationOptions } from './types' -import { hasDocument, isOpenInMultipleEditors } from './editor' +import { isOpenInMultipleEditors } from './editor' import { CoverageOverlay } from './Coverage/CoverageOverlay' import { JestProcess, JestProcessManager } from './JestProcessManagement' import { isWatchNotSupported, WatchMode } from './Jest' import * as messaging from './messaging' -export class JestExt { - private workspace: ProjectWorkspace - private pluginSettings: IPluginSettings +interface InstanceSettings { + multirootEnv: boolean +} +export class JestExt { coverageMapProvider: CoverageMapProvider coverageOverlay: CoverageOverlay testResultProvider: TestResultProvider - public debugCodeLensProvider: DebugCodeLensProvider + debugCodeLensProvider: DebugCodeLensProvider debugConfigurationProvider: DebugConfigurationProvider // So you can read what's going on - private channel: vscode.OutputChannel + channel: vscode.OutputChannel + + failingAssertionDecorators: { [fileName: string]: vscode.TextEditorDecorationType[] } + + private jestWorkspace: ProjectWorkspace + private pluginSettings: IPluginResourceSettings + private workspaceFolder: vscode.WorkspaceFolder + private instanceSettings: InstanceSettings // The ability to show fails in the problems section private failDiagnostics: vscode.DiagnosticCollection @@ -48,25 +56,33 @@ export class JestExt { private parsingTestFile = false // We have to keep track of our inline assert fails to remove later - failingAssertionDecorators: { [fileName: string]: vscode.TextEditorDecorationType[] } private jestProcessManager: JestProcessManager private jestProcess: JestProcess private clearOnNextInput: boolean + private status: ReturnType constructor( context: vscode.ExtensionContext, - workspace: ProjectWorkspace, + workspaceFolder: vscode.WorkspaceFolder, + jestWorkspace: ProjectWorkspace, outputChannel: vscode.OutputChannel, - pluginSettings: IPluginSettings + pluginSettings: IPluginResourceSettings, + debugCodeLensProvider: DebugCodeLensProvider, + debugConfigurationProvider: DebugConfigurationProvider, + failDiagnostics: vscode.DiagnosticCollection, + instanceSettings: InstanceSettings ) { - this.workspace = workspace + this.workspaceFolder = workspaceFolder + this.jestWorkspace = jestWorkspace this.channel = outputChannel this.failingAssertionDecorators = {} - this.failDiagnostics = vscode.languages.createDiagnosticCollection('Jest') + this.failDiagnostics = failDiagnostics this.clearOnNextInput = true this.pluginSettings = pluginSettings + this.debugCodeLensProvider = debugCodeLensProvider + this.instanceSettings = instanceSettings this.coverageMapProvider = new CoverageMapProvider() this.coverageOverlay = new CoverageOverlay( @@ -76,23 +92,21 @@ export class JestExt { pluginSettings.coverageFormatter ) - this.testResultProvider = new TestResultProvider() - this.debugCodeLensProvider = new DebugCodeLensProvider( - this.testResultProvider, - pluginSettings.debugCodeLens.enabled ? pluginSettings.debugCodeLens.showWhenTestStateIn : [] - ) - this.debugConfigurationProvider = new DebugConfigurationProvider() + this.testResultProvider = new TestResultProvider(this.pluginSettings.debugMode) + this.debugConfigurationProvider = debugConfigurationProvider this.jestProcessManager = new JestProcessManager({ - projectWorkspace: workspace, + projectWorkspace: jestWorkspace, runAllTestsFirstInWatchMode: this.pluginSettings.runAllTestsFirst, }) + this.status = statusBar.bind(workspaceFolder.name) + // The theme stuff this.setupDecorators() // The bottom bar thing this.setupStatusBar() - //reset the jest diagnostics + // reset the jest diagnostics resetDiagnostics(this.failDiagnostics) // If we should start the process by default, do so @@ -103,59 +117,6 @@ export class JestExt { } } - private handleStdErr(error: Buffer) { - const message = error.toString() - - if (this.shouldIgnoreOutput(message)) { - return - } - - if (isWatchNotSupported(message)) { - this.jestProcess.watchMode = WatchMode.WatchAll - } - - // The "tests are done" message comes through stdErr - // We want to use this as a marker that the console should - // be cleared, as the next input will be from a new test run. - if (this.clearOnNextInput) { - this.clearOnNextInput = false - this.parsingTestFile = false - this.channel.clear() - } - // thanks Qix, http://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings - const noANSI = message.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '') - if (/(snapshot failed)|(snapshot test failed)/i.test(noANSI)) { - this.detectedSnapshotErrors() - } - - this.channel.appendLine(noANSI) - } - - private assignHandlers(jestProcess: JestProcess) { - jestProcess - .onJestEditorSupportEvent('executableJSON', (data: JestTotalResults) => { - this.updateWithData(data) - }) - .onJestEditorSupportEvent('executableOutput', (output: string) => { - if (!this.shouldIgnoreOutput(output)) { - this.channel.appendLine(output) - } - }) - .onJestEditorSupportEvent('executableStdErr', (error: Buffer) => this.handleStdErr(error)) - .onJestEditorSupportEvent('nonTerminalError', (error: string) => { - this.channel.appendLine(`Received an error from Jest Runner: ${error.toString()}`) - this.channel.show(true) - }) - .onJestEditorSupportEvent('exception', result => { - this.channel.appendLine(`\nException raised: [${result.type}]: ${result.message}\n`) - this.channel.show(true) - }) - .onJestEditorSupportEvent('terminalError', (error: string) => { - this.channel.appendLine('\nException raised: ' + error) - this.channel.show(true) - }) - } - public startProcess() { if (this.jestProcessManager.numberOfProcesses > 0) { return @@ -173,14 +134,17 @@ export class JestExt { this.jestProcess = jestProcessInWatchMode this.channel.appendLine('Finished running all tests. Starting watch mode.') - status.running('Starting watch mode') + this.status.running('Starting watch mode') this.assignHandlers(this.jestProcess) } else { - status.stopped() - if (!jestProcess.stopRequested) { - const msg = `Starting Jest in Watch mode failed too many times and has been stopped.` - this.channel.appendLine(`${msg}\n see troubleshooting: ${messaging.TroubleShootingURL}`) + this.status.stopped() + if (!jestProcess.stopRequested()) { + let msg = `Starting Jest in Watch mode failed too many times and has been stopped.` + if (this.instanceSettings.multirootEnv) { + msg += `\nConsider add this workspace folder to disabledWorkspaceFolders` + } + this.channel.appendLine(`${msg}\n see troubleshooting: ${messaging.TROUBLESHOOTING_URL}`) this.channel.show(true) messaging.systemErrorMessage(msg, messaging.showTroubleshootingAction) } @@ -193,31 +157,15 @@ export class JestExt { public stopProcess() { this.channel.appendLine('Closing Jest') - this.jestProcessManager.stopAll() - status.stopped() + return this.jestProcessManager.stopAll().then(() => { + this.status.stopped() + }) } - private detectedSnapshotErrors() { - if (!this.pluginSettings.enableSnapshotUpdateMessages) { - return - } - vscode.window - .showInformationMessage('Would you like to update your Snapshots?', { title: 'Replace them' }) - .then(response => { - // No response == cancel - if (response) { - this.jestProcess.runJestWithUpdateForSnapshots(() => { - if (this.pluginSettings.restartJestOnSnapshotUpdate) { - this.jestProcessManager.stopJestProcess(this.jestProcess).then(() => { - this.startProcess() - }) - vscode.window.showInformationMessage('Updated Snapshots and restarted Jest.') - } else { - vscode.window.showInformationMessage('Updated Snapshots. It will show in your next test run.') - } - }) - } - }) + public restartProcess() { + return this.stopProcess().then(() => { + this.startProcess() + }) } public triggerUpdateActiveEditor(editor: vscode.TextEditor) { @@ -241,25 +189,18 @@ export class JestExt { this.parsingTestFile = false } - public triggerUpdateSettings(updatedSettings: IPluginSettings) { + public triggerUpdateSettings(updatedSettings: IPluginResourceSettings) { this.pluginSettings = updatedSettings - this.workspace.rootPath = updatedSettings.rootPath - this.workspace.pathToJest = pathToJest(updatedSettings) - this.workspace.pathToConfig = pathToConfig(updatedSettings) - this.workspace.debug = updatedSettings.debugMode + this.jestWorkspace.rootPath = updatedSettings.rootPath + this.jestWorkspace.pathToJest = pathToJest(updatedSettings) + this.jestWorkspace.pathToConfig = pathToConfig(updatedSettings) + this.jestWorkspace.debug = updatedSettings.debugMode + this.testResultProvider.verbose = updatedSettings.debugMode this.coverageOverlay.enabled = updatedSettings.showCoverageOnLoad - this.debugCodeLensProvider.showWhenTestStateIn = updatedSettings.debugCodeLens.enabled - ? updatedSettings.debugCodeLens.showWhenTestStateIn - : [] - - this.stopProcess() - - setTimeout(() => { - this.startProcess() - }, 500) + this.restartProcess() } updateDecorators(testResults: SortedTestResults, editor: vscode.TextEditor) { @@ -290,37 +231,6 @@ export class JestExt { } } - private resetInlineErrorDecorators(editor: vscode.TextEditor) { - if (!this.failingAssertionDecorators[editor.document.fileName]) { - this.failingAssertionDecorators[editor.document.fileName] = [] - return - } - - if (isOpenInMultipleEditors(editor.document)) { - return - } - - this.failingAssertionDecorators[editor.document.fileName].forEach(element => { - element.dispose() - }) - this.failingAssertionDecorators[editor.document.fileName] = [] - } - - private generateInlineErrorDecorator(fileName: string, test: TestResult) { - const errorMessage = test.terseMessage || test.shortMessage - const decorator = { - range: new vscode.Range(test.lineNumberOfError, 0, test.lineNumberOfError, 0), - hoverMessage: errorMessage, - } - - // We have to make a new style for each unique message, this is - // why we have to remove off of them beforehand - const style = decorations.failingAssertionStyle(errorMessage) - this.failingAssertionDecorators[fileName].push(style) - - return { style, decorator } - } - canUpdateActiveEditor(editor: vscode.TextEditor) { const inSettings = !editor.document if (inSettings) { @@ -336,69 +246,11 @@ export class JestExt { return codeRegex.test(editor.document.uri.fsPath) } - private setupStatusBar() { - status.initial() - } - - private setupDecorators() { - this.passingItStyle = decorations.passingItName() - this.failingItStyle = decorations.failingItName() - this.skipItStyle = decorations.skipItName() - this.unknownItStyle = decorations.notRanItName() - } - - private shouldIgnoreOutput(text: string): boolean { - // this fails when snapshots change - to be revised - returning always false for now - return text.includes('Watch Usage') - } - - private testsHaveStartedRunning() { - this.channel.clear() - status.running('initial full test run') - } - - private updateWithData(data: JestTotalResults) { - const normalizedData = resultsWithLowerCaseWindowsDriveLetters(data) - this.coverageMapProvider.update(normalizedData.coverageMap) - - const statusList = this.testResultProvider.updateTestResults(normalizedData) - updateDiagnostics(statusList, this.failDiagnostics) - - const failedFileCount = failedSuiteCount(this.failDiagnostics) - if (failedFileCount <= 0 && normalizedData.success) { - status.success() - } else { - status.failed(` (${failedFileCount} test suite${failedFileCount > 1 ? 's' : ''} failed)`) - } - - for (const editor of vscode.window.visibleTextEditors) { - this.triggerUpdateActiveEditor(editor) - } - this.clearOnNextInput = true - } - - private generateDotsForItBlocks(blocks: TestResult[], state: TestReconciliationState): DecorationOptions[] { - const nameForState = { - [TestReconciliationState.KnownSuccess]: 'Passed', - [TestReconciliationState.KnownFail]: 'Failed', - [TestReconciliationState.KnownSkip]: 'Skipped', - [TestReconciliationState.Unknown]: 'Test has not run yet, due to Jest only running tests related to changes.', - } - - return blocks.map(it => { - return { - range: new vscode.Range(it.start.line, it.start.column, it.start.line, it.start.column + 1), - hoverMessage: nameForState[state], - identifier: it.name, - } - }) - } - public deactivate() { this.jestProcessManager.stopAll() } - public runTest = async (fileName: string, identifier: string) => { + public runTest = async (workspaceFolder: vscode.WorkspaceFolder, fileName: string, identifier: string) => { const restart = this.jestProcessManager.numberOfProcesses > 0 this.jestProcessManager.stopAll() @@ -411,7 +263,6 @@ export class JestExt { } }) - const workspaceFolder = vscode.workspace.workspaceFolders[0] try { // try to run the debug configuration from launch.json await vscode.debug.startDebugging(workspaceFolder, 'vscode-jest-tests') @@ -446,18 +297,14 @@ export class JestExt { } onDidChangeActiveTextEditor(editor: vscode.TextEditor) { - if (!hasDocument(editor)) { - return - } - this.triggerUpdateActiveEditor(editor) } /** -* This event is fired with the document not dirty when: -* - before the onDidSaveTextDocument event -* - the document was changed by an external editor -*/ + * This event is fired with the document not dirty when: + * - before the onDidSaveTextDocument event + * - the document was changed by an external editor + */ onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent) { if (event.document.isDirty) { return @@ -483,4 +330,170 @@ export class JestExt { toggleCoverageOverlay() { this.coverageOverlay.toggleVisibility() } + + private detectedSnapshotErrors() { + if (!this.pluginSettings.enableSnapshotUpdateMessages) { + return + } + vscode.window + .showInformationMessage('Would you like to update your Snapshots?', { title: 'Replace them' }) + .then(response => { + // No response == cancel + if (response) { + this.jestProcess.runJestWithUpdateForSnapshots(() => { + if (this.pluginSettings.restartJestOnSnapshotUpdate) { + this.jestProcessManager.stopJestProcess(this.jestProcess).then(() => { + this.startProcess() + }) + vscode.window.showInformationMessage('Updated Snapshots and restarted Jest.') + } else { + vscode.window.showInformationMessage('Updated Snapshots. It will show in your next test run.') + } + }) + } + }) + } + + private resetInlineErrorDecorators(editor: vscode.TextEditor) { + if (!this.failingAssertionDecorators[editor.document.fileName]) { + this.failingAssertionDecorators[editor.document.fileName] = [] + return + } + + if (isOpenInMultipleEditors(editor.document)) { + return + } + + this.failingAssertionDecorators[editor.document.fileName].forEach(element => { + element.dispose() + }) + this.failingAssertionDecorators[editor.document.fileName] = [] + } + + private generateInlineErrorDecorator(fileName: string, test: TestResult) { + const errorMessage = test.terseMessage || test.shortMessage + const decorator = { + range: new vscode.Range(test.lineNumberOfError, 0, test.lineNumberOfError, 0), + hoverMessage: errorMessage, + } + + // We have to make a new style for each unique message, this is + // why we have to remove off of them beforehand + const style = decorations.failingAssertionStyle(errorMessage) + this.failingAssertionDecorators[fileName].push(style) + + return { style, decorator } + } + + private handleStdErr(error: Buffer) { + const message = error.toString() + if (this.shouldIgnoreOutput(message)) { + return + } + + if (isWatchNotSupported(message)) { + this.jestProcess.watchMode = WatchMode.WatchAll + } + + // The "tests are done" message comes through stdErr + // We want to use this as a marker that the console should + // be cleared, as the next input will be from a new test run. + if (this.clearOnNextInput) { + this.clearOnNextInput = false + this.parsingTestFile = false + this.channel.clear() + } + // thanks Qix, http://stackoverflow.com/questions/25245716/remove-all-ansi-colors-styles-from-strings + const noANSI = message.replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, '') + if (/(snapshot failed)|(snapshot test failed)/i.test(noANSI)) { + this.detectedSnapshotErrors() + } + + this.channel.appendLine(noANSI) + } + + private assignHandlers(jestProcess: JestProcess) { + jestProcess + .onJestEditorSupportEvent('executableJSON', (data: JestTotalResults) => { + this.updateWithData(data) + }) + .onJestEditorSupportEvent('executableOutput', (output: string) => { + if (!this.shouldIgnoreOutput(output)) { + this.channel.appendLine(output) + } + }) + .onJestEditorSupportEvent('executableStdErr', (error: Buffer) => this.handleStdErr(error)) + .onJestEditorSupportEvent('nonTerminalError', (error: string) => { + this.channel.appendLine(`Received an error from Jest Runner: ${error.toString()}`) + this.channel.show(true) + }) + .onJestEditorSupportEvent('exception', result => { + this.channel.appendLine(`\nException raised: [${result.type}]: ${result.message}\n`) + this.channel.show(true) + }) + .onJestEditorSupportEvent('terminalError', (error: string) => { + this.channel.appendLine('\nException raised: ' + error) + this.channel.show(true) + }) + } + + private setupStatusBar() { + this.status.initial() + } + + private setupDecorators() { + this.passingItStyle = decorations.passingItName() + this.failingItStyle = decorations.failingItName() + this.skipItStyle = decorations.skipItName() + this.unknownItStyle = decorations.notRanItName() + } + + private shouldIgnoreOutput(text: string): boolean { + // this fails when snapshots change - to be revised - returning always false for now + return text.includes('Watch Usage') + } + + private testsHaveStartedRunning() { + this.channel.clear() + this.status.running('initial full test run') + } + + private updateWithData(data: JestTotalResults) { + const normalizedData = resultsWithLowerCaseWindowsDriveLetters(data) + this.coverageMapProvider.update(normalizedData.coverageMap) + + const statusList = this.testResultProvider.updateTestResults(normalizedData) + updateDiagnostics(statusList, this.failDiagnostics) + + const failedFileCount = failedSuiteCount(this.failDiagnostics) + if (failedFileCount <= 0 && normalizedData.success) { + this.status.success() + } else { + this.status.failed(` (${failedFileCount} test suite${failedFileCount > 1 ? 's' : ''} failed)`) + } + + for (const editor of vscode.window.visibleTextEditors) { + if (vscode.workspace.getWorkspaceFolder(editor.document.uri) === this.workspaceFolder) { + this.triggerUpdateActiveEditor(editor) + } + } + this.clearOnNextInput = true + } + + private generateDotsForItBlocks(blocks: TestResult[], state: TestReconciliationState): DecorationOptions[] { + const nameForState = { + [TestReconciliationState.KnownSuccess]: 'Passed', + [TestReconciliationState.KnownFail]: 'Failed', + [TestReconciliationState.KnownSkip]: 'Skipped', + [TestReconciliationState.Unknown]: 'Test has not run yet, due to Jest only running tests related to changes.', + } + + return blocks.map(it => { + return { + range: new vscode.Range(it.start.line, it.start.column, it.start.line, it.start.column + 1), + hoverMessage: nameForState[state], + identifier: it.name, + } + }) + } } diff --git a/src/JestProcessManagement/JestProcess.ts b/src/JestProcessManagement/JestProcess.ts index 8d5aab86b..414a752a3 100644 --- a/src/JestProcessManagement/JestProcess.ts +++ b/src/JestProcessManagement/JestProcess.ts @@ -1,54 +1,19 @@ import { platform } from 'os' import { Runner, ProjectWorkspace } from 'jest-editor-support' import { WatchMode } from '../Jest' +import { ExitCallback } from './JestProcessManager' export class JestProcess { static readonly keepAliveLimit = 5 + static readonly stopHangTimeout = 500 + public keepAlive: boolean + public watchMode: WatchMode private runner: Runner private projectWorkspace: ProjectWorkspace - private onExitCallback: Function + private onExitCallback: ExitCallback private jestSupportEvents: Map void> - private resolve: Function + private stopResolveCallback: () => void | null private keepAliveCounter: number - public keepAlive: boolean - public stopRequested: boolean - watchMode: WatchMode - - private startRunner() { - this.stopRequested = false - let exited = false - - const options = { - noColor: true, - shell: platform() === 'win32', - } - this.runner = new Runner(this.projectWorkspace, options) - - this.restoreJestEvents() - - this.runner.start(this.watchMode !== WatchMode.None, this.watchMode === WatchMode.WatchAll) - - this.runner.on('debuggerProcessExit', () => { - if (!exited) { - exited = true - if (--this.keepAliveCounter > 0) { - this.runner.removeAllListeners() - this.startRunner() - } else if (this.onExitCallback) { - this.onExitCallback(this) - if (this.stopRequested) { - this.resolve() - } - } - } - }) - } - - private restoreJestEvents() { - for (const [event, callback] of this.jestSupportEvents.entries()) { - this.runner.on(event, callback) - } - } constructor({ projectWorkspace, @@ -68,27 +33,73 @@ export class JestProcess { this.startRunner() } - public onExit(callback: Function) { + public onExit(callback: ExitCallback) { this.onExitCallback = callback } - public onJestEditorSupportEvent(event, callback) { + public onJestEditorSupportEvent(event: string, callback: (...args: any[]) => void) { this.jestSupportEvents.set(event, callback) this.runner.on(event, callback) return this } - public stop() { - this.stopRequested = true - this.keepAliveCounter = 1 - this.jestSupportEvents.clear() - this.runner.closeProcess() + public stop(): Promise { return new Promise(resolve => { - this.resolve = resolve + this.keepAliveCounter = 1 + this.stopResolveCallback = resolve + this.jestSupportEvents.clear() + this.runner.closeProcess() + + // As a safety fallback to prevent the stop from hanging, resolve after a timeout + // this is safe since subsequent resolve calls are no-op + // TODO: If `closeProcess` can be guarenteed to always resolve, remove this + setTimeout(resolve, JestProcess.stopHangTimeout) }) } - public runJestWithUpdateForSnapshots(callback) { + public runJestWithUpdateForSnapshots(callback: () => void) { this.runner.runJestWithUpdateForSnapshots(callback) } + + public stopRequested(): boolean { + return this.stopResolveCallback !== null + } + private startRunner() { + this.stopResolveCallback = null + let exited = false + + const options = { + noColor: true, + shell: platform() === 'win32', + } + this.runner = new Runner(this.projectWorkspace, options) + + this.restoreJestEvents() + + this.runner.start(this.watchMode !== WatchMode.None, this.watchMode === WatchMode.WatchAll) + + this.runner.on('debuggerProcessExit', () => { + if (!exited) { + exited = true + if (--this.keepAliveCounter > 0) { + this.runner.removeAllListeners() + this.startRunner() + } else { + if (this.onExitCallback) { + this.onExitCallback(this) + } + if (this.stopResolveCallback) { + this.stopResolveCallback() + this.stopResolveCallback = null + } + } + } + }) + } + + private restoreJestEvents() { + for (const [event, callback] of this.jestSupportEvents.entries()) { + this.runner.on(event, callback) + } + } } diff --git a/src/JestProcessManagement/JestProcessManager.ts b/src/JestProcessManagement/JestProcessManager.ts index 024d8eb90..648660fcf 100644 --- a/src/JestProcessManagement/JestProcessManager.ts +++ b/src/JestProcessManagement/JestProcessManager.ts @@ -2,9 +2,11 @@ import { ProjectWorkspace } from 'jest-editor-support' import { JestProcess } from './JestProcess' import { WatchMode } from '../Jest' +export type ExitCallback = (exitedJestProcess: JestProcess, jestProcessInWatchMode?: JestProcess) => void + export class JestProcessManager { private projectWorkspace: ProjectWorkspace - private jestProcesses: Array = [] + private jestProcesses: JestProcess[] = [] private runAllTestsFirstInWatchMode: boolean constructor({ @@ -18,14 +20,64 @@ export class JestProcessManager { this.runAllTestsFirstInWatchMode = runAllTestsFirstInWatchMode } - private removeJestProcessReference(jestProcess) { + public startJestProcess({ + exitCallback = () => {}, + watchMode = WatchMode.None, + keepAlive = false, + }: { + exitCallback?: ExitCallback + watchMode?: WatchMode + keepAlive?: boolean + } = {}): JestProcess { + if (watchMode !== WatchMode.None && this.runAllTestsFirstInWatchMode) { + return this.runAllTestsFirst(exitedJestProcess => { + this.removeJestProcessReference(exitedJestProcess) + const jestProcessInWatchMode = this.run({ + watchMode: WatchMode.Watch, + keepAlive, + exitCallback, + }) + exitCallback(exitedJestProcess, jestProcessInWatchMode) + }) + } else { + return this.run({ + watchMode, + keepAlive, + exitCallback, + }) + } + } + + public stopAll() { + const processesToRemove = [...this.jestProcesses] + this.jestProcesses = [] + return Promise.all(processesToRemove.map(jestProcess => jestProcess.stop())) + } + + public stopJestProcess(jestProcess: JestProcess) { + this.removeJestProcessReference(jestProcess) + return jestProcess.stop() + } + + public get numberOfProcesses() { + return this.jestProcesses.length + } + private removeJestProcessReference(jestProcess: JestProcess) { const index = this.jestProcesses.indexOf(jestProcess) if (index !== -1) { this.jestProcesses.splice(index, 1) } } - private runJest({ watchMode, keepAlive, exitCallback }) { + private runJest({ + watchMode, + keepAlive, + exitCallback, + }: { + watchMode: WatchMode + keepAlive: boolean + exitCallback: ExitCallback + }) { const jestProcess = new JestProcess({ projectWorkspace: this.projectWorkspace, watchMode, @@ -38,11 +90,19 @@ export class JestProcessManager { return jestProcess } - private run({ watchMode, keepAlive, exitCallback }) { + private run({ + watchMode, + keepAlive, + exitCallback, + }: { + watchMode: WatchMode + keepAlive: boolean + exitCallback: ExitCallback + }) { return this.runJest({ watchMode, keepAlive, - exitCallback: exitedJestProcess => { + exitCallback: (exitedJestProcess: JestProcess) => { exitCallback(exitedJestProcess) if (!exitedJestProcess.keepAlive) { this.removeJestProcessReference(exitedJestProcess) @@ -51,58 +111,11 @@ export class JestProcessManager { }) } - private runAllTestsFirst(onExit) { + private runAllTestsFirst(onExit: ExitCallback) { return this.runJest({ watchMode: WatchMode.None, keepAlive: false, exitCallback: onExit, }) } - - public startJestProcess( - { - exitCallback = () => {}, - watchMode = WatchMode.None, - keepAlive = false, - }: { - exitCallback?: Function - watchMode?: WatchMode - keepAlive?: boolean - } = {} - ): JestProcess { - if (watchMode !== WatchMode.None && this.runAllTestsFirstInWatchMode) { - return this.runAllTestsFirst(exitedJestProcess => { - this.removeJestProcessReference(exitedJestProcess) - const jestProcessInWatchMode = this.run({ - watchMode: WatchMode.Watch, - keepAlive, - exitCallback, - }) - exitCallback(exitedJestProcess, jestProcessInWatchMode) - }) - } else { - return this.run({ - watchMode, - keepAlive, - exitCallback, - }) - } - } - - public stopAll() { - const processesToRemove = [...this.jestProcesses] - this.jestProcesses = [] - processesToRemove.forEach(jestProcess => { - jestProcess.stop() - }) - } - - public stopJestProcess(jestProcess) { - this.removeJestProcessReference(jestProcess) - return jestProcess.stop() - } - - public get numberOfProcesses() { - return this.jestProcesses.length - } } diff --git a/src/Settings/index.ts b/src/Settings/index.ts index cbbea4245..17de6184f 100644 --- a/src/Settings/index.ts +++ b/src/Settings/index.ts @@ -1,13 +1,8 @@ import { TestState } from '../DebugCodeLens' -export interface IPluginSettings { +export interface IPluginResourceSettings { autoEnable?: boolean - debugCodeLens: { - enabled: boolean - showWhenTestStateIn: TestState[] - } enableInlineErrorMessages?: boolean - enableSnapshotPreviews?: boolean enableSnapshotUpdateMessages?: boolean pathToConfig?: string pathToJest?: string @@ -19,6 +14,15 @@ export interface IPluginSettings { debugMode?: boolean } +export interface IPluginWindowSettings { + debugCodeLens: { + enabled: boolean + showWhenTestStateIn: TestState[] + } + enableSnapshotPreviews?: boolean + disabledWorkspaceFolders: string[] +} + export function isDefaultPathToJest(str) { return str === null || str === '' } diff --git a/src/SnapshotCodeLens/SnapshotPreviewProvider.ts b/src/SnapshotCodeLens/SnapshotPreviewProvider.ts index 6ee59510e..2f458678a 100644 --- a/src/SnapshotCodeLens/SnapshotPreviewProvider.ts +++ b/src/SnapshotCodeLens/SnapshotPreviewProvider.ts @@ -6,33 +6,12 @@ import { extensionName } from '../appGlobals' export const previewCommand = `${extensionName}.snapshot.preview` export function registerSnapshotPreview() { - const previewUri = vscode.Uri.parse(`${extensionName}.snapshot.preview://snapshot-preview`) - const provider = new SnapshotPreviewProvider() - return [ - vscode.commands.registerCommand(previewCommand, (snapshot: SnapshotMetadata) => { - vscode.commands.executeCommand('vscode.previewHtml', previewUri, vscode.ViewColumn.Two, snapshot.name) - provider.update(previewUri, snapshot.content) - }), - vscode.workspace.registerTextDocumentContentProvider(`${extensionName}.snapshot.preview`, provider), - ] -} + let panel: vscode.WebviewPanel = null -class SnapshotPreviewProvider implements vscode.TextDocumentContentProvider { - private _onDidChange = new vscode.EventEmitter() - private snapshot: string - - get onDidChange() { - return this._onDidChange.event - } - - public update(uri: vscode.Uri, snapshot: string) { - this.snapshot = snapshot - this._onDidChange.fire(uri) - } - - public provideTextDocumentContent() { - if (this.snapshot) { - const escaped = this.snapshot + const escaped = (snapshot: string) => { + if (snapshot) { + // tslint:disable-next-line no-shadowed-variable + const escaped = snapshot .replace(/&/g, '&') .replace(/"/g, '"') .replace(/'/g, ''') @@ -41,4 +20,21 @@ class SnapshotPreviewProvider implements vscode.TextDocumentContentProvider { return `
${escaped}
` } } + + return [ + vscode.commands.registerCommand(previewCommand, (snapshot: SnapshotMetadata) => { + if (panel) { + panel.reveal() + } else { + panel = vscode.window.createWebviewPanel('view_snapshot', snapshot.name, vscode.ViewColumn.Two, {}) + + panel.onDidDispose(() => { + panel = null + }) + } + + panel.webview.html = escaped(snapshot.content) + panel.title = snapshot.name + }), + ] } diff --git a/src/StatusBar.ts b/src/StatusBar.ts new file mode 100644 index 000000000..51a352113 --- /dev/null +++ b/src/StatusBar.ts @@ -0,0 +1,269 @@ +import * as vscode from 'vscode' +import * as elegantSpinner from 'elegant-spinner' +import { extensionName } from './appGlobals' +import { JestExt } from './JestExt' + +export enum StatusType { + active, + summary, +} + +type Status = 'running' | 'failed' | 'success' | 'stopped' | 'initial' +interface StatusUpdateRequest { + source: string + status: Status + details: string | undefined +} + +interface SpinnableStatusBarItem { + readonly type: StatusType + command: string | undefined + text: string | undefined + tooltip: string | undefined + + show(): void + hide(): void + clearSpinner(): void + startSpinner(callback: () => void): void +} + +const createStatusBarItem = (type: StatusType, priority: number): SpinnableStatusBarItem => { + let spinner: NodeJS.Timer | undefined + const item = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, priority) + const clearSpinner = () => { + if (spinner) { + clearInterval(spinner) + } + } + + return { + type, + clearSpinner, + startSpinner: (callback: () => void, interval = 100) => { + clearSpinner() + spinner = setInterval(callback, interval) + }, + show: () => item.show(), + hide: () => { + item.hide() + clearSpinner() + }, + + get command() { + return item.command + }, + get text() { + return item.text + }, + get tooltip() { + return item.tooltip + }, + + set command(_command: string) { + item.command = _command + }, + set text(_text: string) { + item.text = _text + }, + set tooltip(_tooltip: string) { + item.tooltip = _tooltip + }, + } +} + +// The bottom status bar +export class StatusBar { + private activeStatusItem = createStatusBarItem(StatusType.active, 2) + private summaryStatusItem = createStatusBarItem(StatusType.summary, 1) + + private frame = elegantSpinner() + private priorities: Status[] = ['running', 'failed', 'success', 'stopped', 'initial'] + private requests = new Map() + private _activeFolder?: string + private summaryOutput?: vscode.OutputChannel + + constructor() { + this.summaryStatusItem.tooltip = 'Jest status summary of the workspace' + this.activeStatusItem.tooltip = 'Jest status of the active folder' + } + + register(getExtension: (name: string) => JestExt | undefined) { + const showSummaryOutput = `${extensionName}.show-summary-output` + const showActiveOutput = `${extensionName}.show-active-output` + this.summaryStatusItem.command = showSummaryOutput + this.activeStatusItem.command = showActiveOutput + + return [ + vscode.commands.registerCommand(showSummaryOutput, () => { + if (this.summaryOutput) { + this.summaryOutput.show() + } + }), + vscode.commands.registerCommand(showActiveOutput, () => { + if (this.activeFolder) { + const ext = getExtension(this.activeFolder) + if (ext) { + ext.channel.show() + } + } + }), + ] + } + bind(source: string) { + return { + initial: () => { + this.request(source, 'initial') + }, + running: (details?: string) => { + this.request(source, 'running', details) + }, + success: (details?: string) => { + this.request(source, 'success', details) + }, + failed: (details?: string) => { + this.request(source, 'failed', details) + }, + stopped: (details?: string) => { + this.request(source, 'stopped', details) + }, + } + } + + onDidChangeActiveTextEditor(editor: vscode.TextEditor) { + if (editor && editor.document) { + const folder = vscode.workspace.getWorkspaceFolder(editor.document.uri) + if (folder && folder.name !== this._activeFolder) { + this._activeFolder = folder.name + this.updateActiveStatus() + } + } + } + + private request(source: string, status: Status, details?: string) { + const request: StatusUpdateRequest = { + source, + status, + details, + } + this.requests.set(source, request) + this.updateStatus(request) + } + private updateStatus(request: StatusUpdateRequest) { + this.updateActiveStatus(request) + this.updateSummaryStatus() + } + + private get activeFolder() { + if (!this._activeFolder && vscode.window.activeTextEditor) { + const folder = vscode.workspace.getWorkspaceFolder(vscode.window.activeTextEditor.document.uri) + if (folder) { + this._activeFolder = folder.name + } + } + return this._activeFolder + } + + private updateActiveStatus(request?: StatusUpdateRequest) { + if (request && this.activeFolder) { + if (request.source === this.activeFolder) { + this.render(request, this.activeStatusItem) + } + return + } + + // find the active item from requests + let _request = null + if (this.activeFolder) { + _request = this.requests.get(this.activeFolder) + } + if (!_request && this.requests.size === 1) { + _request = this.requests.values().next().value + } + + if (_request) { + this.render(_request, this.activeStatusItem) + } else { + this.activeStatusItem.hide() + } + } + + private updateSummaryStatus() { + if (this.needsSummaryStatus()) { + this.updateSummaryOutput() + + let summaryStatus: StatusUpdateRequest | undefined + let prev = 99 + for (const r of this.requests.values()) { + const idx = this.priorities.indexOf(r.status) + if (idx >= 0 && idx < prev) { + summaryStatus = r + prev = idx + } + } + + if (summaryStatus) { + this.render(summaryStatus, this.summaryStatusItem) + return + } + } + this.summaryStatusItem.hide() + } + + private render(request: StatusUpdateRequest, statusBarItem: SpinnableStatusBarItem) { + statusBarItem.clearSpinner() + + const message = this.getMessageByStatus(request.status) + if (request.status === 'running') { + statusBarItem.startSpinner(() => this.render(request, statusBarItem)) + } + + switch (statusBarItem.type) { + case StatusType.active: + const details = !this.needsSummaryStatus() && request.details ? request.details : '' + statusBarItem.text = `Jest: ${message} ${details}` + statusBarItem.tooltip = `Jest status of '${this.activeFolder}'` + break + case StatusType.summary: + statusBarItem.text = `Jest-WS: ${message}` + break + default: + throw new Error(`unexpected statusType: ${statusBarItem.type}`) + } + statusBarItem.show() + } + + private updateSummaryOutput() { + if (!this.summaryOutput) { + this.summaryOutput = vscode.window.createOutputChannel('Jest (Workspace)') + } + this.summaryOutput.clear() + + const messages = [] + this.requests.forEach(item => { + const details = item.details ? `: ${item.details}` : '' + messages.push(`${item.source}: ${item.status} ${details}`) + }) + this.summaryOutput.append(messages.join('\n')) + } + + private needsSummaryStatus() { + return this.requests.size > 1 + } + + private getMessageByStatus(status: Status) { + switch (status) { + case 'running': + return this.frame() + case 'failed': + return '$(alert)' + case 'success': + return '$(check)' + case 'initial': + return '...' + default: + return status + } + } +} + +export const statusBar = new StatusBar() diff --git a/src/TestParser.ts b/src/TestParser.ts index ec124dd55..054448df8 100644 --- a/src/TestParser.ts +++ b/src/TestParser.ts @@ -1,12 +1,5 @@ -import { IParseResults, parse as parseJavaScript } from 'jest-editor-support' -import { parse as parseTypeScript } from 'jest-test-typescript-parser' - -export function getParser(filePath: string): Function { - const isTypeScript = filePath.match(/\.tsx?$/) - return isTypeScript ? parseTypeScript : parseJavaScript -} +import { IParseResults, parse } from 'jest-editor-support' export function parseTest(filePath: string): IParseResults { - const parser = getParser(filePath) - return parser(filePath) + return parse(filePath) } diff --git a/src/TestResults/TestReconciliationState.ts b/src/TestResults/TestReconciliationState.ts index 50d148eeb..54093fcc3 100644 --- a/src/TestResults/TestReconciliationState.ts +++ b/src/TestResults/TestReconciliationState.ts @@ -1,4 +1,6 @@ export type TestReconciliationState = 'Unknown' | 'KnownSuccess' | 'KnownFail' | 'KnownSkip' + +// tslint:disable-next-line variable-name export const TestReconciliationState = { Unknown: 'Unknown' as TestReconciliationState, KnownSuccess: 'KnownSuccess' as TestReconciliationState, diff --git a/src/TestResults/TestResult.ts b/src/TestResults/TestResult.ts index f37d70ee0..70a12ecb0 100644 --- a/src/TestResults/TestResult.ts +++ b/src/TestResults/TestResult.ts @@ -1,10 +1,9 @@ import { TestReconciliationState } from './TestReconciliationState' -import { JestTotalResults } from 'jest-editor-support' -import { JestFileResults } from 'jest-editor-support' +import { JestFileResults, JestTotalResults } from 'jest-editor-support' import { FileCoverage } from 'istanbul-lib-coverage' import * as path from 'path' -type Position = { +interface Position { /** Zero-based column number */ column: number @@ -12,7 +11,7 @@ type Position = { line: number } -export type TestResult = { +export interface TestResult { name: string start: Position end: Position @@ -71,9 +70,7 @@ function fileCoverageWithLowerCaseWindowsDriveLetter(fileCoverage: FileCoverage) return fileCoverage } -export function testResultsWithLowerCaseWindowsDriveLetters( - testResults: Array -): Array { +export function testResultsWithLowerCaseWindowsDriveLetters(testResults: JestFileResults[]): JestFileResults[] { if (!testResults) { return testResults } diff --git a/src/TestResults/TestResultProvider.ts b/src/TestResults/TestResultProvider.ts index fa60e6c51..ceaf75681 100644 --- a/src/TestResults/TestResultProvider.ts +++ b/src/TestResults/TestResultProvider.ts @@ -1,28 +1,42 @@ -import { TestReconciler, JestTotalResults } from 'jest-editor-support' -import { TestFileAssertionStatus } from 'jest-editor-support' +import { + TestReconciler, + JestTotalResults, + TestAssertionStatus, + TestFileAssertionStatus, + ItBlock, +} from 'jest-editor-support' import { TestReconciliationState } from './TestReconciliationState' import { TestResult } from './TestResult' import { parseTest } from '../TestParser' -type TestResultsMap = { [filePath: string]: TestResult[] } +interface TestResultsMap { + [filePath: string]: TestResult[] +} -export type SortedTestResults = { +export interface SortedTestResults { fail: TestResult[] skip: TestResult[] success: TestResult[] unknown: TestResult[] } -type SortedTestResultsMap = { [filePath: string]: SortedTestResults } +interface SortedTestResultsMap { + [filePath: string]: SortedTestResults +} + +type IsMatched = (test: ItBlock, assertion: TestAssertionStatus) => boolean +type OnMatchError = (test: ItBlock, matched: TestAssertionStatus[]) => string | undefined export class TestResultProvider { + verbose: boolean private reconciler: TestReconciler private resultsByFilePath: TestResultsMap private sortedResultsByFilePath: SortedTestResultsMap - constructor() { + constructor(verbose = false) { this.reconciler = new TestReconciler() this.resetCache() + this.verbose = verbose } resetCache() { @@ -31,51 +45,128 @@ export class TestResultProvider { } getResults(filePath: string): TestResult[] { + const toMatchResult = (test: ItBlock, assertion?: TestAssertionStatus, err?: string) => ({ + // Note the shift from one-based to zero-based line number and columns + name: test.name, + start: { + column: test.start.column - 1, + line: test.start.line - 1, + }, + end: { + column: test.end.column - 1, + line: test.end.line - 1, + }, + + status: assertion ? assertion.status : TestReconciliationState.Unknown, + shortMessage: assertion ? assertion.shortMessage : err, + terseMessage: assertion ? assertion.terseMessage : undefined, + lineNumberOfError: + assertion && assertion.line && assertion.line >= test.start.line && assertion.line <= test.end.line + ? assertion.line - 1 + : test.end.line - 1, + }) + + const matchTests = ( + _itBlocks: ItBlock[], + _assertions: TestAssertionStatus[], + _isMatched: IsMatched[], + _onMatchError?: OnMatchError, + trackRemaining?: boolean + ): [TestResult[], ItBlock[], TestAssertionStatus[]] => { + const results: TestResult[] = [] + const remainingAssertions = Array.from(_assertions) + const remainingTests: ItBlock[] = [] + const _trackRemaining = trackRemaining === undefined ? true : trackRemaining + + _itBlocks.forEach(test => { + const matched = remainingAssertions.filter(a => _isMatched.every(m => m(test, a))) + if (matched.length === 1) { + const aIndex = remainingAssertions.indexOf(matched[0]) + if (aIndex < 0) { + throw new Error(`can't find assertion in the list`) + } + results.push(toMatchResult(test, matched[0])) + if (_trackRemaining) { + remainingAssertions.splice(aIndex, 1) + } + return + } + + let err: string + if (_onMatchError) { + err = _onMatchError(test, matched) + } + // if there is an error string, create a test result with it + if (err) { + results.push(toMatchResult(test, undefined, err)) + return + } + + if (_trackRemaining) { + remainingTests.push(test) + } + }) + return [results, remainingTests, remainingAssertions] + } + if (this.resultsByFilePath[filePath]) { return this.resultsByFilePath[filePath] } + const matchPos = (t: ItBlock, a: TestAssertionStatus): boolean => + (a.line !== undefined && a.line >= t.start.line && a.line <= t.end.line) || + (a.location && a.location.line >= t.start.line && a.location.line <= t.end.line) + + const matchName = (t: ItBlock, a: TestAssertionStatus): boolean => t.name === a.title + const templateLiteralPattern = /\${.*?}/ // template literal pattern + const matchTemplateLiteral = (t: ItBlock, a: TestAssertionStatus): boolean => { + if (!t.name.match(templateLiteralPattern)) { + return false + } + const parts = t.name.split(templateLiteralPattern) + const r = parts.every(p => a.title.includes(p)) + return r + } + const onMatchError: OnMatchError = (t: ItBlock, match: TestAssertionStatus[]) => { + let err: string + if (match.length <= 0 && t.name.match(templateLiteralPattern)) { + err = 'no test result found, could be caused by template literals?' + } + if (match.length > 1) { + err = 'found multiple potential matches, could be caused by duplicate test names or template literals?' + } + if (err && this.verbose) { + // tslint:disable-next-line: no-console + console.log(`'${t.name}' failed to find test result: ${err}`) + } + return err + } - const { itBlocks } = parseTest(filePath) - const results = this.reconciler.assertionsForTestFile(filePath) || [] - - const result: TestResult[] = [] - for (const test of itBlocks) { - const assertion = - // do we ever consider marking a test when their name do not match even though - // the linenumber matches? Especially consider line-number could be error-prone - // in situations lik typescript/uglify etc. without checking test names we - // could end up marking the wrong test simply because its line number matched. - // see https://github.com/jest-community/vscode-jest/issues/349 - - results.filter(r => r.title === test.name && r.line >= test.start.line && r.line <= test.end.line)[0] || - results.filter(r => r.title === test.name && r.status !== TestReconciliationState.KnownFail)[0] || - results.filter(r => r.title === test.name)[0] || - ({} as any) - - // Note the shift from one-based to zero-based line number and columns - result.push({ - name: test.name, - start: { - column: test.start.column - 1, - line: test.start.line - 1, - }, - end: { - column: test.end.column - 1, - line: test.end.line - 1, - }, - - status: assertion.status || TestReconciliationState.Unknown, - shortMessage: assertion.shortMessage, - terseMessage: assertion.terseMessage, - lineNumberOfError: - assertion.line && assertion.line >= test.start.line && assertion.line <= test.end.line - ? assertion.line - 1 - : test.end.line - 1, - }) + let { itBlocks } = parseTest(filePath) + let assertions = this.reconciler.assertionsForTestFile(filePath) || [] + const totalResult: TestResult[] = [] + + if (assertions.length > 0 && itBlocks.length > 0) { + const algorithms: Array<[IsMatched[], OnMatchError]> = [ + [[matchName, matchPos], undefined], + [[matchTemplateLiteral, matchPos], undefined], + [[matchTemplateLiteral], undefined], + [[matchName], onMatchError], + ] + for (const [matchers, onError] of algorithms) { + let result: TestResult[] + ;[result, itBlocks, assertions] = matchTests(itBlocks, assertions, matchers, onError) + totalResult.push(...result) + if (itBlocks.length <= 0 || assertions.length <= 0) { + break + } + } } - this.resultsByFilePath[filePath] = result - return result + // convert remaining itBlocks to unmatched result + itBlocks.forEach(t => totalResult.push(toMatchResult(t))) + + this.resultsByFilePath[filePath] = totalResult + return totalResult } getSortedResults(filePath: string) { diff --git a/src/diagnostics.ts b/src/diagnostics.ts index 851062f05..a0af8e0cc 100644 --- a/src/diagnostics.ts +++ b/src/diagnostics.ts @@ -18,6 +18,7 @@ function createDiagnostic( let line = lineNumber if (line < 0) { line = 0 + // tslint:disable-next-line no-console console.warn( `received invalid line number '${line}' for '${uri.toString()}'. (most likely due to unexpected test results... you can help fix the root cause by logging an issue with a sample project to reproduce this warning)` ) diff --git a/src/extension.ts b/src/extension.ts index ac7310552..c6beb6f38 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,39 +1,15 @@ import * as vscode from 'vscode' -import { ProjectWorkspace } from 'jest-editor-support' -import * as path from 'path' import { extensionName } from './appGlobals' -import { pathToJest, pathToConfig } from './helpers' -import { JestExt } from './JestExt' -import { IPluginSettings } from './Settings' -import { registerStatusBar } from './statusBar' +import { statusBar } from './StatusBar' +import { CoverageCodeLensProvider } from './Coverage' +import { ExtensionManager, getExtensionWindowSettings } from './extensionManager' import { registerSnapshotCodeLens, registerSnapshotPreview } from './SnapshotCodeLens' -import { registerCoverageCodeLens } from './Coverage' -import { TestState } from './DebugCodeLens' -let extensionInstance: JestExt +let extensionManager: ExtensionManager export function activate(context: vscode.ExtensionContext) { - // To make us VS Code agnostic outside of this file - const pluginSettings = getExtensionSettings() - const jestPath = pathToJest(pluginSettings) - const configPath = pathToConfig(pluginSettings) - const currentJestVersion = 20 - const debugMode = pluginSettings.debugMode - const workspace = new ProjectWorkspace( - pluginSettings.rootPath, - jestPath, - configPath, - currentJestVersion, - null, - debugMode - ) - - // Create our own console - const channel = vscode.window.createOutputChannel('Jest') - - // We need a singleton to represent the extension - extensionInstance = new JestExt(context, workspace, channel, pluginSettings) + extensionManager = new ExtensionManager(context) const languages = [ { language: 'javascript' }, @@ -41,68 +17,50 @@ export function activate(context: vscode.ExtensionContext) { { language: 'typescript' }, { language: 'typescriptreact' }, ] + context.subscriptions.push( - registerStatusBar(channel), - vscode.commands.registerCommand(`${extensionName}.start`, () => { + ...statusBar.register((folder: string) => extensionManager.getByName(folder)), + + extensionManager.registerCommand(`${extensionName}.start`, extension => { vscode.window.showInformationMessage('Started Jest, press escape to hide this message.') - extensionInstance.startProcess() + extension.startProcess() }), - vscode.commands.registerCommand(`${extensionName}.stop`, () => extensionInstance.stopProcess()), - vscode.commands.registerCommand(`${extensionName}.show-channel`, () => { - channel.show() - }), - ...registerSnapshotCodeLens(pluginSettings.enableSnapshotPreviews), - ...registerSnapshotPreview(), - ...registerCoverageCodeLens(extensionInstance), + extensionManager.registerCommand(`${extensionName}.stop`, extension => extension.stopProcess()), + extensionManager.registerCommand(`${extensionName}.restart`, extension => extension.restartProcess()), + // dublicate of "show-output" maybe remove? + extensionManager.registerCommand(`${extensionName}.show-channel`, extension => extension.channel.show()), + extensionManager.registerCommand(`${extensionName}.coverage.toggle`, extension => + extension.toggleCoverageOverlay() + ), vscode.commands.registerCommand( - `${extensionName}.coverage.toggle`, - extensionInstance.toggleCoverageOverlay, - extensionInstance + `${extensionName}.run-test`, + (document: vscode.TextDocument, filename: string, identifier: string) => { + const workspace = vscode.workspace.getWorkspaceFolder(document.uri) + extensionManager.getByName(workspace.name).runTest(workspace, filename, identifier) + } ), - vscode.commands.registerCommand(`${extensionName}.run-test`, extensionInstance.runTest), - vscode.languages.registerCodeLensProvider(languages, extensionInstance.debugCodeLensProvider), + ...registerSnapshotCodeLens(getExtensionWindowSettings().enableSnapshotPreviews), + ...registerSnapshotPreview(), + vscode.languages.registerCodeLensProvider( + { pattern: '**/*.{ts,tsx,js,jsx}' }, + new CoverageCodeLensProvider(uri => extensionManager.getByDocUri(uri)) + ), + vscode.languages.registerCodeLensProvider(languages, extensionManager.debugCodeLensProvider), // this provides the opportunity to inject test names into the DebugConfiguration - vscode.debug.registerDebugConfigurationProvider('node', extensionInstance.debugConfigurationProvider), + vscode.debug.registerDebugConfigurationProvider('node', extensionManager.debugConfigurationProvider), // this provides the snippets generation - vscode.debug.registerDebugConfigurationProvider('vscode-jest-tests', extensionInstance.debugConfigurationProvider), - vscode.workspace.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('jest')) { - const updatedSettings = getExtensionSettings() - extensionInstance.triggerUpdateSettings(updatedSettings) - } - }), + vscode.debug.registerDebugConfigurationProvider('vscode-jest-tests', extensionManager.debugConfigurationProvider), + vscode.workspace.onDidChangeConfiguration(extensionManager.onDidChangeConfiguration, extensionManager), - vscode.workspace.onDidCloseTextDocument(document => { - extensionInstance.onDidCloseTextDocument(document) - }), + vscode.workspace.onDidChangeWorkspaceFolders(extensionManager.onDidChangeWorkspaceFolders, extensionManager), + + vscode.workspace.onDidCloseTextDocument(extensionManager.onDidCloseTextDocument, extensionManager), - vscode.window.onDidChangeActiveTextEditor(extensionInstance.onDidChangeActiveTextEditor, extensionInstance), - vscode.workspace.onDidChangeTextDocument(extensionInstance.onDidChangeTextDocument, extensionInstance) + vscode.window.onDidChangeActiveTextEditor(extensionManager.onDidChangeActiveTextEditor, extensionManager), + vscode.workspace.onDidChangeTextDocument(extensionManager.onDidChangeTextDocument, extensionManager) ) } export function deactivate() { - extensionInstance.deactivate() -} - -export function getExtensionSettings(): IPluginSettings { - const config = vscode.workspace.getConfiguration('jest') - return { - autoEnable: config.get('autoEnable'), - debugCodeLens: { - enabled: config.get('enableCodeLens'), - showWhenTestStateIn: config.get('debugCodeLens.showWhenTestStateIn'), - }, - enableInlineErrorMessages: config.get('enableInlineErrorMessages'), - enableSnapshotPreviews: config.get('enableSnapshotPreviews'), - enableSnapshotUpdateMessages: config.get('enableSnapshotUpdateMessages'), - pathToConfig: config.get('pathToConfig'), - pathToJest: config.get('pathToJest'), - restartJestOnSnapshotUpdate: config.get('restartJestOnSnapshotUpdate'), - rootPath: path.join(vscode.workspace.rootPath, config.get('rootPath')), - runAllTestsFirst: config.get('runAllTestsFirst'), - showCoverageOnLoad: config.get('showCoverageOnLoad'), - coverageFormatter: config.get('coverageFormatter'), - debugMode: config.get('debugMode'), - } + extensionManager.unregisterAll() } diff --git a/src/extensionManager.ts b/src/extensionManager.ts new file mode 100644 index 000000000..e8d82f709 --- /dev/null +++ b/src/extensionManager.ts @@ -0,0 +1,207 @@ +import * as vscode from 'vscode' +import * as path from 'path' +import { ProjectWorkspace } from 'jest-editor-support' +import { pathToJest, pathToConfig } from './helpers' +import { JestExt } from './JestExt' +import { DebugCodeLensProvider, TestState } from './DebugCodeLens' +import { DebugConfigurationProvider } from './DebugConfigurationProvider' +import { IPluginResourceSettings, IPluginWindowSettings } from './Settings' +import { statusBar } from './StatusBar' + +export type GetJestExtByURI = (uri: vscode.Uri) => JestExt | undefined + +export class ExtensionManager { + debugCodeLensProvider: DebugCodeLensProvider + debugConfigurationProvider: DebugConfigurationProvider + + private extByWorkspace: Map = new Map() + private context: vscode.ExtensionContext + private commonPluginSettings: IPluginWindowSettings + + constructor(context: vscode.ExtensionContext) { + this.context = context + + this.commonPluginSettings = getExtensionWindowSettings() + + this.debugConfigurationProvider = new DebugConfigurationProvider() + this.debugCodeLensProvider = new DebugCodeLensProvider(uri => this.getByDocUri(uri)) + this.applySettings(getExtensionWindowSettings()) + this.registerAll() + } + applySettings(settings: IPluginWindowSettings) { + this.commonPluginSettings = settings + const { debugCodeLens } = settings + this.debugCodeLensProvider.showWhenTestStateIn = debugCodeLens.enabled ? debugCodeLens.showWhenTestStateIn : [] + settings.disabledWorkspaceFolders.forEach(this.unregisterByName, this) + } + register(workspaceFolder: vscode.WorkspaceFolder) { + if (!this.shouldStart(workspaceFolder.name)) { + return + } + const pluginSettings = getExtensionResourceSettings(workspaceFolder.uri) + const jestPath = pathToJest(pluginSettings) + const configPath = pathToConfig(pluginSettings) + const currentJestVersion = 20 + const debugMode = pluginSettings.debugMode + const instanceSettings = { + multirootEnv: vscode.workspace.workspaceFolders.length > 1, + } + const jestWorkspace = new ProjectWorkspace( + pluginSettings.rootPath, + jestPath, + configPath, + currentJestVersion, + workspaceFolder.name, + null, + debugMode + ) + + // Create our own console + const channel = vscode.window.createOutputChannel(`Jest (${workspaceFolder.name})`) + + const failDiagnostics = vscode.languages.createDiagnosticCollection(`Jest (${workspaceFolder.name})`) + + this.extByWorkspace.set( + workspaceFolder.name, + new JestExt( + this.context, + workspaceFolder, + jestWorkspace, + channel, + pluginSettings, + this.debugCodeLensProvider, + this.debugConfigurationProvider, + failDiagnostics, + instanceSettings + ) + ) + } + registerAll() { + vscode.workspace.workspaceFolders.forEach(this.register, this) + } + unregister(workspaceFolder: vscode.WorkspaceFolder) { + this.unregisterByName(workspaceFolder.name) + } + unregisterByName(name: string) { + const extension = this.extByWorkspace.get(name) + if (extension) { + extension.deactivate() + this.extByWorkspace.delete(name) + } + } + unregisterAll() { + const keys = this.extByWorkspace.keys() + for (const key of keys) { + this.unregisterByName(key) + } + } + shouldStart(workspaceFolderName: string): boolean { + const { + commonPluginSettings: { disabledWorkspaceFolders }, + } = this + if (this.extByWorkspace.has(workspaceFolderName)) { + return false + } + if (disabledWorkspaceFolders.includes(workspaceFolderName)) { + return false + } + return true + } + getByName(workspaceFolderName: string) { + return this.extByWorkspace.get(workspaceFolderName) + } + public getByDocUri: GetJestExtByURI = (uri: vscode.Uri) => { + const workspace = vscode.workspace.getWorkspaceFolder(uri) + if (workspace) { + return this.getByName(workspace.name) + } + } + async get() { + const workspace = + vscode.workspace.workspaceFolders.length <= 1 + ? vscode.workspace.workspaceFolders[0] + : await vscode.window.showWorkspaceFolderPick() + + const instance = workspace && this.getByName(workspace.name) + if (instance) { + return instance + } else if (workspace) { + throw new Error(`No Jest instance in ${workspace.name} workspace`) + } + } + registerCommand(command: string, callback: (extension: JestExt, ...args: any[]) => any, thisArg?: any) { + return vscode.commands.registerCommand(command, async (...args) => { + const extension = await this.get() + if (extension) { + callback.call(thisArg, extension, ...args) + } + }) + } + onDidChangeConfiguration(e: vscode.ConfigurationChangeEvent) { + if (e.affectsConfiguration('jest')) { + this.applySettings(getExtensionWindowSettings()) + this.registerAll() + } + vscode.workspace.workspaceFolders.forEach(workspaceFolder => { + const jestExt = this.getByName(workspaceFolder.name) + if (jestExt && e.affectsConfiguration('jest', workspaceFolder.uri)) { + const updatedSettings = getExtensionResourceSettings(workspaceFolder.uri) + jestExt.triggerUpdateSettings(updatedSettings) + } + }) + } + onDidChangeWorkspaceFolders(e: vscode.WorkspaceFoldersChangeEvent) { + e.added.forEach(this.register, this) + e.removed.forEach(this.unregister, this) + } + onDidCloseTextDocument(document: vscode.TextDocument) { + const ext = this.getByDocUri(document.uri) + if (ext) { + ext.onDidCloseTextDocument(document) + } + } + onDidChangeActiveTextEditor(editor: vscode.TextEditor) { + if (editor && editor.document) { + statusBar.onDidChangeActiveTextEditor(editor) + const ext = this.getByDocUri(editor.document.uri) + if (ext) { + ext.onDidChangeActiveTextEditor(editor) + } + } + } + onDidChangeTextDocument(event: vscode.TextDocumentChangeEvent) { + const ext = this.getByDocUri(event.document.uri) + if (ext) { + ext.onDidChangeTextDocument(event) + } + } +} + +export function getExtensionResourceSettings(uri: vscode.Uri): IPluginResourceSettings { + const config = vscode.workspace.getConfiguration('jest', uri) + return { + autoEnable: config.get('autoEnable'), + enableInlineErrorMessages: config.get('enableInlineErrorMessages'), + enableSnapshotUpdateMessages: config.get('enableSnapshotUpdateMessages'), + pathToConfig: config.get('pathToConfig'), + pathToJest: config.get('pathToJest'), + restartJestOnSnapshotUpdate: config.get('restartJestOnSnapshotUpdate'), + rootPath: path.join(uri.fsPath, config.get('rootPath')), + runAllTestsFirst: config.get('runAllTestsFirst'), + showCoverageOnLoad: config.get('showCoverageOnLoad'), + coverageFormatter: config.get('coverageFormatter'), + debugMode: config.get('debugMode'), + } +} + +export function getExtensionWindowSettings(): IPluginWindowSettings { + const config = vscode.workspace.getConfiguration('jest') + return { + debugCodeLens: { + enabled: config.get('enableCodeLens'), + showWhenTestStateIn: config.get('debugCodeLens.showWhenTestStateIn'), + }, + enableSnapshotPreviews: config.get('enableSnapshotPreviews'), + disabledWorkspaceFolders: config.get('disabledWorkspaceFolders'), + } +} diff --git a/src/helpers.ts b/src/helpers.ts index a14d95432..0f78dc366 100644 --- a/src/helpers.ts +++ b/src/helpers.ts @@ -2,11 +2,11 @@ import { platform } from 'os' import { existsSync, readFileSync } from 'fs' import { normalize, join } from 'path' -import { IPluginSettings, hasUserSetPathToJest } from './Settings' +import { IPluginResourceSettings, hasUserSetPathToJest } from './Settings' /** * Known binary names of `react-scripts` forks -*/ + */ const createReactAppBinaryNames = ['react-scripts', 'react-native-scripts', 'react-scripts-ts', 'react-app-rewired'] /** @@ -31,7 +31,7 @@ export function getTestCommand(rootPath: string): string | undefined | null { /** * Checks if the supplied test command could have been generated by create-react-app -*/ + */ export function isCreateReactAppTestCommand(testCommand: string): boolean { return testCommand && createReactAppBinaryNames.some(binary => testCommand.indexOf(binary + ' test') === 0) } @@ -60,7 +60,8 @@ function hasNodeExecutable(rootPath: string, executable: string): boolean { * * @returns {string} */ -export function pathToJest({ pathToJest, rootPath }: IPluginSettings) { +// tslint:disable-next-line no-shadowed-variable +export function pathToJest({ pathToJest, rootPath }: IPluginResourceSettings) { if (hasUserSetPathToJest(pathToJest)) { return normalize(pathToJest) } @@ -85,7 +86,7 @@ function pathToLocalJestExecutable(rootDir) { * * @returns {string} */ -export function pathToConfig(pluginSettings: IPluginSettings) { +export function pathToConfig(pluginSettings: IPluginResourceSettings) { if (pluginSettings.pathToConfig !== '') { return normalize(pluginSettings.pathToConfig) } @@ -93,7 +94,7 @@ export function pathToConfig(pluginSettings: IPluginSettings) { return '' } -export function pathToJestPackageJSON(pluginSettings: IPluginSettings): string | null { +export function pathToJestPackageJSON(pluginSettings: IPluginResourceSettings): string | null { let pathToNodeModules = join(pluginSettings.rootPath, 'node_modules') if (pluginSettings.pathToJest) { diff --git a/src/messaging.ts b/src/messaging.ts index fa7527a2d..536d7a8f9 100644 --- a/src/messaging.ts +++ b/src/messaging.ts @@ -9,29 +9,29 @@ export interface MessageAction { action: () => void } -export function systemErrorMessage(message: string, ...actions: Array) { +export function systemErrorMessage(message: string, ...actions: MessageAction[]) { vscode.window.showErrorMessage(message, ..._extractActionTitles(actions)).then(_handleMessageActions(actions)) } -export function systemWarningMessage(message: string, ...actions: Array) { +export function systemWarningMessage(message: string, ...actions: MessageAction[]) { vscode.window.showWarningMessage(message, ..._extractActionTitles(actions)).then(_handleMessageActions(actions)) } // common actions export const showTroubleshootingAction: MessageAction = { title: 'Help', - action: () => vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(TroubleShootingURL)), + action: () => vscode.commands.executeCommand('vscode.open', vscode.Uri.parse(TROUBLESHOOTING_URL)), } -export const TroubleShootingURL = 'https://github.com/jest-community/vscode-jest/blob/master/README.md#troubleshooting' +export const TROUBLESHOOTING_URL = 'https://github.com/jest-community/vscode-jest/blob/master/README.md#troubleshooting' // // internal methods // -function _extractActionTitles(actions?: Array): string[] { +function _extractActionTitles(actions?: MessageAction[]): string[] { return actions ? actions.map(a => a.title) : [] } // expose the internal function so we can unit testing it -export function _handleMessageActions(actions?: Array): (action?: string) => void { +export function _handleMessageActions(actions?: MessageAction[]): (action?: string) => void { return (action?: string) => { if (!action) { return diff --git a/src/statusBar.ts b/src/statusBar.ts deleted file mode 100644 index 74458885b..000000000 --- a/src/statusBar.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { window, StatusBarAlignment, commands, OutputChannel } from 'vscode' -import * as elegantSpinner from 'elegant-spinner' - -import { extensionName } from './appGlobals' - -// The bottom status bar -const statusBarCommand = `${extensionName}.show-output` -const statusBarItem = window.createStatusBarItem(StatusBarAlignment.Left) -statusBarItem.show() -statusBarItem.command = statusBarCommand -const statusKey = 'Jest:' -const frame = elegantSpinner() -let statusBarSpinner: any - -export function registerStatusBar(channel: OutputChannel) { - return commands.registerCommand(statusBarCommand, () => channel.show()) -} - -export function initial() { - updateStatus('...') -} - -export function running(details?: string) { - clearInterval(statusBarSpinner) - statusBarSpinner = setInterval(() => { - statusBarItem.text = `${statusKey} ${frame()} ${details || ''}` - }, 100) -} - -export function success(details?: string) { - updateStatus('$(check)', details) -} - -export function failed(details?: string) { - updateStatus('$(alert)', details) -} - -export function stopped(details?: string) { - updateStatus('stopped', details) -} - -function updateStatus(message: string, details?: string) { - clearInterval(statusBarSpinner) - statusBarItem.text = `${statusKey} ${message} ${details || ''}` -} diff --git a/tests/Coverage/CoverageOverlay.test.ts b/tests/Coverage/CoverageOverlay.test.ts index ae2c6bb26..22d22f4a3 100644 --- a/tests/Coverage/CoverageOverlay.test.ts +++ b/tests/Coverage/CoverageOverlay.test.ts @@ -125,7 +125,7 @@ describe('CoverageOverlay', () => { describe('update()', () => { it('should do nothing if the editor does not have a valid document', () => { const sut = new CoverageOverlay(null, coverageMapProvider) - ;(hasDocument as jest.Mock<{}>).mockReturnValueOnce(false) + ;((hasDocument as unknown) as jest.Mock<{}>).mockReturnValueOnce(false) const editor: any = {} sut.update(editor) @@ -137,7 +137,7 @@ describe('CoverageOverlay', () => { it('should add the overlay when enabled', () => { const enabled = true const sut = new CoverageOverlay(null, coverageMapProvider, enabled) - ;(hasDocument as jest.Mock<{}>).mockReturnValueOnce(true) + ;((hasDocument as unknown) as jest.Mock<{}>).mockReturnValueOnce(true) const editor: any = {} sut.update(editor) @@ -148,7 +148,7 @@ describe('CoverageOverlay', () => { it('should remove the overlay when disabled', () => { const enabled = false const sut = new CoverageOverlay(null, coverageMapProvider, enabled) - ;(hasDocument as jest.Mock<{}>).mockReturnValueOnce(true) + ;((hasDocument as unknown) as jest.Mock<{}>).mockReturnValueOnce(true) const editor: any = {} sut.update(editor) diff --git a/tests/Coverage/Formatters/DefaultFormatter.test.ts b/tests/Coverage/Formatters/DefaultFormatter.test.ts index 44b37e7d0..0216e9333 100644 --- a/tests/Coverage/Formatters/DefaultFormatter.test.ts +++ b/tests/Coverage/Formatters/DefaultFormatter.test.ts @@ -146,7 +146,7 @@ describe('DefaultFormatter', () => { it('should add decorations with the reindexed ranges', () => { const expected = [{}, {}] - ;(vscode.Range as jest.Mock).mockReturnValueOnce(expected[0]).mockReturnValueOnce(expected[1]) + ;((vscode.Range as unknown) as jest.Mock<{}>).mockReturnValueOnce(expected[0]).mockReturnValueOnce(expected[1]) ;(isValidLocation as jest.Mock).mockReturnValueOnce(true).mockReturnValueOnce(true) const coverageMapProvider: any = {} @@ -203,7 +203,7 @@ describe('DefaultFormatter', () => { it('should add decorations with the reindexed ranges', () => { const expected = [{}, {}] - ;(vscode.Range as jest.Mock).mockReturnValueOnce(expected[0]).mockReturnValueOnce(expected[1]) + ;((vscode.Range as unknown) as jest.Mock<{}>).mockReturnValueOnce(expected[0]).mockReturnValueOnce(expected[1]) const coverageMapProvider: any = {} const editor: any = { diff --git a/tests/Coverage/__snapshots__/index.test.ts.snap b/tests/Coverage/__snapshots__/index.test.ts.snap index e77ae4ece..d3efbbe11 100644 --- a/tests/Coverage/__snapshots__/index.test.ts.snap +++ b/tests/Coverage/__snapshots__/index.test.ts.snap @@ -2,8 +2,8 @@ exports[`Coverage module.exports should match the snapshot 1`] = ` Object { + "CoverageCodeLensProvider": [Function], "CoverageMapProvider": [Function], "CoverageOverlay": [Function], - "registerCoverageCodeLens": [Function], } `; diff --git a/tests/DebugCodeLens/DebugCodeLens.test.ts b/tests/DebugCodeLens/DebugCodeLens.test.ts index 4d632a267..752efaae2 100644 --- a/tests/DebugCodeLens/DebugCodeLens.test.ts +++ b/tests/DebugCodeLens/DebugCodeLens.test.ts @@ -1,6 +1,7 @@ jest.unmock('../../src/DebugCodeLens/DebugCodeLens') jest.mock('vscode', () => ({ CodeLens: class { + // tslint:disable-next-line no-empty constructor() {} }, })) @@ -9,15 +10,20 @@ import { DebugCodeLens } from '../../src/DebugCodeLens/DebugCodeLens' import * as vscode from 'vscode' describe('DebugCodeLens', () => { + const document = {} as any const range = {} as any const fileName = 'file.js' const testName = 'should specify the test file name' - const sut = new DebugCodeLens(range, fileName, testName) + const sut = new DebugCodeLens(document, range, fileName, testName) it('should extend vscode.CodeLens', () => { expect(sut).toBeInstanceOf(vscode.CodeLens) }) + it('should specify the file document', () => { + expect(sut.document).toBe(document) + }) + it('should specify the file name', () => { expect(sut.fileName).toBe(fileName) }) diff --git a/tests/DebugCodeLens/DebugCodeLensProvider.test.ts b/tests/DebugCodeLens/DebugCodeLensProvider.test.ts index c471f631a..6b684846a 100644 --- a/tests/DebugCodeLens/DebugCodeLensProvider.test.ts +++ b/tests/DebugCodeLens/DebugCodeLensProvider.test.ts @@ -3,6 +3,7 @@ jest.unmock('../../src/DebugCodeLens/DebugCodeLens') jest.unmock('../../src/helpers') jest.mock('path') +// tslint:disable max-classes-per-file const rangeConstructor = jest.fn() jest.mock('vscode', () => { class CodeLens { @@ -56,24 +57,25 @@ import { TestState } from '../../src/DebugCodeLens' describe('DebugCodeLensProvider', () => { const testResultProvider = new TestResultProvider() + const provideJestExt: any = () => ({ testResultProvider }) const allTestStates = [TestState.Fail, TestState.Pass, TestState.Skip, TestState.Unknown] describe('constructor()', () => { - it('should set the test result provider', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + it('should set the jest extension provider', () => { + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) - expect(sut.testResultProvider).toBe(testResultProvider) + expect((sut as any).getJestExt().testResultProvider).toBe(testResultProvider) }) it('should set which test states to show the CodeLens above', () => { - expect(new DebugCodeLensProvider(testResultProvider, allTestStates).showWhenTestStateIn).toBe(allTestStates) + expect(new DebugCodeLensProvider(provideJestExt, allTestStates).showWhenTestStateIn).toBe(allTestStates) const none = [] - expect(new DebugCodeLensProvider(testResultProvider, none).showWhenTestStateIn).toBe(none) + expect(new DebugCodeLensProvider(provideJestExt, none).showWhenTestStateIn).toBe(none) }) it('should initialize the onChange event emitter', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) expect(sut.onDidChange).toBeInstanceOf(vscode.EventEmitter) }) @@ -83,7 +85,7 @@ describe('DebugCodeLensProvider', () => { describe('get', () => { it('should return which test states to show the CodeLens above', () => { for (const states of [[], allTestStates]) { - const sut = new DebugCodeLensProvider(testResultProvider, states) + const sut = new DebugCodeLensProvider(provideJestExt, states) expect(sut.showWhenTestStateIn).toBe(states) } }) @@ -91,14 +93,14 @@ describe('DebugCodeLensProvider', () => { describe('set', () => { it('should set which test states to show the CodeLens above', () => { - const sut = new DebugCodeLensProvider(testResultProvider, []) + const sut = new DebugCodeLensProvider(provideJestExt, []) sut.showWhenTestStateIn = allTestStates expect(sut.showWhenTestStateIn).toBe(allTestStates) }) it('should fire an onDidChange event', () => { - const sut = new DebugCodeLensProvider(testResultProvider, []) + const sut = new DebugCodeLensProvider(provideJestExt, []) sut.onDidChange.fire = jest.fn() sut.showWhenTestStateIn = allTestStates @@ -109,7 +111,7 @@ describe('DebugCodeLensProvider', () => { describe('onDidChangeCodeLenses', () => { it('should return the onDidChange event', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) const expected = {} as any sut.onDidChange.event = expected @@ -120,9 +122,9 @@ describe('DebugCodeLensProvider', () => { describe('provideCodeLenses()', () => { const document = { fileName: 'file.js' } as any const token = {} as any - const getResults = testResultProvider.getResults as jest.Mock + const getResults = (testResultProvider.getResults as unknown) as jest.Mock<{}> const testResults = [ - { + ({ name: 'should fail', start: { line: 1, @@ -133,24 +135,24 @@ describe('DebugCodeLensProvider', () => { column: 4, }, status: TestReconciliationState.KnownFail, - } as TestResult, + } as any) as TestResult, ] it('should return an empty array when the provider is disabled', () => { - const sut = new DebugCodeLensProvider(testResultProvider, []) + const sut = new DebugCodeLensProvider(provideJestExt, []) expect(sut.provideCodeLenses(document, token)).toEqual([]) }) it('should return an empty array when the document is untitled', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) const untitled = { isUntitled: true } as any expect(sut.provideCodeLenses(untitled, token)).toEqual([]) }) it('should get the test results for the current document', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) getResults.mockReturnValueOnce([]) sut.provideCodeLenses(document, token) @@ -160,7 +162,7 @@ describe('DebugCodeLensProvider', () => { it('should not show the CodeLens above failing tests unless configured', () => { const testStates = allTestStates.filter(s => s !== TestState.Fail) const status = TestReconciliationState.KnownFail - const sut = new DebugCodeLensProvider(testResultProvider, testStates) + const sut = new DebugCodeLensProvider(provideJestExt, testStates) getResults.mockReturnValueOnce([{ status }]) expect(sut.provideCodeLenses(document, token)).toEqual([]) @@ -169,7 +171,7 @@ describe('DebugCodeLensProvider', () => { it('should not show the CodeLens above passing tests unless configured', () => { const testStates = allTestStates.filter(s => s !== TestState.Pass) const status = TestReconciliationState.KnownSuccess - const sut = new DebugCodeLensProvider(testResultProvider, testStates) + const sut = new DebugCodeLensProvider(provideJestExt, testStates) getResults.mockReturnValueOnce([{ status }]) expect(sut.provideCodeLenses(document, token)).toEqual([]) @@ -177,7 +179,7 @@ describe('DebugCodeLensProvider', () => { it('should not show the CodeLens above skipped tests unless configured', () => { const testStates = allTestStates.filter(s => s !== TestState.Skip) const status = TestReconciliationState.KnownSkip - const sut = new DebugCodeLensProvider(testResultProvider, testStates) + const sut = new DebugCodeLensProvider(provideJestExt, testStates) getResults.mockReturnValueOnce([{ status }]) expect(sut.provideCodeLenses(document, token)).toEqual([]) @@ -185,14 +187,14 @@ describe('DebugCodeLensProvider', () => { it('should not show the CodeLens above unknown tests unless configured', () => { const testStates = allTestStates.filter(s => s !== TestState.Unknown) const status = TestReconciliationState.Unknown - const sut = new DebugCodeLensProvider(testResultProvider, testStates) + const sut = new DebugCodeLensProvider(provideJestExt, testStates) getResults.mockReturnValueOnce([{ status }]) expect(sut.provideCodeLenses(document, token)).toEqual([]) }) it('should create the CodeLens at the start of the `test`/`it` block', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) getResults.mockReturnValueOnce(testResults) const actual = sut.provideCodeLenses(document, token) @@ -209,60 +211,62 @@ describe('DebugCodeLensProvider', () => { it('should create the CodeLens specifying the document filename', () => { const expected = 'expected' - ;(basename as jest.Mock).mockReturnValueOnce(expected) - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + ;((basename as unknown) as jest.Mock<{}>).mockReturnValueOnce(expected) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) getResults.mockReturnValueOnce(testResults) const actual = sut.provideCodeLenses(document, token) expect(actual).toHaveLength(1) - expect((actual[0]).fileName).toBe(expected) + expect((actual[0] as DebugCodeLens).fileName).toBe(expected) }) it('should create the CodeLens specifying the test name', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) getResults.mockReturnValueOnce(testResults) const actual = sut.provideCodeLenses(document, token) expect(actual).toHaveLength(1) - expect((actual[0]).testName).toBe(testResults[0].name) + expect((actual[0] as DebugCodeLens).testName).toBe(testResults[0].name) }) }) describe('resolveCodeLenses()', () => { it('should add the command to a DebugCodeLenses', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) + const document = {} as any const range = {} as any const fileName = 'fileName' const testName = 'testName' - const codeLens = new DebugCodeLens(range, fileName, testName) + const codeLens = new DebugCodeLens(document, range, fileName, testName) const token = {} as any sut.resolveCodeLens(codeLens, token) expect(codeLens.command).toEqual({ - arguments: [fileName, testName], + arguments: [document, fileName, testName], command: `${extensionName}.run-test`, title: 'Debug', }) }) it('should escape testName for regex', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) + const document = {} as any const range = {} as any const fileName = 'fileName' const testName = 'testName()' - const codeLens = new DebugCodeLens(range, fileName, testName) + const codeLens = new DebugCodeLens(document, range, fileName, testName) const token = {} as any sut.resolveCodeLens(codeLens, token) expect(codeLens.command).toEqual({ - arguments: [fileName, 'testName\\(\\)'], + arguments: [document, fileName, 'testName\\(\\)'], command: `${extensionName}.run-test`, title: 'Debug', }) }) it('should leave other CodeLenses unchanged', () => { - const sut = new DebugCodeLensProvider(testResultProvider, []) + const sut = new DebugCodeLensProvider(provideJestExt, []) const codeLens = {} as any const token = {} as any sut.resolveCodeLens(codeLens, token) @@ -272,7 +276,7 @@ describe('DebugCodeLensProvider', () => { }) describe('didChange()', () => { - const sut = new DebugCodeLensProvider(testResultProvider, allTestStates) + const sut = new DebugCodeLensProvider(provideJestExt, allTestStates) sut.onDidChange.fire = jest.fn() sut.didChange() diff --git a/tests/DebugConfigurationProvider.test.ts b/tests/DebugConfigurationProvider.test.ts index d63ac75cb..4b8fe85be 100644 --- a/tests/DebugConfigurationProvider.test.ts +++ b/tests/DebugConfigurationProvider.test.ts @@ -17,8 +17,8 @@ describe('DebugConfigurationProvider', () => { expect(config.program).toMatch('jest') }) it('should return a valid CRA DebugConfiguration', () => { - ;(getTestCommand as jest.Mock).mockReturnValueOnce('react-scripts test --env=jsdom') - ;(isCreateReactAppTestCommand as jest.Mock).mockReturnValueOnce(true) + ;((getTestCommand as unknown) as jest.Mock<{}>).mockReturnValueOnce('react-scripts test --env=jsdom') + ;((isCreateReactAppTestCommand as unknown) as jest.Mock<{}>).mockReturnValueOnce(true) const folder: any = { uri: { fsPath: null } } const sut = new DebugConfigurationProvider() @@ -28,6 +28,7 @@ describe('DebugConfigurationProvider', () => { const config = configurations[0] expect(config.name).toBe('vscode-jest-tests') expect(config.type).toBe('node') + // tslint:disable-next-line no-invalid-template-strings expect(config.runtimeExecutable).toBe('${workspaceFolder}/node_modules/.bin/react-scripts') expect(config.args[0]).toBe('test') expect(config.args).toContain('--env=jsdom') diff --git a/tests/JestExt.test.ts b/tests/JestExt.test.ts index 5c542234b..fde42c385 100644 --- a/tests/JestExt.test.ts +++ b/tests/JestExt.test.ts @@ -1,6 +1,5 @@ jest.unmock('events') jest.unmock('../src/JestExt') -jest.unmock('../src/messaging') jest.mock('../src/DebugCodeLens', () => ({ DebugCodeLensProvider: class MockCodeLensProvider {}, @@ -8,21 +7,39 @@ jest.mock('../src/DebugCodeLens', () => ({ jest.mock('os') jest.mock('../src/decorations') +const statusBar = { + bind: () => ({ + initial: jest.fn(), + running: jest.fn(), + success: jest.fn(), + failed: jest.fn(), + stopped: jest.fn(), + }), +} +jest.mock('../src/StatusBar', () => ({ statusBar })) + import { JestExt } from '../src/JestExt' import { ProjectWorkspace } from 'jest-editor-support' import { window, workspace, debug } from 'vscode' import { hasDocument, isOpenInMultipleEditors } from '../src/editor' import * as decorations from '../src/decorations' import { updateCurrentDiagnostics } from '../src/diagnostics' +import { JestProcessManager, JestProcess } from '../src/JestProcessManagement' +import * as messaging from '../src/messaging' describe('JestExt', () => { const getConfiguration = workspace.getConfiguration as jest.Mock + const workspaceFolder = {} as any let projectWorkspace: ProjectWorkspace - const channelStub = { appendLine: () => {}, clear: () => {} } as any - // const mockShowErrorMessage = window.showErrorMessage as jest.Mock - // const mockShowWarningMessage = window.showWarningMessage as jest.Mock + const channelStub = { appendLine: jest.fn(), clear: jest.fn(), show: jest.fn() } as any const extensionSettings = { debugCodeLens: {} } as any + const debugCodeLensProvider = {} as any + const debugConfigurationProvider = { + provideDebugConfigurations: jest.fn(), + prepareTestRun: jest.fn(), + } as any + // tslint:disable-next-line no-console console.error = jest.fn() beforeEach(() => { @@ -41,12 +58,22 @@ describe('JestExt', () => { const decorationType: any = { dispose: jest.fn() } beforeEach(() => { - sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) sut.canUpdateActiveEditor = jest.fn().mockReturnValueOnce(true) sut.debugCodeLensProvider.didChange = jest.fn() - ;(decorations.failingAssertionStyle as jest.Mock<{}>).mockReturnValue({}) - ;(sut.testResultProvider.getSortedResults as jest.Mock<{}>).mockReturnValueOnce({ + ;((decorations.failingAssertionStyle as unknown) as jest.Mock<{}>).mockReturnValue({}) + ;((sut.testResultProvider.getSortedResults as unknown) as jest.Mock<{}>).mockReturnValueOnce({ success: [], fail: [], skip: [], @@ -63,7 +90,7 @@ describe('JestExt', () => { }) it('should not clear the cached decorations types when the document is open more than once', () => { - ;(isOpenInMultipleEditors as jest.Mock<{}>).mockReturnValueOnce(true) + ;((isOpenInMultipleEditors as unknown) as jest.Mock<{}>).mockReturnValueOnce(true) sut.failingAssertionDecorators[editor.document.fileName] = { forEach: jest.fn(), @@ -94,13 +121,23 @@ describe('JestExt', () => { debugCodeLens: {}, enableInlineErrorMessages: true, } - const sut = new JestExt(null, projectWorkspace, channelStub, settings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + settings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) const editor: any = { document: { fileName: 'file.js' }, setDecorations: jest.fn(), } const expected = {} - ;(decorations.failingAssertionStyle as jest.Mock<{}>).mockReturnValueOnce(expected) + ;((decorations.failingAssertionStyle as unknown) as jest.Mock<{}>).mockReturnValueOnce(expected) sut.canUpdateActiveEditor = jest.fn().mockReturnValueOnce(true) sut.testResultProvider.getSortedResults = jest.fn().mockReturnValueOnce({ success: [], @@ -119,28 +156,40 @@ describe('JestExt', () => { }) }) + // tslint:disable no-shadowed-variable describe('runTest()', () => { + const workspaceFolder = {} as any const fileName = 'fileName' const testNamePattern = 'testNamePattern' it('should run the supplied test', async () => { - const startDebugging = debug.startDebugging as jest.Mock - - startDebugging.mockImplementation(async (_folder: any, nameOrConfig: any) => { + const startDebugging = (debug.startDebugging as unknown) as jest.Mock<{}> + ;((startDebugging as unknown) as jest.Mock<{}>).mockImplementation(async (_folder: any, nameOrConfig: any) => { // trigger fallback to default configuration if (typeof nameOrConfig === 'string') { throw null } }) - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) - ;(sut.debugConfigurationProvider.provideDebugConfigurations as jest.Mock).mockReturnValue([ - { type: 'dummyconfig' }, + const debugConfiguration = { type: 'dummyconfig' } + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) + ;((sut.debugConfigurationProvider.provideDebugConfigurations as unknown) as jest.Mock<{}>).mockReturnValue([ + debugConfiguration, ]) - await sut.runTest(fileName, testNamePattern) + await sut.runTest(workspaceFolder, fileName, testNamePattern) - expect(debug.startDebugging).toHaveBeenCalled() + expect(debug.startDebugging).toHaveBeenCalledWith(workspaceFolder, debugConfiguration) const configuration = startDebugging.mock.calls[startDebugging.mock.calls.length - 1][1] expect(configuration).toBeDefined() @@ -152,7 +201,17 @@ describe('JestExt', () => { describe('onDidCloseTextDocument()', () => { const projectWorkspace = new ProjectWorkspace(null, null, null, null) - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) const document = {} as any sut.removeCachedTestResults = jest.fn() sut.removeCachedDecorationTypes = jest.fn() @@ -170,7 +229,17 @@ describe('JestExt', () => { describe('removeCachedTestResults()', () => { const projectWorkspace = new ProjectWorkspace(null, null, null, null) - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) sut.testResultProvider.removeCachedResults = jest.fn() it('should do nothing when the document is falsy', () => { @@ -195,7 +264,17 @@ describe('JestExt', () => { describe('removeCachedAnnotations()', () => { const projectWorkspace = new ProjectWorkspace(null, null, null, null) - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) beforeEach(() => { sut.failingAssertionDecorators = { @@ -221,22 +300,25 @@ describe('JestExt', () => { let sut const editor: any = {} const projectWorkspace = new ProjectWorkspace(null, null, null, null) - sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) sut.triggerUpdateActiveEditor = jest.fn() beforeEach(() => { ;(sut.triggerUpdateActiveEditor as jest.Mock<{}>).mockReset() }) - it('should do nothing if the editor does not have a document', () => { - ;(hasDocument as jest.Mock<{}>).mockReturnValueOnce(false) - sut.onDidChangeActiveTextEditor(editor) - - expect(sut.triggerUpdateActiveEditor).not.toBeCalled() - }) - it('should update the annotations when the editor has a document', () => { - ;(hasDocument as jest.Mock<{}>).mockReturnValueOnce(true) + ;((hasDocument as unknown) as jest.Mock<{}>).mockReturnValueOnce(true) sut.onDidChangeActiveTextEditor(editor) expect(sut.triggerUpdateActiveEditor).toBeCalledWith(editor) @@ -255,7 +337,17 @@ describe('JestExt', () => { beforeEach(() => { const projectWorkspace = new ProjectWorkspace(null, null, null, null) - sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) }) function expectItTakesNoAction(event) { @@ -322,7 +414,17 @@ describe('JestExt', () => { describe('toggleCoverageOverlay()', () => { it('should toggle the coverage overlay visibility', () => { - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) sut.toggleCoverageOverlay() expect(sut.coverageOverlay.toggleVisibility).toBeCalled() @@ -336,18 +438,38 @@ describe('JestExt', () => { it('should update the coverage overlay in visible editors', () => { const editor: any = {} - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) sut.triggerUpdateActiveEditor(editor) expect(sut.coverageOverlay.updateVisibleEditors).toBeCalled() }) it('should update both decorators and diagnostics for valid editor', () => { - const sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + const sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) sut.updateDecorators = jest.fn() const mockEditor: any = { document: { uri: { fsPath: 'file://a/b/c.ts' } }, } - ;(sut.testResultProvider.getSortedResults as jest.Mock<{}>).mockReturnValueOnce({ + ;((sut.testResultProvider.getSortedResults as unknown) as jest.Mock<{}>).mockReturnValueOnce({ success: [], fail: [], skip: [], @@ -372,7 +494,17 @@ describe('JestExt', () => { beforeEach(() => { jest.resetAllMocks() const projectWorkspace = new ProjectWorkspace(null, null, null, null) - sut = new JestExt(null, projectWorkspace, channelStub, extensionSettings) + sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + extensionSettings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) }) it('will skip if there is no document in editor', () => { const editor: any = {} @@ -412,13 +544,23 @@ describe('JestExt', () => { beforeEach(() => { jest.resetAllMocks() - ;(decorations.failingItName as jest.Mock<{}>).mockReturnValue({ key: 'fail' }) - ;(decorations.passingItName as jest.Mock<{}>).mockReturnValue({ key: 'pass' }) - ;(decorations.skipItName as jest.Mock<{}>).mockReturnValue({ key: 'skip' }) - ;(decorations.notRanItName as jest.Mock<{}>).mockReturnValue({ key: 'notRan' }) + ;((decorations.failingItName as unknown) as jest.Mock<{}>).mockReturnValue({ key: 'fail' }) + ;((decorations.passingItName as unknown) as jest.Mock<{}>).mockReturnValue({ key: 'pass' }) + ;((decorations.skipItName as unknown) as jest.Mock<{}>).mockReturnValue({ key: 'skip' }) + ;((decorations.notRanItName as unknown) as jest.Mock<{}>).mockReturnValue({ key: 'notRan' }) const projectWorkspace = new ProjectWorkspace(null, null, null, null) - sut = new JestExt(null, projectWorkspace, channelStub, settings) + sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + settings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) mockEditor.setDecorations = jest.fn() sut.debugCodeLensProvider.didChange = jest.fn() @@ -432,8 +574,6 @@ describe('JestExt', () => { } }) it('will generate dot dectorations for test results', () => { - console.log('decorations.passingItName() = ', decorations.passingItName()) - const testResults2: any = { success: [tr1], fail: [tr2], skip: [], unknown: [] } sut.updateDecorators(testResults2, mockEditor) expect(mockEditor.setDecorations).toHaveBeenCalledTimes(4) @@ -456,7 +596,7 @@ describe('JestExt', () => { it('will update inlineError decorator only if setting is enabled', () => { const testResults2: any = { success: [], fail: [tr1, tr2], skip: [], unknown: [] } const expected = {} - ;(decorations.failingAssertionStyle as jest.Mock<{}>).mockReturnValueOnce(expected) + ;((decorations.failingAssertionStyle as unknown) as jest.Mock<{}>).mockReturnValueOnce(expected) sut.updateDecorators(testResults2, mockEditor) expect(decorations.failingAssertionStyle).not.toBeCalled() expect(mockEditor.setDecorations).toHaveBeenCalledTimes(4) @@ -481,7 +621,17 @@ describe('JestExt', () => { beforeEach(() => { jest.resetAllMocks() const projectWorkspace = new ProjectWorkspace(null, null, null, null) - sut = new JestExt(null, projectWorkspace, channelStub, settings) + sut = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + settings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + null + ) mockEditor.setDecorations = jest.fn() sut.debugCodeLensProvider.didChange = jest.fn() @@ -496,4 +646,83 @@ describe('JestExt', () => { expect(spy).toHaveBeenCalledTimes(2) }) }) + + describe('startProcess', () => { + const projectWorkspace = new ProjectWorkspace(null, null, null, null) + + const mockJestProcess = () => { + const mockProcess: any = new JestProcess({ projectWorkspace }) + mockProcess.onJestEditorSupportEvent.mockReturnValue(mockProcess) + return mockProcess + } + const createJestExt = (settings: any) => { + ;(JestProcessManager as jest.Mock).mockClear() + const mockProcess: any = mockJestProcess() + + const jestExt = new JestExt( + null, + workspaceFolder, + projectWorkspace, + channelStub, + settings, + debugCodeLensProvider, + debugConfigurationProvider, + null, + { multirootEnv: false } + ) + const mockProcessManager: any = (JestProcessManager as jest.Mock).mock.instances[0] + mockProcessManager.startJestProcess.mockReturnValue(mockProcess) + return [jestExt, mockProcessManager] + } + it('if process already running, do nothing', () => { + const [sut, mockProcessManager] = createJestExt(extensionSettings) + mockProcessManager.numberOfProcesses = 1 + sut.startProcess() + expect(mockProcessManager.startJestProcess).not.toHaveBeenCalled() + }) + it('can start all tests first if configured.', () => { + const [sut, mockProcessManager] = createJestExt({ ...extensionSettings, runAllTestsFirst: true }) + + const { runAllTestsFirstInWatchMode } = (JestProcessManager as jest.Mock).mock.calls[0][0] + expect(runAllTestsFirstInWatchMode).toBeTruthy() + + const spy = jest.spyOn(sut, 'testsHaveStartedRunning') + sut.startProcess() + expect(spy).toHaveBeenCalled() + expect(mockProcessManager.startJestProcess).toHaveBeenCalled() + }) + it('can start watch mode first if configured.', () => { + const [sut, mockProcessManager] = createJestExt({ ...extensionSettings, runAllTestsFirst: false }) + + const { runAllTestsFirstInWatchMode } = (JestProcessManager as jest.Mock).mock.calls[0][0] + expect(runAllTestsFirstInWatchMode).toBeFalsy() + + const spy = jest.spyOn(sut, 'testsHaveStartedRunning') + sut.startProcess() + expect(spy).not.toHaveBeenCalled() + expect(mockProcessManager.startJestProcess).toHaveBeenCalled() + }) + describe('exitCallback', () => { + const [sut, mockProcessManager] = createJestExt(extensionSettings) + sut.startProcess() + const { exitCallback } = mockProcessManager.startJestProcess.mock.calls[0][0] + + it('if receive watchMode process: prepare and report for the next run', () => { + const p1: any = mockJestProcess() + const p2: any = mockJestProcess() + + exitCallback(p1, p2) + + expect(p1.onJestEditorSupportEvent).not.toHaveBeenCalled() + expect(p2.onJestEditorSupportEvent).toHaveBeenCalled() + }) + it('if process ends unexpectedly, report error', () => { + const p1: any = mockJestProcess() + p1.stopRequested.mockReturnValue(false) + exitCallback(p1) + expect(p1.onJestEditorSupportEvent).not.toHaveBeenCalled() + expect(messaging.systemErrorMessage).toHaveBeenCalled() + }) + }) + }) }) diff --git a/tests/JestProcessManagement/JestProcess.test.ts b/tests/JestProcessManagement/JestProcess.test.ts index 5eec4e34e..4f687bbcd 100644 --- a/tests/JestProcessManagement/JestProcess.test.ts +++ b/tests/JestProcessManagement/JestProcess.test.ts @@ -18,6 +18,7 @@ describe('JestProcess', () => { runnerMockImplementation = { on: jest.fn(() => this), start: jest.fn(), + runJestWithUpdateForSnapshots: jest.fn(), } }) @@ -37,7 +38,7 @@ describe('JestProcess', () => { jestProcess = new JestProcess({ projectWorkspace: projectWorkspaceMock, }) - expect(jestProcess.stopRequested).toBeFalsy() + expect(jestProcess.stopRequested()).toBeFalsy() }) it('records watchMode in the watchMode property', () => { @@ -118,7 +119,7 @@ describe('JestProcess', () => { it('does not set the stopRequested flag', () => { eventEmitter.emit('debuggerProcessExit') - expect(jestProcess.stopRequested).toBeFalsy() + expect(jestProcess.stopRequested()).toBeFalsy() }) it('calls the callback with the argument being the instance of the jest process', () => { @@ -175,14 +176,19 @@ describe('JestProcess', () => { const closeProcessMock = jest.fn() beforeEach(() => { + eventEmitter = new EventEmitter() runnerMockImplementation = { ...runnerMockImplementation, + on: (event, callback) => { + eventEmitter.on(event, callback) + }, closeProcess: closeProcessMock, } runnerMock.mockImplementation(() => runnerMockImplementation) jestProcess = new JestProcess({ projectWorkspace: projectWorkspaceMock, }) + jest.useFakeTimers() }) it('calls closeProcess on the underlying runner from jest-editor-support', () => { @@ -194,7 +200,32 @@ describe('JestProcess', () => { it('sets the stopRequested flag', () => { jestProcess.stop() - expect(jestProcess.stopRequested).toBeTruthy() + expect(jestProcess.stopRequested()).toBeTruthy() + }) + + it('resolves promise when recieving debuggerProcessExit event', async () => { + expect.assertions(1) + const promise = jestProcess.stop() + eventEmitter.emit('debuggerProcessExit') + await promise + expect(promise).resolves.toBeUndefined() + }) + + it('resolves promise by timeout', async () => { + expect.assertions(1) + const promise = jestProcess.stop() + jest.runAllTimers() + await promise + expect(promise).resolves.toBeUndefined() + }) + + it('do not hangs on multiple stop() calls', async () => { + expect.assertions(1) + const promise = jestProcess.stop() + jestProcess.stop() + jest.runAllTimers() + await promise + expect(promise).resolves.toBeUndefined() }) }) @@ -359,7 +390,7 @@ describe('JestProcess', () => { count = jestEvents.get(event).count } jestEvents.set(event, { - callback: callback, + callback, count: count + 1, }) }, @@ -375,7 +406,7 @@ describe('JestProcess', () => { keepAlive: true, }) - const handler = () => {} + const handler = () => jestProcess jestProcess.onJestEditorSupportEvent('event', handler) eventEmitter.emit('debuggerProcessExit') @@ -391,8 +422,8 @@ describe('JestProcess', () => { keepAlive: true, }) - const handler1 = () => {} - const handler2 = () => {} + const handler1 = () => jestProcess + const handler2 = () => jestProcess jestProcess.onJestEditorSupportEvent('event1', handler1) jestProcess.onJestEditorSupportEvent('event2', handler2) @@ -413,7 +444,7 @@ describe('JestProcess', () => { keepAlive: false, }) - const handler = () => {} + const handler = () => jestProcess jestProcess.onJestEditorSupportEvent('event', handler) eventEmitter.emit('debuggerProcessExit') @@ -427,7 +458,7 @@ describe('JestProcess', () => { keepAlive: true, }) - const handler = () => {} + const handler = () => jestProcess jestProcess.onJestEditorSupportEvent('event', handler) jestProcess.stop() @@ -436,4 +467,19 @@ describe('JestProcess', () => { expect(jestEvents.get('event').count).toBe(1) }) }) + + describe('updating snapshots', () => { + beforeEach(() => { + runnerMock.mockImplementation(() => runnerMockImplementation) + jestProcess = new JestProcess({ + projectWorkspace: projectWorkspaceMock, + }) + }) + + it('calls runJestWithUpdateForSnapshots on the underlying runner from jest-editor-support', () => { + const callback = () => {} + jestProcess.runJestWithUpdateForSnapshots(callback) + expect(runnerMockImplementation.runJestWithUpdateForSnapshots).toHaveBeenCalledWith(callback) + }) + }) }) diff --git a/tests/JestProcessManagement/JestProcessManager.test.ts b/tests/JestProcessManagement/JestProcessManager.test.ts index d9efe20dc..7dc6e296d 100644 --- a/tests/JestProcessManagement/JestProcessManager.test.ts +++ b/tests/JestProcessManagement/JestProcessManager.test.ts @@ -24,11 +24,13 @@ describe('JestProcessManager', () => { describe('when creating', () => { it('accepts Project Workspace as the argument', () => { + // tslint:disable-next-line no-shadowed-variable const jestProcessManager = new JestProcessManager({ projectWorkspace: projectWorkspaceMock }) expect(jestProcessManager).not.toBe(null) }) it('accepts runAllTestsFirstInWatchMode argument (true if not provided)', () => { + // tslint:disable-next-line no-shadowed-variable const jestProcessManager = new JestProcessManager({ projectWorkspace: projectWorkspaceMock, runAllTestsFirstInWatchMode: false, @@ -255,11 +257,14 @@ describe('JestProcessManager', () => { jestProcessManager.startJestProcess() jestProcessManager.startJestProcess() - jestProcessManager.stopAll() + const stopAll = jestProcessManager.stopAll() - expect(jestProcessMock.mock.instances.length).toBe(2) - expect(mockImplementation.stop).toHaveBeenCalledTimes(2) - expect(jestProcessManager.numberOfProcesses).toBe(0) + expect(stopAll).toBeInstanceOf(Promise) + return stopAll.then(() => { + expect(jestProcessMock.mock.instances.length).toBe(2) + expect(mockImplementation.stop).toHaveBeenCalledTimes(2) + expect(jestProcessManager.numberOfProcesses).toBe(0) + }) }) it('does not stop any jest process if none is running', () => { @@ -270,11 +275,14 @@ describe('JestProcessManager', () => { jestProcessMock.mockImplementation(() => mockImplementation) - jestProcessManager.stopAll() + const stopAll = jestProcessManager.stopAll() - expect(jestProcessMock.mock.instances.length).toBe(0) - expect(mockImplementation.stop).not.toHaveBeenCalled() - expect(jestProcessManager.numberOfProcesses).toBe(0) + expect(stopAll).toBeInstanceOf(Promise) + return stopAll.then(() => { + expect(jestProcessMock.mock.instances.length).toBe(0) + expect(mockImplementation.stop).not.toHaveBeenCalled() + expect(jestProcessManager.numberOfProcesses).toBe(0) + }) }) }) diff --git a/tests/StatusBar.test.ts b/tests/StatusBar.test.ts new file mode 100644 index 000000000..8100f176c --- /dev/null +++ b/tests/StatusBar.test.ts @@ -0,0 +1,195 @@ +jest.unmock('../src/StatusBar') +jest.useFakeTimers() + +const newStatusBarItem = () => ({ + text: '', + command: '', + show: jest.fn(), + hide: jest.fn(), + tooltip: '', +}) + +const statusBarItem = newStatusBarItem() + +jest.mock('elegant-spinner', () => () => jest.fn()) + +import * as vscode from 'vscode' +import { StatusBar, StatusType } from '../src/StatusBar' + +const createStatusBarItem = jest.fn().mockReturnValue(statusBarItem) + +const mockedChannel = { append: () => {}, clear: () => {} } as any +vscode.window.createOutputChannel = jest.fn(() => mockedChannel) +;((vscode.window.createStatusBarItem as unknown) as jest.Mock<{}>) = createStatusBarItem + +describe('StatusBar', () => { + let statusBar: StatusBar + const updateStatusSpy = jest.spyOn(StatusBar.prototype as any, 'updateStatus') + const renderSpy = jest.spyOn(StatusBar.prototype as any, 'render') + beforeEach(() => { + statusBar = new StatusBar() + updateStatusSpy.mockClear() + renderSpy.mockClear() + statusBarItem.text = '' + }) + + const assertRender = (nth: number, request: any, type: StatusType) => { + const n = nth < 0 ? renderSpy.mock.calls.length - 1 : nth + const args = renderSpy.mock.calls[n] + + expect(args[0]).toEqual(request) + expect((args[1] as any).type).toEqual(type) + } + + describe('register', () => { + it('should add 2 commands', () => { + statusBar.register(() => undefined) + expect(vscode.commands.registerCommand).toBeCalledTimes(2) + + const registerCommand = (vscode.commands.registerCommand as unknown) as jest.Mock<{}> + const calls = registerCommand.mock.calls + expect(calls.some(c => c[0].includes('show-summary-output'))).toBe(true) + expect(calls.some(c => c[0].includes('show-active-output'))).toBe(true) + }) + }) + + describe('bind()', () => { + it('returns binded helpers', () => { + const source = 'testSource' + const helpers = statusBar.bind(source) + ;['initial', 'running', 'success', 'failed', 'stopped'].forEach(status => { + helpers[status]() + expect(updateStatusSpy).toHaveBeenCalledWith({ source, status }) + }) + }) + }) + + describe('request()', () => { + it('should update status', () => { + statusBar.bind('testSource1').initial() + + expect(updateStatusSpy).toHaveBeenCalled() + }) + }) + + describe('updateStatus()', () => { + it('should pick most relevant status', () => { + // first instance failed, display it as folder status + statusBar.bind('testSource1').failed() + assertRender(0, { source: 'testSource1', status: 'failed' }, StatusType.active) + + // then second is running, this status is more important then previous, will display as workspace status + statusBar.bind('testSource2').running() + assertRender(1, { source: 'testSource2', status: 'running' }, StatusType.summary) + + // second is ok, display first instance fail as it is more important, will display as workspace status + statusBar.bind('testSource2').success() + assertRender(2, { source: 'testSource1', status: 'failed' }, StatusType.summary) + }) + }) + + describe('multiroot status', () => { + const statusBarItem2 = newStatusBarItem() + const editor: any = { + document: { uri: 'whatever' }, + } + const getStatusBarItems = () => { + if (statusBarItem.tooltip.includes('summary')) { + return { active: statusBarItem2, summary: statusBarItem } + } + return { active: statusBarItem, summary: statusBarItem2 } + } + const getWorkspaceFolder = jest.fn() + ;((vscode.workspace.getWorkspaceFolder as unknown) as jest.Mock<{}>) = getWorkspaceFolder + + beforeEach(() => { + jest.clearAllMocks() + jest.clearAllTimers() + createStatusBarItem.mockReturnValueOnce(statusBarItem).mockReturnValueOnce(statusBarItem2) + statusBar = new StatusBar() + statusBarItem.text = '' + statusBarItem2.text = '' + }) + it('create 2 statusBarItem', () => { + expect(createStatusBarItem).toBeCalledTimes(2) + }) + it('only update active status for single root', () => { + statusBar.bind('testSource').initial() + const { active, summary } = getStatusBarItems() + expect(active.text).toEqual('Jest: ... ') + expect(summary.text).toEqual('') + }) + it('update both status for multiroot', () => { + const { active, summary } = getStatusBarItems() + + statusBar.bind('testSource1').initial() + expect(active.show).toBeCalledTimes(1) + expect(active.text).toEqual('Jest: ... ') + + statusBar.bind('testSource2').initial() + expect(summary.show).toBeCalledTimes(1) + expect(summary.text).toEqual('Jest-WS: ...') + + // without active folder, the active status will be hidden in multiroot + expect(active.hide).toBeCalledTimes(1) + }) + it('can show active status from active editor', () => { + const { active } = getStatusBarItems() + + statusBar.bind('testSource1').initial() + statusBar.bind('testSource2').initial() + + // without active folder, the active status will be hidden in multiroot + expect(active.show).toBeCalledTimes(1) + expect(active.hide).toBeCalledTimes(1) + + getWorkspaceFolder.mockReturnValue({ name: 'testSource1' }) + statusBar.onDidChangeActiveTextEditor(editor) + + expect(active.show).toBeCalledTimes(2) + expect(active.hide).toBeCalledTimes(1) + }) + it('can animate both running status', () => { + getWorkspaceFolder.mockReturnValue({ name: 'testSource1' }) + statusBar.onDidChangeActiveTextEditor(editor) + + statusBar.bind('testSource1').running() + statusBar.bind('testSource2').running() + + expect(renderSpy).toHaveBeenCalledTimes(2) + + renderSpy.mockClear() + + jest.advanceTimersByTime(150) + + expect(renderSpy).toHaveBeenCalledTimes(2) + const calls: any[][] = renderSpy.mock.calls + expect(calls.every(c => c[0].status === 'running')).toBe(true) + expect(calls.some(c => c[1].type === StatusType.active)).toBe(true) + expect(calls.some(c => c[1].type !== StatusType.active)).toBe(true) + }) + it('when hiding status, spinner should be stopped too', () => { + const { active, summary } = getStatusBarItems() + + // sending 2 request without activeFolder should disable the active status + statusBar.bind('testSource1').running() + expect(active.show).toBeCalledTimes(1) + expect(summary.show).toBeCalledTimes(0) + expect(setInterval).toBeCalledTimes(1) + expect(clearInterval).toBeCalledTimes(0) + + jest.clearAllMocks() + jest.clearAllTimers() + + statusBar.bind('testSource2').initial() + expect(active.show).toBeCalledTimes(0) + expect(summary.show).toBeCalledTimes(1) + + // from summary status only + expect(setInterval).toBeCalledTimes(1) + + expect(active.hide).toBeCalledTimes(1) + expect(clearInterval).toBeCalledTimes(1) + }) + }) +}) diff --git a/tests/TestParser.test.ts b/tests/TestParser.test.ts deleted file mode 100644 index 22906b302..000000000 --- a/tests/TestParser.test.ts +++ /dev/null @@ -1,39 +0,0 @@ -jest.unmock('../src/TestParser') - -import { getParser, parseTest } from '../src/TestParser' -import { parse as parseTypeScript } from 'jest-test-typescript-parser' -import { parse as parseJavaScript } from 'jest-editor-support' - -describe('getParser()', () => { - it('should return the TypeScript parser if the file ends with ".ts"', () => { - expect(getParser('file.ts')).toBe(parseTypeScript) - }) - - it('should return the TypeScript parser if the file ends with ".tsx"', () => { - expect(getParser('file.tsx')).toBe(parseTypeScript) - }) - - it('should return the JavaScript parser if the file is not TypeScript', () => { - expect(getParser('file.js')).toBe(parseJavaScript) - }) -}) - -describe('parseTest()', () => { - it('should return the parsed TypeScript', () => { - const filePath = 'file.ts' - const expected = {} as any - ;(parseTypeScript as jest.Mock).mockImplementationOnce(() => expected) - expect(parseTest(filePath)).toBe(expected) - - expect(parseTypeScript).toBeCalledWith(filePath) - }) - - it('should return the parsed JavaScript', () => { - const filePath = 'file.js' - const expected = {} as any - ;(parseJavaScript as jest.Mock).mockImplementationOnce(() => expected) - expect(parseTest(filePath)).toBe(expected) - - expect(parseJavaScript).toBeCalledWith(filePath) - }) -}) diff --git a/tests/TestResults/TestResult.test.ts b/tests/TestResults/TestResult.test.ts index 8f6ad777e..060ff7121 100644 --- a/tests/TestResults/TestResult.test.ts +++ b/tests/TestResults/TestResult.test.ts @@ -20,6 +20,7 @@ describe('TestResult', () => { }) }) + // tslint:disable no-shadowed-variable describe('on Windows systems', () => { beforeEach(() => { jest.doMock('../../src/TestResults/TestResult', () => ({ diff --git a/tests/TestResults/TestResultProvider.test.ts b/tests/TestResults/TestResultProvider.test.ts index a4f693ada..98e43ce9b 100644 --- a/tests/TestResults/TestResultProvider.test.ts +++ b/tests/TestResults/TestResultProvider.test.ts @@ -4,8 +4,8 @@ const updateFileWithJestStatus = jest.fn() const assertionsForTestFile = jest.fn() jest.mock('jest-editor-support', () => { class TestReconciler { - assertionsForTestFile: Function - updateFileWithJestStatus: Function + assertionsForTestFile: jest.Mock + updateFileWithJestStatus: jest.Mock constructor() { this.assertionsForTestFile = assertionsForTestFile @@ -62,7 +62,7 @@ describe('TestResultProvider', () => { it('should return the cached results if possible', () => { const sut = new TestResultProvider() - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ itBlocks: [], }) assertionsForTestFile.mockReturnValueOnce([]) @@ -73,7 +73,7 @@ describe('TestResultProvider', () => { it('should re-index the line and column number to zero-based', () => { const sut = new TestResultProvider() - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ itBlocks: [testBlock], }) assertionsForTestFile.mockReturnValueOnce([assertion]) @@ -93,10 +93,10 @@ describe('TestResultProvider', () => { it('should look up the test result by line number only if the name matches', () => { const sut = new TestResultProvider() - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ itBlocks: [testBlock], }) - const assertionC = Object.assign({}, assertion) + const assertionC = { ...assertion } assertionC.title = 'xxx' assertionsForTestFile.mockReturnValueOnce([assertionC]) const actual = sut.getResults(filePath) @@ -106,10 +106,10 @@ describe('TestResultProvider', () => { it('should look up the test result by test name', () => { const sut = new TestResultProvider() - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ itBlocks: [testBlock], }) - const assertionC = Object.assign({}, assertion) + const assertionC = { ...assertion } assertionC.line = undefined assertionsForTestFile.mockReturnValueOnce([assertionC]) const actual = sut.getResults(filePath) @@ -132,7 +132,7 @@ describe('TestResultProvider', () => { it('should use default values for unmatched assertions', () => { const sut = new TestResultProvider() - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ itBlocks: [testBlock], }) assertionsForTestFile.mockReturnValueOnce([]) @@ -143,9 +143,9 @@ describe('TestResultProvider', () => { expect(actual[0].shortMessage).toBeUndefined() expect(actual[0].terseMessage).toBeUndefined() }) - it('should handle duplicate test names', () => { - const sut = new TestResultProvider() - const testBlock2 = Object.assign({}, testBlock, { + describe('duplicate test names', () => { + const testBlock2 = { + ...testBlock, start: { line: 5, column: 3, @@ -154,22 +154,82 @@ describe('TestResultProvider', () => { line: 7, column: 5, }, + } + const testBlock3 = { + ...testBlock, + start: { + line: 20, + column: 3, + }, + end: { + line: 25, + column: 5, + }, + } + beforeEach(() => {}) + it('can resolve by matching error line', () => { + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ + itBlocks: [testBlock, testBlock2], + }) + + const sut = new TestResultProvider() + assertionsForTestFile.mockReturnValueOnce([ + assertion, + { + title: testBlock.name, + status: TestReconciliationState.KnownSuccess, + }, + ]) + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(2) + expect(actual[0].status).toBe(TestReconciliationState.KnownFail) + expect(actual[1].status).toBe(TestReconciliationState.KnownSuccess) }) - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ - itBlocks: [testBlock, testBlock2], + it('can resolve even if these tests pass, i.e. no line number', () => { + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ + itBlocks: [testBlock2, testBlock3], + }) + + const sut = new TestResultProvider() + assertionsForTestFile.mockReturnValueOnce([ + { + title: testBlock.name, + status: TestReconciliationState.KnownSuccess, + }, + { + title: testBlock.name, + status: TestReconciliationState.KnownSuccess, + location: { colum: 3, line: 22 }, + }, + ]) + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(2) + expect(actual.every(r => r.status === TestReconciliationState.KnownSuccess)).toEqual(true) }) - assertionsForTestFile.mockReturnValueOnce([ - assertion, - { - title: testBlock.name, - status: TestReconciliationState.KnownSuccess, - }, - ]) - const actual = sut.getResults(filePath) + it('default to unknown if failed to match by line or location', () => { + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ + itBlocks: [testBlock2, testBlock3], + }) - expect(actual).toHaveLength(2) - expect(actual[0].status).toBe(TestReconciliationState.KnownFail) - expect(actual[1].status).toBe(TestReconciliationState.KnownSuccess) + const sut = new TestResultProvider() + assertionsForTestFile.mockReturnValueOnce([ + { + title: testBlock.name, + status: TestReconciliationState.KnownSuccess, + }, + { + title: testBlock.name, + status: TestReconciliationState.KnownSuccess, + }, + ]) + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(2) + expect(actual.every(r => r.status === TestReconciliationState.Unknown)).toEqual(true) + expect(actual.every(r => r.shortMessage && r.shortMessage.includes('duplicate test names'))).toEqual(true) + }) }) it('should only mark error line number if it is within the right itBlock', () => { const sut = new TestResultProvider() @@ -184,7 +244,7 @@ describe('TestResultProvider', () => { column: 5, }, } - ;(parseTest as jest.Mock<{}>).mockReturnValueOnce({ + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ itBlocks: [testBlock, testBlock2], }) assertionsForTestFile.mockReturnValueOnce([ @@ -197,14 +257,161 @@ describe('TestResultProvider', () => { const actual = sut.getResults(filePath) expect(actual).toHaveLength(2) - let r = actual[0] - expect(r.name).toBe(testBlock.name) - expect(r.status).toBe(TestReconciliationState.Unknown) - - r = actual[1] - expect(r.name).toBe(testBlock2.name) - expect(r.status).toBe(TestReconciliationState.KnownSuccess) - expect(r.lineNumberOfError).toBe(testBlock2.end.line - 1) + expect(actual.some(a => a.name === testBlock.name && a.status === TestReconciliationState.Unknown)).toEqual(true) + expect( + actual.some( + a => + a.name === testBlock2.name && + a.status === TestReconciliationState.KnownSuccess && + a.lineNumberOfError === testBlock2.end.line - 1 + ) + ).toEqual(true) + }) + + describe('template literal handling', () => { + const testBlock2 = { + ...testBlock, + // tslint:disable-next-line no-invalid-template-strings + name: 'template literal ${num}', + start: { + line: 5, + column: 3, + }, + end: { + line: 7, + column: 5, + }, + } + const useTests = (itBlocks = [testBlock, testBlock2]) => { + ;((parseTest as unknown) as jest.Mock<{}>).mockReturnValueOnce({ + itBlocks, + }) + } + beforeEach(() => { + jest.resetAllMocks() + }) + it(`find test by assertion error line`, () => { + const sut = new TestResultProvider() + + useTests() + assertionsForTestFile.mockReturnValueOnce([ + { + title: 'template literal 2', + status: TestReconciliationState.KnownFail, + line: 6, + }, + ]) + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(2) + expect(actual.some(a => a.status === TestReconciliationState.Unknown && a.name === testBlock.name)).toEqual( + true + ) + expect(actual.some(a => a.status === TestReconciliationState.KnownFail && a.name === testBlock2.name)).toEqual( + true + ) + }) + it(`find test by assertion location`, () => { + const sut = new TestResultProvider() + + useTests() + assertionsForTestFile.mockReturnValueOnce([ + { + title: 'template literal 2', + status: TestReconciliationState.KnownSuccess, + location: { colum: 3, line: 6 }, + }, + ]) + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(2) + expect(actual.some(a => a.status === TestReconciliationState.Unknown && a.name === testBlock.name)).toEqual( + true + ) + expect( + actual.some(a => a.status === TestReconciliationState.KnownSuccess && a.name === testBlock2.name) + ).toEqual(true) + }) + it(`find test by partial name match`, () => { + const sut = new TestResultProvider() + useTests() + + assertionsForTestFile.mockReturnValueOnce([ + { + title: 'template literals ok', + status: TestReconciliationState.KnownFail, + }, + { + title: 'template literal 2', + status: TestReconciliationState.KnownSuccess, + }, + ]) + const actual = sut.getResults(filePath) + expect(actual).toHaveLength(2) + expect(actual.some(a => a.status === TestReconciliationState.Unknown && a.name === testBlock.name)).toEqual( + true + ) + expect( + actual.some(a => a.status === TestReconciliationState.KnownSuccess && a.name === testBlock2.name) + ).toEqual(true) + }) + it(`multiple template literals`, () => { + const sut = new TestResultProvider() + // tslint:disable-next-line: no-invalid-template-strings + const testBlock3 = { ...testBlock2, name: 'template literal ${i}, ${k}: {something}' } + useTests([testBlock3, testBlock2]) + assertionsForTestFile.mockReturnValueOnce([ + { + title: 'template literal I got something like this', + status: TestReconciliationState.KnownFail, + }, + { + title: 'template literal 1, 2: {something}', + status: TestReconciliationState.KnownSuccess, + }, + ]) + const actual = sut.getResults(filePath) + expect(actual).toHaveLength(2) + expect( + actual.some(a => a.status === TestReconciliationState.KnownSuccess && a.name === testBlock3.name) + ).toEqual(true) + expect(actual.some(a => a.status === TestReconciliationState.KnownFail && a.name === testBlock2.name)).toEqual( + true + ) + }) + + describe('when match failed', () => { + const consoleSpy = jest.spyOn(console, 'log').mockImplementation(() => {}) + beforeEach(() => { + jest.resetAllMocks() + useTests([testBlock2]) + assertionsForTestFile.mockReturnValueOnce([ + { + title: 'template literals 2', + status: TestReconciliationState.KnownSuccess, + }, + ]) + }) + + it(`will report error`, () => { + const sut = new TestResultProvider() + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(1) + expect(actual[0].status).toBe(TestReconciliationState.Unknown) + expect(actual[0].shortMessage).not.toBeUndefined() + expect(consoleSpy).not.toHaveBeenCalled() + }) + it('will also output to console in verbose mode', () => { + const sut = new TestResultProvider(true) + const actual = sut.getResults(filePath) + + expect(actual).toHaveLength(1) + expect(actual[0].status).toBe(TestReconciliationState.Unknown) + expect(actual[0].shortMessage).not.toBeUndefined() + expect(consoleSpy).toHaveBeenCalled() + }) + }) }) }) diff --git a/tests/TestResults/__snapshots__/index.test.ts.snap b/tests/TestResults/__snapshots__/index.test.ts.snap index 659aa1857..64e6f75c8 100644 --- a/tests/TestResults/__snapshots__/index.test.ts.snap +++ b/tests/TestResults/__snapshots__/index.test.ts.snap @@ -8,7 +8,6 @@ Object { "KnownSuccess": "KnownSuccess", "Unknown": "Unknown", }, - "TestResult": undefined, "TestResultProvider": [Function], "resultsWithLowerCaseWindowsDriveLetters": [Function], } diff --git a/tests/decorations.test.ts b/tests/decorations.test.ts index a9fd93eec..cc1dd52d2 100644 --- a/tests/decorations.test.ts +++ b/tests/decorations.test.ts @@ -32,9 +32,9 @@ describe('Test Result Annotations', () => { }) }) -function testRangeBehavior(factoryMethod: Function) { +function testRangeBehavior(factoryMethod: () => void) { it('should set the range behavior', () => { - const mock = vscode.window.createTextEditorDecorationType as jest.Mock<{}> + const mock = (vscode.window.createTextEditorDecorationType as unknown) as jest.Mock<{}> mock.mockReset() factoryMethod() diff --git a/tests/diagnostics.test.ts b/tests/diagnostics.test.ts index cc0c48ee0..9c205d864 100644 --- a/tests/diagnostics.test.ts +++ b/tests/diagnostics.test.ts @@ -6,17 +6,18 @@ import { TestResult, TestReconciliationState } from '../src/TestResults' class MockDiagnosticCollection implements vscode.DiagnosticCollection { name = 'test' - set = jest.fn(); + set = jest.fn() delete = jest.fn() clear = jest.fn() forEach = jest.fn() - get = jest.fn(); + get = jest.fn() has = jest.fn() dispose = jest.fn() } vscode.window.visibleTextEditors = [] +// tslint:disable no-console describe('test diagnostics', () => { describe('resetDiagnostics', () => { it('will clear given diagnostics', () => { @@ -49,7 +50,7 @@ describe('test diagnostics', () => { assertions: TestAssertionStatus[], status: TestReconcilationState = 'KnownFail' ): TestFileAssertionStatus { - return { file: file, message: `${file}:${status}`, status, assertions: assertions } + return { file, message: `${file}:${status}`, status, assertions } } function validateDiagnostic(args: any[], message: string, severity: vscode.DiagnosticSeverity) { @@ -100,12 +101,12 @@ describe('test diagnostics', () => { expect(vscode.Range).toHaveBeenCalledTimes(failedAssertionCount + failedTestWithoutAssertionCount) expect(vscode.Diagnostic).toHaveBeenCalledTimes(failedAssertionCount + failedTestWithoutAssertionCount) - //verify correctly reported error content + // verify correctly reported error content const setCalls = mockDiagnostics.set.mock.calls const rangeCalls = (vscode.Range as jest.Mock).mock.calls const diagCalls = (vscode.Diagnostic as jest.Mock).mock.calls - //validate the diagnosis produced + // validate the diagnosis produced let assertion = 0 for (let i = 0; i < allTests.length; i++) { const f = allTests[i] @@ -176,7 +177,7 @@ describe('test diagnostics', () => { beforeEach(() => { jest.resetAllMocks() - mockLineAt.mockReturnValueOnce({ range: range }) + mockLineAt.mockReturnValueOnce({ range }) mockEditor = { document: { uri: { fsPath: `file://a/b/c.ts` }, diff --git a/tests/extension.test.ts b/tests/extension.test.ts index 158499b6d..1a8bd026b 100644 --- a/tests/extension.test.ts +++ b/tests/extension.test.ts @@ -1,60 +1,18 @@ jest.unmock('../src/extension') -jest.mock('vscode', () => ({ - CodeLens: class {}, - commands: { - registerCommand: jest.fn(), - }, - debug: { - registerDebugConfigurationProvider: jest.fn(), - }, - languages: { - registerCodeLensProvider: jest.fn(), - }, - OverviewRulerLane: {}, - StatusBarAlignment: {}, - window: { - createStatusBarItem: jest.fn().mockReturnValue({ show: jest.fn() }), - createTextEditorDecorationType: jest.fn(), - createOutputChannel: jest.fn(), - onDidChangeActiveTextEditor: jest.fn().mockReturnValue('onDidChangeActiveTextEditor'), - }, - workspace: { - /** Mock getConfiguration by reading default values from package.json */ - getConfiguration: jest.fn().mockImplementation(section => { - const data = readFileSync('./package.json') - const config = JSON.parse(data.toString()).contributes.configuration.properties - - const defaults = {} - for (const key of Object.keys(config)) { - if (section.length === 0 || key.startsWith(`${section}.`)) { - defaults[key] = config[key].default - } - } - - return { - get: jest.fn().mockImplementation(key => defaults[`${section}.${key}`]), - } - }), - onDidChangeConfiguration: jest.fn(), - onDidCloseTextDocument: jest.fn(), - onDidChangeTextDocument: jest.fn().mockReturnValue('onDidChangeTextDocument'), - }, +const extensionName = 'jest' +jest.mock('../src/appGlobals', () => ({ + extensionName, })) +const statusBar = { + register: jest.fn(() => []), +} +jest.mock('../src/StatusBar', () => ({ statusBar })) + jest.mock('../src/Coverage', () => ({ registerCoverageCodeLens: jest.fn().mockReturnValue([]), -})) - -const jestInstance = { - onDidChangeActiveTextEditor: {}, - onDidChangeTextDocument: {}, - toggleCoverageOverlay: {}, -} -jest.mock('../src/JestExt', () => ({ - JestExt: function() { - return jestInstance - }, + CoverageCodeLensProvider: jest.fn().mockReturnValue({}), })) jest.mock('../src/SnapshotCodeLens', () => ({ @@ -62,10 +20,39 @@ jest.mock('../src/SnapshotCodeLens', () => ({ registerSnapshotPreview: jest.fn(() => []), })) -import { activate, getExtensionSettings } from '../src/extension' +const jestInstance = { + toggleCoverageOverlay: jest.fn(), + runTest: jest.fn(), + startProcess: jest.fn(), + stopProcess: jest.fn(), + restartProcess: jest.fn(), +} + +const extensionManager = { + register: jest.fn(), + getByName: jest.fn().mockReturnValue(jestInstance), + get: jest.fn().mockReturnValue(jestInstance), + unregisterAll: jest.fn(), + registerCommand: jest.fn().mockImplementation((...args) => args), +} + +// tslint:disable-next-line: variable-name +const ExtensionManager = jest.fn().mockImplementation(() => extensionManager) + +jest.mock('../src/extensionManager', () => ({ + ExtensionManager, + getExtensionWindowSettings: jest.fn(() => ({})), +})) + import * as vscode from 'vscode' -import { readFileSync } from 'fs' -import { TestState } from '../src/DebugCodeLens' +import { activate, deactivate } from '../src/extension' +;(vscode.commands as any).registerCommand = jest.fn().mockImplementation((...args) => args) +;(vscode.window as any).onDidChangeActiveTextEditor = jest.fn().mockReturnValue('onDidChangeActiveTextEditor') +vscode.workspace.getWorkspaceFolder = jest.fn().mockReturnValue({ name: 'workspaceFolder1' }) +;(vscode.workspace as any).onDidChangeConfiguration = jest.fn().mockReturnValue('onDidChangeConfiguration') +;(vscode.workspace as any).onDidChangeTextDocument = jest.fn().mockReturnValue('onDidChangeTextDocument') +;(vscode.workspace as any).onDidChangeWorkspaceFolders = jest.fn().mockReturnValue('onDidChangeWorkspaceFolders') +;(vscode.workspace as any).onDidCloseTextDocument = jest.fn().mockReturnValue('onDidCloseTextDocument') describe('Extension', () => { describe('activate()', () => { @@ -74,37 +61,113 @@ describe('Extension', () => { push: jest.fn(), }, } - vscode.workspace.rootPath = 'rootPath' - const thisArg = jestInstance beforeEach(() => { context.subscriptions.push.mockReset() }) + it('should instantiate ExtensionManager', () => { + activate(context) + expect(ExtensionManager).toHaveBeenCalledTimes(1) + }) + + it('should register statusBar', () => { + statusBar.register.mockClear() + activate(context) + expect(statusBar.register).toHaveBeenCalled() + }) + it('should register an event handler to handle when the editor changes focus', () => { - const handler = jestInstance.onDidChangeActiveTextEditor activate(context) - expect(vscode.window.onDidChangeActiveTextEditor).toBeCalledWith(handler, thisArg) + expect(vscode.window.onDidChangeActiveTextEditor).toBeCalled() expect(context.subscriptions.push.mock.calls[0]).toContain('onDidChangeActiveTextEditor') }) it('should register an event handler to handle when a document is saved', () => { - const handler = jestInstance.onDidChangeTextDocument activate(context) - expect(vscode.workspace.onDidChangeTextDocument).toBeCalledWith(handler, thisArg) + expect(vscode.workspace.onDidChangeTextDocument).toBeCalled() expect(context.subscriptions.push.mock.calls[0]).toContain('onDidChangeTextDocument') }) - it('should register a command to toggle the coverage overlay visibility', () => { - const expected = ['io.orta.jest.coverage.toggle', jestInstance.toggleCoverageOverlay, jestInstance] - ;(vscode.commands.registerCommand as jest.Mock).mockReturnValue(expected) + it('should register an event handler to handle when an extension configuration changed', () => { + activate(context) + + expect(vscode.workspace.onDidChangeConfiguration).toBeCalled() + expect(context.subscriptions.push.mock.calls[0]).toContain('onDidChangeConfiguration') + }) + it('should register an event handler to handle when workspace folders changed', () => { activate(context) - expect((vscode.commands.registerCommand as jest.Mock).mock.calls).toContainEqual(expected) - expect(context.subscriptions.push.mock.calls[0]).toContain(expected) + expect(vscode.workspace.onDidChangeWorkspaceFolders).toBeCalled() + expect(context.subscriptions.push.mock.calls[0]).toContain('onDidChangeWorkspaceFolders') + }) + + describe('should register a command', () => { + beforeEach(() => { + jestInstance.toggleCoverageOverlay.mockReset() + jestInstance.runTest.mockReset() + jestInstance.startProcess.mockReset() + jestInstance.stopProcess.mockReset() + jestInstance.restartProcess.mockReset() + }) + + it('to start extension', () => { + activate(context) + const callArg = context.subscriptions.push.mock.calls[0].find(args => { + return args[0] === `${extensionName}.start` + }) + + expect(callArg).toBeDefined() + callArg[1](jestInstance) + expect(jestInstance.startProcess).toHaveBeenCalled() + }) + + it('to stop extension', () => { + activate(context) + const callArg = context.subscriptions.push.mock.calls[0].find(args => { + return args[0] === `${extensionName}.stop` + }) + + expect(callArg).toBeDefined() + callArg[1](jestInstance) + expect(jestInstance.stopProcess).toHaveBeenCalled() + }) + + it('to restart extension', () => { + activate(context) + const callArg = context.subscriptions.push.mock.calls[0].find(args => { + return args[0] === `${extensionName}.restart` + }) + + expect(callArg).toBeDefined() + callArg[1](jestInstance) + expect(jestInstance.restartProcess).toHaveBeenCalled() + }) + + it('to toggle the coverage overlay visibility', () => { + activate(context) + const callArg = context.subscriptions.push.mock.calls[0].find(args => { + return args[0] === `${extensionName}.coverage.toggle` + }) + + expect(callArg).toBeDefined() + callArg[1](jestInstance) + expect(jestInstance.toggleCoverageOverlay).toHaveBeenCalled() + }) + + it('to run specific test', () => { + activate(context) + const callArg = context.subscriptions.push.mock.calls[0].find(args => { + return args[0] === `${extensionName}.run-test` + }) + + expect(callArg).toBeDefined() + callArg[1]({ uri: '' }) + expect(jestInstance.runTest).toHaveBeenCalled() + }) }) it('should register a DebugConfigurationProvider', () => { @@ -120,28 +183,10 @@ describe('Extension', () => { }) }) - describe('getExtensionSettings()', () => { - it('should return the extension configuration', async () => { - vscode.workspace.rootPath = '' - - expect(getExtensionSettings()).toEqual({ - autoEnable: true, - coverageFormatter: 'DefaultFormatter', - debugCodeLens: { - enabled: true, - showWhenTestStateIn: [TestState.Fail, TestState.Unknown], - }, - enableInlineErrorMessages: true, - enableSnapshotPreviews: true, - enableSnapshotUpdateMessages: true, - pathToConfig: '', - pathToJest: null, - restartJestOnSnapshotUpdate: false, - rootPath: '', - runAllTestsFirst: true, - showCoverageOnLoad: false, - debugMode: false, - }) + describe('deactivate()', () => { + it('should call unregisterAll on instancesManager', () => { + deactivate() + expect(extensionManager.unregisterAll).toBeCalled() }) }) }) diff --git a/tests/extensionManager.test.ts b/tests/extensionManager.test.ts new file mode 100644 index 000000000..6c7812ddc --- /dev/null +++ b/tests/extensionManager.test.ts @@ -0,0 +1,365 @@ +jest.unmock('../src/extensionManager') + +const jestInstance = { + deactivate: jest.fn(), + onDidCloseTextDocument: jest.fn(), + onDidChangeActiveTextEditor: jest.fn(), + onDidChangeTextDocument: jest.fn(), +} + +jest.mock('../src/JestExt', () => ({ + JestExt: jest.fn().mockImplementation(() => jestInstance), +})) + +import * as vscode from 'vscode' +import { ExtensionManager, getExtensionResourceSettings, getExtensionWindowSettings } from '../src/extensionManager' +import { TestState } from '../src/DebugCodeLens' +import { readFileSync } from 'fs' +import { IPluginWindowSettings } from '../src/Settings' + +vscode.workspace.getConfiguration = jest.fn().mockImplementation(section => { + const data = readFileSync('./package.json') + const config = JSON.parse(data.toString()).contributes.configuration.properties + + const defaults = {} + for (const key of Object.keys(config)) { + if (section.length === 0 || key.startsWith(`${section}.`)) { + defaults[key] = config[key].default + } + } + + return { + get: jest.fn().mockImplementation(key => defaults[`${section}.${key}`]), + } +}) + +describe('InstancesManager', () => { + let extensionManager: ExtensionManager + const registerInstance = (folderName: string) => { + extensionManager.register({ name: folderName, uri: { fsPath: folderName } } as any) + } + const registerSpy = jest.spyOn(ExtensionManager.prototype, 'register') + const unregisterSpy = jest.spyOn(ExtensionManager.prototype, 'unregister') + + beforeEach(() => { + extensionManager = new ExtensionManager({} as any) + registerSpy.mockClear() + unregisterSpy.mockClear() + vscode.workspace.workspaceFolders = [{ uri: { fsPath: 'workspaceFolder1' }, name: 'workspaceFolder1' }] as any + ;(jestInstance.deactivate as any).mockReset() + ;(vscode.window.showWorkspaceFolderPick as any).mockReset() + ;(vscode.commands.registerCommand as any).mockReset() + }) + + describe('constructor()', () => { + it('should register extensions for all wrokspace folders', () => { + new ExtensionManager({} as any) + expect(registerSpy).toHaveBeenCalledTimes(1) + }) + }) + + describe('applySettings()', () => { + it('should save settings to instance', () => { + const newSettings: IPluginWindowSettings = { + debugCodeLens: { + enabled: true, + showWhenTestStateIn: [], + }, + disabledWorkspaceFolders: [], + } + extensionManager.applySettings(newSettings) + expect((extensionManager as any).commonPluginSettings).toEqual(newSettings) + }) + it('should update debugCodeLensProvider instance', () => { + const newSettings: IPluginWindowSettings = { + debugCodeLens: { + enabled: true, + showWhenTestStateIn: [TestState.Fail], + }, + disabledWorkspaceFolders: ['workspaceFolder1'], + } + extensionManager.applySettings(newSettings) + expect((extensionManager as any).debugCodeLensProvider.showWhenTestStateIn).toEqual( + newSettings.debugCodeLens.showWhenTestStateIn + ) + }) + + it('should respect disabledWorkspaceFolders', () => { + registerInstance('workspaceFolder1') + registerInstance('workspaceFolder2') + + expect(extensionManager.getByName('workspaceFolder1')).toBeDefined() + expect(extensionManager.getByName('workspaceFolder2')).toBeDefined() + const newSettings: IPluginWindowSettings = { + debugCodeLens: { + enabled: true, + showWhenTestStateIn: [], + }, + disabledWorkspaceFolders: ['workspaceFolder1'], + } + extensionManager.applySettings(newSettings) + expect(extensionManager.getByName('workspaceFolder1')).toBeUndefined() + expect(extensionManager.getByName('workspaceFolder2')).toBeDefined() + }) + }) + + describe('register()', () => { + it('should register an instance', () => { + registerInstance('workspaceFolder1') + expect(extensionManager.getByName('workspaceFolder1')).toBe(jestInstance) + }) + }) + + describe('unregister()', () => { + it('should unregister instance by wokspaceFolder', () => { + registerInstance('workspaceFolder1') + extensionManager.unregister({ name: 'workspaceFolder1' } as any) + expect(extensionManager.getByName('workspaceFolder1')).toBeUndefined() + expect(jestInstance.deactivate).toHaveBeenCalled() + }) + }) + + describe('unregisterByName()', () => { + it('should unregister instance by wokspaceFolder name', () => { + registerInstance('workspaceFolder1') + extensionManager.unregisterByName('workspaceFolder1') + expect(extensionManager.getByName('workspaceFolder1')).toBeUndefined() + expect(jestInstance.deactivate).toHaveBeenCalled() + }) + }) + + describe('unregisterAll()', () => { + it('should unregister all instances', () => { + registerInstance('workspaceFolder1') + registerInstance('workspaceFolder2') + extensionManager.unregisterAll() + expect(extensionManager.getByName('workspaceFolder1')).toBeUndefined() + expect(extensionManager.getByName('workspaceFolder2')).toBeUndefined() + expect(jestInstance.deactivate).toHaveBeenCalledTimes(2) + }) + }) + + describe('shouldStart()', () => { + it('should check whether instance already started', () => { + registerInstance('workspaceFolder1') + expect(extensionManager.shouldStart('workspaceFolder1')).toEqual(false) + expect(extensionManager.shouldStart('workspaceFolder2')).toEqual(true) + }) + it('should check if folder is in disabledFolderNames', () => { + ;(extensionManager as any).commonPluginSettings.disabledWorkspaceFolders = ['workspaceFolder2'] + expect(extensionManager.shouldStart('workspaceFolder2')).toEqual(false) + expect(extensionManager.shouldStart('workspaceFolder3')).toEqual(true) + }) + }) + + describe('getByName()', () => { + it('should return extension', () => { + registerInstance('workspaceFolder1') + expect(extensionManager.getByName('workspaceFolder1')).toBe(jestInstance) + expect(extensionManager.getByName('workspaceFolder2')).toBeUndefined() + }) + }) + + describe('getByDocUri()', () => { + it('should return extension', async () => { + registerInstance('workspaceFolder1') + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce({ name: 'workspaceFolder1' }) + expect(extensionManager.getByDocUri(null)).toBe(jestInstance) + }) + it('should return undefined if no workspace found for uri', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce(undefined) + expect(extensionManager.getByDocUri(null)).toBeUndefined() + }) + }) + + describe('get()', () => { + afterEach(() => { + vscode.workspace.workspaceFolders = [{ uri: { fsPath: 'workspaceFolder1' }, name: 'workspaceFolder1' }] as any + }) + + it('should return extension at once if there is only one workspace folder', async () => { + registerInstance('workspaceFolder1') + expect(await extensionManager.get()).toBe(jestInstance) + }) + + it('should prompt for workspace if there are more then one workspace folder', async () => { + registerInstance('workspaceFolder1') + vscode.workspace.workspaceFolders = [{ name: 'workspaceFolder1' }, { name: 'workspaceFolder2' }] as any + ;(vscode.window.showWorkspaceFolderPick as any).mockReturnValue({ name: 'workspaceFolder1' }) + expect(await extensionManager.get()).toBe(jestInstance) + expect(vscode.window.showWorkspaceFolderPick).toHaveBeenCalled() + }) + + it('should return undefined if no workspace selected', async () => { + vscode.workspace.workspaceFolders = [{ name: 'workspaceFolder1' }, { name: 'workspaceFolder2' }] as any + ;(vscode.window.showWorkspaceFolderPick as any).mockReturnValue(undefined) + expect(await extensionManager.get()).toBeUndefined() + }) + + it('should throw if no jest instance found for workspace', async () => { + extensionManager.getByName = jest.fn().mockReturnValue(undefined) + let error + try { + await extensionManager.get() + } catch (e) { + error = e + } + expect(error).toBeDefined() + }) + }) + + describe('registerCommand()', () => { + it('should register command and preserve context', async () => { + const command = 'command' + const thisArg = {} + const callback = jest.fn(function() { + expect(this).toBe(thisArg) + }) + ;(vscode.commands.registerCommand as any).mockImplementation((_command, _callback) => { + expect(_command).toBe(command) + expect(_callback).toBeDefined() + return _callback + }) + const callbackWrap = extensionManager.registerCommand(command, callback, thisArg) as any + await callbackWrap() + expect(callback).toHaveBeenCalled() + expect(vscode.commands.registerCommand).toHaveBeenCalled() + }) + + it('should pass jest instance before other arguments to callback', async () => { + registerInstance('workspaceFolder1') + const arg0 = 'arg0' + const callback = jest.fn() + ;(vscode.commands.registerCommand as any).mockImplementation(async (_command, _callback) => { + await _callback(arg0) + }) + await extensionManager.registerCommand('command', callback) + expect(callback).toHaveBeenCalledWith(jestInstance, arg0) + }) + }) + + describe('onDidChangeConfiguration()', () => { + it('checks if changes affects jest', () => { + const arg = { + affectsConfiguration: jest.fn(), + } + extensionManager.onDidChangeConfiguration(arg) + expect(arg.affectsConfiguration).toHaveBeenCalled() + }) + + it('checks configuration for every workspace', () => { + const arg = { + affectsConfiguration: jest.fn(), + } + extensionManager.onDidChangeConfiguration(arg) + // 1 for window settings + 1 for workspace folder + expect(arg.affectsConfiguration).toHaveBeenCalledTimes(2) + }) + }) + + describe('onDidChangeWorkspaceFolders()', () => { + it('should register all new folders', () => { + extensionManager.onDidChangeWorkspaceFolders({ + added: [{ name: 'wokspaceFolderAdded', uri: { fsPath: 'wokspaceFolderAdded' } }], + removed: [], + } as any) + expect(registerSpy).toHaveBeenCalledTimes(1) + }) + + it('should unregister all removed folders', () => { + registerInstance('wokspaceFolderAdded') + extensionManager.onDidChangeWorkspaceFolders({ + added: [], + removed: [{ name: 'wokspaceFolderAdded', uri: { fsPath: 'wokspaceFolderAdded' } }], + } as any) + expect(unregisterSpy).toHaveBeenCalledTimes(1) + }) + }) + + describe('onDidCloseTextDocument()', () => { + afterEach(() => { + jestInstance.onDidCloseTextDocument.mockClear() + }) + it('should call extension method', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce({ name: 'workspaceFolder1' }) + extensionManager.onDidCloseTextDocument({} as any) + expect(jestInstance.onDidCloseTextDocument).toHaveBeenCalled() + }) + + it('should not call try to call extension method if no extension', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce(undefined) + extensionManager.onDidCloseTextDocument({} as any) + expect(jestInstance.onDidCloseTextDocument).not.toHaveBeenCalled() + }) + }) + + describe('onDidChangeActiveTextEditor()', () => { + afterEach(() => { + jestInstance.onDidChangeActiveTextEditor.mockClear() + }) + it('should call extension method', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce({ name: 'workspaceFolder1' }) + extensionManager.onDidChangeActiveTextEditor({ document: {} } as any) + expect(jestInstance.onDidChangeActiveTextEditor).toHaveBeenCalled() + }) + + it('should not call try to call extension method if no document', () => { + extensionManager.onDidChangeActiveTextEditor({} as any) + expect(jestInstance.onDidChangeActiveTextEditor).not.toHaveBeenCalled() + }) + + it('should not call try to call extension method if no extension', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce(undefined) + extensionManager.onDidChangeActiveTextEditor({ document: {} } as any) + expect(jestInstance.onDidChangeActiveTextEditor).not.toHaveBeenCalled() + }) + }) + + describe('onDidChangeTextDocument()', () => { + afterEach(() => { + jestInstance.onDidChangeTextDocument.mockClear() + }) + it('should call extension method', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce({ name: 'workspaceFolder1' }) + extensionManager.onDidChangeTextDocument({ document: {} } as any) + expect(jestInstance.onDidChangeTextDocument).toHaveBeenCalled() + }) + + it('should not call try to call extension method if no extension', () => { + ;(vscode.workspace.getWorkspaceFolder as any).mockReturnValueOnce(undefined) + extensionManager.onDidChangeTextDocument({ document: {} } as any) + expect(jestInstance.onDidChangeTextDocument).not.toHaveBeenCalled() + }) + }) + + describe('getExtensionResourceSettings()', () => { + it('should return the extension resource configuration', async () => { + expect(getExtensionResourceSettings(vscode.workspace.workspaceFolders[0].uri)).toEqual({ + autoEnable: true, + coverageFormatter: 'DefaultFormatter', + enableInlineErrorMessages: true, + enableSnapshotUpdateMessages: true, + pathToConfig: '', + pathToJest: null, + restartJestOnSnapshotUpdate: false, + rootPath: 'workspaceFolder1', + runAllTestsFirst: true, + showCoverageOnLoad: false, + debugMode: false, + }) + }) + }) + + describe('getExtensionWindowSettings()', () => { + it('should return the extension window configuration', async () => { + expect(getExtensionWindowSettings()).toEqual({ + debugCodeLens: { + enabled: true, + showWhenTestStateIn: [TestState.Fail, TestState.Unknown], + }, + enableSnapshotPreviews: true, + disabledWorkspaceFolders: [], + }) + }) + }) +}) diff --git a/tests/helpers.test.ts b/tests/helpers.test.ts index d4c830687..2e6d0fe0a 100644 --- a/tests/helpers.test.ts +++ b/tests/helpers.test.ts @@ -41,6 +41,7 @@ describe('ModuleHelpers', () => { }) describe('pathToJest: ', () => { + // tslint:disable no-shadowed-variable describe('rootPath: ', () => { it('should return package.json when Jest is installed as a dependency', () => { const expected = path.join('node_modules', 'jest', 'package.json') diff --git a/tests/jestSetup.js b/tests/jestSetup.js new file mode 100644 index 000000000..d2cc30d11 --- /dev/null +++ b/tests/jestSetup.js @@ -0,0 +1,4 @@ +jest.unmock('color-convert') +jest.unmock('chalk') +jest.unmock('@babel/traverse') +jest.unmock('snapdragon') \ No newline at end of file diff --git a/tests/messaging.test.ts b/tests/messaging.test.ts index de18714c5..4505b4aff 100644 --- a/tests/messaging.test.ts +++ b/tests/messaging.test.ts @@ -54,7 +54,7 @@ describe('test system messaging', () => { it('can open troubleshooting url via action', () => { messaging.showTroubleshootingAction.action() expect(mockExecCommands.mock.calls.length).toBe(1) - expect(mockUriParse.mock.calls[0][0]).toBe(messaging.TroubleShootingURL) + expect(mockUriParse.mock.calls[0][0]).toBe(messaging.TROUBLESHOOTING_URL) }) it('can handle user actions', () => { let a = messaging._handleMessageActions() diff --git a/tsconfig.json b/tsconfig.json index 693c7f7f6..ec047edf0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -9,7 +9,16 @@ "outDir": "out", "lib": ["es6", "es7"], "sourceMap": true, - "rootDir": "." + "rootDir": ".", + "plugins": [ + { + "name": "typescript-tslint-plugin", + "alwaysShowRuleFailuresAsWarnings": false, + "ignoreDefinitionFiles": true, + "suppressWhileTypeErrorsPresent": false, + "mockTypeScriptVersion": false + } + ] }, - "exclude": ["integrations", "__mocks__"] + "exclude": ["integrations", "__mocks__", "node_modules"] } diff --git a/tsconfig.publish.json b/tsconfig.publish.json deleted file mode 100644 index c42e80312..000000000 --- a/tsconfig.publish.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./tsconfig.json", - "exclude": [ - "node_modules", - "**/__mocks__/*", - "**/tests/*" - ] -} diff --git a/tslint.json b/tslint.json index d3139ccf1..d56e53f88 100644 --- a/tslint.json +++ b/tslint.json @@ -1,14 +1,21 @@ { - "extends": ["tslint-config-prettier"], + "extends": ["tslint:latest", "tslint-config-prettier"], "rules": { "class-name": true, "curly": true, "eofline": true, "no-duplicate-variable": true, - "no-unused-expression": true, "no-var-keyword": true, "prefer-const": true, "triple-equals": true, - "no-unused-expression": [true, "allow-new"] + "no-unused-expression": [true, "allow-new"], + "variable-name": [true, "ban-keywords", "check-format", "allow-leading-underscore"], + "object-literal-sort-keys": false, + "ordered-imports": false, + "member-access": false, + "interface-name": false, + "no-empty": [true, "allow-empty-catch", "allow-empty-functions"], + "no-this-assignment": [true, { "allow-destructuring": true }], + "no-implicit-dependencies": [true, "dev"] } } diff --git a/webpack.config.js b/webpack.config.js new file mode 100644 index 000000000..b31536ab9 --- /dev/null +++ b/webpack.config.js @@ -0,0 +1,49 @@ +//@ts-check + +'use strict'; + +const path = require('path'); + +/**@returns {import('webpack').Configuration}*/ +module.exports = (env, argv) => { + const isProduction = argv.mode === 'production'; + const isDevelopment = !isProduction; + + /**@type {any} */ + const externals = [ + {'jest-config': 'root {}'}, // the jest-config module isn't utilized in this plugin, compiling it would result in unnecessary overhead and errors + { 'vscode': 'commonjs vscode' } // the vscode-module is created on-the-fly and must be excluded. + ]; + + // during development keep the largest external dependencies out of the bundle in order to speed up build time + if (isDevelopment) { + externals.push('typescript', /^\@babel\/.*/, 'babylon'); + } + return { + context: __dirname, + target: 'node', + entry: './src/extension.ts', + output: { + path: path.resolve(__dirname, 'out'), + filename: 'extension.js', + libraryTarget: 'commonjs2', + devtoolModuleFilenameTemplate: '../[resource-path]' + }, + devtool: 'source-map', + externals, + resolve: { + extensions: ['.ts', '.js'] + }, + module: { + rules: [ + { + test: /\.ts$/, + exclude: /node_modules/, + use: [ + { loader: 'ts-loader' } + ] + } + ] + } + }; +}; \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 953e3bc66..6aec236e2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,28 +2,595 @@ # yarn lockfile v1 -"@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz#2a02643368de80916162be70865c97774f3adbd9" +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.1.0": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.4.3.tgz#198d6d3af4567be3989550d97e068de94503074f" + integrity sha512-oDpASqKFlbspQfzAE7yaeTmdljSH2ADIvBlb0RwbStltTuWa0+7CCI1fYVINNv9saHPa1W7oaKeuNuKj+RQCvA== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.0" + "@babel/helpers" "^7.4.3" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + convert-source-map "^1.1.0" + debug "^4.1.0" + json5 "^2.1.0" + lodash "^4.17.11" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0", "@babel/generator@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.4.0.tgz#c230e79589ae7a729fd4631b9ded4dc220418196" + integrity sha512-/v5I+a1jhGSKLgZDcmAUZ4K/VePi43eRkUs3yePW1HB1iANOD5tqJXwGSG4BZhSksP8J9ejSlwGeTiiOFZOrXQ== + dependencies: + "@babel/types" "^7.4.0" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== dependencies: - "@babel/highlight" "7.0.0-beta.44" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" -"@babel/highlight@7.0.0-beta.44": - version "7.0.0-beta.44" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.44.tgz#18c94ce543916a80553edcdcf681890b200747d5" +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA== + +"@babel/helper-split-export-declaration@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.0.tgz#571bfd52701f492920d63b7f735030e9a3e10b55" + integrity sha512-7Cuc6JZiYShaZnybDmfwhY4UYHzI6rlqhWjaIqbsJGsIqPimEYy5uh3akSRLMg65LSdSEnJ8a8/bWQN6u2oMGw== + dependencies: + "@babel/types" "^7.4.0" + +"@babel/helpers@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.4.3.tgz#7b1d354363494b31cb9a2417ae86af32b7853a3b" + integrity sha512-BMh7X0oZqb36CfyhvtbSmcWc3GXocfxv3yNsAEuM0l+fAqSO22rQrUpijr3oE/10jCTrB6/0b9kzmG4VetCj8Q== + dependencies: + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== dependencies: chalk "^2.0.0" esutils "^2.0.2" - js-tokens "^3.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0", "@babel/parser@^7.1.0", "@babel/parser@^7.4.0", "@babel/parser@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.4.3.tgz#eb3ac80f64aa101c907d4ce5406360fe75b7895b" + integrity sha512-gxpEUhTS1sGA63EGQGuA+WESPR/6tz6ng7tSHFCmaTJK/cGK8y37cBTspX+U2xCAue2IQVvF6Z0oigmjwD8YGQ== + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" + integrity sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.0.tgz#12474e9c077bae585c5d835a95c0b0b790c25c8b" + integrity sha512-SOWwxxClTTh5NdbbYZ0BmaBVzxzTh2tO/TeLTbF6MO6EzVhHTnff8CdBXx3mEtazFBoysmEM6GU/wF+SuSx4Fw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.0" + "@babel/types" "^7.4.0" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.2", "@babel/traverse@^7.4.3": + version "7.4.3" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.4.3.tgz#1a01f078fc575d589ff30c0f71bf3c3d9ccbad84" + integrity sha512-HmA01qrtaCwwJWpSKpA948cBvU5BrmviAief/b3AVw936DtcdsTexlbyzNuDnthwhOQ37xshn7hvQaEQk7ISYQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.4.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/types" "^7.4.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.4.0": + version "7.4.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.4.0.tgz#670724f77d24cce6cc7d8cf64599d511d164894c" + integrity sha512-aPvkXyU2SPOnztlgo8n9cEiXW755mgyvueUPcpStqdzoSPm0fjO0vQBjLkt3JKJW7ufikfcnMTTPsN1xaTsBPA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" -"@types/jest@^21.1.1": - version "21.1.10" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-21.1.10.tgz#dcacb5217ddf997a090cc822bba219b4b2fd7984" +"@cnakazawa/watch@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef" + integrity sha512-r5160ogAvGyHsal38Kux7YYtodEKOj89RGb28ht1jh3SJb08VwRwAKKJL0bGb04Zd/3r9FL3BFIc3bBidYffCA== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@jest/console@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545" + integrity sha512-iNhtIy2M8bXlAOULWVTUxmnelTLFneTNEkHCgPmgd+zNwy9zVddJ6oS5rZ9iwoscNdT5mMwUd0C51v/fSlzItg== + dependencies: + "@jest/source-map" "^24.3.0" + chalk "^2.0.1" + slash "^2.0.0" + +"@jest/core@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-24.7.1.tgz#6707f50db238d0c5988860680e2e414df0032024" + integrity sha512-ivlZ8HX/FOASfHcb5DJpSPFps8ydfUYzLZfgFFqjkLijYysnIEOieg72YRhO4ZUB32xu40hsSMmaw+IGYeKONA== + dependencies: + "@jest/console" "^24.7.1" + "@jest/reporters" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + graceful-fs "^4.1.15" + jest-changed-files "^24.7.0" + jest-config "^24.7.1" + jest-haste-map "^24.7.1" + jest-message-util "^24.7.1" + jest-regex-util "^24.3.0" + jest-resolve-dependencies "^24.7.1" + jest-runner "^24.7.1" + jest-runtime "^24.7.1" + jest-snapshot "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + jest-watcher "^24.7.1" + micromatch "^3.1.10" + p-each-series "^1.0.0" + pirates "^4.0.1" + realpath-native "^1.1.0" + rimraf "^2.5.4" + strip-ansi "^5.0.0" + +"@jest/environment@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.7.1.tgz#9b9196bc737561f67ac07817d4c5ece772e33135" + integrity sha512-wmcTTYc4/KqA+U5h1zQd5FXXynfa7VGP2NfF+c6QeGJ7c+2nStgh65RQWNX62SC716dTtqheTRrZl0j+54oGHw== + dependencies: + "@jest/fake-timers" "^24.7.1" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + jest-mock "^24.7.0" + +"@jest/environment@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-24.8.0.tgz#0342261383c776bdd652168f68065ef144af0eac" + integrity sha512-vlGt2HLg7qM+vtBrSkjDxk9K0YtRBi7HfRFaDxoRtyi+DyVChzhF20duvpdAnKVBV6W5tym8jm0U9EfXbDk1tw== + dependencies: + "@jest/fake-timers" "^24.8.0" + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + jest-mock "^24.8.0" + +"@jest/fake-timers@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.7.1.tgz#56e5d09bdec09ee81050eaff2794b26c71d19db2" + integrity sha512-4vSQJDKfR2jScOe12L9282uiwuwQv9Lk7mgrCSZHA9evB9efB/qx8i0KJxsAKtp8fgJYBJdYY7ZU6u3F4/pyjA== + dependencies: + "@jest/types" "^24.7.0" + jest-message-util "^24.7.1" + jest-mock "^24.7.0" + +"@jest/fake-timers@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1" + integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw== + dependencies: + "@jest/types" "^24.8.0" + jest-message-util "^24.8.0" + jest-mock "^24.8.0" + +"@jest/reporters@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.7.1.tgz#38ac0b096cd691bbbe3051ddc25988d42e37773a" + integrity sha512-bO+WYNwHLNhrjB9EbPL4kX/mCCG4ZhhfWmO3m4FSpbgr7N83MFejayz30kKjgqr7smLyeaRFCBQMbXpUgnhAJw== + dependencies: + "@jest/environment" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + istanbul-api "^2.1.1" + istanbul-lib-coverage "^2.0.2" + istanbul-lib-instrument "^3.0.1" + istanbul-lib-source-maps "^3.0.1" + jest-haste-map "^24.7.1" + jest-resolve "^24.7.1" + jest-runtime "^24.7.1" + jest-util "^24.7.1" + jest-worker "^24.6.0" + node-notifier "^5.2.1" + slash "^2.0.0" + source-map "^0.6.0" + string-length "^2.0.0" + +"@jest/source-map@^24.3.0": + version "24.3.0" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-24.3.0.tgz#563be3aa4d224caf65ff77edc95cd1ca4da67f28" + integrity sha512-zALZt1t2ou8le/crCeeiRYzvdnTzaIlpOWaet45lNSqNJUnXbppUUFR4ZUAlzgDmKee4Q5P/tKXypI1RiHwgag== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.1.15" + source-map "^0.6.0" + +"@jest/test-result@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.7.1.tgz#19eacdb29a114300aed24db651e5d975f08b6bbe" + integrity sha512-3U7wITxstdEc2HMfBX7Yx3JZgiNBubwDqQMh+BXmZXHa3G13YWF3p6cK+5g0hGkN3iufg/vGPl3hLxQXD74Npg== + dependencies: + "@jest/console" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-result@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3" + integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng== + dependencies: + "@jest/console" "^24.7.1" + "@jest/types" "^24.8.0" + "@types/istanbul-lib-coverage" "^2.0.0" + +"@jest/test-sequencer@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz#9c18e428e1ad945fa74f6233a9d35745ca0e63e0" + integrity sha512-84HQkCpVZI/G1zq53gHJvSmhUer4aMYp9tTaffW28Ih5OxfCg8hGr3nTSbL1OhVDRrFZwvF+/R9gY6JRkDUpUA== + dependencies: + "@jest/test-result" "^24.7.1" + jest-haste-map "^24.7.1" + jest-runner "^24.7.1" + jest-runtime "^24.7.1" + +"@jest/test-sequencer@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.8.0.tgz#2f993bcf6ef5eb4e65e8233a95a3320248cf994b" + integrity sha512-OzL/2yHyPdCHXEzhoBuq37CE99nkme15eHkAzXRVqthreWZamEMA0WoetwstsQBCXABhczpK03JNbc4L01vvLg== + dependencies: + "@jest/test-result" "^24.8.0" + jest-haste-map "^24.8.0" + jest-runner "^24.8.0" + jest-runtime "^24.8.0" + +"@jest/transform@^24.7.1": + version "24.7.1" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.7.1.tgz#872318f125bcfab2de11f53b465ab1aa780789c2" + integrity sha512-EsOUqP9ULuJ66IkZQhI5LufCHlTbi7hrcllRMUEV/tOgqBVQi93+9qEvkX0n8mYpVXQ8VjwmICeRgg58mrtIEw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.7.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.7.1" + jest-regex-util "^24.3.0" + jest-util "^24.7.1" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/transform@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-24.8.0.tgz#628fb99dce4f9d254c6fd9341e3eea262e06fef5" + integrity sha512-xBMfFUP7TortCs0O+Xtez2W7Zu1PLH9bvJgtraN1CDST6LBM/eTOZ9SfwS/lvV8yOfcDpFmwf9bq5cYbXvqsvA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^24.8.0" + babel-plugin-istanbul "^5.1.0" + chalk "^2.0.1" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.1.15" + jest-haste-map "^24.8.0" + jest-regex-util "^24.3.0" + jest-util "^24.8.0" + micromatch "^3.1.10" + realpath-native "^1.1.0" + slash "^2.0.0" + source-map "^0.6.1" + write-file-atomic "2.4.1" + +"@jest/types@^24.7.0": + version "24.7.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.7.0.tgz#c4ec8d1828cdf23234d9b4ee31f5482a3f04f48b" + integrity sha512-ipJUa2rFWiKoBqMKP63Myb6h9+iT3FHRTF2M8OR6irxWzItisa8i4dcSg14IbvmXUnBlHBlUQPYUHWyX3UPpYA== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/yargs" "^12.0.9" + +"@jest/types@^24.8.0": + version "24.8.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad" + integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^12.0.9" + +"@types/babel__core@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6" + integrity sha512-+hjBtgcFPYyCTo0A15+nxrCVJL7aC6Acg87TXd5OW3QhHswdrOLoles+ldL2Uk8q++7yIfl4tURtztccdeeyOw== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.0.2.tgz#d2112a6b21fad600d7674274293c85dce0cb47fc" + integrity sha512-NHcOfab3Zw4q5sEE2COkpfXjoE7o+PmqD9DQW4koUT3roNxwziUdXGnRndMat/LJNUtePwn1TlP4do3uoe3KZQ== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.6" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.6.tgz#328dd1a8fc4cfe3c8458be9477b219ea158fd7b2" + integrity sha512-XYVgHF2sQ0YblLRMLNPB3CkFMewzFmlDsH/TneZFHUXDlABQgh88uOxuez7ZcXxayLFrqLwtDH1t+FmlFwNZxw== + dependencies: + "@babel/types" "^7.3.0" + +"@types/istanbul-lib-coverage@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-coverage@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz#1eb8c033e98cf4e1a4cedcaf8bcafe8cb7591e85" + integrity sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg== + +"@types/istanbul-lib-report@*": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c" + integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" + +"@types/jest-diff@*": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jest-diff/-/jest-diff-20.0.1.tgz#35cc15b9c4f30a18ef21852e255fdb02f6d59b89" + integrity sha512-yALhelO3i0hqZwhjtcr6dYyaLoCHbAMshwtj6cGxTvHZAKXHsYGdff6E8EPw3xLKY0ELUTQ69Q1rQiJENnccMA== + +"@types/jest@^24.0.11": + version "24.0.11" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.0.11.tgz#1f099bea332c228ea6505a88159bfa86a5858340" + integrity sha512-2kLuPC5FDnWIDvaJBzsGTBQaBbnDweznicvK7UGYzlIJP4RJR2a4A/ByLUXEyEgag6jz8eHdlWExGDtH3EYUXQ== + dependencies: + "@types/jest-diff" "*" "@types/node@^8.0.31": version "8.10.2" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.2.tgz#f1fb9c73414832c5b00ee954c4bbf68394e2e526" +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs@^12.0.2", "@types/yargs@^12.0.9": + version "12.0.12" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-12.0.12.tgz#45dd1d0638e8c8f153e87d296907659296873916" + integrity sha512-SOhuU4wNBxhhTHxYaiG5NY4HBhDIDnJF60GU+2LqHAdKKer86//e4yg69aENCtQ04n0ovz+tq2YPME5t5yp4pw== + +"@webassemblyjs/ast@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" + integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== + dependencies: + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + +"@webassemblyjs/floating-point-hex-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" + integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== + +"@webassemblyjs/helper-api-error@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" + integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== + +"@webassemblyjs/helper-buffer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" + integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== + +"@webassemblyjs/helper-code-frame@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" + integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== + dependencies: + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/helper-fsm@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" + integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== + +"@webassemblyjs/helper-module-context@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" + integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== + dependencies: + "@webassemblyjs/ast" "1.8.5" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" + integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== + +"@webassemblyjs/helper-wasm-section@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" + integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + +"@webassemblyjs/ieee754@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" + integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" + integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" + integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== + +"@webassemblyjs/wasm-edit@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" + integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/helper-wasm-section" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-opt" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + "@webassemblyjs/wast-printer" "1.8.5" + +"@webassemblyjs/wasm-gen@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" + integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wasm-opt@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" + integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-buffer" "1.8.5" + "@webassemblyjs/wasm-gen" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + +"@webassemblyjs/wasm-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" + integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-wasm-bytecode" "1.8.5" + "@webassemblyjs/ieee754" "1.8.5" + "@webassemblyjs/leb128" "1.8.5" + "@webassemblyjs/utf8" "1.8.5" + +"@webassemblyjs/wast-parser@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" + integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/floating-point-hex-parser" "1.8.5" + "@webassemblyjs/helper-api-error" "1.8.5" + "@webassemblyjs/helper-code-frame" "1.8.5" + "@webassemblyjs/helper-fsm" "1.8.5" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/wast-printer@1.8.5": + version "1.8.5" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" + integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/wast-parser" "1.8.5" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@ -32,6 +599,11 @@ abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" +acorn-dynamic-import@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" + integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== + acorn-globals@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" @@ -42,18 +614,33 @@ acorn@^5.0.0, acorn@^5.3.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" +acorn@^6.0.5: + version "6.1.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.1.1.tgz#7d25ae05bb8ad1f9b699108e1094ecd7884adc1f" + integrity sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA== + +agent-base@4: + version "4.2.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== + dependencies: + es6-promisify "^5.0.0" + agent-base@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.0.tgz#9838b5c3392b962bad031e6a4c5e1024abec45ce" dependencies: es6-promisify "^5.0.0" -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" +ajv-errors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" + integrity sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ== + +ajv-keywords@^3.1.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.4.0.tgz#4b831e7b531415a7cc518cd404e73f6193c6349d" + integrity sha512-aUjdRFISbuFOl0EIZc+9e4FfZp0bDZgAdOOf30bJmw8VM9v84SHyVyxDfbWxpGYbdZD/9XoKxfHVNmxPkhwyGw== ajv@^5.1.0: version "5.5.2" @@ -64,23 +651,15 @@ ajv@^5.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" -align-text@^0.1.1, align-text@^0.1.3: - version "0.1.4" - resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" - dependencies: - kind-of "^3.0.2" - longest "^1.0.1" - repeat-string "^1.5.2" - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - -ansi-cyan@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-cyan/-/ansi-cyan-0.1.1.tgz#538ae528af8982f28ae30d86f2f17456d2609873" +ajv@^6.1.0, ajv@^6.5.5: + version "6.10.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.0.tgz#90d0d54439da587cd7e843bfb7045f50bd22bdf1" + integrity sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg== dependencies: - ansi-wrap "0.1.0" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" ansi-escapes@^1.0.0: version "1.4.0" @@ -90,18 +669,6 @@ ansi-escapes@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" -ansi-gray@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-gray/-/ansi-gray-0.1.1.tgz#2962cf54ec9792c48510a3deb524436861ef7251" - dependencies: - ansi-wrap "0.1.0" - -ansi-red@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ansi-red/-/ansi-red-0.1.1.tgz#8c638f9d1080800a353c9c28c8a81ca4705d946c" - dependencies: - ansi-wrap "0.1.0" - ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" @@ -110,6 +677,11 @@ ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" +ansi-regex@^4.0.0, ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" @@ -120,10 +692,6 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-wrap@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/ansi-wrap/-/ansi-wrap-0.1.0.tgz#a82250ddb0015e9a27ca82e82ea603bbfa45efaf" - anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -135,13 +703,14 @@ app-root-path@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46" -append-transform@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== dependencies: - default-require-extensions "^1.0.0" + default-require-extensions "^2.0.0" -aproba@^1.0.3: +aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -158,13 +727,6 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" -arr-diff@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-1.1.0.tgz#687c32758163588fef7de7b36fabe495eb1a399a" - dependencies: - arr-flatten "^1.0.1" - array-slice "^0.2.3" - arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -179,36 +741,14 @@ arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" -arr-union@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-2.1.0.tgz#20f9eab5ec70f5c7d215b1077b1c39161d292c7d" - arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" -array-differ@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031" - array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" -array-slice@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/array-slice/-/array-slice-0.2.3.tgz#dd3cfb80ed7973a75117cdac69b0b99ec86186f5" - -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1, array-uniq@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" @@ -217,10 +757,19 @@ array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" -arrify@^1.0.0, arrify@^1.0.1: +arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" +asn1.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" @@ -229,9 +778,13 @@ assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" assign-symbols@^1.0.0: version "1.0.0" @@ -241,19 +794,21 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^1.4.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" - -async@^2.1.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" +async@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.2.tgz#18330ea7e6e313887f5d2f2a904bac6fe4dd5381" + integrity sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg== dependencies: - lodash "^4.14.0" + lodash "^4.17.11" asynckit@^0.4.0: version "0.4.0" @@ -263,99 +818,60 @@ atob@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@^1.2.1, aws4@^1.6.0: +aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" - dependencies: - chalk "^1.1.3" - esutils "^2.0.2" - js-tokens "^3.0.2" - -babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" - dependencies: - babel-code-frame "^6.26.0" - babel-generator "^6.26.0" - babel-helpers "^6.24.1" - babel-messages "^6.23.0" - babel-register "^6.26.0" - babel-runtime "^6.26.0" - babel-template "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" - json5 "^0.5.1" - lodash "^4.17.4" - minimatch "^3.0.4" - path-is-absolute "^1.0.1" - private "^0.1.7" - slash "^1.0.0" - source-map "^0.5.6" - -babel-generator@^6.18.0, babel-generator@^6.26.0: - version "6.26.1" - resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" - dependencies: - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - detect-indent "^4.0.0" - jsesc "^1.3.0" - lodash "^4.17.4" - source-map "^0.5.7" - trim-right "^1.0.1" - -babel-helpers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-23.2.0.tgz#14a9d6a3f4122dfea6069d37085adf26a53a4dba" - dependencies: - babel-plugin-istanbul "^4.1.6" - babel-preset-jest "^23.2.0" - -babel-messages@^6.23.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + +babel-jest@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.7.1.tgz#73902c9ff15a7dfbdc9994b0b17fcefd96042178" + integrity sha512-GPnLqfk8Mtt0i4OemjWkChi73A3ALs4w2/QbG64uAj8b5mmwzxc7jbJVRZt8NJkxi6FopVHog9S3xX6UJKb2qg== + dependencies: + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.6.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-jest@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-24.8.0.tgz#5c15ff2b28e20b0f45df43fe6b7f2aae93dba589" + integrity sha512-+5/kaZt4I9efoXzPlZASyK/lN9qdRKmmUav9smVc0ruPQD7IsfucQ87gpOE8mn2jbDuS6M/YOW6n3v9ZoIfgnw== + dependencies: + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^5.1.0" + babel-preset-jest "^24.6.0" + chalk "^2.4.2" + slash "^2.0.0" + +babel-plugin-istanbul@^5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-5.1.1.tgz#7981590f1956d75d67630ba46f0c22493588c893" + integrity sha512-RNNVv2lsHAXJQsEJ5jonQwrJVWK8AcZpG1oxhnjCUaAjL7xahYLANhPUZbzEQHjKy1NMYUwn+0NPKQc8iSY4xQ== dependencies: - babel-runtime "^6.22.0" + find-up "^3.0.0" + istanbul-lib-instrument "^3.0.0" + test-exclude "^5.0.0" -babel-plugin-istanbul@^4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" +babel-plugin-jest-hoist@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-24.6.0.tgz#f7f7f7ad150ee96d7a5e8e2c5da8319579e78019" + integrity sha512-3pKNH6hMt9SbOv0F3WVmy5CWQ4uogS3k0GY5XLyQHJ9EGpAT9XWkFd2ZiXXtkwFHdAHa5j7w7kfxSP5lAIwu7w== dependencies: - babel-plugin-syntax-object-rest-spread "^6.13.0" - find-up "^2.1.0" - istanbul-lib-instrument "^1.10.1" - test-exclude "^4.2.1" - -babel-plugin-jest-hoist@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-23.2.0.tgz#e61fae05a1ca8801aadee57a6d66b8cefaf44167" - -babel-plugin-syntax-object-rest-spread@^6.13.0: - version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + "@types/babel__traverse" "^7.0.6" babel-polyfill@7.0.0-alpha.19: version "7.0.0-alpha.19" @@ -364,66 +880,15 @@ babel-polyfill@7.0.0-alpha.19: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-preset-jest@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz#8ec7a03a138f001a1a8fb1e8113652bf1a55da46" - dependencies: - babel-plugin-jest-hoist "^23.2.0" - babel-plugin-syntax-object-rest-spread "^6.13.0" - -babel-register@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" - dependencies: - babel-core "^6.26.0" - babel-runtime "^6.26.0" - core-js "^2.5.0" - home-or-tmp "^2.0.0" - lodash "^4.17.4" - mkdirp "^0.5.1" - source-map-support "^0.4.15" - -babel-runtime@^6.22.0, babel-runtime@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.11.0" - -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" - dependencies: - babel-runtime "^6.26.0" - babel-traverse "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - lodash "^4.17.4" - -babel-traverse@^6.0.0, babel-traverse@^6.14.1, babel-traverse@^6.18.0, babel-traverse@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" - dependencies: - babel-code-frame "^6.26.0" - babel-messages "^6.23.0" - babel-runtime "^6.26.0" - babel-types "^6.26.0" - babylon "^6.18.0" - debug "^2.6.8" - globals "^9.18.0" - invariant "^2.2.2" - lodash "^4.17.4" - -babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" +babel-preset-jest@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-24.6.0.tgz#66f06136eefce87797539c0d63f1769cc3915984" + integrity sha512-pdZqLEdmy1ZK5kyRUfvBb2IfTPb2BUvIJczlPspS8fWmBQslNNDBqVfh7BW5leOVJMDZKzjD8XEyABTk6gQ5yw== dependencies: - babel-runtime "^6.26.0" - esutils "^2.0.2" - lodash "^4.17.4" - to-fast-properties "^1.0.3" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^24.6.0" -babylon@^6.14.1, babylon@^6.18.0: +babylon@^6.14.1: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -431,6 +896,11 @@ balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + integrity sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -449,21 +919,25 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -beeper@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809" +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - dependencies: - inherits "~2.0.0" +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -boom@2.x.x: - version "2.10.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" - dependencies: - hoek "2.x.x" +bluebird@^3.5.5: + version "3.5.5" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" + integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== boom@4.x.x: version "4.3.1" @@ -509,6 +983,34 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" +braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= + browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" @@ -523,24 +1025,130 @@ browser-stdout@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" dependencies: node-int64 "^0.4.0" -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" +buffer-from@1.x: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-from@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.0.tgz#87fcaa3a298358e0ade6e442cfce840740d1ad04" +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= + +buffer@^4.3.0: + version "4.9.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= + +cacache@^11.3.2: + version "11.3.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-11.3.3.tgz#8bd29df8c6a718a6ebd2d010da4d7972ae3bbadc" + integrity sha512-p8WcneCytvzPxhDvYp31PD039vi77I12W+/KfR9S8AZbaiARFBCpsPJS+9uhWfeBfeAtW7o/4vt3MUqLkbY6nA== + dependencies: + bluebird "^3.5.5" + chownr "^1.1.1" + figgy-pudding "^3.5.1" + glob "^7.1.4" + graceful-fs "^4.1.15" + lru-cache "^5.1.1" + mississippi "^3.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.3" + ssri "^6.0.1" + unique-filename "^1.1.1" + y18n "^4.0.0" + cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -555,33 +1163,31 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +capture-exit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" - dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" - chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -600,10 +1206,63 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^2.4.1, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chokidar@^2.0.2: + version "2.1.6" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" + integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chownr@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.1.tgz#54726b8b8fff4df053c42187e801fb4412df1494" + integrity sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g== + +chrome-trace-event@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz#234090ee97c7d4ad1a2c4beae27505deffc608a4" + integrity sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ== + dependencies: + tslib "^1.9.0" + ci-info@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -630,14 +1289,6 @@ cli-truncate@^0.2.1: slice-ansi "0.0.4" string-width "^1.0.1" -cliui@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" - dependencies: - center-align "^0.1.1" - right-align "^0.1.1" - wordwrap "0.0.2" - cliui@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" @@ -646,42 +1297,6 @@ cliui@^4.0.0: strip-ansi "^4.0.0" wrap-ansi "^2.0.0" -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - -clone-stats@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - -clone@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f" - -clone@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - -cloneable-readable@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -clorox@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clorox/-/clorox-1.0.3.tgz#6fa63653f280c33d69f548fb14d239ddcfa1590d" - co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -707,16 +1322,19 @@ color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" -color-support@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: delayed-stream "~1.0.0" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + commander@2.11.0: version "2.11.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" @@ -725,9 +1343,20 @@ commander@^2.11.0, commander@^2.12.1, commander@^2.12.2, commander@^2.9.0: version "2.15.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" -compare-versions@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" +commander@^2.19.0, commander@~2.20.0: + version "2.20.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" + integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= + +compare-versions@^3.2.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.4.0.tgz#e0747df5c9cb7f054d6d3dc3e1dbc444f9e92b26" + integrity sha512-tK69D7oNXXqUW3ZNo/z7NXTEz22TCF0pTE+YF9cxvaAM9XnkLo1fV621xCLrRR6aevJlKxExkss0vWqUCUpqdg== component-emitter@^1.2.1: version "1.2.1" @@ -737,19 +1366,60 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" +concat-stream@^1.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= + dependencies: + date-now "^0.1.4" + console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" -convert-source-map@^1.1.1, convert-source-map@^1.4.0, convert-source-map@^1.5.0: +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + +convert-source-map@^1.1.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + +convert-source-map@^1.4.0: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" -core-js@^2.4.0, core-js@^2.5.0: +core-js@^2.4.0: version "2.5.4" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" @@ -780,6 +1450,37 @@ coveralls@^3.0.0: minimist "^1.2.0" request "^2.79.0" +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -788,11 +1489,16 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cryptiles@2.x.x: - version "2.0.5" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: - boom "2.x.x" + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" cryptiles@3.x.x: version "3.1.2" @@ -800,6 +1506,23 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" @@ -810,6 +1533,11 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": dependencies: cssom "0.3.x" +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= + danger@^2: version "2.1.10" resolved "https://registry.yarnpkg.com/danger/-/danger-2.1.10.tgz#97a8fcbf0dee72820460dcb6fc4008ef69605be4" @@ -860,9 +1588,10 @@ date-fns@^1.27.2: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" -dateformat@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= debug@3.1.0, debug@^3.1.0: version "3.1.0" @@ -870,13 +1599,20 @@ debug@3.1.0, debug@^3.1.0: dependencies: ms "2.0.0" -debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@^2.2.0, debug@^2.3.3: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1: +debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -884,25 +1620,21 @@ decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" -deep-assign@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/deep-assign/-/deep-assign-1.0.0.tgz#b092743be8427dc621ea0067cdec7e70dd19f37b" - dependencies: - is-obj "^1.0.0" - -deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" -default-require-extensions@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= dependencies: - strip-bom "^2.0.0" + strip-bom "^3.0.0" define-properties@^1.1.2: version "1.1.2" @@ -938,11 +1670,18 @@ delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" -detect-indent@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: - repeating "^2.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +detect-file@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" + integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= detect-libc@^1.0.2: version "1.0.3" @@ -952,6 +1691,11 @@ detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" +diff-sequences@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.3.0.tgz#0f20e8a1df1abddaf4d9c226680952e64118b975" + integrity sha512-xLqpez+Zj9GKSnPWS0WZw1igGocZ+uua8+y+5dDNTT934N3QuY1sp2LkHzwiaYQGz60hMq0pjAshdeXm5VUOEw== + diff@3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" @@ -960,6 +1704,20 @@ diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== + domexception@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" @@ -970,19 +1728,10 @@ dotenv@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" -duplexer2@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db" - dependencies: - readable-stream "~1.1.9" - -duplexer@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" - -duplexify@^3.2.0: - version "3.5.4" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -999,24 +1748,66 @@ elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" +elliptic@^6.0.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + integrity sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ== + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= + encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" dependencies: iconv-lite "~0.4.13" -end-of-stream@^1.0.0: +end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== dependencies: once "^1.4.0" +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + error-ex@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + es-abstract@^1.5.1: version "1.11.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" @@ -1060,6 +1851,14 @@ escodegen@^1.9.0: optionalDependencies: source-map "~0.6.1" +eslint-scope@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" + integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -1068,7 +1867,14 @@ esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" -estraverse@^4.2.0: +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -1076,23 +1882,23 @@ esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" -event-stream@^3.3.1, event-stream@~3.3.4: - version "3.3.4" - resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" +events@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.0.0.tgz#9a0a0dfaf62893d92b875b8f2698ca4114973e88" + integrity sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA== -exec-sh@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: - merge "^1.1.3" + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b" + integrity sha512-9sLAvzhI5nc8TpuQUh4ahMdCrWT00wPWz7j47/emR5+2qEfoZP5zzUXvx+vdx+H6ohhnsYC31iX04QLYJK8zTg== execa@^0.7.0: version "0.7.0" @@ -1118,6 +1924,19 @@ execa@^0.8.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + exit-hook@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" @@ -1150,22 +1969,36 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" -expect@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/expect/-/expect-23.3.0.tgz#ecb051adcbdc40ac4db576c16067f12fdb13cc61" +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + +expect@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.7.1.tgz#d91defbab4e627470a152feaf35b3c31aa1c7c14" + integrity sha512-mGfvMTPduksV3xoI0xur56pQsg2vJjNf5+a+bXOjqCkiCBbmCayrBbHS/75y9K430cfqyocPr2ZjiNiRx4SRKw== dependencies: + "@jest/types" "^24.7.0" ansi-styles "^3.2.0" - jest-diff "^23.2.0" - jest-get-type "^22.1.0" - jest-matcher-utils "^23.2.0" - jest-message-util "^23.3.0" - jest-regex-util "^23.3.0" + jest-get-type "^24.3.0" + jest-matcher-utils "^24.7.0" + jest-message-util "^24.7.1" + jest-regex-util "^24.3.0" -extend-shallow@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-1.1.4.tgz#19d6bf94dfc09d76ba711f39b872d21ff4dd9071" +expect@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-24.8.0.tgz#471f8ec256b7b6129ca2524b2a62f030df38718d" + integrity sha512-/zYvP8iMDrzaaxHVa724eJBCKqSHmO0FA7EDkBiRHxg6OipmMn1fN+C8T9L9K8yr7UONkOifu6+LLH+z76CnaA== dependencies: - kind-of "^1.1.0" + "@jest/types" "^24.8.0" + ansi-styles "^3.2.0" + jest-get-type "^24.8.0" + jest-matcher-utils "^24.8.0" + jest-message-util "^24.8.0" + jest-regex-util "^24.3.0" extend-shallow@^2.0.1: version "2.0.1" @@ -1180,10 +2013,15 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: +extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -1211,19 +2049,16 @@ extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" -fancy-log@^1.1.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.2.tgz#f41125e3d84f2e7d89a43d06d958c8f78be16be1" - dependencies: - ansi-gray "^0.1.1" - color-support "^1.1.3" - time-stamp "^1.0.0" - fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" -fast-json-stable-stringify@^2.0.0: +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -1237,11 +2072,10 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - dependencies: - pend "~1.2.0" +figgy-pudding@^3.5.1: + version "3.5.1" + resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790" + integrity sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w== figures@^1.7.0: version "1.7.0" @@ -1254,9 +2088,10 @@ filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" -fileset@^2.0.2: +fileset@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= dependencies: glob "^7.0.3" minimatch "^3.0.3" @@ -1280,12 +2115,21 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" + to-regex-range "^5.0.1" + +find-cache-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" find-up@^2.1.0: version "2.1.0" @@ -1293,9 +2137,30 @@ find-up@^2.1.0: dependencies: locate-path "^2.0.0" -first-chunk-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +findup-sync@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-2.0.0.tgz#9326b1488c22d1a6088650a86901b2d9a90a2cbc" + integrity sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw= + dependencies: + detect-file "^1.0.0" + is-glob "^3.1.0" + micromatch "^3.0.4" + resolve-dir "^1.0.1" + +flush-write-stream@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" + integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== + dependencies: + inherits "^2.0.3" + readable-stream "^2.3.6" for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" @@ -1315,14 +2180,6 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" @@ -1331,47 +2188,61 @@ form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" dependencies: map-cache "^0.2.2" -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" +from2@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" fs-exists-sync@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add" -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - -fsevents@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" + minipass "^2.2.1" -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4" + integrity sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw== dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" + nan "^2.9.2" + node-pre-gyp "^0.10.0" function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" @@ -1390,20 +2261,15 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" +get-caller-file@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + get-own-enumerable-property-symbols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" @@ -1416,6 +2282,13 @@ get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" +get-stream@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -1459,26 +2332,14 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob-parent@^3.0.0: +glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" -glob-stream@^5.3.2: - version "5.3.5" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-5.3.5.tgz#a55665a9a8ccdc41915a87c701e32d4e016fad22" - dependencies: - extend "^3.0.0" - glob "^5.0.3" - glob-parent "^3.0.0" - micromatch "^2.3.7" - ordered-read-streams "^0.3.0" - through2 "^0.6.0" - to-absolute-glob "^0.1.1" - unique-stream "^2.0.2" - glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" @@ -1490,175 +2351,87 @@ glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^5.0.3: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" +glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== dependencies: + fs.realpath "^1.0.0" inflight "^1.0.4" inherits "2" - minimatch "2 || 3" + minimatch "^3.0.4" once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.18.0: - version "9.18.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" - -glogg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.1.tgz#dcf758e44789cc3f3d32c1f3562a3676e6a34810" - dependencies: - sparkles "^1.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - -growl@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - -gulp-chmod@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/gulp-chmod/-/gulp-chmod-2.0.0.tgz#00c390b928a0799b251accf631aa09e01cc6299c" - dependencies: - deep-assign "^1.0.0" - stat-mode "^0.2.0" - through2 "^2.0.0" - -gulp-filter@^5.0.1: - version "5.1.0" - resolved "https://registry.yarnpkg.com/gulp-filter/-/gulp-filter-5.1.0.tgz#a05e11affb07cf7dcf41a7de1cb7b63ac3783e73" +glob@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" + integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== dependencies: - multimatch "^2.0.0" - plugin-error "^0.1.2" - streamfilter "^1.0.5" + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" -gulp-gunzip@1.0.0: +global-modules@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/gulp-gunzip/-/gulp-gunzip-1.0.0.tgz#15b741145e83a9c6f50886241b57cc5871f151a9" - dependencies: - through2 "~0.6.5" - vinyl "~0.4.6" - -gulp-remote-src@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/gulp-remote-src/-/gulp-remote-src-0.4.3.tgz#5728cfd643433dd4845ddef0969f0f971a2ab4a1" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== dependencies: - event-stream "~3.3.4" - node.extend "~1.1.2" - request "~2.79.0" - through2 "~2.0.3" - vinyl "~2.0.1" + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" -gulp-sourcemaps@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz#b86ff349d801ceb56e1d9e7dc7bbcb4b7dee600c" +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= dependencies: - convert-source-map "^1.1.1" - graceful-fs "^4.1.2" - strip-bom "^2.0.0" - through2 "^2.0.0" - vinyl "^1.0.0" + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" -gulp-symdest@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/gulp-symdest/-/gulp-symdest-1.1.0.tgz#c165320732d192ce56fd94271ffa123234bf2ae0" - dependencies: - event-stream "^3.3.1" - mkdirp "^0.5.1" - queue "^3.1.0" - vinyl-fs "^2.4.3" +globals@^11.1.0: + version "11.11.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.11.0.tgz#dcf93757fa2de5486fbeed7118538adf789e9c2e" + integrity sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw== -gulp-untar@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/gulp-untar/-/gulp-untar-0.0.6.tgz#d6bdefde7e9a8e054c9f162385a0782c4be74000" - dependencies: - event-stream "~3.3.4" - gulp-util "~3.0.8" - streamifier "~0.1.1" - tar "^2.2.1" - through2 "~2.0.3" +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -gulp-util@~3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" - dependencies: - array-differ "^1.0.0" - array-uniq "^1.0.2" - beeper "^1.0.0" - chalk "^1.0.0" - dateformat "^2.0.0" - fancy-log "^1.1.0" - gulplog "^1.0.0" - has-gulplog "^0.1.0" - lodash._reescape "^3.0.0" - lodash._reevaluate "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.template "^3.0.0" - minimist "^1.1.0" - multipipe "^0.1.2" - object-assign "^3.0.0" - replace-ext "0.0.1" - through2 "^2.0.0" - vinyl "^0.5.0" +graceful-fs@^4.1.15: + version "4.1.15" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" + integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== -gulp-vinyl-zip@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/gulp-vinyl-zip/-/gulp-vinyl-zip-2.1.0.tgz#24e40685dc05b7149995245099e0590263be8dad" - dependencies: - event-stream "^3.3.1" - queue "^4.2.1" - through2 "^2.0.3" - vinyl "^2.0.2" - vinyl-fs "^2.0.0" - yauzl "^2.2.1" - yazl "^2.2.1" +growl@1.10.3: + version "1.10.3" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" -gulplog@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5" - dependencies: - glogg "^1.0.0" +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" -handlebars@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" +handlebars@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" + integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== dependencies: - async "^1.4.0" + neo-async "^2.6.0" optimist "^0.6.1" - source-map "^0.4.4" + source-map "^0.6.1" optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" @@ -1666,16 +2439,20 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" - has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" @@ -1684,12 +2461,6 @@ has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" -has-gulplog@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce" - dependencies: - sparkles "^1.0.0" - has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -1727,14 +2498,21 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -hawk@3.1.3, hawk@~3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== dependencies: - boom "2.x.x" - cryptiles "2.x.x" - hoek "2.x.x" - sntp "1.x.x" + inherits "^2.0.3" + minimalistic-assert "^1.0.1" hawk@~6.0.2: version "6.0.2" @@ -1749,27 +2527,32 @@ he@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" -home-or-tmp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.1" - homedir-polyfill@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" dependencies: parse-passwd "^1.0.0" +homedir-polyfill@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" + integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA== + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4: version "2.6.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" @@ -1780,13 +2563,13 @@ html-encoding-sniffer@^1.0.2: dependencies: whatwg-encoding "^1.0.1" -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" +http-proxy-agent@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + agent-base "4" + debug "3.1.0" http-signature@~1.2.0: version "1.2.0" @@ -1796,9 +2579,15 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" -https-proxy-agent@^2.1.0: +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + +https-proxy-agent@^2.1.0, https-proxy-agent@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== dependencies: agent-base "^4.1.0" debug "^3.1.0" @@ -1819,11 +2608,36 @@ iconv-lite@0.4.19, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" -import-local@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" +iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ieee754@^1.1.4: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + dependencies: + minimatch "^3.0.4" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== dependencies: - pkg-dir "^2.0.0" + pkg-dir "^3.0.0" resolve-cwd "^2.0.0" imurmurhash@^0.1.4: @@ -1847,15 +2661,30 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.3, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + +inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -invariant@^2.2.2: +interpret@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" + integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== + +invariant@^2.2.4: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -1865,6 +2694,11 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== + is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" @@ -1881,6 +2715,13 @@ is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -1901,6 +2742,13 @@ is-ci@^1.0.10: dependencies: ci-info "^1.0.0" +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" @@ -1977,9 +2825,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" -is-generator-fn@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" @@ -1990,6 +2839,7 @@ is-glob@^2.0.0, is-glob@^2.0.1: is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" @@ -1999,20 +2849,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2029,7 +2865,12 @@ is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" -is-obj@^1.0.0, is-obj@^1.0.1: +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" @@ -2057,10 +2898,6 @@ is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" @@ -2083,27 +2920,16 @@ is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -is-valid-glob@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-0.3.0.tgz#d4b55c69f51886f9b65c70d6c2622d37e29f48fe" - -is-windows@^1.0.2: +is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" -is@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/is/-/is-3.2.1.tgz#d0ac2ad55eb7b0bec926a5266f6c662aaa83dca5" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -2125,53 +2951,62 @@ isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" -istanbul-api@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" - dependencies: - async "^2.1.4" - compare-versions "^3.1.0" - fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" - js-yaml "^3.7.0" - mkdirp "^0.5.1" +istanbul-api@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.1.tgz#194b773f6d9cbc99a9258446848b0f988951c4d0" + integrity sha512-kVmYrehiwyeBAk/wE71tW6emzLiHGjYIiDrc8sfyty4F8M02/lrgXSm+R1kXysmF20zArvmZXjlE/mg24TVPJw== + dependencies: + async "^2.6.1" + compare-versions "^3.2.1" + fileset "^2.0.3" + istanbul-lib-coverage "^2.0.3" + istanbul-lib-hook "^2.0.3" + istanbul-lib-instrument "^3.1.0" + istanbul-lib-report "^2.0.4" + istanbul-lib-source-maps "^3.0.2" + istanbul-reports "^2.1.1" + js-yaml "^3.12.0" + make-dir "^1.3.0" + minimatch "^3.0.4" once "^1.4.0" -istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" -istanbul-lib-hook@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" - dependencies: - append-transform "^0.4.0" +istanbul-lib-coverage@^2.0.2, istanbul-lib-coverage@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#0b891e5ad42312c2b9488554f603795f9a2211ba" + integrity sha512-dKWuzRGCs4G+67VfW9pBFFz2Jpi4vSp/k7zBcJ888ofV5Mi1g5CUML5GvMvV6u9Cjybftu+E8Cgp+k0dI1E5lw== -istanbul-lib-instrument@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" +istanbul-lib-hook@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.3.tgz#e0e581e461c611be5d0e5ef31c5f0109759916fb" + integrity sha512-CLmEqwEhuCYtGcpNVJjLV1DQyVnIqavMLFHV/DP+np/g3qvdxu3gsPqYoJMXm15sN84xOlckFB3VNvRbf5yEgA== dependencies: - babel-generator "^6.18.0" - babel-template "^6.16.0" - babel-traverse "^6.18.0" - babel-types "^6.18.0" - babylon "^6.18.0" - istanbul-lib-coverage "^1.2.0" - semver "^5.3.0" + append-transform "^1.0.0" -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" +istanbul-lib-instrument@^3.0.0, istanbul-lib-instrument@^3.0.1, istanbul-lib-instrument@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.1.0.tgz#a2b5484a7d445f1f311e93190813fa56dfb62971" + integrity sha512-ooVllVGT38HIk8MxDj/OIHXSYvH+1tq/Vb38s8ixt9GoJadXska4WkGY+0wkmtYCZNYtaARniH/DixUGGLZ0uA== + dependencies: + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + istanbul-lib-coverage "^2.0.3" + semver "^5.5.0" + +istanbul-lib-report@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.4.tgz#bfd324ee0c04f59119cb4f07dab157d09f24d7e4" + integrity sha512-sOiLZLAWpA0+3b5w5/dq0cjm2rrNdAfHWaGhmn7XEFW6X++IV9Ohn+pnELAl9K3rfpaeBfbmH9JU5sejacdLeA== dependencies: - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - path-parse "^1.0.5" - supports-color "^3.1.2" + istanbul-lib-coverage "^2.0.3" + make-dir "^1.3.0" + supports-color "^6.0.0" istanbul-lib-source-maps@^1.1.0: version "1.2.3" @@ -2183,308 +3018,600 @@ istanbul-lib-source-maps@^1.1.0: rimraf "^2.6.1" source-map "^0.5.3" -istanbul-lib-source-maps@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" +istanbul-lib-source-maps@^3.0.1, istanbul-lib-source-maps@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.2.tgz#f1e817229a9146e8424a28e5d69ba220fda34156" + integrity sha512-JX4v0CiKTGp9fZPmoxpu9YEkPbEqCqBbO3403VabKjH+NRXo72HafD5UgnjTEqHL2SAjaZK1XDuDOkn6I5QVfQ== dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" + debug "^4.1.1" + istanbul-lib-coverage "^2.0.3" + make-dir "^1.3.0" + rimraf "^2.6.2" + source-map "^0.6.1" -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" +istanbul-reports@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.1.1.tgz#72ef16b4ecb9a4a7bd0e2001e00f95d1eec8afa9" + integrity sha512-FzNahnidyEPBCI0HcufJoSEoKykesRlFcSzQqjH9x0+LC8tnnE/p/90PBLu8iZTxr8yYZNyTtiAujUqyN+CIxw== dependencies: - handlebars "^4.0.3" + handlebars "^4.1.0" -jest-changed-files@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-23.2.0.tgz#a145a6e4b66d0129fc7c99cee134dc937a643d9c" +jest-changed-files@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-24.7.0.tgz#39d723a11b16ed7b373ac83adc76a69464b0c4fa" + integrity sha512-33BgewurnwSfJrW7T5/ZAXGE44o7swLslwh8aUckzq2e17/2Os1V0QU506ZNik3hjs8MgnEMKNkcud442NCDTw== dependencies: + "@jest/types" "^24.7.0" + execa "^1.0.0" throat "^4.0.0" -jest-cli@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-23.3.0.tgz#307e9be7733443b789a8279d694054d051a9e5e2" +jest-cli@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-24.7.1.tgz#6093a539073b6f4953145abeeb9709cd621044f1" + integrity sha512-32OBoSCVPzcTslGFl6yVCMzB2SqX3IrWwZCY5mZYkb0D2WsogmU3eV2o8z7+gRQa4o4sZPX/k7GU+II7CxM6WQ== dependencies: - ansi-escapes "^3.0.0" + "@jest/core" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" chalk "^2.0.1" exit "^0.1.2" - glob "^7.1.2" - graceful-fs "^4.1.11" - import-local "^1.0.0" - is-ci "^1.0.10" - istanbul-api "^1.3.1" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-source-maps "^1.2.4" - jest-changed-files "^23.2.0" - jest-config "^23.3.0" - jest-environment-jsdom "^23.3.0" - jest-get-type "^22.1.0" - jest-haste-map "^23.2.0" - jest-message-util "^23.3.0" - jest-regex-util "^23.3.0" - jest-resolve-dependencies "^23.3.0" - jest-runner "^23.3.0" - jest-runtime "^23.3.0" - jest-snapshot "^23.3.0" - jest-util "^23.3.0" - jest-validate "^23.3.0" - jest-watcher "^23.2.0" - jest-worker "^23.2.0" + import-local "^2.0.0" + is-ci "^2.0.0" + jest-config "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + prompts "^2.0.1" + realpath-native "^1.1.0" + yargs "^12.0.2" + +jest-config@^24.7.0, jest-config@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.8.0.tgz#77db3d265a6f726294687cbbccc36f8a76ee0f4f" + integrity sha512-Czl3Nn2uEzVGsOeaewGWoDPD8GStxCpAe0zOYs2x2l0fZAgPbCr3uwUkgNKV3LwE13VXythM946cd5rdGkkBZw== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.8.0" + "@jest/types" "^24.8.0" + babel-jest "^24.8.0" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.8.0" + jest-environment-node "^24.8.0" + jest-get-type "^24.8.0" + jest-jasmine2 "^24.8.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.8.0" + jest-util "^24.8.0" + jest-validate "^24.8.0" micromatch "^3.1.10" - node-notifier "^5.2.1" - prompts "^0.1.9" - realpath-native "^1.0.0" - rimraf "^2.5.4" - slash "^1.0.0" - string-length "^2.0.0" - strip-ansi "^4.0.0" - which "^1.2.12" - yargs "^11.0.0" + pretty-format "^24.8.0" + realpath-native "^1.1.0" + +jest-config@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-24.7.1.tgz#6c1dd4db82a89710a3cf66bdba97827c9a1cf052" + integrity sha512-8FlJNLI+X+MU37j7j8RE4DnJkvAghXmBWdArVzypW6WxfGuxiL/CCkzBg0gHtXhD2rxla3IMOSUAHylSKYJ83g== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^24.7.1" + "@jest/types" "^24.7.0" + babel-jest "^24.7.1" + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^24.7.1" + jest-environment-node "^24.7.1" + jest-get-type "^24.3.0" + jest-jasmine2 "^24.7.1" + jest-regex-util "^24.3.0" + jest-resolve "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + micromatch "^3.1.10" + pretty-format "^24.7.0" + realpath-native "^1.1.0" -jest-config@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-23.3.0.tgz#bb4d53b70f9500fafddf718d226abb53b13b8323" +jest-diff@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.7.0.tgz#5d862899be46249754806f66e5729c07fcb3580f" + integrity sha512-ULQZ5B1lWpH70O4xsANC4tf4Ko6RrpwhE3PtG6ERjMg1TiYTC2Wp4IntJVGro6a8HG9luYHhhmF4grF0Pltckg== dependencies: - babel-core "^6.0.0" - babel-jest "^23.2.0" chalk "^2.0.1" - glob "^7.1.1" - jest-environment-jsdom "^23.3.0" - jest-environment-node "^23.3.0" - jest-get-type "^22.1.0" - jest-jasmine2 "^23.3.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.2.0" - jest-util "^23.3.0" - jest-validate "^23.3.0" - pretty-format "^23.2.0" - -jest-diff@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-23.2.0.tgz#9f2cf4b51e12c791550200abc16b47130af1062a" + diff-sequences "^24.3.0" + jest-get-type "^24.3.0" + pretty-format "^24.7.0" + +jest-diff@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-24.8.0.tgz#146435e7d1e3ffdf293d53ff97e193f1d1546172" + integrity sha512-wxetCEl49zUpJ/bvUmIFjd/o52J+yWcoc5ZyPq4/W1LUKGEhRYDIbP1KcF6t+PvqNrGAFk4/JhtxDq/Nnzs66g== dependencies: chalk "^2.0.1" - diff "^3.2.0" - jest-get-type "^22.1.0" - pretty-format "^23.2.0" + diff-sequences "^24.3.0" + jest-get-type "^24.8.0" + pretty-format "^24.8.0" -jest-docblock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-23.2.0.tgz#f085e1f18548d99fdd69b20207e6fd55d91383a7" +jest-docblock@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-24.3.0.tgz#b9c32dac70f72e4464520d2ba4aec02ab14db5dd" + integrity sha512-nlANmF9Yq1dufhFlKG9rasfQlrY7wINJbo3q01tu56Jv5eBU5jirylhF2O5ZBnLxzOVBGRDz/9NAwNyBtG4Nyg== dependencies: detect-newline "^2.1.0" -jest-each@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-23.2.0.tgz#a400f81c857083f50c4f53399b109f12023fb19d" +jest-each@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.7.1.tgz#fcc7dda4147c28430ad9fb6dc7211cd17ab54e74" + integrity sha512-4fsS8fEfLa3lfnI1Jw6NxjhyRTgfpuOVTeUZZFyVYqeTa4hPhr2YkToUhouuLTrL2eMGOfpbdMyRx0GQ/VooKA== + dependencies: + "@jest/types" "^24.7.0" + chalk "^2.0.1" + jest-get-type "^24.3.0" + jest-util "^24.7.1" + pretty-format "^24.7.0" + +jest-each@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-24.8.0.tgz#a05fd2bf94ddc0b1da66c6d13ec2457f35e52775" + integrity sha512-NrwK9gaL5+XgrgoCsd9svsoWdVkK4gnvyhcpzd6m487tXHqIdYeykgq3MKI1u4I+5Zf0tofr70at9dWJDeb+BA== dependencies: + "@jest/types" "^24.8.0" chalk "^2.0.1" - pretty-format "^23.2.0" + jest-get-type "^24.8.0" + jest-util "^24.8.0" + pretty-format "^24.8.0" -jest-editor-support@23.3.0, jest-editor-support@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-editor-support/-/jest-editor-support-23.3.0.tgz#6aab4bfdd946b64035c469adfd40470a11f2c529" +jest-editor-support@^26.0.0-beta: + version "26.0.0-beta" + resolved "https://registry.yarnpkg.com/jest-editor-support/-/jest-editor-support-26.0.0-beta.tgz#cdf5c1ecbb3c274544b20538c686501e11337845" + integrity sha512-ViF4YrA96Ztog5aCd/8qoRLQQoCl0E3uO6xAW1IwOVKHE9692swVxJlZgFeODz2Ys/+VwTzmt34C7PZcb5zNeQ== dependencies: - babel-traverse "^6.14.1" + "@babel/traverse" "^7.1.2" babylon "^6.14.1" - jest-snapshot "^23.3.0" + jest-config "^24.7.0" + jest-snapshot "^24.7.0" + typescript "^3.4.3" + +jest-environment-jsdom@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.7.1.tgz#a40e004b4458ebeb8a98082df135fd501b9fbbd6" + integrity sha512-Gnhb+RqE2JuQGb3kJsLF8vfqjt3PHKSstq4Xc8ic+ax7QKo4Z0RWGucU3YV+DwKR3T9SYc+3YCUQEJs8r7+Jxg== + dependencies: + "@jest/environment" "^24.7.1" + "@jest/fake-timers" "^24.7.1" + "@jest/types" "^24.7.0" + jest-mock "^24.7.0" + jest-util "^24.7.1" + jsdom "^11.5.1" -jest-environment-jsdom@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-23.3.0.tgz#190457f91c9e615454c4186056065db6ed7a4e2a" +jest-environment-jsdom@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-24.8.0.tgz#300f6949a146cabe1c9357ad9e9ecf9f43f38857" + integrity sha512-qbvgLmR7PpwjoFjM/sbuqHJt/NCkviuq9vus9NBn/76hhSidO+Z6Bn9tU8friecegbJL8gzZQEMZBQlFWDCwAQ== dependencies: - jest-mock "^23.2.0" - jest-util "^23.3.0" + "@jest/environment" "^24.8.0" + "@jest/fake-timers" "^24.8.0" + "@jest/types" "^24.8.0" + jest-mock "^24.8.0" + jest-util "^24.8.0" jsdom "^11.5.1" -jest-environment-node@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-23.3.0.tgz#1e8df21c847aa5d03b76573f0dc16fcde5034c32" +jest-environment-node@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.7.1.tgz#fa2c047a31522a48038d26ee4f7c8fd9c1ecfe12" + integrity sha512-GJJQt1p9/C6aj6yNZMvovZuxTUd+BEJprETdvTKSb4kHcw4mFj8777USQV0FJoJ4V3djpOwA5eWyPwfq//PFBA== + dependencies: + "@jest/environment" "^24.7.1" + "@jest/fake-timers" "^24.7.1" + "@jest/types" "^24.7.0" + jest-mock "^24.7.0" + jest-util "^24.7.1" + +jest-environment-node@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-24.8.0.tgz#d3f726ba8bc53087a60e7a84ca08883a4c892231" + integrity sha512-vIGUEScd1cdDgR6sqn2M08sJTRLQp6Dk/eIkCeO4PFHxZMOgy+uYLPMC4ix3PEfM5Au/x3uQ/5Tl0DpXXZsJ/Q== dependencies: - jest-mock "^23.2.0" - jest-util "^23.3.0" + "@jest/environment" "^24.8.0" + "@jest/fake-timers" "^24.8.0" + "@jest/types" "^24.8.0" + jest-mock "^24.8.0" + jest-util "^24.8.0" jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" -jest-get-type@^22.1.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" +jest-get-type@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da" + integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow== + +jest-get-type@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.8.0.tgz#a7440de30b651f5a70ea3ed7ff073a32dfe646fc" + integrity sha512-RR4fo8jEmMD9zSz2nLbs2j0zvPpk/KCEz3a62jJWbd2ayNo0cb+KFRxPHVhE4ZmgGJEQp0fosmNz84IfqM8cMQ== -jest-haste-map@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-23.2.0.tgz#d10cbac007c695948c8ef1821a2b2ed2d4f2d4d8" +jest-haste-map@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.7.1.tgz#772e215cd84080d4bbcb759cfb668ad649a21471" + integrity sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw== dependencies: + "@jest/types" "^24.7.0" + anymatch "^2.0.0" fb-watchman "^2.0.0" - graceful-fs "^4.1.11" - jest-docblock "^23.2.0" - jest-serializer "^23.0.1" - jest-worker "^23.2.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.4.0" + jest-util "^24.7.1" + jest-worker "^24.6.0" micromatch "^3.1.10" - sane "^2.0.0" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-haste-map@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.0.tgz#51794182d877b3ddfd6e6d23920e3fe72f305800" + integrity sha512-ZBPRGHdPt1rHajWelXdqygIDpJx8u3xOoLyUBWRW28r3tagrgoepPrzAozW7kW9HrQfhvmiv1tncsxqHJO1onQ== + dependencies: + "@jest/types" "^24.8.0" + anymatch "^2.0.0" + fb-watchman "^2.0.0" + graceful-fs "^4.1.15" + invariant "^2.2.4" + jest-serializer "^24.4.0" + jest-util "^24.8.0" + jest-worker "^24.6.0" + micromatch "^3.1.10" + sane "^4.0.3" + walker "^1.0.7" + optionalDependencies: + fsevents "^1.2.7" + +jest-jasmine2@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.7.1.tgz#01398686dabe46553716303993f3be62e5d9d818" + integrity sha512-Y/9AOJDV1XS44wNwCaThq4Pw3gBPiOv/s6NcbOAkVRRUEPu+36L2xoPsqQXsDrxoBerqeyslpn2TpCI8Zr6J2w== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + co "^4.6.0" + expect "^24.7.1" + is-generator-fn "^2.0.0" + jest-each "^24.7.1" + jest-matcher-utils "^24.7.0" + jest-message-util "^24.7.1" + jest-runtime "^24.7.1" + jest-snapshot "^24.7.1" + jest-util "^24.7.1" + pretty-format "^24.7.0" + throat "^4.0.0" -jest-jasmine2@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-23.3.0.tgz#a8706baac23c8a130d5aa8ef5464a9d49096d1b5" +jest-jasmine2@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-24.8.0.tgz#a9c7e14c83dd77d8b15e820549ce8987cc8cd898" + integrity sha512-cEky88npEE5LKd5jPpTdDCLvKkdyklnaRycBXL6GNmpxe41F0WN44+i7lpQKa/hcbXaQ+rc9RMaM4dsebrYong== dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" chalk "^2.0.1" co "^4.6.0" - expect "^23.3.0" - is-generator-fn "^1.0.0" - jest-diff "^23.2.0" - jest-each "^23.2.0" - jest-matcher-utils "^23.2.0" - jest-message-util "^23.3.0" - jest-snapshot "^23.3.0" - jest-util "^23.3.0" - pretty-format "^23.2.0" - -jest-leak-detector@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-23.2.0.tgz#c289d961dc638f14357d4ef96e0431ecc1aa377d" - dependencies: - pretty-format "^23.2.0" - -jest-matcher-utils@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-23.2.0.tgz#4d4981f23213e939e3cedf23dc34c747b5ae1913" + expect "^24.8.0" + is-generator-fn "^2.0.0" + jest-each "^24.8.0" + jest-matcher-utils "^24.8.0" + jest-message-util "^24.8.0" + jest-runtime "^24.8.0" + jest-snapshot "^24.8.0" + jest-util "^24.8.0" + pretty-format "^24.8.0" + throat "^4.0.0" + +jest-leak-detector@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.7.0.tgz#323ff93ed69be12e898f5b040952f08a94288ff9" + integrity sha512-zV0qHKZGXtmPVVzT99CVEcHE9XDf+8LwiE0Ob7jjezERiGVljmqKFWpV2IkG+rkFIEUHFEkMiICu7wnoPM/RoQ== + dependencies: + pretty-format "^24.7.0" + +jest-leak-detector@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-24.8.0.tgz#c0086384e1f650c2d8348095df769f29b48e6980" + integrity sha512-cG0yRSK8A831LN8lIHxI3AblB40uhv0z+SsQdW3GoMMVcK+sJwrIIyax5tu3eHHNJ8Fu6IMDpnLda2jhn2pD/g== dependencies: + pretty-format "^24.8.0" + +jest-matcher-utils@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.7.0.tgz#bbee1ff37bc8b2e4afcaabc91617c1526af4bcd4" + integrity sha512-158ieSgk3LNXeUhbVJYRXyTPSCqNgVXOp/GT7O94mYd3pk/8+odKTyR1JLtNOQSPzNi8NFYVONtvSWA/e1RDXg== + dependencies: + chalk "^2.0.1" + jest-diff "^24.7.0" + jest-get-type "^24.3.0" + pretty-format "^24.7.0" + +jest-matcher-utils@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-24.8.0.tgz#2bce42204c9af12bde46f83dc839efe8be832495" + integrity sha512-lex1yASY51FvUuHgm0GOVj7DCYEouWSlIYmCW7APSqB9v8mXmKSn5+sWVF0MhuASG0bnYY106/49JU1FZNl5hw== + dependencies: + chalk "^2.0.1" + jest-diff "^24.8.0" + jest-get-type "^24.8.0" + pretty-format "^24.8.0" + +jest-message-util@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.7.1.tgz#f1dc3a6c195647096a99d0f1dadbc447ae547018" + integrity sha512-dk0gqVtyqezCHbcbk60CdIf+8UHgD+lmRHifeH3JRcnAqh4nEyPytSc9/L1+cQyxC+ceaeP696N4ATe7L+omcg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/stack-utils" "^1.0.1" chalk "^2.0.1" - jest-get-type "^22.1.0" - pretty-format "^23.2.0" + micromatch "^3.1.10" + slash "^2.0.0" + stack-utils "^1.0.1" -jest-message-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-23.3.0.tgz#bc07b11cec6971fb5dd9de2dfb60ebc22150c160" +jest-message-util@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b" + integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g== dependencies: - "@babel/code-frame" "^7.0.0-beta.35" + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/stack-utils" "^1.0.1" chalk "^2.0.1" micromatch "^3.1.10" - slash "^1.0.0" + slash "^2.0.0" stack-utils "^1.0.1" -jest-mock@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-23.2.0.tgz#ad1c60f29e8719d47c26e1138098b6d18b261134" +jest-mock@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.7.0.tgz#e49ce7262c12d7f5897b0d8af77f6db8e538023b" + integrity sha512-6taW4B4WUcEiT2V9BbOmwyGuwuAFT2G8yghF7nyNW1/2gq5+6aTqSPcS9lS6ArvEkX55vbPAS/Jarx5LSm4Fng== + dependencies: + "@jest/types" "^24.7.0" + +jest-mock@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56" + integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A== + dependencies: + "@jest/types" "^24.8.0" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== -jest-regex-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-23.3.0.tgz#5f86729547c2785c4002ceaa8f849fe8ca471bc5" +jest-regex-util@^24.3.0: + version "24.3.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-24.3.0.tgz#d5a65f60be1ae3e310d5214a0307581995227b36" + integrity sha512-tXQR1NEOyGlfylyEjg1ImtScwMq8Oh3iJbGTjN7p0J23EuVX1MA8rwU69K4sLbCmwzgCUbVkm0FkSF9TdzOhtg== -jest-resolve-dependencies@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-23.3.0.tgz#8444d3b0b1288b80864d8801ff50b44a4d695d1d" +jest-resolve-dependencies@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-24.7.1.tgz#cf93bbef26999488a96a2b2012f9fe7375aa378f" + integrity sha512-2Eyh5LJB2liNzfk4eo7bD1ZyBbqEJIyyrFtZG555cSWW9xVHxII2NuOkSl1yUYTAYCAmM2f2aIT5A7HzNmubyg== dependencies: - jest-regex-util "^23.3.0" - jest-snapshot "^23.3.0" + "@jest/types" "^24.7.0" + jest-regex-util "^24.3.0" + jest-snapshot "^24.7.1" -jest-resolve@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-23.2.0.tgz#a0790ad5a3b99002ab4dbfcbf8d9e2d6a69b3d99" +jest-resolve@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.7.1.tgz#e4150198299298380a75a9fd55043fa3b9b17fde" + integrity sha512-Bgrc+/UUZpGJ4323sQyj85hV9d+ANyPNu6XfRDUcyFNX1QrZpSoM0kE4Mb2vZMAYTJZsBFzYe8X1UaOkOELSbw== dependencies: + "@jest/types" "^24.7.0" browser-resolve "^1.11.3" chalk "^2.0.1" - realpath-native "^1.0.0" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" -jest-runner@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-23.3.0.tgz#04c7e458a617501a4875db0d7ffbe0e3cbd43bfb" +jest-resolve@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-24.8.0.tgz#84b8e5408c1f6a11539793e2b5feb1b6e722439f" + integrity sha512-+hjSzi1PoRvnuOICoYd5V/KpIQmkAsfjFO71458hQ2Whi/yf1GDeBOFj8Gxw4LrApHsVJvn5fmjcPdmoUHaVKw== dependencies: + "@jest/types" "^24.8.0" + browser-resolve "^1.11.3" + chalk "^2.0.1" + jest-pnp-resolver "^1.2.1" + realpath-native "^1.1.0" + +jest-runner@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.7.1.tgz#41c8a02a06aa23ea82d8bffd69d7fa98d32f85bf" + integrity sha512-aNFc9liWU/xt+G9pobdKZ4qTeG/wnJrJna3VqunziDNsWT3EBpmxXZRBMKCsNMyfy+A/XHiV+tsMLufdsNdgCw== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.7.1" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + chalk "^2.4.2" exit "^0.1.2" - graceful-fs "^4.1.11" - jest-config "^23.3.0" - jest-docblock "^23.2.0" - jest-haste-map "^23.2.0" - jest-jasmine2 "^23.3.0" - jest-leak-detector "^23.2.0" - jest-message-util "^23.3.0" - jest-runtime "^23.3.0" - jest-util "^23.3.0" - jest-worker "^23.2.0" + graceful-fs "^4.1.15" + jest-config "^24.7.1" + jest-docblock "^24.3.0" + jest-haste-map "^24.7.1" + jest-jasmine2 "^24.7.1" + jest-leak-detector "^24.7.0" + jest-message-util "^24.7.1" + jest-resolve "^24.7.1" + jest-runtime "^24.7.1" + jest-util "^24.7.1" + jest-worker "^24.6.0" source-map-support "^0.5.6" throat "^4.0.0" -jest-runtime@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-23.3.0.tgz#4865aab4ceff82f9cec6335fd7ae1422cc1de7df" +jest-runner@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-24.8.0.tgz#4f9ae07b767db27b740d7deffad0cf67ccb4c5bb" + integrity sha512-utFqC5BaA3JmznbissSs95X1ZF+d+4WuOWwpM9+Ak356YtMhHE/GXUondZdcyAAOTBEsRGAgH/0TwLzfI9h7ow== dependencies: - babel-core "^6.0.0" - babel-plugin-istanbul "^4.1.6" - chalk "^2.0.1" - convert-source-map "^1.4.0" + "@jest/console" "^24.7.1" + "@jest/environment" "^24.8.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + chalk "^2.4.2" exit "^0.1.2" - fast-json-stable-stringify "^2.0.0" - graceful-fs "^4.1.11" - jest-config "^23.3.0" - jest-haste-map "^23.2.0" - jest-message-util "^23.3.0" - jest-regex-util "^23.3.0" - jest-resolve "^23.2.0" - jest-snapshot "^23.3.0" - jest-util "^23.3.0" - jest-validate "^23.3.0" - micromatch "^3.1.10" - realpath-native "^1.0.0" - slash "^1.0.0" - strip-bom "3.0.0" - write-file-atomic "^2.1.0" - yargs "^11.0.0" - -jest-serializer@^23.0.1: - version "23.0.1" - resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-23.0.1.tgz#a3776aeb311e90fe83fab9e533e85102bd164165" + graceful-fs "^4.1.15" + jest-config "^24.8.0" + jest-docblock "^24.3.0" + jest-haste-map "^24.8.0" + jest-jasmine2 "^24.8.0" + jest-leak-detector "^24.8.0" + jest-message-util "^24.8.0" + jest-resolve "^24.8.0" + jest-runtime "^24.8.0" + jest-util "^24.8.0" + jest-worker "^24.6.0" + source-map-support "^0.5.6" + throat "^4.0.0" -jest-snapshot@^23.0.1: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.2.0.tgz#c7a3d017177bbad60c8a595869cf90a8782e6a7e" - dependencies: +jest-runtime@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.7.1.tgz#2ffd70b22dd03a5988c0ab9465c85cdf5d25c597" + integrity sha512-0VAbyBy7tll3R+82IPJpf6QZkokzXPIS71aDeqh+WzPRXRCNz6StQ45otFariPdJ4FmXpDiArdhZrzNAC3sj6A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.7.1" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/yargs" "^12.0.2" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.7.1" + jest-haste-map "^24.7.1" + jest-message-util "^24.7.1" + jest-mock "^24.7.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.7.1" + jest-snapshot "^24.7.1" + jest-util "^24.7.1" + jest-validate "^24.7.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^12.0.2" + +jest-runtime@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-24.8.0.tgz#05f94d5b05c21f6dc54e427cd2e4980923350620" + integrity sha512-Mq0aIXhvO/3bX44ccT+czU1/57IgOMyy80oM0XR/nyD5zgBcesF84BPabZi39pJVA6UXw+fY2Q1N+4BiVUBWOA== + dependencies: + "@jest/console" "^24.7.1" + "@jest/environment" "^24.8.0" + "@jest/source-map" "^24.3.0" + "@jest/transform" "^24.8.0" + "@jest/types" "^24.8.0" + "@types/yargs" "^12.0.2" chalk "^2.0.1" - jest-diff "^23.2.0" - jest-matcher-utils "^23.2.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.1.15" + jest-config "^24.8.0" + jest-haste-map "^24.8.0" + jest-message-util "^24.8.0" + jest-mock "^24.8.0" + jest-regex-util "^24.3.0" + jest-resolve "^24.8.0" + jest-snapshot "^24.8.0" + jest-util "^24.8.0" + jest-validate "^24.8.0" + realpath-native "^1.1.0" + slash "^2.0.0" + strip-bom "^3.0.0" + yargs "^12.0.2" + +jest-serializer@^24.4.0: + version "24.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3" + integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q== + +jest-snapshot@^24.7.0, jest-snapshot@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.7.1.tgz#bd5a35f74aedff070975e9e9c90024f082099568" + integrity sha512-8Xk5O4p+JsZZn4RCNUS3pxA+ORKpEKepE+a5ejIKrId9CwrVN0NY+vkqEkXqlstA5NMBkNahXkR/4qEBy0t5yA== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^24.7.0" + chalk "^2.0.1" + expect "^24.7.1" + jest-diff "^24.7.0" + jest-matcher-utils "^24.7.0" + jest-message-util "^24.7.1" + jest-resolve "^24.7.1" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^23.2.0" + pretty-format "^24.7.0" + semver "^5.5.0" -jest-snapshot@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-23.3.0.tgz#fc4e9f81e45432d10507e27f50bce60f44d81424" +jest-snapshot@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.8.0.tgz#3bec6a59da2ff7bc7d097a853fb67f9d415cb7c6" + integrity sha512-5ehtWoc8oU9/cAPe6fez6QofVJLBKyqkY2+TlKTOf0VllBB/mqUNdARdcjlZrs9F1Cv+/HKoCS/BknT0+tmfPg== dependencies: - babel-traverse "^6.0.0" - babel-types "^6.0.0" + "@babel/types" "^7.0.0" + "@jest/types" "^24.8.0" chalk "^2.0.1" - jest-diff "^23.2.0" - jest-matcher-utils "^23.2.0" - jest-message-util "^23.3.0" - jest-resolve "^23.2.0" + expect "^24.8.0" + jest-diff "^24.8.0" + jest-matcher-utils "^24.8.0" + jest-message-util "^24.8.0" + jest-resolve "^24.8.0" mkdirp "^0.5.1" natural-compare "^1.4.0" - pretty-format "^23.2.0" + pretty-format "^24.8.0" semver "^5.5.0" -jest-test-typescript-parser@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-test-typescript-parser/-/jest-test-typescript-parser-23.3.0.tgz#698406067a0c8681509ecc0d5dba32f789ee7550" - dependencies: - jest-editor-support "^23.3.0" - typescript "^2.5.3" +jest-util@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.7.1.tgz#b4043df57b32a23be27c75a2763d8faf242038ff" + integrity sha512-/KilOue2n2rZ5AnEBYoxOXkeTu6vi7cjgQ8MXEkih0oeAXT6JkS3fr7/j8+engCjciOU1Nq5loMSKe0A1oeX0A== + dependencies: + "@jest/console" "^24.7.1" + "@jest/fake-timers" "^24.7.1" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + callsites "^3.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.15" + is-ci "^2.0.0" + mkdirp "^0.5.1" + slash "^2.0.0" + source-map "^0.6.0" -jest-util@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-23.3.0.tgz#79f35bb0c30100ef611d963ee6b88f8ed873a81d" - dependencies: - callsites "^2.0.0" +jest-util@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1" + integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA== + dependencies: + "@jest/console" "^24.7.1" + "@jest/fake-timers" "^24.8.0" + "@jest/source-map" "^24.3.0" + "@jest/test-result" "^24.8.0" + "@jest/types" "^24.8.0" + callsites "^3.0.0" chalk "^2.0.1" - graceful-fs "^4.1.11" - is-ci "^1.0.10" - jest-message-util "^23.3.0" + graceful-fs "^4.1.15" + is-ci "^2.0.0" mkdirp "^0.5.1" - slash "^1.0.0" + slash "^2.0.0" source-map "^0.6.0" jest-validate@^21.1.0: @@ -2496,43 +3623,72 @@ jest-validate@^21.1.0: leven "^2.1.0" pretty-format "^21.2.1" -jest-validate@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-23.3.0.tgz#d49bea6aad98c30acd2cbb542434798a0cc13f76" +jest-validate@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.7.0.tgz#70007076f338528ee1b1c8a8258b1b0bb982508d" + integrity sha512-cgai/gts9B2chz1rqVdmLhzYxQbgQurh1PEQSvSgPZ8KGa1AqXsqC45W5wKEwzxKrWqypuQrQxnF4+G9VejJJA== + dependencies: + "@jest/types" "^24.7.0" + camelcase "^5.0.0" + chalk "^2.0.1" + jest-get-type "^24.3.0" + leven "^2.1.0" + pretty-format "^24.7.0" + +jest-validate@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.8.0.tgz#624c41533e6dfe356ffadc6e2423a35c2d3b4849" + integrity sha512-+/N7VOEMW1Vzsrk3UWBDYTExTPwf68tavEPKDnJzrC6UlHtUDU/fuEdXqFoHzv9XnQ+zW6X3qMZhJ3YexfeLDA== dependencies: + "@jest/types" "^24.8.0" + camelcase "^5.0.0" chalk "^2.0.1" - jest-get-type "^22.1.0" + jest-get-type "^24.8.0" leven "^2.1.0" - pretty-format "^23.2.0" + pretty-format "^24.8.0" -jest-watcher@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-23.2.0.tgz#678e852896e919e9d9a0eb4b8baf1ae279620ea9" +jest-watcher@^24.7.1: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-24.7.1.tgz#e161363d7f3f4e1ef3d389b7b3a0aad247b673f5" + integrity sha512-Wd6TepHLRHVKLNPacEsBwlp9raeBIO+01xrN24Dek4ggTS8HHnOzYSFnvp+6MtkkJ3KfMzy220KTi95e2rRkrw== dependencies: + "@jest/test-result" "^24.7.1" + "@jest/types" "^24.7.0" + "@types/yargs" "^12.0.9" ansi-escapes "^3.0.0" chalk "^2.0.1" + jest-util "^24.7.1" string-length "^2.0.0" -jest-worker@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" +jest-worker@^24.6.0: + version "24.6.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3" + integrity sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ== dependencies: merge-stream "^1.0.1" + supports-color "^6.1.0" -jest@^23.3.0: - version "23.3.0" - resolved "https://registry.yarnpkg.com/jest/-/jest-23.3.0.tgz#1355cd792f38cf20fba4da02dddb7ca14d9484b5" +jest@^24.7.0: + version "24.7.1" + resolved "https://registry.yarnpkg.com/jest/-/jest-24.7.1.tgz#0d94331cf510c75893ee32f87d7321d5bf8f2501" + integrity sha512-AbvRar5r++izmqo5gdbAjTeA6uNRGoNRuj5vHB0OnDXo2DXWZJVuaObiGgtlvhKb+cWy2oYbQSfxv7Q7GjnAtA== dependencies: - import-local "^1.0.0" - jest-cli "^23.3.0" + import-local "^2.0.0" + jest-cli "^24.7.1" -js-tokens@^3.0.0, js-tokens@^3.0.2: +js-tokens@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3, js-yaml@^3.6.1, js-yaml@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.4.3, js-yaml@^3.6.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -2572,9 +3728,10 @@ jsdom@^11.5.1: ws "^4.0.0" xml-name-validator "^3.0.0" -jsesc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsome@^2.3.25: version "2.5.0" @@ -2584,33 +3741,47 @@ jsome@^2.3.25: json-stringify-safe "^5.0.1" yargs "^11.0.0" +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" - dependencies: - jsonify "~0.0.0" - json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +json5@2.x, json5@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.0.tgz#e7a0c62c48285c628d20a10b85c89bb807c32850" + integrity sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ== + dependencies: + minimist "^1.2.0" + json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" -jsonpointer@^4.0.0, jsonpointer@^4.0.1: +jsonpointer@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" @@ -2623,10 +3794,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" -kind-of@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-1.1.0.tgz#140a3d2d41a36d2efcfa9377b62c24f8495a5c44" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2647,15 +3814,10 @@ kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - dependencies: - readable-stream "^2.0.5" +kleur@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== lcid@^1.0.0: version "1.0.0" @@ -2663,6 +3825,13 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== + dependencies: + invert-kv "^2.0.0" + lcov-parse@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" @@ -2749,15 +3918,29 @@ listr@^0.12.0: stream-to-observable "^0.1.0" strip-ansi "^3.0.1" -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" + integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== + dependencies: + big.js "^5.2.2" + emojis-list "^2.0.0" + json5 "^1.0.1" locate-path@^2.0.0: version "2.0.0" @@ -2766,47 +3949,13 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basetostring@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" - -lodash._basevalues@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._reescape@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a" - -lodash._reevaluate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed" - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - -lodash._root@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" - -lodash.escape@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: - lodash._root "^3.0.0" + p-locate "^3.0.0" + path-exists "^3.0.0" lodash.find@^4.6.0: version "4.6.0" @@ -2816,67 +3965,27 @@ lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isequal@^4.0.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" - lodash.isobject@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/lodash.isobject/-/lodash.isobject-3.0.2.tgz#3c8fb8d5b5bf4bf90ae06e14f2a530a4ed935e1d" -lodash.keys@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys@^4.0.8: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-4.2.0.tgz#a08602ac12e4fb83f91fc1fb7a360a4d9ba35205" -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" -lodash.template@^3.0.0: - version "3.6.2" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" - dependencies: - lodash._basecopy "^3.0.0" - lodash._basetostring "^3.0.0" - lodash._basevalues "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - lodash.keys "^3.0.0" - lodash.restparam "^3.0.0" - lodash.templatesettings "^3.0.0" - -lodash.templatesettings@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.escape "^3.0.0" - -lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4: +lodash@^4.13.1, lodash@^4.17.4: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +lodash@^4.17.11: + version "4.17.11" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" + integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== + log-driver@^1.2.5: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" @@ -2900,10 +4009,6 @@ log-update@^1.0.2: ansi-escapes "^1.0.0" cli-cursor "^1.0.2" -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" - loose-envify@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" @@ -2917,43 +4022,100 @@ lru-cache@^4.0.1: pseudomap "^1.0.2" yallist "^2.1.2" +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +make-dir@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-error@1.x: + version "1.3.5" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.5.tgz#efe4e81f6db28cadd605c70f29c831b58ef776c8" + integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g== + makeerror@1.0.x: version "1.0.11" resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" dependencies: tmpl "1.0.x" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== + +map-age-cleaner@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" dependencies: object-visit "^1.0.0" +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + mem@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: mimic-fn "^1.0.0" -merge-stream@^1.0.0, merge-stream@^1.0.1: +mem@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" + integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^2.0.0" + p-is-promise "^2.0.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-stream@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" dependencies: readable-stream "^2.0.1" -merge@^1.1.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" - -micromatch@^2.3.11, micromatch@^2.3.7: +micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: @@ -2971,7 +4133,7 @@ micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" dependencies: @@ -2989,21 +4151,64 @@ micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8: snapdragon "^0.8.1" to-regex "^3.0.2" +micromatch@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" -mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: +mime-db@~1.39.0: + version "1.39.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.39.0.tgz#f95a20275742f7d2ad0429acfe40f4233543780e" + integrity sha512-DTsrw/iWVvwHH+9Otxccdyy0Tgiil6TWK/xhfARJZF/QFhwOgZgOIvA2/VIGpM8U7Q8z5nDmdDWC6tuVMJNibw== + +mime-types@^2.1.12, mime-types@~2.1.17: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" dependencies: mime-db "~1.33.0" +mime-types@~2.1.19: + version "2.1.23" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.23.tgz#d4eacd87de99348a6858fe1e479aad877388d977" + integrity sha512-ROk/m+gMVSrRxTkMlaQOvFmFmYDc7sZgrjjM76abqmd2Cc5fCV7jAMA5XUccEtJ3cYiYdgixUVI+fApc2LkXlw== + dependencies: + mime-db "~1.39.0" + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: +mimic-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= + +minimatch@^3.0.0, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3013,7 +4218,7 @@ minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: +minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -3021,6 +4226,37 @@ minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" +minipass@^2.2.1, minipass@^2.3.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" + integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + dependencies: + minipass "^2.2.1" + +mississippi@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-3.0.0.tgz#ea0a3291f97e0b5e8776b363d5f0a12d94c67022" + integrity sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA== + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^3.0.0" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" @@ -3028,7 +4264,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.1, mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -3049,28 +4285,39 @@ mocha@^4.0.1: mkdirp "0.5.1" supports-color "4.4.0" +mock-require@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/mock-require/-/mock-require-3.0.3.tgz#ccd544d9eae81dd576b3f219f69ec867318a1946" + integrity sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg== + dependencies: + get-caller-file "^1.0.2" + normalize-path "^2.1.1" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -multimatch@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" - dependencies: - array-differ "^1.0.0" - array-union "^1.0.1" - arrify "^1.0.0" - minimatch "^3.0.0" - -multipipe@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b" - dependencies: - duplexer2 "0.0.2" +ms@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -nan@^2.3.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" +nan@^2.9.2: + version "2.13.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.13.2.tgz#f51dc7ae66ba7d5d55e1e6d4d8092e802c9aefe7" + integrity sha512-TghvYc72wlMGMVMluVo9WRJc0mB8KxxF/gZ4YYFy7V2ZQX9l7rgbPg7vjS9mt6U5HXODVFVI2bOduCzwOMv/lw== nanomatch@^1.2.9: version "1.2.9" @@ -3093,6 +4340,30 @@ natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +needle@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.0.tgz#ce3fea21197267bacb310705a7bbe24f2a3a3492" + integrity sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg== + dependencies: + debug "^4.1.0" + iconv-lite "^0.4.4" + sax "^1.2.4" + +neo-async@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" + integrity sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw== + +neo-async@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.0.tgz#b9d15e4d71c6762908654b5183ed38b753340835" + integrity sha512-MFh0d/Wa7vkKO3Y3LlacqAEeHK0mckVqzDieUKTT+KGxi+zIpeVsFxymkIiRpbpDziHc290Xr9A1O4Om7otoRA== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-cleanup@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" @@ -3108,6 +4379,40 @@ node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + node-notifier@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" @@ -3117,27 +4422,21 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.1" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" - -node.extend@~1.1.2: - version "1.1.6" - resolved "https://registry.yarnpkg.com/node.extend/-/node.extend-1.1.6.tgz#a7b882c82d6c93a4863a5504bd5de8ec86258b96" - dependencies: - is "^3.1.0" + tar "^4" nopt@^4.0.1: version "4.0.1" @@ -3165,6 +4464,24 @@ normalize-path@^2.0.1, normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-bundled@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" + integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + +npm-packlist@^1.1.6: + version "1.4.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.1.tgz#19064cdf988da80ea3cee45533879d90192bbfbc" + integrity sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw== + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + npm-path@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.4.tgz#c641347a5ff9d6a09e4d9bce5580c4f505278e64" @@ -3202,15 +4519,16 @@ nwmatcher@^1.4.3: version "1.4.4" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" -oauth-sign@~0.8.1, oauth-sign@~0.8.2: +oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4.0.0, object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -3252,7 +4570,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -once@^1.3.0, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -3289,12 +4607,10 @@ ora@^0.2.3: cli-spinners "^0.1.2" object-assign "^4.0.1" -ordered-read-streams@^0.3.0: +os-browserify@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz#7137e69b3298bb342247a1bbee3881c80e2fd78b" - dependencies: - is-stream "^1.0.1" - readable-stream "^2.0.1" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-homedir@^1.0.0, os-homedir@^1.0.1: version "1.0.2" @@ -3308,9 +4624,19 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-locale@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" + integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== + dependencies: + execa "^1.0.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@^0.1.4: version "0.1.5" @@ -3319,30 +4645,97 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + integrity sha1-kw89Et0fUOdDRFeiLNbwSsatf3E= + dependencies: + p-reduce "^1.0.0" + p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" +p-is-promise@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" + integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== + p-limit@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" + integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== + dependencies: + p-try "^2.0.0" + p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + integrity sha1-GMKw3ZNqRpClKfgjH1ig/bakffo= + p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~1.0.5: + version "1.0.10" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.10.tgz#4328badb5086a426aa90f541977d4955da5c9732" + integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +parse-asn1@^5.0.0: + version "5.1.4" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.4.tgz#37f6628f823fbdeb2273b4d540434a22f3ef1fcc" + integrity sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw== + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + safe-buffer "^5.1.1" + parse-diff@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/parse-diff/-/parse-diff-0.4.2.tgz#b173390e916564e8c70ccd37756047941e5b3ef2" @@ -3375,6 +4768,14 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-link-header@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-link-header/-/parse-link-header-1.0.1.tgz#bedfe0d2118aeb84be75e7b025419ec8a61140a7" @@ -3393,25 +4794,25 @@ pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - dependencies: - pinkie-promise "^2.0.0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: +path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -3419,35 +4820,47 @@ path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: - through "~2.3" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + pify "^3.0.0" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" +pbkdf2@^3.0.3: + version "3.0.17" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" + integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +picomatch@^2.0.5: + version "2.0.7" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.0.7.tgz#514169d8c7cd0bdbeecc8a2609e34a7163de69f6" + integrity sha512-oLHIdio3tZ0qH76NybpeneBhYVj0QFTfXEFTc/B3zKQspYfYYkWYgFsmzo+4kvId/bQRcNkVeguI3y+CD22BtA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== pinkie-promise@^2.0.0: version "2.0.1" @@ -3463,21 +4876,19 @@ pinpoint@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pinpoint/-/pinpoint-1.1.0.tgz#0cf7757a6977f1bf7f6a32207b709e377388e874" -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" +pirates@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: - find-up "^2.1.0" + node-modules-regexp "^1.0.0" -plugin-error@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/plugin-error/-/plugin-error-0.1.2.tgz#3b9bb3335ccf00f425e07437e19276967da47ace" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== dependencies: - ansi-cyan "^0.1.1" - ansi-red "^0.1.1" - arr-diff "^1.0.1" - arr-union "^2.0.1" - extend-shallow "^1.1.2" + find-up "^3.0.0" pn@^1.1.0: version "1.1.0" @@ -3495,9 +4906,10 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@1.7.3: - version "1.7.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.7.3.tgz#8e6974725273914b1c47439959dd3d3ba53664b6" +prettier@^1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008" + integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw== pretty-format@^21.2.1: version "21.2.1" @@ -3506,37 +4918,109 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" -pretty-format@^23.2.0: - version "23.2.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-23.2.0.tgz#3b0aaa63c018a53583373c1cb3a5d96cc5e83017" +pretty-format@^24.7.0: + version "24.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.7.0.tgz#d23106bc2edcd776079c2daa5da02bcb12ed0c10" + integrity sha512-apen5cjf/U4dj7tHetpC7UEFCvtAgnNZnBDkfPv3fokzIqyOJckAG9OlAPC1BlFALnqT/lGB2tl9EJjlK6eCsA== dependencies: - ansi-regex "^3.0.0" + "@jest/types" "^24.7.0" + ansi-regex "^4.0.0" ansi-styles "^3.2.0" + react-is "^16.8.4" -private@^0.1.7: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" +pretty-format@^24.8.0: + version "24.8.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.8.0.tgz#8dae7044f58db7cb8be245383b565a963e3c27f2" + integrity sha512-P952T7dkrDEplsR+TuY7q3VXDae5Sr7zmQb12JU/NDQa/3CH7/QW0yvqLcGN6jL+zQFKaoJcPc+yJxMTGmosqw== + dependencies: + "@jest/types" "^24.8.0" + ansi-regex "^4.0.0" + ansi-styles "^3.2.0" + react-is "^16.8.4" -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: +process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" -prompts@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.9.tgz#be109f62f794f138c6bbd35c25370c5c526d9d78" +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +prompts@^2.0.1: + version "2.0.4" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.0.4.tgz#179f9d4db3128b9933aa35f93a800d8fce76a682" + integrity sha512-HTzM3UWp/99A0gk51gAegwo1QRYA7xjcZufMNe33rCclFszUYAuHe1fIN/3ZmiHeGPkUsNaRyQm1hHOfM0PKxA== dependencies: - clorox "^1.0.1" - sisteransi "^0.1.0" + kleur "^3.0.2" + sisteransi "^1.0.0" proxy-from-env@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" -punycode@^1.4.1: +psl@^1.1.24: + version "1.1.31" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.31.tgz#e9aa86d0101b5b105cbe93ac6b784cd547276184" + integrity sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw== + +public-encrypt@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" + integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + safe-buffer "^5.1.2" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" @@ -3544,33 +5028,29 @@ punycode@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" - qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -queue@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/queue/-/queue-3.1.0.tgz#6c49d01f009e2256788789f2bffac6b8b9990585" - dependencies: - inherits "~2.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= -queue@^4.2.1: - version "4.4.2" - resolved "https://registry.yarnpkg.com/queue/-/queue-4.4.2.tgz#5a9733d9a8b8bd1b36e934bc9c55ab89b28e29c7" - dependencies: - inherits "~2.0.0" +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +querystringify@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" + integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== randomatic@^1.1.3: version "1.1.7" @@ -3579,40 +5059,54 @@ randomatic@^1.1.3: is-number "^3.0.0" kind-of "^4.0.0" -rc@^1.1.7: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: - deep-extend "~0.4.0" + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" +react-is@^16.8.4: + version "16.8.6" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.8.6.tgz#5bbc1e2d29141c9fbdfed456343fe2bc430a6a16" + integrity sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA== -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" + find-up "^3.0.0" + read-pkg "^3.0.0" -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.3.5: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: @@ -3624,22 +5118,23 @@ readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" readline-sync@^1.4.7: version "1.4.9" resolved "https://registry.yarnpkg.com/readline-sync/-/readline-sync-1.4.9.tgz#3eda8e65f23cd2a17e61301b1f0003396af5ecda" -realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" +realpath-native@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" + integrity sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA== dependencies: util.promisify "^1.0.0" @@ -3647,10 +5142,6 @@ regenerator-runtime@^0.10.0: version "0.10.5" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" -regenerator-runtime@^0.11.0: - version "0.11.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" - regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" @@ -3682,14 +5173,6 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" -replace-ext@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" - -replace-ext@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - request-promise-core@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" @@ -3704,33 +5187,6 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" - request@^2.79.0, request@^2.83.0: version "2.85.0" resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" @@ -3758,30 +5214,31 @@ request@^2.79.0, request@^2.83.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@~2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" +request@^2.88.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" @@ -3799,15 +5256,24 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -requires-port@~1.0.0: +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= resolve-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" dependencies: - resolve-from "^3.0.0" + resolve-from "^3.0.0" + +resolve-dir@^1.0.0, resolve-dir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" resolve-from@^3.0.0: version "3.0.0" @@ -3821,6 +5287,13 @@ resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" +resolve@1.x: + version "1.10.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.10.0.tgz#3bdaaeaf45cc07f375656dfd2e54ed0810b101ba" + integrity sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg== + dependencies: + path-parse "^1.0.6" + resolve@^1.3.2: version "1.6.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" @@ -3842,18 +5315,39 @@ rfc6902@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/rfc6902/-/rfc6902-2.2.2.tgz#518a4e9caac1688f3d94c9df2fdcdb6ce21f29be" -right-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" - dependencies: - align-text "^0.1.1" - -rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" +rimraf@^2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^4.8.4: + version "4.8.4" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.4.tgz#b50e6b34583f3dd89329a2f23a8a2be072845911" + integrity sha512-6FomvYPfs+Jy9TfXmBpBuMWNH94SgCsZmJKcanySzgNNP6LjWxBvyLTa9KaMfDDM5oxRfrKDB0r/qeRsLwnBfA== + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + rxjs@^5.0.0-beta.11: version "5.5.8" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.8.tgz#b2b0809a57614ad6254c03d7446dea0d83ca3791" @@ -3864,34 +5358,69 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@^5.1.0, safe-buffer@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" -sane@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.0.tgz#6359cd676f5efd9988b264d8ce3b827dd6b27bec" +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sane@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: + "@cnakazawa/watch" "^1.0.3" anymatch "^2.0.0" - exec-sh "^0.2.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" fb-watchman "^2.0.0" micromatch "^3.1.4" minimist "^1.1.1" walker "~1.0.5" - watch "~0.18.0" - optionalDependencies: - fsevents "^1.1.1" sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + integrity sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g== + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" +semver@^5.5, semver@^5.6.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" + integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== + +semver@^6.0.0: + version "6.1.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" + integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== + +serialize-javascript@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.7.0.tgz#d6e0dfb2a3832a8c94468e6eb1db97e55a192a65" + integrity sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA== + set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3914,6 +5443,19 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" +setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -3932,13 +5474,15 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" -sisteransi@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-0.1.1.tgz#5431447d5f7d1675aac667ccd0b865a4994cb3ce" - -slash@^1.0.0: +sisteransi@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.0.tgz#77d9622ff909080f1c19e5f4a1df0c1b0a27b88c" + integrity sha512-N+z4pHB4AmUv0SjveWRd6q1Nj5w62m5jodv+GD8lvmbY/83T/rpbJGZOnK5T149OldDj4Db07BSv9xY4K6NTPQ== + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== slice-ansi@0.0.4: version "0.0.4" @@ -3971,18 +5515,17 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -sntp@1.x.x: - version "1.0.9" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" - dependencies: - hoek "2.x.x" - sntp@2.x.x: version "2.1.0" resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: hoek "4.x.x" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + source-map-resolve@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" @@ -3993,12 +5536,6 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.15: - version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" - dependencies: - source-map "^0.5.6" - source-map-support@^0.5.0: version "0.5.4" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" @@ -4012,28 +5549,26 @@ source-map-support@^0.5.6: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.10: + version "0.5.12" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" + integrity sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.6.0, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" -sparkles@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" - spdx-correct@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" @@ -4062,12 +5597,6 @@ split-string@^3.0.1, split-string@^3.0.2: dependencies: extend-shallow "^3.0.0" -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - dependencies: - through "2" - sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -4086,6 +5615,13 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +ssri@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" + integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + dependencies: + figgy-pudding "^3.5.1" + stack-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" @@ -4094,10 +5630,6 @@ staged-git-files@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35" -stat-mode@^0.2.0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/stat-mode/-/stat-mode-0.2.2.tgz#e6c80b623123d7d80cf132ce538f346289072502" - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -4109,30 +5641,42 @@ stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + integrity sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw== + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== dependencies: - duplexer "~0.1.1" + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= stream-to-observable@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe" -streamfilter@^1.0.5: - version "1.0.7" - resolved "https://registry.yarnpkg.com/streamfilter/-/streamfilter-1.0.7.tgz#ae3e64522aa5a35c061fd17f67620c7653c643c9" - dependencies: - readable-stream "^2.0.2" - -streamifier@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/streamifier/-/streamifier-0.1.1.tgz#97e98d8fa4d105d62a2691d1dc07e820db8dfc4f" - string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -4155,9 +5699,12 @@ string-width@^2.0.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" +string_decoder@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" + integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== + dependencies: + safe-buffer "~5.1.0" string_decoder@~1.1.1: version "1.1.1" @@ -4173,9 +5720,10 @@ stringify-object@^3.2.0: is-obj "^1.0.1" is-regexp "^1.0.0" -stringstream@~0.0.4, stringstream@~0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" +stringstream@~0.0.5: + version "0.0.6" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.6.tgz#7880225b0d4ad10e30927d167a1d6f2fd3b33a72" + integrity sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA== strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" @@ -4189,22 +5737,17 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-bom-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz#e7144398577d51a6bed0fa1994fa05f43fd988ee" +strip-ansi@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: - first-chunk-stream "^1.0.0" - strip-bom "^2.0.0" + ansi-regex "^4.1.0" -strip-bom@3.0.0: +strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - dependencies: - is-utf8 "^0.2.0" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" @@ -4228,18 +5771,26 @@ supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.2: - version "3.2.3" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" - dependencies: - has-flag "^1.0.0" - supports-color@^5.0.0, supports-color@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" dependencies: has-flag "^3.0.0" +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.0.0, supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -4255,83 +5806,91 @@ symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - dependencies: - debug "^2.2.0" - fstream "^1.0.10" - fstream-ignore "^1.0.5" - once "^1.3.3" - readable-stream "^2.1.4" - rimraf "^2.5.1" - tar "^2.2.1" - uid-number "^0.0.6" - -tar@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" +tapable@^1.0.0, tapable@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tar@^4: + version "4.4.8" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.8.tgz#b19eec3fde2a96e64666df9fdb40c5ca1bc3747d" + integrity sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ== + dependencies: + chownr "^1.1.1" + fs-minipass "^1.2.5" + minipass "^2.3.4" + minizlib "^1.1.1" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +terser-webpack-plugin@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz#69aa22426299f4b5b3775cbed8cb2c5d419aa1d4" + integrity sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg== + dependencies: + cacache "^11.3.2" + find-cache-dir "^2.0.0" + is-wsl "^1.1.0" + loader-utils "^1.2.3" + schema-utils "^1.0.0" + serialize-javascript "^1.7.0" + source-map "^0.6.1" + terser "^4.0.0" + webpack-sources "^1.3.0" + worker-farm "^1.7.0" + +terser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.0.0.tgz#ef356f6f359a963e2cc675517f21c1c382877374" + integrity sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA== dependencies: - block-stream "*" - fstream "^1.0.2" - inherits "2" + commander "^2.19.0" + source-map "~0.6.1" + source-map-support "~0.5.10" -test-exclude@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" +test-exclude@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.1.0.tgz#6ba6b25179d2d38724824661323b73e03c0c1de1" + integrity sha512-gwf0S2fFsANC55fSeSqpb8BYk6w3FDvwZxfNjeF6FRgvFa43r+7wRiA/Q0IxoRU37wB/LE8IQ4221BsNucTaCA== dependencies: arrify "^1.0.1" - micromatch "^3.1.8" - object-assign "^4.1.0" - read-pkg-up "^1.0.1" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" require-main-filename "^1.0.1" throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" -through2-filter@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^0.6.0, through2@~0.6.5: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" +through2@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== dependencies: - readable-stream "^2.1.5" + readable-stream "~2.3.6" xtend "~4.0.1" -through@2, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - -time-stamp@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.1.0.tgz#764a5a11af50561921b133f3b44e618687e0f5c3" +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + integrity sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg== + dependencies: + setimmediate "^1.0.4" tmpl@1.0.x: version "1.0.4" resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" -to-absolute-glob@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz#1cdfa472a9ef50c239ee66999b662ca0eb39937f" - dependencies: - extend-shallow "^2.0.1" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-fast-properties@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" @@ -4346,6 +5905,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -4355,12 +5921,20 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" +tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + tr46@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" @@ -4371,47 +5945,83 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +ts-jest@^24.0.2: + version "24.0.2" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-24.0.2.tgz#8dde6cece97c31c03e80e474c749753ffd27194d" + integrity sha512-h6ZCZiA1EQgjczxq+uGLXQlNgeg02WWJBbeT8j6nyIBRQdglqbvzDoHahTEIiS6Eor6x8mK6PfZ7brQ9Q6tzHw== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + make-error "1.x" + mkdirp "0.x" + resolve "1.x" + semver "^5.5" + yargs-parser "10.x" + +ts-loader@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/ts-loader/-/ts-loader-6.0.4.tgz#bc331ad91a887a60632d94c9f79448666f2c4b63" + integrity sha512-p2zJYe7OtwR+49kv4gs7v4dMrfYD1IPpOtqiSPCbe8oR+4zEBtdHwzM7A7M91F+suReqgzZrlClk4LRSSp882g== + dependencies: + chalk "^2.3.0" + enhanced-resolve "^4.0.0" + loader-utils "^1.0.2" + micromatch "^4.0.0" + semver "^6.0.0" + tslib@^1.8.0, tslib@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.0.tgz#e37a86fda8cbbaf23a057f473c9f4dc64e5fc2e8" -tslint-config-prettier@^1.5.0: +tslib@^1.9.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.10.0.tgz#5063c413d43de4f6988c73727f65ecfc239054ec" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" + integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== -tslint@^5.7.0: - version "5.9.1" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.9.1.tgz#1255f87a3ff57eb0b0e1f0e610a8b4748046c9ae" +tslint-config-prettier@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/tslint-config-prettier/-/tslint-config-prettier-1.18.0.tgz#75f140bde947d35d8f0d238e0ebf809d64592c37" + integrity sha512-xPw9PgNPLG3iKRxmK7DWr+Ea/SzrvfHtjFt5LBl61gk2UBG/DB9kCXRjv+xyIU1rUtnayLeMUVJBcMX8Z17nDg== + +tslint@^5.16.0: + version "5.16.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-5.16.0.tgz#ae61f9c5a98d295b9a4f4553b1b1e831c1984d67" + integrity sha512-UxG2yNxJ5pgGwmMzPMYh/CCnCnh0HfPgtlVRDs1ykZklufFBL1ZoTlWFRz2NQjcoEiDoRp+JyT0lhBbbH/obyA== dependencies: - babel-code-frame "^6.22.0" + "@babel/code-frame" "^7.0.0" builtin-modules "^1.1.1" chalk "^2.3.0" commander "^2.12.1" diff "^3.2.0" glob "^7.1.1" - js-yaml "^3.7.0" + js-yaml "^3.13.0" minimatch "^3.0.4" + mkdirp "^0.5.1" resolve "^1.3.2" semver "^5.3.0" tslib "^1.8.0" - tsutils "^2.12.1" + tsutils "^2.29.0" -tsutils@^2.12.1: - version "2.26.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.26.0.tgz#706240d63bcf1ae1797d1716738d6c6be0d0848b" +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -4422,30 +6032,32 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -typescript@^2.5.3: - version "2.8.1" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.1.tgz#6160e4f8f195d5ba81d4876f9c0cc1fbc0820624" - -typescript@^2.8.0: - version "2.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.8.3.tgz#5d817f9b6f31bb871835f4edf0089f21abe6c170" +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" +typescript-tslint-plugin@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/typescript-tslint-plugin/-/typescript-tslint-plugin-0.3.1.tgz#d86ae0342c9e8f9ecfcbcc47f7a7c2b5ab0e86f9" + integrity sha512-h8HEPBm36UEs901ld1x6m5eY/UFb4mF+A0nvERr4BWMww5wnV5nfcm9ZFt18foYL0GQ5NVMt1Tb3466WUU8dRQ== dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.0" + minimatch "^3.0.4" + mock-require "^3.0.2" + vscode-languageserver "^5.1.0" -uglify-to-browserify@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +typescript@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.4.3.tgz#0eb320e4ace9b10eadf5bc6103286b0f8b7c224f" + integrity sha512-FFgHdPt4T/duxx6Ndf7hwgMZZjZpB+U0nMNGVCYPq0rEzWKjEDobm4J6yb3CS7naZ0yURFqdw9Gwc7UOh/P9oQ== -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" +uglify-js@^3.1.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.5.4.tgz#4a64d57f590e20a898ba057f838dcdfb67a939b9" + integrity sha512-GpKo28q/7Bm5BcX9vOu4S46FwisbPbAmkkqPnGIpKvKTM96I85N6XHQV+k4I6FA2wxgLhcsSyHoNhzucwCflvA== + dependencies: + commander "~2.20.0" + source-map "~0.6.1" union-value@^1.0.0: version "1.0.0" @@ -4456,12 +6068,19 @@ union-value@^1.0.0: is-extendable "^0.1.1" set-value "^0.4.3" -unique-stream@^2.0.2: - version "2.2.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: - json-stable-stringify "^1.0.0" - through2-filter "^2.0.0" + imurmurhash "^0.1.4" unset-value@^1.0.0: version "1.0.0" @@ -4470,21 +6089,42 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +upath@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" + integrity sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q== + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" -url-parse@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" +url-parse@^1.4.4: + version "1.4.6" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.6.tgz#baf91d6e6783c8a795eb476892ffef2737fc0456" + integrity sha512-/B8AD9iQ01seoXmXf9z/MjLZQIdOoYl/+gvsQF6+mpnxaTfG9P7srYaiqaDMyKkR36XMXfhqSHss5MyFAO8lew== dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" + querystringify "^2.0.0" + requires-port "^1.0.0" url-template@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + use@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" @@ -4502,13 +6142,33 @@ util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -uuid@^3.0.0, uuid@^3.1.0: +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= + dependencies: + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" + +uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" -vali-date@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/vali-date/-/vali-date-1.0.0.tgz#1b904a59609fb328ef078138420934f6b86709a6" +uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== + +v8-compile-cache@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" + integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== validate-npm-package-license@^3.0.1: version "3.0.3" @@ -4525,107 +6185,70 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vinyl-fs@^2.0.0, vinyl-fs@^2.4.3: - version "2.4.4" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-2.4.4.tgz#be6ff3270cb55dfd7d3063640de81f25d7532239" - dependencies: - duplexify "^3.2.0" - glob-stream "^5.3.2" - graceful-fs "^4.0.0" - gulp-sourcemaps "1.6.0" - is-valid-glob "^0.3.0" - lazystream "^1.0.0" - lodash.isequal "^4.0.0" - merge-stream "^1.0.0" - mkdirp "^0.5.0" - object-assign "^4.0.0" - readable-stream "^2.0.4" - strip-bom "^2.0.0" - strip-bom-stream "^1.0.0" - through2 "^2.0.0" - through2-filter "^2.0.0" - vali-date "^1.0.0" - vinyl "^1.0.0" +vm-browserify@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.0.tgz#bd76d6a23323e2ca8ffa12028dc04559c75f9019" + integrity sha512-iq+S7vZJE60yejDYM0ek6zg308+UZsdtPExWP9VZoCFCz1zkJoXFnAX7aZfd/ZwrkidzdUZL0C/ryW+JwAiIGw== -vinyl-source-stream@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz#62b53a135610a896e98ca96bee3a87f008a8e780" - dependencies: - through2 "^2.0.3" - vinyl "^0.4.3" +vm2@patriksimek/vm2#custom_files: + version "3.5.0" + resolved "https://codeload.github.com/patriksimek/vm2/tar.gz/7e82f90ac705fc44fad044147cb0df09b4c79a57" -vinyl@^0.4.3, vinyl@~0.4.6: - version "0.4.6" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847" - dependencies: - clone "^0.2.0" - clone-stats "^0.0.1" +voca@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/voca/-/voca-1.4.0.tgz#e15ac58b38290b72acc0c330366b6cc7984924d7" -vinyl@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde" - dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" +vscode-jsonrpc@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz#a7bf74ef3254d0a0c272fab15c82128e378b3be9" + integrity sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg== -vinyl@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884" +vscode-languageserver-protocol@3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz#b8aab6afae2849c84a8983d39a1cf742417afe2f" + integrity sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g== dependencies: - clone "^1.0.0" - clone-stats "^0.0.1" - replace-ext "0.0.1" + vscode-jsonrpc "^4.0.0" + vscode-languageserver-types "3.14.0" -vinyl@^2.0.2: - version "2.1.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" +vscode-languageserver-types@3.14.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz#d3b5952246d30e5241592b6dde8280e03942e743" + integrity sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A== -vinyl@~2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c" +vscode-languageserver@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz#0d2feddd33f92aadf5da32450df498d52f6f14eb" + integrity sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A== dependencies: - clone "^1.0.0" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - is-stream "^1.1.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" + vscode-languageserver-protocol "3.14.1" + vscode-uri "^1.0.6" -vm2@patriksimek/vm2#custom_files: - version "3.5.0" - resolved "https://codeload.github.com/patriksimek/vm2/tar.gz/7e82f90ac705fc44fad044147cb0df09b4c79a57" +vscode-test@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/vscode-test/-/vscode-test-0.1.5.tgz#250534f90e78d37a84419a00f9bd15341e1a4f8f" + integrity sha512-s+lbF1Dtasc0yXVB9iQTexBe2JK6HJAUJe3fWezHKIjq+xRw5ZwCMEMBaonFIPy7s95qg2HPTRDR5W4h4kbxGw== + dependencies: + http-proxy-agent "^2.1.0" + https-proxy-agent "^2.2.1" -voca@^1.3.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/voca/-/voca-1.4.0.tgz#e15ac58b38290b72acc0c330366b6cc7984924d7" +vscode-uri@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-1.0.6.tgz#6b8f141b0bbc44ad7b07e94f82f168ac7608ad4d" + integrity sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww== -vscode@^1.1.6: - version "1.1.14" - resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.14.tgz#f327f5fd45c085d12def616962af205b2bc75db5" +vscode@^1.1.33: + version "1.1.33" + resolved "https://registry.yarnpkg.com/vscode/-/vscode-1.1.33.tgz#e05d5ca25eb35d799fc20622af7c7a561abf6fba" + integrity sha512-sXedp2oF6y4ZvqrrFiZpeMzaCLSWV+PpYkIxjG/iYquNZ9KrLL2LujltGxPLvzn49xu2sZkyC+avVNFgcJD1Iw== dependencies: glob "^7.1.2" - gulp-chmod "^2.0.0" - gulp-filter "^5.0.1" - gulp-gunzip "1.0.0" - gulp-remote-src "^0.4.3" - gulp-symdest "^1.1.0" - gulp-untar "^0.0.6" - gulp-vinyl-zip "^2.1.0" mocha "^4.0.1" - request "^2.83.0" + request "^2.88.0" semver "^5.4.1" source-map-support "^0.5.0" - url-parse "^1.1.9" - vinyl-source-stream "^1.1.0" + url-parse "^1.4.4" + vscode-test "^0.1.4" w3c-hr-time@^1.0.1: version "1.0.1" @@ -4633,23 +6256,81 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" -walker@~1.0.5: +walker@^1.0.7, walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" dependencies: makeerror "1.0.x" -watch@~0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== dependencies: - exec-sh "^0.2.0" - minimist "^1.2.0" + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" +webpack-cli@^3.3.4: + version "3.3.4" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.4.tgz#de27e281c48a897b8c219cb093e261d5f6afe44a" + integrity sha512-ubJGQEKMtBSpT+LiL5hXvn2GIOWiRWItR1DGUqJRhwRBeGhpRXjvF5f0erqdRJLErkfqS5/Ldkkedh4AL5Q1ZQ== + dependencies: + chalk "^2.4.1" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.0" + findup-sync "^2.0.0" + global-modules "^1.0.0" + import-local "^2.0.0" + interpret "^1.1.0" + loader-utils "^1.1.0" + prettier "^1.17.0" + supports-color "^5.5.0" + v8-compile-cache "^2.0.2" + yargs "^12.0.5" + +webpack-sources@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" + integrity sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA== + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.35.0: + version "4.35.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.35.0.tgz#ad3f0f8190876328806ccb7a36f3ce6e764b8378" + integrity sha512-M5hL3qpVvtr8d4YaJANbAQBc4uT01G33eDpl/psRTBCfjxFTihdhin1NtAKB1ruDwzeVdcsHHV3NX+QsAgOosw== + dependencies: + "@webassemblyjs/ast" "1.8.5" + "@webassemblyjs/helper-module-context" "1.8.5" + "@webassemblyjs/wasm-edit" "1.8.5" + "@webassemblyjs/wasm-parser" "1.8.5" + acorn "^6.0.5" + acorn-dynamic-import "^4.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^1.0.0" + tapable "^1.1.0" + terser-webpack-plugin "^1.1.0" + watchpack "^1.5.0" + webpack-sources "^1.3.0" + whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" @@ -4672,26 +6353,25 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.10, which@^1.2.12, which@^1.2.9, which@^1.3.0: +which@^1.2.10, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" +which@^1.2.14: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: string-width "^1.0.2" -window-size@0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" - -wordwrap@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" - wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" @@ -4700,6 +6380,13 @@ wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +worker-farm@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" + integrity sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw== + dependencies: + errno "~0.1.7" + wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" @@ -4711,9 +6398,10 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write-file-atomic@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" +write-file-atomic@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.1.tgz#d0b05463c188ae804396fd5ab2a370062af87529" + integrity sha512-TGHFeZEZMnv+gBFRfjAcxL5bPHrsGKtnb4qsFAws7/vlh+QfwAaySIw4AXP9ZskTTh5GWu3FLuJhsWVdiJPGvg== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -4730,7 +6418,7 @@ xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: +xtend@^4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -4738,10 +6426,35 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" + integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + +yargs-parser@10.x: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + +yargs-parser@^11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" + integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" @@ -4765,24 +6478,20 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@~3.10.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" - dependencies: - camelcase "^1.0.2" - cliui "^2.1.0" - decamelize "^1.0.0" - window-size "0.1.0" - -yauzl@^2.2.1: - version "2.9.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.9.1.tgz#a81981ea70a57946133883f029c5821a89359a7f" - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.0.1" - -yazl@^2.2.1: - version "2.4.3" - resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.4.3.tgz#ec26e5cc87d5601b9df8432dbdd3cd2e5173a071" +yargs@^12.0.2, yargs@^12.0.5: + version "12.0.5" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" + integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== dependencies: - buffer-crc32 "~0.2.3" + cliui "^4.0.0" + decamelize "^1.2.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^11.1.1"